<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zc331的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zc331</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zc331]]></copyright><item><title><![CDATA[C++-仿RabbitMQ实现消息队列]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/162163805</link><guid>https://blog.youkuaiyun.com/zc331/article/details/162163805</guid><author>zc331</author><pubDate>Sun, 30 Aug 2026 08:05:46 +0800</pubDate><description><![CDATA[DIRECT = 1;FANOUT = 2;TOPIC = 3;]]></description><category></category></item><item><title><![CDATA[笔试强训——第二周]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/149315164</link><guid>https://blog.youkuaiyun.com/zc331/article/details/149315164</guid><author>zc331</author><pubDate>Fri, 19 Jun 2026 08:41:53 +0800</pubDate><description><![CDATA[因为前三个中的第三个在枚举时一直变大，而前两个本来加起来不足第三个现在更新不足了；解法一：先找出非0元素并且统计非0元素的个数，之后排序这些非0元素，遍历这些非0元素若是有相同的直接返回false，若是两个元素之间存在缺失的统计缺失的数字，最后和0元素个数相比，若是小于则返回true说明可以用0来补齐，反之返回false。应该枚举，从选0个一号礼包到选能选的最大数量的一号礼包中选出总价值最大的一个。s[i]、sh[i]、shy[i]分别表示这个位置及其之前的s的数量、sh的数量、shy的数量；]]></description><category></category></item><item><title><![CDATA[五种IO模型与非阻塞IO、多路转接select与epoll、Reactor反应堆模式详解]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/161480498</link><guid>https://blog.youkuaiyun.com/zc331/article/details/161480498</guid><author>zc331</author><pubDate>Fri, 19 Jun 2026 08:41:16 +0800</pubDate><description><![CDATA[IO永远包含等待和拷贝两个过程，并且等待的时间远远大于拷贝的时间，在实际过程中为了提高IO的效率就需要减少等待的时间。前四种IO都是同步IO，都参与了等待或者拷贝的过程（这里的同步不是进程同步表示先后顺序的，而是表示进程有没有参与这个IO过程，是同步的就说明进程参与了IO过程），而异步IO也应证了这个概念，不关心IO过程，完全交给内核进行等待和拷贝，自己只需要处理即可。select系统调用就是等待多个fd，一旦这多个fd中有一个或以上的fd就绪了，select会通知上层，告诉调用方那些fd可以进行IO了。]]></description><category></category></item><item><title><![CDATA[动态规划——背包问题]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/157811382</link><guid>https://blog.youkuaiyun.com/zc331/article/details/157811382</guid><author>zc331</author><pubDate>Thu, 04 Jun 2026 16:12:08 +0800</pubDate><description><![CDATA[背包问题简而言之：你有一个背包 这个背包有一定的容积 要装入物品进去 不同物品体积不同 价值不同背包的情况有两种 ：01背包就是每种物品只有一个选了之后就是1不选就是0 完全背包就是每种物品个数可能有多个装入的情况也有两种：恰好将背包装满的最大物品价值 背包可以不装满的最大价值先研究第一种情况 也就是不需要装满很明显 物品的价值和体积分别要用一个一维数组记录 w、v若是定义dp[i] 从前i个物品中选择 此时的最大价值 这样是不行的 因为没有东西表示你的背包容积 不知道背包容积去选择物品肯定不行。]]></description><category></category></item><item><title><![CDATA[C++基于websocketpp的多用户网页五子棋项目]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/158892787</link><guid>https://blog.youkuaiyun.com/zc331/article/details/158892787</guid><author>zc331</author><pubDate>Thu, 04 Jun 2026 16:01:49 +0800</pubDate><description><![CDATA[大模块划分，各自的功能，如何进行配合协同完成项目分为三个大模块：业务处理（接收客户端的一些请求并且做出响应）、数据管理（当用户请求注册或者登录的时候，业务处理模块收到请求，去数据管理模块进行相关操作）、前端模块（响应yoghurt的页面请求）]]></description><category></category></item><item><title><![CDATA[动态规划——两个数组的dp问题]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/158853011</link><guid>https://blog.youkuaiyun.com/zc331/article/details/158853011</guid><author>zc331</author><pubDate>Mon, 25 May 2026 17:44:35 +0800</pubDate><description><![CDATA[【代码】动态规划——两个数组的dp问题。]]></description><category></category></item><item><title><![CDATA[网络层协议IP、数据链路层、NAT详解]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/161116683</link><guid>https://blog.youkuaiyun.com/zc331/article/details/161116683</guid><author>zc331</author><pubDate>Mon, 25 May 2026 17:42:38 +0800</pubDate><description><![CDATA[网络层研究的是数据报跨网络找到目的子网的过程，准确来说是确定了数据传输的方向，至于如何传输就是数据链路层要研究的问题，例如一个子网中一台主机如何将数据交给另一台主机，]]></description><category></category></item><item><title><![CDATA[动态规划——回文串系列]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/156338167</link><guid>https://blog.youkuaiyun.com/zc331/article/details/156338167</guid><author>zc331</author><pubDate>Sat, 18 Apr 2026 16:48:47 +0800</pubDate><description><![CDATA[【代码】动态规划——回文串系列。]]></description><category></category></item><item><title><![CDATA[传输层UDP、TCP]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/160169472</link><guid>https://blog.youkuaiyun.com/zc331/article/details/160169472</guid><author>zc331</author><pubDate>Sat, 18 Apr 2026 16:48:18 +0800</pubDate><description><![CDATA[因为可能有残余的报文留存在网络中，要等待对方接收到丢弃这个报文才行，报文有四元组，在等待的时候这个发送端口无法重新绑定，这也是为什么之前的代码断开连接之后立即重新绑定会出错的原因，也正是因为这样，才保证了安全性，因为重新绑定的端口一定不是这个等待的端口，这样就不会出现历史残余报文被新建立起的连接的对方收到；机器掉电/网线断开：A网线断开，此时A发送数据发现异常会关闭自己A->B的连接，但是B不知道，此时若是重新连上网线，B发送报文给A，A发现A->B连接未建立，会发送reset报文重新建立连接；]]></description><category></category></item><item><title><![CDATA[动态规划——子序列问题]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/156338049</link><guid>https://blog.youkuaiyun.com/zc331/article/details/156338049</guid><author>zc331</author><pubDate>Mon, 13 Apr 2026 17:01:16 +0800</pubDate><description><![CDATA[【代码】动态规划——子序列问题。]]></description><category></category></item><item><title><![CDATA[应用层协议HTTP、HTTPS]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/159928540</link><guid>https://blog.youkuaiyun.com/zc331/article/details/159928540</guid><author>zc331</author><pubDate>Mon, 13 Apr 2026 17:00:48 +0800</pubDate><description><![CDATA[应用层协议可以自主实现，其中有一个很好的协议，HTTP协议：超文本传输协议，定义了客户端（例如浏览器）和服务端之间的通信，以交换或者传输超文本（例如HTML）。它是一个无连接、无状态的协议，也就是每一次通信都要重新建立连接并且服务端不会保留客户端的状态信息。]]></description><category></category></item><item><title><![CDATA[动态规划——子数组系列]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/155822090</link><guid>https://blog.youkuaiyun.com/zc331/article/details/155822090</guid><author>zc331</author><pubDate>Tue, 07 Apr 2026 16:43:53 +0800</pubDate><description><![CDATA[【代码】动态规划——子数组系列。]]></description><category></category></item><item><title><![CDATA[应用层自定义协议与序列化]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/159417099</link><guid>https://blog.youkuaiyun.com/zc331/article/details/159417099</guid><author>zc331</author><pubDate>Tue, 07 Apr 2026 16:43:08 +0800</pubDate><description><![CDATA[程序员写的解决实际问题满足日常需求的网络层序实际上都是在应用层。]]></description><category></category></item><item><title><![CDATA[TCP套接字]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/159239294</link><guid>https://blog.youkuaiyun.com/zc331/article/details/159239294</guid><author>zc331</author><pubDate>Fri, 20 Mar 2026 16:54:54 +0800</pubDate><description><![CDATA[那么现在改为多进程版本，在TcpServer中创建子进程，要求父进程只需要不断accept，而子进程不断创建去执行Service，那么父进程就要关掉socket这个专门用来读写的fd，而子进程继承了_listen_sockfd也要关掉这个专门用来监听的fd，子进程执行完Service就要退出，退出父进程需要等待避免其成为僵尸进程，因为要创建很多子进程，僵尸进程多了会造成大量的资源泄露。子进程肯定是先于孙子进程退出的，那么孙子进程就成为了孤儿进程，但是不需要担心，1号进程会自动管理这个孙子进程。]]></description><category></category></item><item><title><![CDATA[动态规划——简单多状态dp]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/155422396</link><guid>https://blog.youkuaiyun.com/zc331/article/details/155422396</guid><author>zc331</author><pubDate>Thu, 12 Mar 2026 18:05:18 +0800</pubDate><description><![CDATA[多状态dp就是dp[i]可能不只有一种状态 我们要分析这些状态之间的含义关系当多种状态可以互相转换的时候最好画一张图 分析关系 （买股票问题很典型的状态之间互相转换）分析清楚之后可以得出状态转移方程。]]></description><category></category></item><item><title><![CDATA[UDP套接字]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/158646982</link><guid>https://blog.youkuaiyun.com/zc331/article/details/158646982</guid><author>zc331</author><pubDate>Thu, 12 Mar 2026 16:57:22 +0800</pubDate><description><![CDATA[无非就是在lambda表达式传参的时候多一个参数类型，这个参数类型是一个封装的类，server.hpp中的func_t也要多一个参数，这个参数类型的参数的获取是在server.hpp中客户端传来消息中的结构体，这个类的方法在原本的translate中调用，之后调用_func，translate随之被调用。但是测试的时候多个客户端必须要先发送消息才能看到其他人发送的消息，这是因为client每次在读的时候都先要写，即sendto，而这个接口设置的是阻塞式的，不先发消息就会一直卡在这里。]]></description><category></category></item><item><title><![CDATA[动态规划——路径问题]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/155422275</link><guid>https://blog.youkuaiyun.com/zc331/article/details/155422275</guid><author>zc331</author><pubDate>Tue, 03 Mar 2026 09:25:44 +0800</pubDate><description><![CDATA[【代码】动态规划——路径问题。]]></description><category></category></item><item><title><![CDATA[网络基础 ]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/158318654</link><guid>https://blog.youkuaiyun.com/zc331/article/details/158318654</guid><author>zc331</author><pubDate>Tue, 03 Mar 2026 09:23:11 +0800</pubDate><description><![CDATA[2、pid和端口号的使用场景不一样，虽然可以将端口号也设置为pid（统一设计），但是这样耦合度太高了，当其中一个的应用场景因为某一个原因要改变时，另一个和这个一样那么也要改变，这样花费的成本太高实现也更加复杂，所以pid和端口号还是要分开设计，这样解耦合了。为什么要自顶向下封装，这是因为数据的源头是应用层的用户发出的，而数据在网络中传输要经过网卡，又因为这两个一个在最上层，一个在最下层，这就导致了数据要在网络中传输，首先是要先贯穿一个主机的整个os软硬件结构（os是硬件（网卡）的管理者）]]></description><category></category></item><item><title><![CDATA[MySQL访问]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/157478505</link><guid>https://blog.youkuaiyun.com/zc331/article/details/157478505</guid><author>zc331</author><pubDate>Thu, 12 Feb 2026 22:32:08 +0800</pubDate><description><![CDATA[首先新建一个MySQL普通用户connector 之后在root下新建一个数据库conn在conn里面新建一张表user 并且将对conn的user的所有权限赋予这个connector。环境配置成功之后可以开始进行访问了 首先来验证一下环境是不是好的 先在Linux环境下连接云服务器新建一个test.cc 在这里面来调用mysql头文件中的一个库函数。查看进行MySQL访问的头文件以及库函数 我们在程序中使用的就是这些库函数实现数据库访问 这些库函数也有自己的头文件。函数指针来获取查询的结果。]]></description><category></category></item><item><title><![CDATA[动态规划——斐波那契数列模型]]></title><link>https://blog.youkuaiyun.com/zc331/article/details/152321509</link><guid>https://blog.youkuaiyun.com/zc331/article/details/152321509</guid><author>zc331</author><pubDate>Tue, 27 Jan 2026 21:10:48 +0800</pubDate><description><![CDATA[【代码】动态规划——斐波那契数列模型。]]></description><category></category></item></channel></rss>