<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[2402_82676216的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/2402_82676216</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; 2402_82676216]]></copyright><item><title><![CDATA[基础IO ]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/161600622</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/161600622</guid><author>2402_82676216</author><pubDate>Thu, 04 Jun 2026 20:25:19 +0800</pubDate><description><![CDATA[本文系统性地阐述了文件操作的核心概念与实现机制。首先从狭义和广义角度定义文件，指出Linux中一切皆文件的抽象理念，分析文件由元数据和内容组成的本质。文章详细解析了进程与文件的关系，包括文件描述符、内核数据结构关联及重定向原理，并通过代码示例展示了系统调用与库函数的封装关系。深入探讨了缓冲区的类型与作用机制，对比了用户级与内核级缓冲区的差异。最后从操作系统层面揭示了虚拟文件系统(VFS)的设计思想，通过函数指针实现设备无关的统一接口。全文通过理论阐述与代码实践相结合的方式，完整呈现了文件I/O从应用到内核的]]></description><category></category></item><item><title><![CDATA[自定义Shell]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/160258236</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/160258236</guid><author>2402_82676216</author><pubDate>Mon, 01 Jun 2026 17:44:09 +0800</pubDate><description><![CDATA[核心逻辑：通过getenv函数获取系统环境变量USER（用户名）、HOSTNAME（主机名）、PWD（当前工作路径），按格式拼接并打印命令行提示符。str: 目标字符缓冲区指针，用于存储格式化后的字符串。size: 缓冲区总大小（字节）。函数最多写入size-1个有效字符，并自动在末尾补\0。format: 格式化字符串（与printf用法完全一致，如%d%s%f...: 可变参数列表，对应format中的占位符。snprintf 本身不会把内容打印到屏幕上！它只负责。]]></description><category></category></item><item><title><![CDATA[ 跳表（skiplist）]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/161429671</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/161429671</guid><author>2402_82676216</author><pubDate>Tue, 26 May 2026 22:51:33 +0800</pubDate><description><![CDATA[跳表是一种基于多层有序链表的高效查找结构，由William Pugh在1990年提出。它通过在底层有序链表上建立多层索引，将查找时间复杂度优化至O(logn)。跳表通过随机层数分配（通常p=1/4，maxlevel=32）来平衡插入/删除效率，避免严格的比例维护。相比平衡树，跳表实现更简单，空间消耗更低（平均1.33指针/节点），且天然支持范围查询。其核心操作包括：查找（逐层比较）、插入（随机层数+前驱链接）和删除（前驱解除链接）。虽然存在随机性导致局部波动，但跳表在实现复杂度、空间效率和功能扩展性方面具有]]></description><category></category></item><item><title><![CDATA[ B-树 ]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/161317945</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/161317945</guid><author>2402_82676216</author><pubDate>Tue, 26 May 2026 19:42:02 +0800</pubDate><description><![CDATA[B树是一种高效的外存数据结构，主要用于处理大规模数据存储和检索问题。它通过多叉树结构降低树高，减少磁盘I/O次数，显著提升查询效率。B树的核心特性包括：节点包含多个关键字和子节点指针，所有叶子节点位于同一层，关键字有序排列。B+树和B树是其优化版本，B+树将数据全部存储在叶子节点并通过链表连接，适合范围查询；B树通过兄弟指针减少分裂概率。这些结构广泛应用于数据库索引（如MySQL的InnoDB和MyISAM引擎），其中InnoDB采用聚集索引直接存储数据，MyISAM使用非聚集索引存储数据地址。B树系列因其]]></description><category></category></item><item><title><![CDATA[LRU Cache]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/161289940</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/161289940</guid><author>2402_82676216</author><pubDate>Thu, 21 May 2026 21:20:08 +0800</pubDate><description><![CDATA[LRU是least Recently Used的缩写，意思是最近最少使用，他是一种Cache替换算法。什么是Cache？狭义的Cache指的是位于CPU和主存之间的快速RAM，通常它不像系统主存那样使用DRAM技术，而使用昂贵但较快速的SRAM技术。广义上的Cache指的是位于速度相差较大的两种硬件之间，用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache，内存与磁盘之间也有Cache，乃至在硬盘与网络之间也有某种意义上的Cache——称为Internet临时文件夹或网络内容缓存等。]]></description><category></category></item><item><title><![CDATA[数据结构：图]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/160468650</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/160468650</guid><author>2402_82676216</author><pubDate>Thu, 21 May 2026 17:11:27 +0800</pubDate><description><![CDATA[本文系统介绍了图论的基本概念、存储结构、遍历算法以及最短路径和最小生成树算法。主要内容包括：1. 图的基本概念：定义有向图、无向图、完全图、连通图等术语，解释顶点度、路径、子图等核心概念。2. 存储结构：详细讲解邻接矩阵和邻接表两种存储方式，分析各自的优缺点，并提供完整的C++实现代码。3. 遍历算法：介绍广度优先搜索(BFS)和深度优先搜索(DFS)的实现原理和应用场景。4. 最小生成树算法：对比Kruskal和Prim算法的设计思路、实现方法和适用场景。5. 最短路径算法：分析Dijkstra、Bell]]></description><category></category></item><item><title><![CDATA[ 并查集 ]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/160027746</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/160027746</guid><author>2402_82676216</author><pubDate>Tue, 21 Apr 2026 21:03:17 +0800</pubDate><description><![CDATA[本文介绍了并查集(Union-Find)数据结构及其应用。并查集用于管理不相交集合的合并与查询操作，通过数组实现树形结构，其中负数表示根节点并存储集合大小。文章通过校招学生分组案例说明并查集的四个核心操作：查找元素所属集合、判断元素是否同属一个集合、合并两个集合以及统计集合数量。随后给出了并查集的C++模拟实现代码，包含查找根节点、合并集合和统计集合数等方法。最后通过LeetCode两道题目展示了并查集的实际应用：省份数量问题通过城市连接关系统计省份数，等式方程问题利用并查集验证方程的可满足性。]]></description><category></category></item><item><title><![CDATA[进程控制 ]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/160011872</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/160011872</guid><author>2402_82676216</author><pubDate>Fri, 17 Apr 2026 19:50:25 +0800</pubDate><description><![CDATA[在Linux中fork函数是非常重要的函数，它从已存在进程中创建一个新进程。新进程为子进程，而原进程为父进程。include<unistd.h>pid_tforkvoid返回值：⼦进程中返回0，⽗进程返回⼦进程id，出错返回-1fork之前父进程独立执行，fork之后，父子两个执行流分别执行。（注意：fork之后，谁先执行完全由调度器决定）。]]></description><category></category></item><item><title><![CDATA[进程概念 ]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/159171782</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/159171782</guid><author>2402_82676216</author><pubDate>Fri, 10 Apr 2026 10:22:19 +0800</pubDate><description><![CDATA[本文系统介绍了计算机系统中的核心概念：冯诺依曼体系结构、操作系统管理和进程机制。首先阐述了冯诺依曼体系的基本组成（输入单元、CPU、内存、输出单元）及其&quot;所有设备只能直接和内存打交道&quot;的关键原则。然后详细讲解了操作系统的管理功能，包括进程管理（通过PCB/task_struct描述和组织进程）、内存管理和文件系统。在进程部分，深入分析了进程状态（运行、阻塞、僵尸等）、优先级调度、地址空间映射（虚拟地址到物理地址的转换）以及进程创建（fork机制）等核心机制。最后探讨了环境变量的作用机制和]]></description><category></category></item><item><title><![CDATA[Linux基础开发工具]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/156561988</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/156561988</guid><author>2402_82676216</author><pubDate>Tue, 17 Mar 2026 17:28:24 +0800</pubDate><description><![CDATA[本文摘要：本文系统介绍了Linux系统下的核心开发工具链，包括软件包管理器(yum/apt)、文本编辑器(vim)、编译器(gcc/g++)、构建工具(make/Makefile)以及调试器(gdb/cgdb)的使用方法。重点讲解了vim的三种模式及高效编辑技巧，gcc的编译四阶段(预处理-编译-汇编-链接)，Makefile的自动化构建原理和进阶语法，并演示了进度条程序的实现。最后介绍了版本控制工具Git的基本操作和调试技巧，为Linux环境下的软件开发提供了全面的技术指导。]]></description><category></category></item><item><title><![CDATA[Linux的权限]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/156392319</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/156392319</guid><author>2402_82676216</author><pubDate>Mon, 29 Dec 2025 19:45:58 +0800</pubDate><description><![CDATA[Linux严格意义上来说是一个操作系统，我们称之“核心(kernel)”，但是我们一般用户不能直接使用kernel。而是通过kernel的“外壳”程序，也就是所谓的shell，来与kernel沟通。为什么不能直接使用kernel呢？从技术角度，Shell的最简单定义：命令行解释器（command Interpreter）主要包含，我们操作windows不是直接操作windows内核，而是通过图形接口，点击从而完成我们的操作。，有相同的作用，主要是对我们的指令进行解析，解析指令给Linux内核。]]></description><category></category></item><item><title><![CDATA[计算器实现]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/156339672</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/156339672</guid><author>2402_82676216</author><pubDate>Sun, 28 Dec 2025 17:28:22 +0800</pubDate><description><![CDATA[我们日常写的计算表达式都是中缀表达式，也就是运算符在中间，运算数在两边，但是直接读取无法马上进行运算因为一个计算表达式还涉及到运算符优先级文题。如：1-2*（3-4）+5中遇到 -和 * 都无法运算，因为后面还有括号优先级更高。所以其中一种思路是把中缀表达式转换成后缀表达式，将运算数放到前面，运算符放到运算数的后面，然后我们依次读取后缀表达式，遇到运算符就可以直接进行运算了。]]></description><category></category></item><item><title><![CDATA[Linux的基本指令]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/156163833</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/156163833</guid><author>2402_82676216</author><pubDate>Sat, 27 Dec 2025 18:03:55 +0800</pubDate><description><![CDATA[语法：ls [选项] [目录或文件]功能：对于目录（这里的目录就相当于文件夹），该命令列出该目录下的所有子目录与文件。对于文件，将列出文件名以及其他信息。建立一个空的文件夹也会占据磁盘空间（文件夹属性占据的空间）文件 = 内容 + 属性Linux系统中一切皆文件，键盘，显示器等也都是文件-  ：普通文件d ：目录文件c ：字符文件，键盘、显示器、终端、输入的数据具有顺序性b ：块设备文件，磁盘| ：连接文件p ：管道文件任何一个目录，即便是空目录，默认系统都会自带 . 和 .. 目录。]]></description><category></category></item><item><title><![CDATA[模拟实现反向迭代器]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/155950594</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/155950594</guid><author>2402_82676216</author><pubDate>Sat, 20 Dec 2025 17:17:22 +0800</pubDate><description><![CDATA[本文实现了一个通用的反向迭代器适配器模板ReverseIterator，通过封装正向迭代器实现反向遍历功能。关键点包括：1) 反向迭代器operator++底层调用正向迭代器的operator--；2) operator*访问当前位置前一个元素；3) rbegin()封装end()位置，rend()封装begin()位置。同时实现了list容器及其迭代器，支持正向/反向迭代、插入删除等操作。反向迭代器作为独立组件，可以与不同容器配合使用，只需传递对应正向迭代器即可生成相应的反向迭代器。]]></description><category></category></item><item><title><![CDATA[智能指针的使用及其原理]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/155600544</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/155600544</guid><author>2402_82676216</author><pubDate>Thu, 11 Dec 2025 15:53:23 +0800</pubDate><description><![CDATA[本文系统介绍了C++智能指针的原理与应用。首先通过内存泄漏案例展示了智能指针的使用场景，阐述了RAII资源管理思想及其在智能指针中的实现。重点分析了标准库中的四种智能指针：auto_ptr（已废弃）、unique_ptr（独占所有权）、shared_ptr（共享所有权）和weak_ptr（解决循环引用）。详细讲解了它们的实现原理，包括引用计数机制和删除器支持，并提供了模拟实现代码。特别探讨了shared_ptr循环引用问题及weak_ptr的解决方案。最后总结了内存泄漏的危害与检测方法，强调智能指针在资源管]]></description><category></category></item><item><title><![CDATA[C++异常]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/154522031</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/154522031</guid><author>2402_82676216</author><pubDate>Fri, 05 Dec 2025 10:49:10 +0800</pubDate><description><![CDATA[本文系统介绍了C++异常处理机制。异常处理通过抛出对象实现错误通信，允许将错误检测和处理分离。主要内容包括：1）异常概念，相比C语言错误码更全面；2）抛出和捕获机制，通过try-catch匹配处理；3）栈展开过程，从内到外查找匹配catch；4）异常继承体系，通过基类捕获派生类异常；5）异常重抛机制处理特定错误；6）异常安全问题及RAII解决方案；7）C++11的noexcept规范；8）标准库异常继承体系。文章通过多个代码示例展示了异常处理的实际应用，包括数据库、缓存、网络等模块的异常处理设计。]]></description><category></category></item><item><title><![CDATA[C++11]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/149723271</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/149723271</guid><author>2402_82676216</author><pubDate>Thu, 30 Oct 2025 19:15:14 +0800</pubDate><description><![CDATA[本文主要介绍了C++11标准引入的重要新特性，包括列表初始化、右值引用、移动语义、可变模板参数、lambda表达式等。重点阐述了右值引用如何通过移动语义解决传值返回的性能问题，以及完美转发机制保持了参数原有属性。同时详细解析了lambda表达式的语法原理及其应用场景，展示了std::function包装器和bind适配器的使用方法，并介绍了类默认成员函数的扩展规则。这些新特性显著提升了C++的性能表现和代码简洁性，为现代C++开发提供了更强大的工具支持。]]></description><category></category></item><item><title><![CDATA[算法：分治-快速排序]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/149712783</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/149712783</guid><author>2402_82676216</author><pubDate>Fri, 01 Aug 2025 18:07:56 +0800</pubDate><description><![CDATA[本文介绍了四种基于三路划分的排序与选择算法：1.颜色分类算法通过划分0、1、2三个区域实现O(n)时间复杂度排序；2.三路快速排序利用随机枢轴和区间划分实现高效排序；3.快速选择算法通过三路划分在O(n)时间内寻找第k大元素；4.库存管理问题采用类似快速选择的方法获取前k小元素。这些算法都利用了区间划分的思想，通过维护多个指针来高效处理元素分组，其中随机化枢轴选择和三路划分特性使其在处理重复元素时表现优异，平均时间复杂度为线性或准线性。]]></description><category></category></item><item><title><![CDATA[用哈希表封装Myunordered_map和Myunordered_set]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/149634824</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/149634824</guid><author>2402_82676216</author><pubDate>Sun, 27 Jul 2025 11:26:29 +0800</pubDate><description><![CDATA[本文分析了C++中set/map与unordered_set/map的区别及实现原理。在SGI-STL30版本中，unordered容器以非标准的hash_map/hash_set形式实现，基于hashtable构建。文章详细介绍了哈希表的模拟实现过程：1) 框架搭建，通过KeyOfT仿函数解决不同类型数据访问问题；2) 迭代器实现，重点解决了operator++的跨桶遍历问题；3) 针对unordered_map实现了operator[]操作；4) 处理了key不可修改的特性。通过模板参数和仿函数设计，实]]></description><category></category></item><item><title><![CDATA[哈希的使用及其模拟实现]]></title><link>https://blog.youkuaiyun.com/2402_82676216/article/details/149269525</link><guid>https://blog.youkuaiyun.com/2402_82676216/article/details/149269525</guid><author>2402_82676216</author><pubDate>Fri, 25 Jul 2025 11:18:22 +0800</pubDate><description><![CDATA[本文详细介绍了C++中unordered_map和unordered_set的实现原理及使用方法。首先分析了unordered_set的底层实现，指出其基于哈希表实现，平均时间复杂度为O(1)，与set的红黑树实现(O(logN))形成对比。然后深入探讨了哈希表的实现机制，包括哈希函数设计（除法散列法、乘法散列法、全域散列法等）和冲突解决策略（开放定址法、链地址法）。文章还提供了两种冲突处理方式的完整代码实现：开放定址法采用线性探测策略，并引入状态标识解决删除问题；链地址法通过链表连接冲突元素，支持负载因子]]></description><category></category></item></channel></rss>