<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bugu___的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/bugu___</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bugu___]]></copyright><item><title><![CDATA[Linux系统、网络知识点回顾1]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/159856810</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/159856810</guid><author>bugu___</author><pubDate>Sun, 19 Apr 2026 15:18:09 +0800</pubDate><description><![CDATA[当主机需要发送数据时，如果不知道目标 MAC，就会广播（报文的目的MAC是0xfffffff） ARP 请求，目标主机返回自己的 MAC 地址，随后缓存该映射关系用于后续通信。//仿muduo库，在外部线程调用RunInLoop，不需要立刻得到结果，所以可以把任务放到EventLoop的任务队列，后面执行到任务队列的任务时，如果不在，就发给默认网关，最终通过网卡把数据帧发送出去。相比之下，多级页表虽然访问次数更多，但结构简单、可预测、缓存友好，并且支持按需分配，因此成为主流方案。// 所有线程直接访问。]]></description><category></category></item><item><title><![CDATA[LeetCode热题100（2）]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/159613112</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/159613112</guid><author>bugu___</author><pubDate>Wed, 08 Apr 2026 16:57:36 +0800</pubDate><description><![CDATA[以示例二为例，我要算出下标 2 这个位置可以盛多少雨水，是不是需要往下标 2 的左边看看找到最大高度 4 ，然后往下标 2 的右边看看找到最大高度 5 ，而盛水多少是取决于，两个高度较小的那个，选高的那个高度绝对溢出，那这个地方就要选择下标 0 ，然后再用 height [0] 减去下标2 位置的高度就可以得出结果了。1、题解：示例1先是插入(1,1)，再插入(2,2)，当get(1)后，再插入(3,3)时，发现淘汰的是(2,2)，说明不管是查找元素还是插入元素，都要让这个元素成为最近使用的。]]></description><category></category></item><item><title><![CDATA[MySQL---索引特性]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/159582774</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/159582774</guid><author>bugu___</author><pubDate>Sun, 29 Mar 2026 01:12:12 +0800</pubDate><description><![CDATA[Page分为目录页和数据页。目录页只放各个下级Page的最小键值。查找的时候，自顶向下找，只需要加载部分目录页到内存，即可找到目标数据页，完成算法的整个查找过程，大大减少了IO次数上面我们讲的都是 InnoDB 下的索引结构，一般我们建表插入数据的时候，就是在该结构下进行 CURD。]]></description><category></category></item><item><title><![CDATA[LeetCode热题100（1）]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/159576606</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/159576606</guid><author>bugu___</author><pubDate>Sat, 28 Mar 2026 15:37:42 +0800</pubDate><description><![CDATA[还有一种办法，我们不是把数组排序了吗，那当我找到一组成立的结果时，如果有重复的数字，也是在结果附近，我直接比较附近的数的大小，移动我的 left 指针和 right 指针不就好了；这道题要我们找到数字连续的最长序列，并且时间复杂度为O(N)，看了上面几个实例，会发现给的数组是有可能出现重复的数字的，所以我们在找数字连续的最长序列时：应该先去重，把所有元素都扔到哈希表。（1）暴力算法：我们第一眼想到的就是我固定一个数，遍历，再固定一个数，再遍历，然后求和，这样的话时间复杂度肯定是O(N3)]]></description><category></category></item><item><title><![CDATA[Linux系统--信号]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/159353120</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/159353120</guid><author>bugu___</author><pubDate>Mon, 23 Mar 2026 00:52:03 +0800</pubDate><description><![CDATA[（1）在使用 sigset_t 类型的变量之前，⼀定要调用 sigemptyset 或 sigfillset 做初始化（将所有信号的bit 位置0），使信号集处于确定的状态。来存储，这个类型可以表示每个信号的“有效”或“无效”状态；（2）sigismember是⼀个布尔函数，用于判断⼀个信号集的有效信号中是否包含某种信号,若包含则返回1，不包含则返回0，出错返回-1。：在进程间通信的“管道”模块，当A进程的读端关闭，B进程的写端继续写时，OS会给写端进程发送13号（即SIGPIPE），杀死写端进程。]]></description><category></category></item><item><title><![CDATA[Linux系统易错点]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/159291016</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/159291016</guid><author>bugu___</author><pubDate>Sat, 21 Mar 2026 14:50:13 +0800</pubDate><description><![CDATA[1、为什么动态库的函数地址需要GOT表存起来呢？（1）动态库每次加载的虚拟基地址不同 → 函数真实虚拟地址每次都变 → 不能写死在代码里 → 必须用 GOT 存起来让程序间接调用.（2）动态链接器算出来的函数地址要存起来（一般在运行时计算），而代码段不让存（代码段只读），只能存在数据段的 GOT 里。（3）的布局方案，内存里真正用的虚拟地址是加载后重定位过的，。（4）库已经有地址了没错，但你的程序看不见这个地址，必须有人把它放进 GOT 这个“公用信箱”里，程序才能拿到。]]></description><category></category></item><item><title><![CDATA[在线五子棋对战（3）]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/158617466</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/158617466</guid><author>bugu___</author><pubDate>Fri, 06 Mar 2026 20:01:47 +0800</pubDate><description><![CDATA[前面两篇博客实现的接口都是为了服务器的实现，我们现在需要把这些接口整合，最后要实现一个五子棋服务，直接调用start接口就可以进行五子棋对战。在整合实现这里主要分为两个模块：1. 网络通信接口的设计：服务器收到一个什么格式的数据，代表什么样的请求，应该做出什么样的业务处理和响应，这些需要先提前规定好，前后端的请求和响应格式需要保持一致。这里使用的是restful风格的通信接口，具体是什么形式，后面业务处理时会提到。2. 服务器的搭建。]]></description><category></category></item><item><title><![CDATA[在线五子棋对战（2）]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/158394381</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/158394381</guid><author>bugu___</author><pubDate>Fri, 27 Feb 2026 20:34:22 +0800</pubDate><description><![CDATA[只有进入游戏大厅和游戏房间的用户才会建立websocket长连接，需要将用户id和对应的客户端websocket长连接关联起来。]]></description><category></category></item><item><title><![CDATA[在线五子棋对战（1）]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/157914595</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/157914595</guid><author>bugu___</author><pubDate>Fri, 27 Feb 2026 20:34:17 +0800</pubDate><description><![CDATA[与Http相比，服务端可以主动给客户端发送消息，从短连接变成长连接。]]></description><category></category></item><item><title><![CDATA[仿muduo库实现并发服务器-http服务器（2）]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/157771395</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/157771395</guid><author>bugu___</author><pubDate>Sun, 08 Feb 2026 01:17:45 +0800</pubDate><description><![CDATA[搭建HTTP服务器，其实就是把前面实现的server模块、httprequest模块、httpresponse模块、httpcontext模块整合起来，并且引入业务处理路由表。]]></description><category></category></item><item><title><![CDATA[仿muduo库实现并发服务器-http服务器（1）]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/157515911</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/157515911</guid><author>bugu___</author><pubDate>Sun, 08 Feb 2026 01:17:02 +0800</pubDate><description><![CDATA[实现一些零碎的功能性工具接口。]]></description><category></category></item><item><title><![CDATA[仿muduo库实现并发服务器（3）]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/157326691</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/157326691</guid><author>bugu___</author><pubDate>Tue, 27 Jan 2026 20:30:47 +0800</pubDate><description><![CDATA[将EventLoop模块与线程整合一起，让EventLoop模块与线程是一一对应的，这里就延伸出一个问题：是要先在主线程创建EventLoop对象，再分配给子线程还是先创建子线程，再在子线程里创建EventLoop对象？]]></description><category></category></item><item><title><![CDATA[仿muduo库实现并发服务器（2）]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/157146341</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/157146341</guid><author>bugu___</author><pubDate>Fri, 23 Jan 2026 14:46:03 +0800</pubDate><description><![CDATA[对连接进行全方位的管理、对通信连接的所有操作都通过这个模块提供的功能或者接口完成。]]></description><category></category></item><item><title><![CDATA[仿muduo库实现并发服务器（1）]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/156426931</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/156426931</guid><author>bugu___</author><pubDate>Sat, 03 Jan 2026 01:52:56 +0800</pubDate><description><![CDATA[测试思路：创建一个监听套接字的Channel：，对可读回调函数void(const EventCallback &cb)传入Acceptor()来获取新连接，同时启动可读事件监控这里会通过Channel::EnableRead()的Update模块（void Channel::Update() { _poller->UpdateEvent(this);}），将。]]></description><category></category></item><item><title><![CDATA[算法--链表、哈希表、字符串]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/155540259</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/155540259</guid><author>bugu___</author><pubDate>Sat, 27 Dec 2025 14:23:51 +0800</pubDate><description><![CDATA[1、分析：这是一道链表综合题，根据题意和示例大概可以理解题目需要我们做什么，观察示例的原链表和输出链表：[1,4,2,3]可以看成是链表 [1,2] 和 [4,3] 的合并或者是 [1,2,3] 和 [4] 的合并， [4,3]就是原链表右半部分的逆序；对于[1,2,3,4,5]可以看成链表[1,2] 和 [5,4,3]的合并或者链表[1,2,3] 和 [5,4]的合并，[5,4,3]和[5,4]都可以看成原链表右半部分的逆序。2、核心思路：（1）先把原链表分成两部分，]]></description><category></category></item><item><title><![CDATA[分治快排和分治归并]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/154986620</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/154986620</guid><author>bugu___</author><pubDate>Mon, 01 Dec 2025 20:41:42 +0800</pubDate><description><![CDATA[1、分析：这道题其实就是让我们对0,1,2进行排序，但是因为它只有三个数字，我们先不考虑用快排，如果对这道题有印象，它是用双指针，一个变量left将数组划分成非0和0两部分，一个变量 i 去遍历数组判断是否为0，那严格来说你可以理解为三部分：非0，0和待扫描的元素。而这道题需要将数组最终分成三部分，那我是不是可以用三指针，就像下图一样，数组暂时分成四部分：[0，left]：都是0；[left + 1，i - 1]：都是1；[i，right-1]：未扫描的元素；[right，n-1]：都是2。]]></description><category></category></item><item><title><![CDATA[顺序结构二叉树--堆]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/155036369</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/155036369</guid><author>bugu___</author><pubDate>Thu, 20 Nov 2025 15:40:54 +0800</pubDate><description><![CDATA[1、简单来说，堆就是一个数组，只不过它的所有元素是按完全二叉树的顺序来存储，来模拟实现二叉树。2、堆分为小堆和大堆，就比如下图的小根堆示例图：每一个非叶子节点都比它的左右孩子都要小，根节点是最小的元素，并且它的逻辑结构是一棵完全二叉树；对于大根堆示例图则相反：每一个非叶子节点都比它的左右孩子都要大，根节点是最大的元素，并且它的逻辑结构是一棵完全二叉树。]]></description><category></category></item><item><title><![CDATA[算法--位运算和模拟]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/154912282</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/154912282</guid><author>bugu___</author><pubDate>Mon, 17 Nov 2025 21:57:23 +0800</pubDate><description><![CDATA[1、基础位运算：^ --> 相同为0，相异为1/ 无进位相加2、给一个数n，确定它的二进制表示中的第x位是0还是1：（n >> x）&1，结果为0说明第x位是0，结果为1说明第x位为1；或者 n&(1<<x) 结果不为0也可以说明第x位为13、将一个数n的二进制表示的第x位改成1：n = n | (1<<x)4、将一个数n的二进制表示的第x位改成0：n = n &( ~(1<<x))]]></description><category></category></item><item><title><![CDATA[算法-前缀和]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/154572293</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/154572293</guid><author>bugu___</author><pubDate>Thu, 13 Nov 2025 15:54:01 +0800</pubDate><description><![CDATA[（1）预处理dp数组：例题二的输入数组下标从1开始，而mat数组是从0开始，那我们用这个dp[ i ][ j ]= mat[ i ][ j ]+dp[ i-1 ][ j ]+dp[ i ][ j-1 ]- dp[ i-1 ][ j-1 ] 公式是不是还要注意边界情况，这里如果单独去处理边界情况很麻烦，我们依然可以让二维前缀和数组 dp 从1开始，只不过要注意：例如dp[1][1]对应的是mat[0][0]，所以式子应该改为。从一开始，假设 l 为1，那此时就变成dp[r] - dp[0]，此时把。]]></description><category></category></item><item><title><![CDATA[算法-二分查找]]></title><link>https://blog.youkuaiyun.com/bugu___/article/details/154433029</link><guid>https://blog.youkuaiyun.com/bugu___/article/details/154433029</guid><author>bugu___</author><pubDate>Fri, 07 Nov 2025 21:29:05 +0800</pubDate><description><![CDATA[我们之前可能默认为只有数组是有序就可以用二分查找，但其实不是有序数组只要是数组有规律、具有二段性就可以用二分查找，并且这个算法是有对应三个模板的，下面会对他们进行介绍，强调一点：要先明白算法原理（即为什么可以这样做），模板才是有用的。]]></description><category></category></item></channel></rss>