<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Visual_progress的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Visual_progress</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Visual_progress]]></copyright><item><title><![CDATA[JsonRpc：手搓一个高性能Rpc服务(广播篇)]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/156395686</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/156395686</guid><author>Visual_progress</author><pubDate>Mon, 29 Dec 2025 21:42:18 +0800</pubDate><description><![CDATA[本文介绍了基于订阅-发布模式的广播系统设计。系统分为订阅者、话题和管理器三个核心组件：订阅者结构体维护订阅话题列表和客户端连接；话题结构体管理订阅者集合并提供消息发布功能；TopicManager类负责处理话题创建/删除、订阅/取消订阅等操作请求，并维护订阅者与话题的映射关系。系统采用互斥锁保证线程安全，支持类似B站UP主发布视频的广播机制，当话题更新时自动通知所有订阅者。该设计实现了高效的消息分发和动态订阅管理，适用于需要实时推送的场景。]]></description><category></category></item><item><title><![CDATA[JsonRpc：手搓一个高性能Rpc服务(应用篇)]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/156342285</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/156342285</guid><author>Visual_progress</author><pubDate>Mon, 29 Dec 2025 16:37:42 +0800</pubDate><description><![CDATA[本文摘要： 文章介绍了在JsonRpc基础上实现RPC应用功能的通信调度层设计。主要包含两个核心组件：Dispatcher负责根据消息类型分发处理请求，通过模板化的CallbackT类注册不同类型消息的处理函数；Requestor则处理个体消息的分发，支持异步和回调两种响应方式。Dispatcher使用unordered_map存储消息类型与处理函数的映射关系，Requestor通过RequestDescribe结构管理请求状态，提供阻塞和非阻塞两种发送模式。该设计实现了高性能RPC服务的消息调度机制。]]></description><category></category></item><item><title><![CDATA[JsonRpc：手搓一个高性能Rpc服务(底座篇)]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/156312838</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/156312838</guid><author>Visual_progress</author><pubDate>Sat, 27 Dec 2025 22:17:15 +0800</pubDate><description><![CDATA[JSON-RPC框架摘要 本文介绍了一个基于C++的JSON-RPC远程调用框架的实现。框架分为多个抽象层： 消息层：定义BaseMessage基类，包含消息ID、类型标识、序列化/反序列化等方法 连接层：BaseConnection类处理底层TCP连接，提供发送、关闭连接等功能 缓冲层：BaseBuffer类封装数据缓冲区操作 协议层：BaseProtocol类解决TCP粘包/半包问题，提供消息处理接口 服务层：包含BaseServer和BaseClient基类，分别实现服务端和客户端功能 框架采用多态设]]></description><category></category></item><item><title><![CDATA[MySQL：复合查询]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/156133578</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/156133578</guid><author>Visual_progress</author><pubDate>Sun, 21 Dec 2025 21:14:18 +0800</pubDate><description><![CDATA[本文介绍了SQL多表查询和子查询的基本操作。通过模拟公司场景，演示了内连接（保留两表匹配数据）、左连接（保留左表全部数据）、右连接（保留右表全部数据）的区别。同时讲解了自连接查询（处理层级关系）和子查询的两种类型：标量子查询（配合比较运算符使用）和列子查询（配合IN/NOT IN使用）。文中包含具体SQL示例，帮助理解不同连接方式的适用场景，如查询所有员工（含未分配部门者）需用左连接，查询所有部门（含无人员部门）需用右连接。]]></description><category></category></item><item><title><![CDATA[MySQL：内置函数]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/156106583</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/156106583</guid><author>Visual_progress</author><pubDate>Sat, 20 Dec 2025 13:10:13 +0800</pubDate><description><![CDATA[MySQL内置函数是数据库提供的实用工具，主要包括三类：日期函数（如CURRENT_DATE()获取当前日期、DATEDIFF计算日期差）、字符串函数（如CONCAT拼接字符串、SUBSTRING截取子串）和数学函数（如ROUND四舍五入、RAND生成随机数）。这些函数无需了解实现细节，只需调用即可完成日期处理、字符串操作和数学计算等常见任务，能有效简化SQL语句编写。此外还包括USER()查询当前用户、MD5()加密等实用功能，为数据处理提供了便利。]]></description><category></category></item><item><title><![CDATA[计算机网络：HTTP报文]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/156061071</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/156061071</guid><author>Visual_progress</author><pubDate>Thu, 18 Dec 2025 23:43:19 +0800</pubDate><description><![CDATA[HTTP报文是客户端与服务器之间传输数据的&quot;包裹&quot;，分为请求报文和响应报文两种类型。报文采用四层结构：起始行（包含请求方法或状态码）、首部（描述报文属性）、空行（分隔头部与主体）、主体（实际数据内容）。在传输过程中，HTTP报文会经历层层封装，从应用层结构体依次添加TCP头部、IP头部和MAC头部，形成网络传输的数据包。TCP协议通过序号机制确保数据传输的可靠性，解决网络传输中的丢包、乱序等问题。整个过程体现了HTTP报文作为应用层数据在网络协议栈中的完整生命周期。]]></description><category></category></item><item><title><![CDATA[C++：jieba库的安装使用保姆级教程]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/153563147</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/153563147</guid><author>Visual_progress</author><pubDate>Sun, 19 Oct 2025 17:03:23 +0800</pubDate><description><![CDATA[本文介绍了C++版中文分词库Jieba的安装与使用方法。主要内容包括：1）通过git克隆cppjieba项目；2）初始化并下载依赖子模块limonp；3）使用cmake和make编译生成可用库；4）测试验证库功能。最后给出了基础使用示例代码，展示如何加载词典文件并创建Jieba对象进行中文分词。文章针对初学者可能遇到的安装问题提供了详细步骤说明，帮助用户快速搭建中文分词环境。]]></description><category></category></item><item><title><![CDATA[MySQL：表的约束]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/152519720</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/152519720</guid><author>Visual_progress</author><pubDate>Sun, 05 Oct 2025 10:24:23 +0800</pubDate><description><![CDATA[SQL表的约束是保证数据完整性和一致性的重要规则。主要约束包括： 非空约束（NOT NULL）确保字段不为空 唯一约束（UNIQUE）保证字段值不重复 主键约束（PRIMARY KEY）作为唯一标识符，兼具NOT NULL和UNIQUE特性 默认值（DEFAULT）为未指定值的字段提供默认数据 外键（FOREIGN KEY）建立表间关联，确保引用完整性 检查约束（CHECK）在MySQL8.0+中用于验证数据条件 这些约束在创建表时定义或后期添加，能有效防止无效数据进入数据库，维护数据质量。外键约束特别重要]]></description><category></category></item><item><title><![CDATA[MySQL：CRUD]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/152447199</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/152447199</guid><author>Visual_progress</author><pubDate>Sat, 04 Oct 2025 15:02:04 +0800</pubDate><description><![CDATA[MySQL表的增删改查（CRUD）操作指南 本文介绍了MySQL数据库中对表进行增删改查的基本操作。主要内容包括： 新增(Create)：讲解了单行插入和多行插入语法，以及字符编码问题对插入数据的影响。 查询(Retrieve)：详细介绍了： 指定列查询 使用DISTINCT去重 通过ORDER BY进行排序 条件查询（WHERE子句） 分页查询 注意事项：强调了在业务代码中直接查询全表的危险性，以及如何通过条件查询限制结果集。 文章通过大量示例代码和截图演示了各种SQL语句的使用方法，适合MySQL初学者]]></description><category></category></item><item><title><![CDATA[MySQL：库操作和常用数据类型]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/151936000</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/151936000</guid><author>Visual_progress</author><pubDate>Sun, 21 Sep 2025 23:39:56 +0800</pubDate><description><![CDATA[本文介绍了MySQL 8.0.33中数据库和数据类型的基本操作。主要内容包括： 数据库操作：展示如何查找、创建、删除和修改数据库； 数据类型详解： 数值类型：TINYINT、INT、BIGINT等及其适用场景； 字符串类型：CHAR、VARCHAR、TEXT等存储文本数据的方法； 日期时间类型：DATE、DATETIME、TIMESTAMP等时间数据的处理方式。 每个操作都配有示例代码和执行结果截图，便于理解。文章适合MySQL初学者快速掌握数据库基础操作和数据类型选择。]]></description><category></category></item><item><title><![CDATA[计算机网络：HTTPS协议]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/151840199</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/151840199</guid><author>Visual_progress</author><pubDate>Fri, 19 Sep 2025 21:39:00 +0800</pubDate><description><![CDATA[数据签名：证书的“防伪章”，用哈希（SHA-256）+ 私钥加密，确保证书没被改，像包裹上的封条，浏览器用CA公钥检查。CA 认证：可信机构签发证书，证明网站身份真实，像公安局发的身份证，浏览器用CA公钥验证。HTTPS 里的作用：签名确保证书可信，CA认证确认网站身份，共同建立安全通信。]]></description><category></category></item><item><title><![CDATA[计算机网络：守护进程]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/151762322</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/151762322</guid><author>Visual_progress</author><pubDate>Tue, 16 Sep 2025 21:18:09 +0800</pubDate><description><![CDATA[Linux守护进程简介 守护进程是Linux系统中在后台运行的特殊程序，不直接与用户交互，系统启动时自动运行直至关机。它们脱离终端控制，适合长期运行的服务。 核心概念 会话：一组相关进程的集合，与终端绑定，会话领导者（如bash）负责终端通信 进程组：多个协同工作的进程集合，共享同一个PGID 区别：会话包含多个进程组，进程组包含多个进程 创建方法 setsid()：底层系统调用，创建新会话并脱离终端控制 daemon()：封装好的库函数，自动完成会话创建、目录切换等操作 守护进程通过脱离终端会话，确保服务]]></description><category></category></item><item><title><![CDATA[计算机网络：序列化和反序列化]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/151724236</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/151724236</guid><author>Visual_progress</author><pubDate>Mon, 15 Sep 2025 20:51:51 +0800</pubDate><description><![CDATA[摘要 本文通过自行车拆装比喻，生动解释了序列化和反序列化概念。序列化是将内存中的结构化数据（如游戏角色对象）转换为便于传输/存储的字节流（如JSON格式），类似拆卸打包自行车；反序列化则是按相同规则将字节流重建为原始数据结构，如同拆箱组装。文章演示了C++中使用jsoncpp库进行序列化（构建嵌套JSON对象）和反序列化（解析JSON字符串）的具体代码实现，包括数组、嵌套对象处理及错误捕获机制，并强调该过程对网络通信（如socket编程）中数据结构传输的关键作用。]]></description><category></category></item><item><title><![CDATA[计算机网络：socket编程TCP]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/151691996</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/151691996</guid><author>Visual_progress</author><pubDate>Mon, 15 Sep 2025 10:52:19 +0800</pubDate><description><![CDATA[本文介绍了TCP通信的基本流程，包括服务器端和客户端的实现步骤。服务器端通过socket创建套接字、绑定IP和端口、监听连接请求、接收连接并进行数据收发，最后关闭连接。客户端同样创建套接字后，指定服务器地址和端口，连接服务器并发送消息。文中详细说明了关键系统调用的作用，如listen()、accept()、connect()等，并解释了TCP三次握手和四次挥手的过程。示例代码展示了完整的TCP通信实现，突出了服务器和客户端各自的核心操作流程。]]></description><category></category></item><item><title><![CDATA[计算机网络：socket编程UDP]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/151625328</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/151625328</guid><author>Visual_progress</author><pubDate>Sun, 14 Sep 2025 15:02:29 +0800</pubDate><description><![CDATA[Socket编程核心要点 Socket是操作系统提供的网络通信机制，本质是特殊的文件描述符，用于进程间数据交换。 服务端流程：创建socket→绑定IP/端口→接收数据→回复→关闭。关键函数：socket()、bind()、recvfrom()/sendto()。 客户端关键：通过目标IP（如127.0.0.1）和端口号（如12345）定位服务端，使用相同协议族（如AF_INET）进行通信。 注意事项：需处理字节序转换（htons）、地址结构体（sockaddr_in），及时关闭socket避免资源泄漏。 ]]></description><category></category></item><item><title><![CDATA[Linux系统：线程池]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/151652585</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/151652585</guid><author>Visual_progress</author><pubDate>Sun, 14 Sep 2025 12:13:12 +0800</pubDate><description><![CDATA[线程池就像一个“工人队伍”，提前雇好几个工人（线程），让他们随时待命。每个任务来时，不用临时招人（创建新线程），直接让闲着的工人去干活复用线程。干完后，工人不走，继续等下一个任务。线程池的应用场景线程池最适合那些需要“同时干多件事，但任务短小精悍”的地方。简单说，它像一个“待命工人队”，帮你高效处理并发任务。Web服务器处理请求：比如网站收到很多用户访问（如淘宝浏览商品），每个请求是短任务，用线程池分配“工人”快速响应，避免服务器卡顿。文件上传/下载。]]></description><category></category></item><item><title><![CDATA[Linux系统：日志系统]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/151643047</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/151643047</guid><author>Visual_progress</author><pubDate>Sat, 13 Sep 2025 11:31:06 +0800</pubDate><description><![CDATA[本文介绍了一个基于C++的线程安全日志系统，采用策略模式支持终端和文件两种日志输出方式。系统自动记录时间戳、日志等级、进程号、源文件及行号等信息，用户只需通过LOG(level) &lt;&lt; &quot;消息&quot;格式即可记录日志。关键实现包括：1) 定义LogStrategy抽象基类，派生出终端输出(ConsoleLogStrategy)和文件输出(FileLogStrategy)子类；2) 建立日志等级枚举类型(DEBUG/INFO/WARNING等)及转换函数；3) 实现时间戳获取功能。系]]></description><category></category></item><item><title><![CDATA[计算机网络：基于OS网络基础架构]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/151392774</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/151392774</guid><author>Visual_progress</author><pubDate>Wed, 10 Sep 2025 11:37:01 +0800</pubDate><description><![CDATA[本文介绍了计算机网络的基础概念，包括局域网（LAN）和广域网（WAN）的区别与联系，OSI七层模型及其与操作系统的关系，以及TCP/IP协议、MAC地址等核心知识点。文章还详细讲解了Linux系统中ifconfig命令的使用方法，帮助读者理解网络接口配置和状态信息。通过理论结合实践的方式，帮助开发者掌握网络通信的基本原理，为开发联网应用奠定基础。]]></description><category></category></item><item><title><![CDATA[Linux系统：线程同步与生产消费模型]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/151334322</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/151334322</guid><author>Visual_progress</author><pubDate>Mon, 08 Sep 2025 23:49:57 +0800</pubDate><description><![CDATA[文章摘要： 线程同步通过互斥锁和条件变量实现多线程环境下的有序协作。条件变量（pthread_cond_t）与互斥锁配合，解决线程等待特定条件的场景（如生产者-消费者模型）。生产者线程在缓冲区满时等待，消费者线程在空时等待，通过pthread_cond_signal唤醒对方。初始化条件变量可采用静态（PTHREAD_COND_INITIALIZER）或动态（pthread_cond_init）方式。生产者-消费者模型通过缓冲区解耦生产与消费，利用互斥锁保证操作原子性，条件变量实现同步，从而解决速度不匹配问题]]></description><category></category></item><item><title><![CDATA[Linux系统：线程的互斥和安全]]></title><link>https://blog.youkuaiyun.com/Visual_progress/article/details/151313834</link><guid>https://blog.youkuaiyun.com/Visual_progress/article/details/151313834</guid><author>Visual_progress</author><pubDate>Mon, 08 Sep 2025 22:03:05 +0800</pubDate><description><![CDATA[摘要： 本文探讨了线程互斥在多线程编程中的重要性。通过模拟多线程抢票案例，展示了共享资源（全局变量）因线程竞争导致的错误结果（如票数为负）。问题根源在于if判断和--操作的非原子性，导致线程切换时数据不一致。解决方案是引入互斥锁（pthread_mutex_t），确保临界区代码（操作共享资源的部分）仅由一个线程执行。示例代码演示了静态初始化的全局锁如何保证数据正确性，并对比了无锁与加锁情况下的输出差异。此外，还简要介绍了互斥锁的静态初始化和动态初始化两种方式及其适用场景。互斥机制有效避免了竞态条件，确保多线]]></description><category></category></item></channel></rss>