<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hy____123的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hy____123</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hy____123]]></copyright><item><title><![CDATA[Linux_网络基础3]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/159053032</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/159053032</guid><author>hy____123</author><pubDate>Tue, 17 Mar 2026 18:31:08 +0800</pubDate><description><![CDATA[一、分层总览（从顶到底）层级核心目标数据单位关键设备核心作用应用层为用户 / 应用提供网络服务应用报文（Message）应用程序、网关定义数据格式、业务逻辑（如网页、文件传输）传输层端到端可靠 / 不可靠通信段（Segment，TCP）/ 用户数据报（Datagram，UDP）操作系统协议栈区分不同应用（端口号）、保证数据可靠（TCP）网络层跨网络寻址与路由IP 数据报（Packet）路由器找到目标主机（IP 地址）、跨网转发、分片 / 重组数据链路层局域网内相邻设备传输。]]></description><category></category></item><item><title><![CDATA[Linux_高级IO]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/159125181</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/159125181</guid><author>hy____123</author><pubDate>Tue, 17 Mar 2026 09:45:00 +0800</pubDate><description><![CDATA[理解五种IO模型的基本概念重点是IO多路转接掌握select编程模型能够实现select版本的TCP服务器掌握poll编程模型能够实现poll版本的TCP服务器掌握epoll编程模型能够实现epoll版本的TCP服务器理解epoll的LT模式和ET模式理解select和epoll的优缺点对比阻塞IO:在内核将数据准备好之前系统调用会一直等待所有的套接字默认都是阻塞方式阻塞IO是最常见的IO模型非阻塞。]]></description><category></category></item><item><title><![CDATA[Linux_网络基础2]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/158978933</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/158978933</guid><author>hy____123</author><pubDate>Mon, 16 Mar 2026 22:16:00 +0800</pubDate><description><![CDATA[无论我们采用方案一, 还是方案二, 还是其他的方案, 只要保证, 一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种约定, 就是 应用层协议




1.3HTTP协议

虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议) 就是其中之一.1. 高频业务方法（开发中最常用）2. HTTP/1.1 新增方法3. 已废弃方法1. 1XX（信息性状态码）仅用于临时告知客户端请求正]]></description><category></category></item><item><title><![CDATA[Linux_多线程]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/158846866</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/158846866</guid><author>hy____123</author><pubDate>Sat, 14 Mar 2026 19:48:30 +0800</pubDate><description><![CDATA[但是如果主线程不是最后一个退出的线程呢？场景一:主线程退出，但进程未退出（其他线程仍运行）如果主线程只是 “退出执行”（比如调用。]]></description><category></category></item><item><title><![CDATA[Linux_网络编程套接字]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/158934253</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/158934253</guid><author>hy____123</author><pubDate>Thu, 12 Mar 2026 10:40:06 +0800</pubDate><description><![CDATA[认识IP地址端口号网络字节序等网络编程中的基本概念;学习socket api的基本用法;能够实现一个简单的udp客户端服务器;能够实现一个简单的tcp客户端服务器单连接版本多进程版本多线程版本理解tcp服务器建立连接发送数据断开连接的流程;端口号是的编号，和 IP 地址一起，构成了网络通信的 “” 唯一标识。1. 核心定义0 ~ 655352. 端口号分类（按范围划分）228044353330663798080connect。]]></description><category></category></item><item><title><![CDATA[Linux_网络基础(一)]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/158888475</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/158888475</guid><author>hy____123</author><pubDate>Wed, 11 Mar 2026 09:00:00 +0800</pubDate><description><![CDATA[它把网络。]]></description><category></category></item><item><title><![CDATA[Linux_进程间通信]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/157519321</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/157519321</guid><author>hy____123</author><pubDate>Tue, 10 Mar 2026 11:51:54 +0800</pubDate><description><![CDATA[mkfifo () 核心：创建命名管道文件，参数为路径 + 权限，需处理 “文件已存在” 错误；核心配套函数open()：打开管道（阻塞 / 非阻塞，读写端需配对）；read()write()：读写数据（遵循管道阻塞 / 原子性规则）；close()：关闭文件描述符，释放资源；unlink()：删除管道文件，清理文件系统；使用流程：创建管道 → 打开读写端 → 读写数据 → 关闭描述符 → 删除管道；核心优势：突破匿名管道的亲缘进程限制，实现任意进程间通信。四.匿名管道与命名管道的区别。]]></description><category></category></item><item><title><![CDATA[Linux_进程信号]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/157588822</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/157588822</guid><author>hy____123</author><pubDate>Sun, 01 Feb 2026 10:00:00 +0800</pubDate><description><![CDATA[临时设置（仅当前系统有效）# 永久设置（修改 /etc/sysctl.conf，添加以下行，执行 sysctl -p 生效）%e：进程的可执行文件名；%p：进程 PID；%t：崩溃时间戳（秒级）；%u：进程所属用户 ID；%g：进程所属组 ID。表示myapp进程（PID 1234）在时间戳 1738321200 时崩溃生成的核心文件。Core Dump 是进程崩溃时的 “内存快照”，由内核生成，需先通过开启系统限制；仅特定信号（如SIGSEGVSIGFPE。]]></description><category></category></item><item><title><![CDATA[（二）进程控制——进程等待和进程替换]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/152860228</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/152860228</guid><author>hy____123</author><pubDate>Sat, 31 Jan 2026 22:56:22 +0800</pubDate><description><![CDATA[这里先不考虑第8位的core dump标志，从图中我们可以看到8-15位是退出码，也就是我们return后面带的数字。0-7是终止信号，当进程被信号终止我们就能从中查到是被几号信号终止的，从而知道终止原因。最后，父进程派给子进程的任务完成的如何，我们需要知道。父进程通过进程等待的方式，回收子进程资源，获取子进程退出信息。被调用的函数执行一定的 操作，然后返回一个值。否则，操作系统会根据该参数，将子进程的退出信息反馈给父进程。读取新的一行输入，建立一个新的进程，在这个进程中运行程序 并等待这个进程结束。]]></description><category></category></item><item><title><![CDATA[（一）进程控制——进程创建和进程终止]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/151293247</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/151293247</guid><author>hy____123</author><pubDate>Sat, 31 Jan 2026 22:56:06 +0800</pubDate><description><![CDATA[学习进程创建,fork学习到进程等待fork函数在linux下是一个非常重要的函数，它的作用是创建一个进程，而调用这个函数的进程我们一般称为父进程，创建出来的进程是子进程。基于这个特性，当fork函数成功创建进程时，会有两个返回值。进程调用fork，当控制转移到内核中的fork代码后，内核做：分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表当中fork返回，开始调度器调度当一个进程调用fork之后，就有两个二进制代码相同的进程。]]></description><category></category></item><item><title><![CDATA[类与对象(上)]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/146302776</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/146302776</guid><author>hy____123</author><pubDate>Fri, 30 Jan 2026 11:30:51 +0800</pubDate><description><![CDATA[/ 类体：由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字，ClassName为类的名字，{}中为类的主体，注意类定义结束时后面分 号不能省略。类体中内容称为类的成员：类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者 成员函数。类的两种定义方式：1. 声明和定义全部放在类体中，需注意：成员函数如果在类中定义，编译器可能会将其当成内 联函数处理。]]></description><category></category></item><item><title><![CDATA[linux之基础IO]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/153742927</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/153742927</guid><author>hy____123</author><pubDate>Wed, 19 Nov 2025 09:00:00 +0800</pubDate><description><![CDATA[的大小，最近一次挂载的时间，最近一次写入数据的时间，最近一次检验磁盘的时间等其他文件系统的相关信息。文件系统，上图为磁盘文件系统图（内核内存映像肯定有所不同），磁盘是典型的块设备，硬盘分区被划分为一个个的block。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表，而不是外部函数所在目标文件的整个机器码。的地址，不再是显示器文件的地址，所以，输出的任何消息都会往文件中写入，进而完成输出重定向。）：程序在运行的时候才去链接动态库的代码，多个程序共享使用库的代码。]]></description><category></category></item><item><title><![CDATA[list类的详细讲解]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/147465738</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/147465738</guid><author>hy____123</author><pubDate>Fri, 19 Sep 2025 17:31:42 +0800</pubDate><description><![CDATA[因此反向迭 代器的实现可以借助正向迭代器，即：反向迭代器内部可以包含一个正向迭代器，对正向迭代器的接口进行 包装即可。的底层是双向链表结构，双向链表中每个元素存储在互不相关的独立节点中，在节点中通过指针指向 其前一个元素和后一个元素。中的接口比较多，此处类似，只需要掌握如何正确的使用，然后再去深入研究背后的原理，已达到可扩展 的能力。的底层结构以及其接口的含义，通过上面的学习，这些内容已基本掌握，现 在我们来模拟实现list。最大的缺陷是不支持任意位置的随机访问，比如：要访问。个元素，必须从已知的位置。]]></description><category></category></item><item><title><![CDATA[Linux进程概念]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/150870514</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/150870514</guid><author>hy____123</author><pubDate>Fri, 19 Sep 2025 17:31:35 +0800</pubDate><description><![CDATA[系统调用在使用上，功能比较基础，对用户的要求相对也比较高，所以，有心的开发者可以对部分系统 调用进行适度封装，从而形成库，有了库，就很有利于更上层用户或者开发者进行二次开发。所以，只要子进程退出，父进程还在运行，但父进程没有读取子进程状态，子进程进入Z。代码的时候，在链接的时候，从来不知道我们的所链接的动态静态库在哪里，但是照样可以链接成功，生成可执行程序，原因就是有相关环境变量帮助编译器进行查找。进程的退出状态必须被维持下去，因为他要告诉关心它的进程（父进程），你交给我的任务，我办的怎 么样了。]]></description><category></category></item><item><title><![CDATA[C++之位图和布隆过滤器]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/149381526</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/149381526</guid><author>hy____123</author><pubDate>Wed, 17 Sep 2025 10:15:59 +0800</pubDate><description><![CDATA[首先这道题我们没法先存储数据，再判断，因为40亿个整数将占用内存大概16G，如果用红黑树来存储就需要占用大概80G内存，这样会导致成本升高。有的兄弟，有的，那就是位图，试想一下我们能不能用0代表一个数不在，用1代表这个数在，这些0，1以比特位的特殊方式来存储在我们的内存中，是不是就能减少内存的消耗，像40亿个整数我们就只消耗0.5g内存。这里我们还需要用到哈希的思路，假如我们是以整型来存储的，那么80这个整数我们可以用80/3287来判断它在第几个整型，用80%32来判断在第几个比特位上。]]></description><category></category></item><item><title><![CDATA[C/C++内存管理（详解）]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/146544677</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/146544677</guid><author>hy____123</author><pubDate>Wed, 17 Sep 2025 10:15:52 +0800</pubDate><description><![CDATA[【本节目标】1. C/C++内存分布2. C++中动态内存管理3. operator new与operator delete函数 4. new和delete的实现原理 5. 定位new表达式(placement-new) 







这里不用传参是因为它是默认构造函数，如果不是默认构造函数该如何传参呢？


 这里还和之前一样，有默认构造函数的情况下如果有参数，就以传参的值初始化，如果没有，就按缺省值来。


同样这里也支持隐式类型转换。 注意：在申请自定义类型的空间时，new会调用构造函数，delet]]></description><category></category></item><item><title><![CDATA[C++模板初阶]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/146777391</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/146777391</guid><author>hy____123</author><pubDate>Thu, 11 Sep 2025 18:31:57 +0800</pubDate><description><![CDATA[这并不是调用了模板函数，模板是不能够调用的，这里是编译器通过函数模板自动生成两个函数供我们调用。大家都知道，瓦特改良蒸汽机，人类开始了工业革命，解放了生产力。本质是什么，重复的工作交给了机器去完成。重载的函数仅仅是类型不同，代码复用率比较低，只要有新类型出现时，就需要用户自己增加对应的函。如果类型不匹配，编译器会尝试进行隐式类型转换，如果无法转换成功编译器将会报错。巧的是前人早已将树栽好，我们只需在此乘凉。代码的可维护性比较低，一个出错可能所有的重载均出错。，对于字符类型也是如此。，对于模板函数的使用，]]></description><category></category></item><item><title><![CDATA[数据结构:排序详解(使用语言：C语言)]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/146137026</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/146137026</guid><author>hy____123</author><pubDate>Thu, 11 Sep 2025 18:31:50 +0800</pubDate><description><![CDATA[排序：所谓排序，就是使一串记录，按照其中的某个或某些关键字的大小，递增或递减的排列起来的操作。稳定性：假定在待排序的记录序列中，存在多个具有相同的关键字的记录，若经过排序，这些记录的相对次 序保持不变，即在原序列中，r[i]=r[j]，且r[i]在r[j]之前，而在排序后的序列中，r[i]仍在r[j]之前，则称这种排 序算法是稳定的；否则称为不稳定的。内部排序：数据元素全部放在内存中的排序。外部排序：数据元素太多不能同时放在内存中，根据排序过程的要求不能在内外存之间移动数据的排序。]]></description><category></category></item><item><title><![CDATA[类与对象(中)（详解）]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/146328157</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/146328157</guid><author>hy____123</author><pubDate>Wed, 10 Sep 2025 14:52:12 +0800</pubDate><description><![CDATA[6. 关于编译器生成的默认成员函数，很多童鞋会有疑惑：不实现构造函数的情况下，编译器会 生成默认的构造函数。内置类型就是语言提供的数据类 型，如：int/char...，自定义类型就是我们使用class/struct/union等自己定义的类型，看看 下面的程序，就会发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员 函数。C++为了增强代码的可读性引入了运算符重载，运算符重载是具有特殊函数名的函数，也具有其 返回值类型，函数名字以及参数列表，其返回值类型与参数列表与普通的函数类似。]]></description><category></category></item><item><title><![CDATA[vector的详细讲解]]></title><link>https://blog.youkuaiyun.com/hy____123/article/details/147316243</link><guid>https://blog.youkuaiyun.com/hy____123/article/details/147316243</guid><author>hy____123</author><pubDate>Wed, 10 Sep 2025 14:52:05 +0800</pubDate><description><![CDATA[就时间而言，这是 一个相对代价高的任务，因为每当一个新的元素加入到容器的时候，vector。但是无论如何，重新分配都应该是 对数增长的间隔大小，以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。既高效又不会出错，但如果拷贝的是自定义类型元素，并且自 定义类型元素中涉及到资源管理时，就会出错，因为memcpy。但是又不像数组，它的大小是可以动态改变的，而且它的大小会被容器自 动处理。位置之后的元素会往前搬移，没有导致底层空间的改变，理论上讲迭代 器不应该会失效，但是：如果pos。]]></description><category></category></item></channel></rss>