<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Zengwengang的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Zengwengang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Zengwengang]]></copyright><item><title><![CDATA[Mysql 索引]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/163383547</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/163383547</guid><author>Zengwengang</author><pubDate>Tue, 04 Aug 2026 16:36:44 +0800</pubDate><description><![CDATA[索引是典型空间换时间，读多写少场景按需建立即可，不宜过度创建。聚簇索引：索引和数据住在一起，找索引就是找数据，速度最快，但一张表只有一个；非聚簇索引：索引只存主键门牌号，拿到号还得上门找数据，稍慢但可以建很多个；日常优化思路：优先用主键查询；普通索引场景下，尽量用覆盖索引减少回表次数。]]></description><category></category></item><item><title><![CDATA[Mysql 复合查询]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/163354579</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/163354579</guid><author>Zengwengang</author><pubDate>Tue, 04 Aug 2026 16:36:19 +0800</pubDate><description><![CDATA[实际开发中往往数据来自不同的表，所以需要多表查询。本节我们用一个简单的公司管理系统，有三张 表EMP,DEPT,SALGRADE来演示如何进行多表查询。案例：显示雇员名、雇员工资以及所在部门的名字因为上面的数据来自EMP和DEPT表，因此要联合查询其实我们只要emp表中的deptno = dept表中的deptno字段的记录,所以后面要有个where限定结果显示部门号为10的部门名，员工名和工资显示各个员工的姓名，工资，及工资级别。]]></description><category></category></item><item><title><![CDATA[Mysql 内置函数]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/163329483</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/163329483</guid><author>Zengwengang</author><pubDate>Tue, 04 Aug 2026 16:35:40 +0800</pubDate><description><![CDATA[日常开发里处理字符串是家常便饭，清洗文本、分割标记、统计字符出现次数，对一个字符串进行md5摘要，摘要后得到一个32位字符串（哈希加密）REPLACE(原始字符串, 需要搜寻的内容, 替换后的内容)如果val1为null，返回val2，否则返回val1的值；-- 示例2：把指定文字直接删掉。注意：null不需要带单引号；绝对是出镜率很高的基础函数。-- 示例1：把逗号替换成竖线。显示当前正在使用的数据库。]]></description><category></category></item><item><title><![CDATA[Mysql表的增删改查]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/163293972</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/163293972</guid><author>Zengwengang</author><pubDate>Wed, 29 Jul 2026 23:46:02 +0800</pubDate><description><![CDATA[CRUD : Create(创建), Retrieve(读取)，Update(更新)，Delete（删除）。]]></description><category></category></item><item><title><![CDATA[Mysql表的约束]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/163113152</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/163113152</guid><author>Zengwengang</author><pubDate>Tue, 28 Jul 2026 16:10:52 +0800</pubDate><description><![CDATA[主键是用来衡量mysql表当中的一行一行记录的唯一性的。未来可以通过设定主键的方式，可以很好对一行一行的信息的数据记录，插入的数据进行唯一性甄别。对于表当中，如果主键冲突了，我们的记录不作插入。另外，主键可以设给一列或者多列，设为多列称为复合主键。设给多列后，多列中有各别冲突但不影响，如果多列中，全部和历史结果冲突了，就会触发主键约束。所以不管是单列或多列被设为主键，在表当中只会存在一个主键。]]></description><category></category></item><item><title><![CDATA[mysql数据类型]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/163065493</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/163065493</guid><author>Zengwengang</author><pubDate>Tue, 28 Jul 2026 15:38:10 +0800</pubDate><description><![CDATA[enum和set插入时可以用字面值，可以插入为空，插入多个选项时，用‘，’分隔符；enum可以用数字下标插入；set可以用位图方式插入。]]></description><category></category></item><item><title><![CDATA[数据库表的操作]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/163054331</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/163054331</guid><author>Zengwengang</author><pubDate>Mon, 20 Jul 2026 22:07:48 +0800</pubDate><description><![CDATA[语法：) character set 字符集 collate 校验规则 engine 存储引擎;]]></description><category></category></item><item><title><![CDATA[数据库的操作]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/163048596</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/163048596</guid><author>Zengwengang</author><pubDate>Mon, 20 Jul 2026 16:06:28 +0800</pubDate><description><![CDATA[说明：1.大写的表示关键字2.[] 是可选项3.CHARACTER SET: 指定数据库采用的字符集4.COLLATE: 指定数据库字符集的校验规则。]]></description><category></category></item><item><title><![CDATA[数据库基础]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/163046159</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/163046159</guid><author>Zengwengang</author><pubDate>Mon, 20 Jul 2026 15:22:29 +0800</pubDate><description><![CDATA[1.建立数据库，本质就是在Linux下的一个目录；2.进入创建的目录，创建一个表，本质就是在Linux下创建对应的文件！上面1、2都是mysqld服务帮我们做的。3.数据库本质其实也是文件！只不过这些文件并不由程序员直接操作，而是由mysqld帮我们进行操作。]]></description><category></category></item><item><title><![CDATA[Linux 传输层协议TCP]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/162444107</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/162444107</guid><author>Zengwengang</author><pubDate>Tue, 07 Jul 2026 11:35:29 +0800</pubDate><description><![CDATA[核心原因是。]]></description><category></category></item><item><title><![CDATA[Linux 传输层协议UDP]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/162441770</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/162441770</guid><author>Zengwengang</author><pubDate>Tue, 07 Jul 2026 11:35:07 +0800</pubDate><description><![CDATA[TCP有发送缓冲区是因为如果数据丢了要重传。只有收到数据已送达的信号才会清空发送缓冲区；UDP是不可靠传输协议，数据丢了就丢了。没有重传这一概念，因此没有发送缓冲区。为什么UDP要有接收缓冲区？因为进行网络通信时，上层要做很多工作。因此OS要提供一个接收数据的能力，上层忙的时候，OS也能缓存一部分报文，如果接收缓冲区满了，再发送报文，则该报文会被丢弃，丢弃后UDP并不会关心。报文的理解报文=报头+有效数据载荷；在OS内部，一定可能会同时存在大量报文。而OS就必须管理这些报文。]]></description><category></category></item><item><title><![CDATA[Linux HTTPS协议]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/162428043</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/162428043</guid><author>Zengwengang</author><pubDate>Tue, 07 Jul 2026 11:34:47 +0800</pubDate><description><![CDATA[加密就是把明⽂(要传输的信息)进⾏⼀系列变换,⽣成密⽂. 解密就是把密⽂再进⾏⼀系列变换,还原成明⽂. 在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进⾏这个过程,这样的数据称为密 钥(正确发⾳yue四声,不过⼤家平时都读作yao四声).哈希加密（也叫散列加密）是一种单向不可逆的加密方式：把任意长度的原始内容，通过算法运算成一段固定长度的 “数字指纹”（哈希值）。严格来说它不是加密，因为无法从结果反推出原文。它把任意长度的数据，变成固定长度的一串数字（比如几十位的十六进制串）。核心特点。]]></description><category></category></item><item><title><![CDATA[Linux 应用层协议HTTP]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/161855083</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/161855083</guid><author>Zengwengang</author><pubDate>Mon, 29 Jun 2026 17:52:58 +0800</pubDate><description><![CDATA[虽然我们说,应⽤层协议是我们程序猿⾃⼰定的.但实际上,已经有⼤佬们定义了⼀些现成的,⼜⾮常好 ⽤的应⽤层协议,供我们直接参考使⽤.HTTP(超⽂本传输协议)就是其中之⼀。在互联⽹世界中，HTTP（HyperTextTransferProtocol，）是⼀个⾄关重要的协议。它定义了客⼾端（如浏览器）与服务器之间如何通信，以交换或传输超⽂本（如HTML⽂档）。HTTP协议是客⼾端与服务器之间通信的基础。客⼾端通过HTTP协议向服务器发送请求，服务器收到 请求后处理并返回响应。]]></description><category></category></item><item><title><![CDATA[Linux 应用层自定义协议与序列化]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/161840413</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/161840413</guid><author>Zengwengang</author><pubDate>Mon, 29 Jun 2026 17:51:58 +0800</pubDate><description><![CDATA[• toStyledString 、StreamWriter 和 FastWriter 提供了不同的序列化选项，你可以根 据具体需求选择使⽤。• Json::Reader 和 parseFromStream 函数是Jsoncpp中主要的反序列化⼯具，它们提供了强 ⼤的错误处理机制。• 在进⾏序列化和反序列化时，请确保处理所有可能的错误情况，并验证输⼊和输出的有效性。]]></description><category></category></item><item><title><![CDATA[Linux Socket编程]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/161656563</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/161656563</guid><author>Zengwengang</author><pubDate>Mon, 29 Jun 2026 17:50:11 +0800</pubDate><description><![CDATA[bind 函数本质是向操作系统内核注册套接字的网络标识，内核会记录该套接字与特定 IP + 端口的映射关系，后续网络数据包到达时，内核可通过目标地址快速定位到对应的套接字并交付数据。：将创建的套接字与本机特定 IP 地址和端口号绑定，为服务器程序确立固定的通信地址标识，让客户端能够通过该地址发起连接请求，是 TCP/UDP 服务器初始化的关键步骤之一。因此为了方便，我们设计一个InetAddr类 ，其中包含代表网络字节序的sockaddr_in，和本地字节序的ip地址和port端口号。]]></description><category></category></item><item><title><![CDATA[Linux 程序设计模式]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/161524683</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/161524683</guid><author>Zengwengang</author><pubDate>Mon, 08 Jun 2026 21:48:01 +0800</pubDate><description><![CDATA[生产者消费者模型是操作系统和多线程编程中的经典同步 / 互斥模型，在 Linux 多线程场景中尤为常见。它的核心目标是：解决生产者和消费者之间 “生产 / 消费速度不匹配” 的问题，同时实现两者的解耦与安全协作。简单来说，模型描述了两类线程如何通过一个固定大小的共享缓冲区（仓库）协调工作，避免数据竞争、死锁或资源浪费。角色核心职责阻塞规则生产者线程负责生成数据，将数据放入缓冲区缓冲区满时，必须停止生产并阻塞，直到消费者取走数据腾出空间消费者线程负责从缓冲区取出数据并处理。]]></description><category></category></item><item><title><![CDATA[Linux 网络基础]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/161634063</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/161634063</guid><author>Zengwengang</author><pubDate>Mon, 08 Jun 2026 21:46:47 +0800</pubDate><description><![CDATA[✅ 发送：应用数据 → TCP 报头 → IP 报头 → 以太网报头 → 二进制比特流✅ 接收：比特流 → 去除以太网报头 → 去除 IP 报头 → 去除 TCP 报头 → 原始应用数据生活化类比：每经过一层协议就多贴一张快递中转标签，收件时依次撕掉全部标签，取出最内侧货物。IP 负责找到目标所在 “城市（网段）”，MAC 负责在目标城市里精准找到 “具体住户（终端设备）”。MAC→局域网找设备；IP→跨网段找主机；端口→主机内找软件，三层地址配合完成完整数据投递。]]></description><category></category></item><item><title><![CDATA[Linux 线程同步与互斥]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/161491305</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/161491305</guid><author>Zengwengang</author><pubDate>Mon, 08 Jun 2026 21:45:40 +0800</pubDate><description><![CDATA[访问临界资源的那段代码，被称为临界区（Critical Section）。互斥锁的作用就是保证临界区在同一时间只有一个线程执行。互斥锁：保护共享数据，保证同一时间只有一个线程访问条件变量：让线程在条件不满足时主动阻塞，避免 CPU 浪费智能锁自动管理锁，是 C++ 最佳实践。]]></description><category></category></item><item><title><![CDATA[linux 线程概念与控制]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/161431907</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/161431907</guid><author>Zengwengang</author><pubDate>Tue, 02 Jun 2026 20:43:49 +0800</pubDate><description><![CDATA[特性进程线程资源开销高低切换速度慢快隔离性强（独立地址空间）弱（共享进程资源）通信复杂度高（需 IPC 机制）低（共享内存，需同步）编程难度相对简单（无锁，隔离性好）较高（需精细同步设计）适用场景稳定性优先、隔离性要求高性能优先、高频数据交互。]]></description><category></category></item><item><title><![CDATA[Linux信号]]></title><link>https://blog.youkuaiyun.com/Zengwengang/article/details/161399279</link><guid>https://blog.youkuaiyun.com/Zengwengang/article/details/161399279</guid><author>Zengwengang</author><pubDate>Mon, 01 Jun 2026 20:38:03 +0800</pubDate><description><![CDATA[进程可以注册一个自己写的函数，当收到信号时，不执行默认动作，而是执行我们自定义的逻辑。注册方式：用signal()或更安全的系统调用，把信号和自定义处理函数绑定。关键注意事项：信号处理函数里，必须使用异步信号安全的函数（也叫可重入函数），比如write()类型的操作。不能用printfmalloc这类非安全函数，否则可能导致程序崩溃。类比：就像上课铃响了，你不回教室，反而去操场打球，就是 “自定义处理”。信号是否被处理，取决于它是否在未决集中且未被阻塞。信号保存的本质就是内核在。]]></description><category></category></item></channel></rss>