<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Rick_Theseusr的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Rick_Theseusr</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Rick_Theseusr]]></copyright><item><title><![CDATA[死锁与锁的高级话题]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397161</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397161</guid><author>Rick_Theseusr</author><pubDate>Wed, 08 Jul 2026 14:50:06 +0800</pubDate><description><![CDATA[死锁与锁的高级机制摘要 核心要点 死锁四条件： 互斥（无法破坏） 持有并等待（破坏方法：std::lock一次性申请） 不可剥夺（破坏方法：try_lock+回退） 循环等待（破坏方法：固定锁顺序） 锁类型对比： 读写锁：适合读多写少场景（如缓存），读操作可并发 自旋锁：适合超短临界区（微秒级），避免上下文切换 互斥锁：通用场景，保证公平性但开销较大 同步机制： 禁止用sleep代替同步（无内存屏障和锁释放） C++17的scoped_lock结合了std::lock的防死锁能力和RAII安全性 std::]]></description><category></category></item><item><title><![CDATA[原子操作与内存序]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397167</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397167</guid><author>Rick_Theseusr</author><pubDate>Wed, 08 Jul 2026 14:49:23 +0800</pubDate><description><![CDATA[C++原子操作与内存序摘要 C++的std::atomic提供无锁线程安全操作，比互斥锁更轻量。核心操作包括原子读写、CAS和算术运算。CAS(Compare-And-Swap)是关键的读-改-写原语，有weak/strong两种形式，需注意ABA问题。内存序(memory_order)控制操作顺序：relaxed只保证原子性；acquire/release建立线程间happens-before关系；seq_cst(默认)保证全局顺序一致性但开销最大。合理选择内存序对无锁编程至关重要，需平衡性能与正确性。]]></description><category></category></item><item><title><![CDATA[虚函数与运行时多态]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162399695</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162399695</guid><author>Rick_Theseusr</author><pubDate>Tue, 07 Jul 2026 20:12:00 +0800</pubDate><description><![CDATA[本文深入探讨C++虚函数与运行时多态机制，主要内容包括： 静态绑定与动态绑定：静态绑定在编译期确定调用目标，动态绑定通过虚函数表在运行时确定 虚函数表(vtable)机制：详细分析vptr/vtable的内存布局和虚函数调用过程 构造函数与虚函数：解释构造函数不能声明为虚函数的原因及虚析构函数的必要性 RTTI原理：阐述typeid和dynamic_cast的底层实现机制 override与final关键字：说明其语法作用及对编译器优化的影响 文章通过代码示例和内存图示，全面剖析了C++多态的实现原理和关键]]></description><category></category></item><item><title><![CDATA[C++ 对象模型]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162399700</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162399700</guid><author>Rick_Theseusr</author><pubDate>Tue, 07 Jul 2026 20:11:56 +0800</pubDate><description><![CDATA[C++对象模型核心概念摘要： 空类大小为1字节，确保实例地址唯一性 结构体内存对齐规则：成员地址需满足自然对齐，编译器自动插入padding，成员顺序影响总大小 继承内存布局： 单继承：基类成员在前，派生类追加 多继承：按声明顺序排列基类子对象 虚继承：通过虚基类指针解决菱形继承问题 成员函数指针大小可变（8或16字节），存储函数地址或vtable索引，多继承时需保存this调整偏移 （98字）]]></description><category></category></item><item><title><![CDATA[性能优化实战]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397215</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397215</guid><author>Rick_Theseusr</author><pubDate>Tue, 07 Jul 2026 20:11:00 +0800</pubDate><description><![CDATA[性能优化实战摘要 本文介绍了6个关键的性能优化技术点：1) CPU缓存局部性原理解释了vector比list遍历快的原因；2) 多线程中的false sharing问题及缓存行对齐解决方案；3) 结构体成员顺序优化以减少内存padding；4) SIMD指令集(SSE/AVX)实现并行计算；5) 性能分析工具链(perf/VTune/火焰图)的使用方法；6) 虚函数调用开销分析。文章通过代码示例、mermaid图表和对比实验，展示了从缓存利用、内存布局到并行计算等多个维度的优化技巧，并提供了量化分析工具的使]]></description><category></category></item><item><title><![CDATA[CMake 与工程化]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397208</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397208</guid><author>Rick_Theseusr</author><pubDate>Tue, 07 Jul 2026 20:10:18 +0800</pubDate><description><![CDATA[摘要：CMake与工程化实践 本文围绕CMake工程化实践展开，涵盖以下核心内容： 静态库与动态库：对比两者的存储、内存占用和部署特性，提供不同场景下的选型建议（小工具用静态库，大型系统用动态库） Modern CMake：强调以target为中心的属性传递机制，详解PUBLIC/PRIVATE/INTERFACE三种依赖传播方式及适用场景 包管理工具：对比vcpkg和Conan的特性，vcpkg适合Windows和简单项目，Conan支持复杂配置和私有包分发 单元测试：展示Google Test与CMak]]></description><category></category></item><item><title><![CDATA[C++11/14/17/20/23 新特性全景]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397207</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397207</guid><author>Rick_Theseusr</author><pubDate>Tue, 07 Jul 2026 20:09:20 +0800</pubDate><description><![CDATA[本文系统梳理了 C++11 至 C++23 各版本的核心新特性，采用"特性引出→原理分析→代码示例"的三段式讲解方式。主要内容包括：C++11 的 auto/decltype、lambda、右值引用、智能指针等基础现代化特性；C++14 对泛型编程的完善；C++17 在编译期编程和零成本抽象方面的增强；C++20 的重要概念如协程、模块、三路比较等；以及 C++23 对标准库的现代化改进。文章通过清晰的代码示例和面试题解析，帮助开发者掌握现代 C++ 的关键特性演进脉络。]]></description><category></category></item><item><title><![CDATA[智能指针深度]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397203</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397203</guid><author>Rick_Theseusr</author><pubDate>Tue, 07 Jul 2026 20:08:12 +0800</pubDate><description><![CDATA[智能指针深度解析摘要 本文深入探讨了C++智能指针的核心机制与实现原理。主要内容包括： unique_ptr：零开销的独占所有权指针，通过EBO优化保持与裸指针相同大小，禁止拷贝仅支持移动语义。 shared_ptr控制块：采用双指针结构（对象指针+控制块指针），控制块包含引用计数、删除器等元数据，并详细分析了引用计数规则。 weak_ptr：通过weak_count解决循环引用问题，介绍了lock()等关键API的线程安全实现。 make_shared优化：对比了make_shared与直接new的性能差]]></description><category></category></item><item><title><![CDATA[进程与 IPC]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397196</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397196</guid><author>Rick_Theseusr</author><pubDate>Tue, 07 Jul 2026 20:07:00 +0800</pubDate><description><![CDATA[文章摘要 本文介绍了Linux进程管理与进程间通信（IPC）的核心概念： fork/exec与写时拷贝：fork()创建子进程时采用写时拷贝（COW）技术，父子进程共享内存页直到写入操作触发缺页中断。exec系列函数替换当前进程内存空间。 孤儿与僵尸进程：孤儿进程由init进程收养；僵尸进程因父进程未调用wait而残留。防止僵尸的三种方法：同步wait、SIGCHLD信号处理或忽略SIGCHLD信号。 IPC方式对比：总结了管道、消息队列、共享内存等7种IPC机制的特点及适用场景。 共享内存实现：比较了sh]]></description><category></category></item><item><title><![CDATA[Reactor 与网络架构]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397192</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397192</guid><author>Rick_Theseusr</author><pubDate>Tue, 07 Jul 2026 20:06:46 +0800</pubDate><description><![CDATA[Reactor模式与网络架构摘要 Reactor是一种事件驱动模式，核心原理是将IO事件检测与事件处理解耦，通过多路复用器（epoll/kqueue）高效管理连接。主要包含三个组件：事件处理器(EventHandler)、反应器(Reactor)和同步事件分离器(epoll_wait)。 单线程Reactor将所有操作集中在一个线程，虽然简单但容易因业务阻塞影响整体性能。改进方案包括： 多线程Reactor：主线程处理IO，业务逻辑交给线程池，适合计算密集型场景； 主从Reactor：Main Reacto]]></description><category></category></item><item><title><![CDATA[网络编程：select/poll/epoll]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397185</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397185</guid><author>Rick_Theseusr</author><pubDate>Tue, 07 Jul 2026 20:06:24 +0800</pubDate><description><![CDATA[本文摘要：文章详细对比了阻塞IO、非阻塞IO和IO多路复用的区别，重点分析了select、poll和epoll三种IO多路复用机制。select通过fd_set实现但存在数量限制和性能问题；poll改用pollfd数组解决了数量限制但仍需全量拷贝和遍历；epoll通过红黑树和就绪链表实现O(1)高效管理，支持LT和ET两种触发模式。文章还探讨了epoll的惊群问题及解决方案，最后通过表格对比了三者的关键差异，指出epoll在高并发场景下的性能优势。]]></description><category></category></item><item><title><![CDATA[线程池与异步编程]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397173</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162397173</guid><author>Rick_Theseusr</author><pubDate>Tue, 07 Jul 2026 20:05:55 +0800</pubDate><description><![CDATA[本文摘要： C++并发编程核心知识： 线程池通过预创建线程和任务队列解决频繁创建/销毁线程的开销问题，核心参数包括线程数、队列容量和拒绝策略。最佳线程数取决于任务类型（CPU/IO密集型）。 std::async与std::thread对比：async自动管理线程生命周期并返回future，支持异常传递；thread需要手动管理且无法直接获取返回值。async的默认启动策略可能延迟执行，建议显式指定std::launch::async。 future/promise机制：promise是写入端，future]]></description><category></category></item><item><title><![CDATA[二叉树：遍历与递归思维]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349485</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349485</guid><author>Rick_Theseusr</author><pubDate>Mon, 06 Jul 2026 13:05:30 +0800</pubDate><description><![CDATA[文章摘要：本文系统介绍了二叉树及其遍历方法。通过公司组织架构类比解释树结构，定义关键术语如根节点、叶子节点等。重点讲解四种遍历方式（前序、中序、后序、层序），提供递归和迭代的C++实现代码，并配以示意图说明遍历顺序差异。文章强调递归思维在二叉树处理中的核心地位，解释递归三要素，最后简要介绍二叉搜索树的基本操作（查找和插入）。适合需要快速掌握二叉树基础知识的读者阅读。]]></description><category></category></item><item><title><![CDATA[哈希表：O(1) 查找的秘密]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349492</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349492</guid><author>Rick_Theseusr</author><pubDate>Mon, 06 Jul 2026 13:04:55 +0800</pubDate><description><![CDATA[哈希表是一种高效的数据结构，通过哈希函数将键映射到数组下标实现O(1)平均时间复杂度的查找。本文介绍了哈希表的核心原理，包括哈希函数设计（如除留余数法）、冲突解决方法（链地址法和开放地址法）、负载因子与rehash机制，以及C++中std::unordered_map的实现与使用。文章还通过LeetCode两数之和问题展示了哈希表的实际应用，并分析了各种操作的时间复杂度。良好的哈希函数和合理的rehash策略是保证哈希表高效性能的关键。]]></description><category></category></item><item><title><![CDATA[图基础：DFS 与 BFS]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349505</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349505</guid><author>Rick_Theseusr</author><pubDate>Mon, 06 Jul 2026 13:04:29 +0800</pubDate><description><![CDATA[本文介绍了图的基本概念和两种核心遍历算法：深度优先搜索（DFS）和广度优先搜索（BFS）。通过地铁线路图的类比，直观解释了图的节点、边及其分类（有向/无向、有权/无权）。重点对比了邻接矩阵和邻接表两种存储方式的优缺点及适用场景，给出了C++实现代码。详细讲解了DFS的递归和迭代写法，以及BFS的层序遍历实现，特别说明BFS适用于无权图最短路径问题。最后介绍了拓扑排序的两种算法（Kahn入度法和DFS后序法）及其实现。全文以算法实现为核心，配有清晰的代码示例和可视化图示。]]></description><category></category></item><item><title><![CDATA[堆与优先队列：大小顶堆]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349514</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349514</guid><author>Rick_Theseusr</author><pubDate>Mon, 06 Jul 2026 13:03:47 +0800</pubDate><description><![CDATA[本文介绍了堆与优先队列的核心概念与应用，重点包括： 堆的基本特性：大顶堆和小顶堆的定义，堆只维护最值不保证全局有序 存储结构：完全二叉树用数组实现，推导父子节点索引公式 关键操作：上浮(swim)和下沉(sink)的算法实现与时间复杂度分析 高效建堆：Floyd算法的O(n)建堆过程及数学原理 标准库实现：C++的priority_queue用法及自定义比较函数 堆排序：不稳定排序算法，分建堆和反复取堆顶两个阶段 典型应用：第K大元素和前K高频元素问题的堆解法 堆的核心价值在于高效维护动态数据集的最值，时间]]></description><category></category></item><item><title><![CDATA[字符串匹配与 KMP 算法]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349524</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349524</guid><author>Rick_Theseusr</author><pubDate>Mon, 06 Jul 2026 13:03:26 +0800</pubDate><description><![CDATA[本文介绍了字符串匹配中的KMP算法及其优化思想。主要内容包括： 直观类比：通过查字典的例子说明KMP算法利用已匹配信息跳过不可能的位置，避免回溯浪费。 暴力匹配的缺陷：复杂度O(nm)，在特定情况下效率极低。 KMP核心思想： 预处理模式串生成next数组（记录最长相等前后缀长度） 匹配时文本指针不回溯，模式指针按next跳转 详细实现： next数组的双指针递推构造方法 完整的C++代码实现及匹配过程图解 复杂度分析：预处理O(m)，匹配O(n)，总体线性复杂度O(n+m)。 扩展对比：简要比较了KMP与]]></description><category></category></item><item><title><![CDATA[布隆过滤器与位图]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349532</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349532</guid><author>Rick_Theseusr</author><pubDate>Mon, 06 Jul 2026 13:02:55 +0800</pubDate><description><![CDATA[本文介绍了布隆过滤器和位图的基本原理与实现。布隆过滤器是一种概率型数据结构，通过多个哈希函数和位数组实现高效的成员存在性检查，具有空间效率高、查询速度快的特点，但可能存在假阳性。文章从电影院检票的类比入手，解释了位图的基础概念，详细阐述了布隆过滤器的结构、数学原理、不可删除缺陷及其变种Counting Bloom Filter，并提供了C++的简易实现代码。布隆过滤器适用于需要快速判断元素是否存在且可以容忍少量误报的场景。]]></description><category></category></item><item><title><![CDATA[并查集：连通性问题]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349554</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349554</guid><author>Rick_Theseusr</author><pubDate>Mon, 06 Jul 2026 13:02:48 +0800</pubDate><description><![CDATA[本文介绍了并查集(Union-Find)这种数据结构及其优化方法。并查集用于解决元素间的连通性问题，支持两种操作：合并(Union)和查找(Find)。文章从最简单的Quick-Find实现开始，分析了其O(n)时间复杂度的不足，进而引入基于树形结构的Quick-Union方法。针对Quick-Union可能退化为链表的问题，提出了路径压缩和按秩合并两种优化策略，将时间复杂度降低至近常数级(α(n))。文章最后给出了一个结合路径压缩和按秩合并的优化模板代码，并举例说明其在求解岛屿数量问题中的应用。]]></description><category></category></item><item><title><![CDATA[平衡二叉搜索树：AVL 与红黑树]]></title><link>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349540</link><guid>https://blog.youkuaiyun.com/Rick_Theseusr/article/details/162349540</guid><author>Rick_Theseusr</author><pubDate>Mon, 06 Jul 2026 13:02:04 +0800</pubDate><description><![CDATA[AVL树与红黑树是两种经典的自平衡二叉搜索树。AVL树通过严格平衡因子（左右子树高度差≤1）保证树高约1.44log₂n，查找效率更高但维护成本较大。红黑树放宽平衡条件，通过颜色规则（无连续红节点、黑高相同）确保树高≤2log₂(n+1)，虽然查找稍慢但插入/删除操作更高效。AVL适合读密集型场景，红黑树凭借更少的旋转操作成为C++ STL中map/set等容器的实现基础，在需要稳定迭代器的场景表现更优。两者各有侧重，实际选择需权衡查询与更新操作的频率需求。]]></description><category></category></item></channel></rss>