<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[2302_80964245的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/2302_80964245</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; 2302_80964245]]></copyright><item><title><![CDATA[Linux从入门到精通——库的制作和原理]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/155951754</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/155951754</guid><author>2302_80964245</author><pubDate>Mon, 04 May 2026 11:25:47 +0800</pubDate><description><![CDATA[在CPU刚诞生的时候，就如同一个刚出生的婴儿一样。婴儿的父母会教婴儿学习做一些简单的事情，如站起来或者坐下等。这个教的过程就是向CPU中写入指令集的过程，等到CPU学会了这些基本指令后，它才会掌握更高级的一些指令，所以CPU能识别二进制的根本原因是CPU的指令集是二进制的。我们写的程序一般不能在安卓手机上面运行，因为一般的计算机用的都是英特尔的CPU，而安卓手机用的是ARM的CPU,虽然都是CPU，都认识二进制，但是底层的指令集不同。所以软件不具备可移植性的根本：硬件上叫指令集，软件上叫系统调用。]]></description><category></category></item><item><title><![CDATA[Linux从入门到精通——Ext系列文件系统(无敌版)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/155856411</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/155856411</guid><author>2302_80964245</author><pubDate>Tue, 14 Apr 2026 14:08:04 +0800</pubDate><description><![CDATA[下面几幅图展现了文件系统的整体框架和结构。]]></description><category></category></item><item><title><![CDATA[Linux从入门到精通——基础IO(简洁清晰版)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/155677236</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/155677236</guid><author>2302_80964245</author><pubDate>Tue, 24 Mar 2026 09:54:19 +0800</pubDate><description><![CDATA[① 文件 =(元数据)，对文件的操作就是对文件的属性和对文件的内容进行操作这两类操作。②  要访问一个文件，首先必须打开这个文件，打开这个文件是由对应的程序运行起来变成进程之后动态打开的；而打开这个文件之前，必须先找到这个文件。我们访问任何文件，必须通过路径，要么用户自己提供路径，要么使用进程的，进程会动态维持自己当前的工作路径 cwd。③ 打开一个文件，本质是把这个文件加载到内存中；对文件的操作，本质是进程通过CPU访问内存中的文件。磁盘是外设（既是输出设备也是输⼊设备）。]]></description><category></category></item><item><title><![CDATA[Linux从入门到精通——进程控制篇(精华版)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/155499220</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/155499220</guid><author>2302_80964245</author><pubDate>Sun, 01 Mar 2026 15:57:45 +0800</pubDate><description><![CDATA[通常，父子进程的代码是共享的，当父子进程都不再写入时，数据也是共享的。当任意一方试图写入，便会发生写时拷贝。]]></description><category></category></item><item><title><![CDATA[Linux从入门到精通——进程篇(深入浅出-＞万字超详解)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/155168850</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/155168850</guid><author>2302_80964245</author><pubDate>Sun, 08 Feb 2026 09:15:25 +0800</pubDate><description><![CDATA[① 在数据层面上，CPU不会和外设(输入输出)直接交互，CPU读写数据，只会和内存打交道。② 一个程序要运行，必须先加载到内存中。因为体系结构规定：CPU不和外设直接交互，而是和内存直接交互。③ 我们这里所说的数据输入输出是站在内存的角度来看的，也是站在内存中的程序的角度来看的；我们以上所说的效率本质都是拷贝效率，计算机的数据流动过程本质就是拷贝过程，计算机的效率本质也是设备的拷贝效率。④ 在体系结构中，不同硬件设备之间的数据交互本质就是进行拷贝数据的过程。]]></description><category></category></item><item><title><![CDATA[深度剖析C++_智能指针]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/155166495</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/155166495</guid><author>2302_80964245</author><pubDate>Mon, 02 Feb 2026 09:40:26 +0800</pubDate><description><![CDATA[weak_ptr支持使用expired()接口检查指向的资源是否过期，use_count也可获取shared_ptr的引用计数，weak_ptr想访问资源时，可以调用lock返回⼀个管理资源的shared_ptr对象，如果资源已经被释放，返回的shared_ptr是⼀个空对象，如果资源没有释放，则通过返回的shared_ptr访问资源是安全的。shared_ptr是C++11设计出来的智能指针，它的名字翻译出来是：共享的指针，它的特点是⽀持拷贝构造，也支持移动构造。它的底层是通过引用计数的方式实现的。]]></description><category></category></item><item><title><![CDATA[Effective C++_异常(解剖挖掘)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/155002996</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/155002996</guid><author>2302_80964245</author><pubDate>Sat, 27 Dec 2025 10:59:26 +0800</pubDate><description><![CDATA[异常处理机制允许我们程序中的独立开发的模块能够在运行时就把程序出现的问题进行及时通信并做出相应的解决处理，异常使得我们能够将问题的检测与解决问题的过程分开，程序的⼀部分模块负责检测问题，然后解决问题的任务则传递给程序的另⼀模块，检测环节无须知道问题的处理模块的所有相关问题细节。另外，在析构函数中，如果抛出异常也要谨慎处理，比如在析构函数中原本要释放十个我们动态申请的资源，但是代码在执行时，释放到第五个资源时就抛出了异常，那么这里也需要捕获处理，否则后面的五个资源就没有释放，就导致资源泄漏了。]]></description><category></category></item><item><title><![CDATA[C++11(学习C++11,看这一篇就够了)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/154916073</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/154916073</guid><author>2302_80964245</author><pubDate>Sun, 21 Dec 2025 10:34:05 +0800</pubDate><description><![CDATA[之前我们学习的大多都是C++中的STL容器，而我们今天要学的则是关于C++的版本内容——C++11。不管对于现在的你是小白还是大神，对于整个C++板块来说，C++11都是我们所必须学习的内容！！！C++11 是 C++ 的第⼆个主要版本，并且是从 C++98 以来的最重要的版本更新。它对于C++引⼊了⼤量更改,增加了很多新的特性，并改进了对 C++ 程序员可用的抽象类型。在它最终由 ISO 在 2011 年 8 ⽉ 12 日采纳前，⼈们曾称它为“C++0x”，因为它曾被期待在 2010 年之前发布。从C++]]></description><category></category></item><item><title><![CDATA[C++_unordered_map_set的封装(精简详略版)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/154793824</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/154793824</guid><author>2302_80964245</author><pubDate>Sun, 14 Dec 2025 10:57:04 +0800</pubDate><description><![CDATA[但是SGI-STL30实现了哈希表，只是容器的名字是hash_map和hash_set，他是作为非标准的容器出现的，非标准是指非C++标准规定必须实现的，源代码在hash_map/hash_set/stl_hash_map/stl_hash_set/stl_hashtable.h中，hash_map和hash_set的实现结构框架核心部分截取出来如下。则结点的指针指向下⼀个结点即可。③ 其次跟map和set相比而言unordered_map和unordered_set的模拟实现的类结构更复杂⼀点，但是。]]></description><category></category></item><item><title><![CDATA[Linux从入门到精通——基础开发工具(破译解析版)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/154069721</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/154069721</guid><author>2302_80964245</author><pubDate>Sun, 07 Dec 2025 10:03:19 +0800</pubDate><description><![CDATA[gcc是只能用来编译C语言的编译器；g++是既能编译C语言也能编译C++的编译器。]]></description><category></category></item><item><title><![CDATA[深入理解哈希表(万能之法)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/153933588</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/153933588</guid><author>2302_80964245</author><pubDate>Sat, 29 Nov 2025 10:36:31 +0800</pubDate><description><![CDATA[当key是string/Date等类型时，key不能直接取模，那么我们需要给HashTable增加⼀个仿函数，这个仿函数支持把key转换成⼀个可以取模的整数，如果key可以转换为整数并且不容易冲突，那么这个仿函数就⽤默认参数即可，如果这个Key不能转换为整形，我们就需要自己实现⼀个仿函数传给这个参数，实现这个仿函数的要求就是尽量key的每个值都参与到计算中，让不同的key转换出的整型值不同。, M − 1}，因为负载因子小于1，则最多探测M-1次，就⼀定能找到⼀个存储key的位置。这种方法叫做全域散列法。]]></description><category></category></item><item><title><![CDATA[C++_unordered_map_set(无懈可击版)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/152606912</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/152606912</guid><author>2302_80964245</author><pubDate>Sun, 23 Nov 2025 10:11:04 +0800</pubDate><description><![CDATA[① unordered_set的声明中，unordered_set字面上就是一个无序集，是存储唯一元素且无特定顺序的容器，允许基于其值快速检索单个元素，Key就是unordered_set底层关键字的类型。② unordered_set默认要求Key支持转换为整形，如果不支持或者想按自己的需求走可以自行实现⽀持将Key转成整形的仿函数传给第⼆个模板参数。③ unordered_set默认要求Key⽀持比较相等，如果不⽀持或者想按自己的需求⾛可以自行实现⽀持。]]></description><category></category></item><item><title><![CDATA[红黑树进阶封装实现C++_map_set(源码剖析)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/152561875</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/152561875</guid><author>2302_80964245</author><pubDate>Sat, 15 Nov 2025 10:12:04 +0800</pubDate><description><![CDATA[如下图：当it指向50时，++it时，50是40的右孩子，40是30的右孩子，30是18的右孩子，18是根节点，没有⽗亲，所以没有找到孩⼦是⽗亲左孩子的那个祖先，这时⽗亲为空了，那我们就把it中的结点指针置为nullptr，我们⽤nullptr去充当end()。⑦ 如果当前结点是⽗亲的右孩子，当前当前结点所在的⼦树访问完了，当前结点所在⽗亲的⼦树也访问完了，那么下⼀个要访问的节点需要继续往根的祖先中去查找，直到找到孩⼦是⽗亲的左孩子的那个祖先就是中序遍历要访问的下⼀个结点。]]></description><category></category></item><item><title><![CDATA[Linux从入门到精通——基础指令篇(耐人寻味)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/151261934</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/151261934</guid><author>2302_80964245</author><pubDate>Sun, 28 Sep 2025 21:51:54 +0800</pubDate><description><![CDATA[这里有一个问题，是不是只要用户拥有目录的W权限，那么他就能删除这个目录中的文件，那如果用户1在一个对所有其他用户都具有W权限的目录下创建一个对其他用户没有任何权限的文件，那么其他用户对这个不能读，不能写，那他就把这个文件删除了，这合理吗？我们平常所说的Linux严格意义上说的是⼀个操作系统，我们称之为“Linux内核“ ，但我们⼀般用户，不能直接和内核交互。：粘滞位t是给other用户提供的一种权限管理级别，在指定的t目录下，每个用户在删除文件时，只能删除自己创建的文件，这种场景一般用于文件共享的场合！]]></description><category></category></item><item><title><![CDATA[五分钟理解C++_红黑树(从原理到实现)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/151935763</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/151935763</guid><author>2302_80964245</author><pubDate>Sun, 28 Sep 2025 12:53:17 +0800</pubDate><description><![CDATA[红⿊树通过4条规则的颜⾊约束来控制最长路径和最短路径，间接的实现了近似平衡，它们的效率都是同⼀量级，但是相对⽽⾔，插⼊相同数量的结点，红⿊树的旋转次数是更少的。这是需要我们进⼀步分析，由于c是红⾊，p为红色，那么g必为⿊色，所以这三个节点的颜⾊都固定了，关键的变化是看u的情况，接下来就让我们来分析u的变化。当于保持g所在⼦树的⿊⾊结点的数量不变，同时解决了c和p连续红⾊结点的问题，需要继续往上更新是因为，g是红⾊，如果g的⽗亲还是红⾊，那么就还需要继续处理；分析：p必须变⿊，才能解决连续红⾊结点的问题。]]></description><category></category></item><item><title><![CDATA[C++_AVL树(深度学习)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/151898146</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/151898146</guid><author>2302_80964245</author><pubDate>Sat, 27 Sep 2025 14:09:25 +0800</pubDate><description><![CDATA[③ 旋转核⼼步骤：因为10 < b⼦树所有结点的值 < 15，将b变成10的右⼦树，10变成15的左⼦树，15变成这棵树新的根，符合搜索树的规则，控制了平衡，同时这棵树的⾼度恢复到了插⼊之前的h+2，符合旋转原则。① 更新后parent的平衡因⼦等于0，则此次更新中parent的平衡因⼦的变化为-1->0 或者 1->0，说明更新前parent⼦树是⼀边⾼⼀边低的状态，新增的结点插⼊在低的那边，这种情况插⼊后parent所在的⼦树⾼度不变，不会影响parent的⽗亲结点的平衡因⼦，更新结束。]]></description><category></category></item><item><title><![CDATA[C++_map_set(深度讲解)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/151157056</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/151157056</guid><author>2302_80964245</author><pubDate>Tue, 23 Sep 2025 18:07:17 +0800</pubDate><description><![CDATA[1. set 的声明① set的声明中，T就是set底层关键字key的类型。② set默认要求T⽀持小于比较，如果不⽀持或者不满足自己的需求可以自行实现仿函数传给第⼆个模板参数。③ set底层存储数据的内存是从空间配置器申请的，如果有特殊需求可以自己实现内存池，传给第三个模板参数。④ set底层是⽤红⿊树实现，增删查的效率是O(logN) ，迭代器遍历是二叉搜索树的中序，所以是有序的。2set 的构造、修改和遍历1//set//set会按中序排序(默认升序)，还会去重。]]></description><category></category></item><item><title><![CDATA[C++_二叉搜索树(深度剖析)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/150617720</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/150617720</guid><author>2302_80964245</author><pubDate>Tue, 23 Sep 2025 09:41:41 +0800</pubDate><description><![CDATA[场景2：商场⽆⼈值班⻋库，⼊⼝进场时扫描⻋牌，记录⻋牌和⼊场时间，出⼝离场时，扫描⻋牌，查找⼊场时间，⽤当前时间-⼊场时间计算出停⻋时⻓，再乘以单价计算出停⻋费⽤，缴费后抬杆，⻋辆离场，删除车牌号和对应入场时间。如果⽀持插⼊相等的值，则插⼊值跟当前结点相等的值可以往右子树⾛，也可以往左子树⾛，找到空位置后，再插⼊新结点。场景1：⼩区⽆⼈值班的⻋库，只有买了小区车库的⻋位的业主⻋才能进⼩区，那么物业会把买了⻋位的业主的⻋牌号录⼊后台系统，⻋辆进⼊时扫描⻋牌号在不在系统中，在则允许进入小区，否则禁止进入小区。]]></description><category></category></item><item><title><![CDATA[C++之多态(从0到1的突破)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/150528588</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/150528588</guid><author>2302_80964245</author><pubDate>Wed, 20 Aug 2025 22:09:25 +0800</pubDate><description><![CDATA[1.多态的构成条件多态是⼀个继承关系下的类对象，去调⽤同⼀函数，产⽣了不同的⾏为。实现多态还有两个必须重要条件① 必须是基类的指针或者引⽤调⽤虚函数。② 被调⽤的函数必须是虚函数，并且完成了虚函数重写/覆盖。原因：要实现多态，第⼀必须是基类的指针或引⽤，因为只有基类的指针或引⽤才能既指向基类对象⼜指向派⽣类对象；第⼆派⽣类必须对基类的虚函数完成重写/覆盖，重写或者覆盖了，基类和派⽣类之间才能有不同的函数，多态的不同形态效果才能达到。2. 虚函数。]]></description><category></category></item><item><title><![CDATA[C++之继承(万字详解)]]></title><link>https://blog.youkuaiyun.com/2302_80964245/article/details/150468237</link><guid>https://blog.youkuaiyun.com/2302_80964245/article/details/150468237</guid><author>2302_80964245</author><pubDate>Wed, 20 Aug 2025 14:17:24 +0800</pubDate><description><![CDATA[public:{}{}protected:string _name = "张三";通过上面代码我们可以看到没有继承之前我们设计了两个类Student和Teacher，Student和Teacher都有姓名/地址/电话/年龄等成员变量，都有identity⾝份认证的成员函数，设计到两个类⾥⾯就是冗余的。]]></description><category></category></item></channel></rss>