自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 【Linux 系统篇(十五)】进程 (三) :进程状态深度详解

要弄明白“正在运行的进程”到底指什么,我们必须先看内核源码如何定义进程状态。在 Linux 内核中,进程有时也被称为“任务”(task),其状态定义在等头文件中。/**/这个状态数组实际上是一个“位图”(bitmap),不同状态对应不同的位。R状态的值是0,其他状态分别是,它们都是 2 的幂次方,意味着每个状态占用一个独立的二进制位。内核可以用简单的位测试来判断一个进程是否处于某些状态的组合。我们日常使用ps命令看到的进程状态字符,就是内核根据这个数组映射出来的。进程的 PCB(

2026-08-13 14:52:01 424 8

原创 【Linux 系统篇(十四)】进程 (二) :PCB、task_struct、fork系统调用

进程就是正在运行的程序,或者说是“程序的执行实例”。这个说法很直观,但不够精确。资源分配的基本单位:操作系统会把 CPU 时间、内存、I/O 设备等资源分配给进程。调度的基本单位:CPU 到底去运行哪一个进程,是按照进程为单位来切换的。用更现代一点的视角来看,进程可以拆成两部分:进程 = 内核为该进程维护的数据结构(PCB) + 进程自己的代码和数据这里的数据结构在 Linux 中就是,我们马上会详细讲它。代码和数据则是指:可执行文件里的机器指令,以及程序运行时用到的全局变量、堆、栈等。

2026-08-09 15:32:46 618 22

原创 【Linux 系统篇(十三)】进程 (一) :冯诺依曼体系结构、操作系统

任何一台完整的计算机系统里,都包含一套最基本的程序集合,它叫做操作系统(Operating System,OS)。内核(Kernel):操作系统的核心,直接掌管硬件,负责进程管理、内存管理、文件系统、设备驱动、网络协议栈等关键模块。内核工作在最高特权级,可以执行任何指令。外壳程序与工具集:比如命令行解释器(shell)、图形界面、各种基础函数库等。它们不是内核,但为用户和程序员提供了与内核交互的便捷途径。我们常用的 Linux、Windows、macOS,最本质的区别就体现在内核的设计与实现上。

2026-08-04 17:07:53 978 17

原创 【Linux 系统篇(十二)】基础开发工具(七) —— 调试器 gdb/cgdb使用

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-08-03 17:05:12 606 16

原创 【Linux 系统篇(十一)】基础开发工具(六) —— 版本控制器 Git

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-08-02 11:06:55 441 12

原创 【Linux 系统篇(十)】基础开发工具(五) —— 第一个系统程序 - 进度条

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-07-29 15:47:53 798 11

原创 【Linux 系统篇(九)】基础开发工具(四) —— 自动化构建 make/Makefile

Makefile 中可以用变量名=值来定义变量,引用时用$(变量名)或${变量名}。例如:这样修改编译器或输出文件名时,只改变量定义即可。今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-07-27 13:02:29 884 8

原创 【Linux 系统篇(八)】基础开发工具(三) —— 编译器 GCC/G++ 完全指南

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-07-25 13:57:49 923 11

原创 【Linux 系统篇(七)】基础开发工具(二) —— vim编辑器详解

替换模式:按Shift + r(即大写R)进入,输入的字符会覆盖光标位置的原有内容,而不是插入。适合修正小段文字。可视模式:按v进入字符选择,按V进入行选择,按Ctrl + v进入列块选择(矩形区域)。选定后可以批量删除、复制、缩进等。命令模式常用指令速记类别命令含义移动hjkl左 下 上 右单词wbe下一词首、上一词首、词尾行内0绝对行首、行首文字、行尾文件ggGnG文件头、文件尾、第 n 行翻页向前/后页,向前/后半页插入iaoIAO光标前/后/下行/行首/行尾/上行插入删除xX。

2026-07-23 19:46:10 1655 19

原创 【Linux 系统篇(六)】基础开发工具(一) —— 软件安装完全指南

如果你准备自己组装一台电脑。这时你需要买来 CPU、主板、内存、硬盘等各种零件,对着说明书一步步安装——这就是 Linux 下源码编译安装软件的原始方式:下载程序的源代码,然后执行配置、编译、安装等步骤,最终得到可执行程序。这种方式虽然灵活,但对使用者要求很高。为了让安装软件变得简单,一些热心的社区维护者和大神们,提前把常用的软件编译好,并且按照一定的规范打包成一个“压缩包”,这个压缩包不仅包含编译好的程序文件,还记录了软件的版本、依赖关系、安装路径等信息。这样一个封装好的整体,就叫做软件包。

2026-07-22 14:22:03 1026 14

原创 【Linux 系统篇(五)】权限详解(二)

大多数 Linux 发行版中,root 的默认 umask 是0022,而普通用户的默认 umask 是0002。区别就在于 owner(文件拥有者)的那个位上:普通用户 umask 的 owner 部分是 0,因此不会屏蔽自己的任何权限。但对 group 和 other 来说,依然屏蔽了写权限。root umask 0022 -> 文件 644,目录 755普通用户 umask 0002 ->文件 664,目录 775今天的内容到这里就结束了,希望你能有所收获~

2026-07-21 16:54:14 620 7

原创 【Linux 系统篇(四)】权限详解(一)

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-07-19 19:08:03 462 12

原创 【Linux 系统篇(三)】入门基础指令详解(三)

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-07-18 18:07:08 640 6

原创 【Linux 系统篇(二)】入门基础指令详解(二)

编号名称含义默认指向0标准输入程序的输入数据来源键盘1标准输出程序正常输出的目的地终端屏幕2标准错误程序错误信息的输出地终端屏幕也就是说,当你在程序里printf打印内容时,这些内容其实是写入了文件描述符 1;报错信息则写入文件描述符 2。而“重定向”就是改变这些数据流的方向,让输出不显示在屏幕上,而是存到文件里。今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-07-17 15:50:43 733 7

原创 【Linux 系统篇(一)】入门基础指令详解(一)

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-07-16 11:52:25 767 12

原创 【C++11篇(六)】智能指针保姆级讲解!

智能指针默认用delete释放资源。但如果你管理的不是单个newnew[]分配的数组fopen打开的文件其他需要特殊释放的资源(如 socket、锁等)直接交给默认删除器会导致崩溃(例如对new[]调用delete而非delete[]这时就需要自定义删除器。内存泄漏是指程序中已动态分配的内存,由于丢失了指向它的所有指针,再也没有机会释放。比如我们最开始的例子,忘记delete或在异常时跳过了delete。对于短期运行。

2026-07-11 20:25:05 744 19

原创 【C++11篇(五)】异常处理完全指南

exception今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-07-09 17:32:04 650 13

原创 【C++11篇(四)】新的类功能、lambda 与包装器详解

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-07-08 10:31:12 760 10

原创 【C++11篇(三)】可变参数模版详解

让函数模板和类模板可以接受任意数量、任意类型的参数。以前我们只能为每种参数个数写一个重载,现在一个模板就能搞定。这里Args就是一个模板参数包,可以代表 0 个或多个模板类型参数;而args是函数参数包,对应着 0 个或多个函数参数。和普通模板参数不一样,参数包前面有省略号...。表示Args是一组类型的集合(可以没有,也可以有很多)。则是一组值的集合。今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-07-06 20:04:03 524 9

原创 【C++11篇(二)】右值引用、移动语义保姆级讲解!

左值能取到地址、有名字、有持久状态的表达式。比如定义的变量、解引用的指针、数组的元素等等。左值可以出现在赋值号左边,也可以出现在右边。// p 是左值int b = 1;// b 是左值// c 是 const 左值(不能修改,但可以取地址)*p = 10;// *p 是左值s[0] = 'x';// s[0] 是左值// 都可以取地址左值的英文是 lvalue,传统上认为是 left value;现代 C++ 更倾向于解释为(有存储位置的值)。可以取地址。右值。

2026-07-04 16:40:45 585 14

原创 【C++11篇(一)】发展历程、列表初始化详解

为了让讲解更加清晰,我们先把需要用到的Dateclass Datepublic:private:int _year;int _month;int _day;这个类很简单:一个三参数构造函数(每个参数都有默认值),一个拷贝构造函数,并且它们都会在调用时输出信息,方便我们追踪构造过程。这行代码是如何工作的?编译器看到,会尝试用这三个值去构造一个Date对象。先被用来构造一个Date类型的临时对象,也就是调用构造函数。这个临时对象再作为参数去拷贝构造d1,即调用。

2026-06-22 07:40:56 773 18

原创 【C++ STL篇(十五)】哈希表封装 unordered_map 和 unordered_set

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-06-18 13:52:27 1326 18

原创 【C++ STL篇(十四)】哈希表实现:开放定址法与链地址法

这体现了 C++ 模版的灵活性——只要提供一个能将 Key 转为整数的仿函数,任何类型都能作为哈希表的 Key。今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-06-02 17:41:19 1895 46

原创 【C++ STL篇(十三)】无序关联容器 unordered_set / unordered_map解析

因为之前已经详细讲解过 map和set 所以本文对一些重复度较高的部分就没有过多赘述,有需要的小伙伴可以看看博主往期的文章。꜀(˘꒳˘ ꜀)【C++ STL篇(八)】set容器——零基础入门与核心用法精讲【C++ STL篇(九)】map容器——零基础入门与核心用法精讲【C++ STL篇(十二)】红黑树の影分身:一棵树如何同时化身 map 和 set(万字拆解+源码)今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-05-29 17:46:48 2132 38

原创 【C++ STL篇(十二)】红黑树の影分身:一棵树如何同时化身 map 和 set(万字拆解+源码)

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-05-26 16:19:43 1341 31

原创 【C++ STL篇(十一)】深入浅出红黑树:从原理到实现,一篇搞定

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-05-23 18:16:40 1410 30

原创 【C++ STL篇(十)】深入理解 AVL 树:代码实现、旋转图解与平衡因子详解

在聊 AVL 树之前,我们先回顾一下普通的二叉搜索树(BST)。二叉搜索树规定:对于任意一个节点,其左子树所有节点的值都比它小,右子树所有节点的值都比它大。这个特性使得查找一个值的时间复杂度在理想情况下是O(log N)。但二叉搜索树有一个致命的缺陷:如果插入的数据本身就是有序的,比如依次插入,那么这棵树会退化成一根“链表”。此时查找效率骤降为O(N),完全丧失了树形结构的优势!AVL 树正是为了解决二叉搜索树退化为链表的问题而诞生的。它在二叉搜索树的基础上增加了一个“平衡”规则,强制树保持“高度平衡。

2026-05-21 16:46:21 1224 21

原创 【C++ STL篇(九)】map容器——零基础入门与核心用法精讲

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-05-18 11:59:55 1094 20

原创 【C++ STL篇(八)】set容器——零基础入门与核心用法精讲

今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?

2026-05-15 17:18:03 1050 28

原创 【C++ 二叉搜索树】 一文吃透二叉搜索树:原理、增删与代码实现

二叉搜索树(Binary Search Tree,BST),也叫二叉排序树,是一种特殊的二叉树。它要么是空树,要么必须满足以下所有如果左子树不为空,那么左子树上所有节点的值都小于根节点的值。如果右子树不为空,那么右子树上所有节点的值都大于根节点的值。它的左右子树本身也必须是二叉搜索树。任何一个节点,左边全比我小,右边全比我大。有些 二叉搜索树不支持插入重复值(如 C++ 的 set / map),有些支持(如 multiset / multimap)。本文代码选择的策略是不支持插入相等值。

2026-05-13 07:42:13 1386 19

原创 【C++ 多态】虚函数 · 虚表 · 重写,一篇彻底弄明白!

多态”这个词,字面上就是“多种形态现实中这种例子很多:同样是“买票”这件事,普通人买是全价,学生可能打五折,军人则享受优先服务。同样是“动物叫”,猫发出“喵喵”,狗发出“汪汪”。不同对象对同一个消息给出不同的响应,这就是多态。编译时多态(静态多态):在编译阶段就确定调用哪个函数。典型代表是函数重载和函数模板。你传一个int,编译器匹配f(int);传一个double,匹配f(double)。这个过程在编译时就已经搞定了。运行时多态(动态多态):直到程序运行时,才根据实际指向的对象来决定调用哪个函数。

2026-05-11 07:38:00 708 14

原创 【C++ 继承】万字拆解:从入门到设计哲学,彻底搞懂每一个坑

继承是面向对象程序设计中实现代码复用的最重要的手段。它不是在函数层面复用(比如写一个通用函数到处调用),而是在类的设计层面进行复用。我们可以在保持原有类特性的基础上,通过继承来扩展新类,增加新的成员变量和成员函数。新产生的类叫做派生类,也叫子类;被继承的类叫做基类,也叫父类。这种叫法源于翻译习惯,我们后面会混用这些称呼。class 派生类名 : 继承方式 基类名 {// 派生类新增的成员 };

2026-05-08 18:47:27 1574 18

原创 【C++ 模版进阶】一文吃透非类型模板参数、模版的特化、模版的分离编译!

typename T或class TT代表一个类型。T* _a;int _top;// ...但在某些场景下,我们希望在编译期就确定一些数值,比如数组的大小, 此时就可以使用非类型模板参数,它传递的是一个常量值,而不是类型。看下面的代码 (用整数常量作为栈的大小)template<size_t N> // N 是一个非类型模板参数private:int _a[N];int _top;int main()// N = 10,_a 是 int[10]

2026-04-30 19:38:51 656 24

原创 【C++ STL篇(七)】一篇带你搞定 stack/queue/deque/priority_queue

仿函数,或者叫函数对象,是指任何一个可以像函数一样被调用的对象。class Lesspublic:public:仿函数通过成员变量维护内部状态,实现有状态(保留了之前的调用信息)的可调用对象,且多个仿函数实例可以各自拥有独立状态,互不干扰。它可以被编译器内联,还可以作为模板参数传递。今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。

2026-04-28 13:57:11 850 23

原创 【C++ STL篇(六)】啃完这篇,彻底拿捏 list 底层原理!

class listpublic:// 通过不同的模板实参生成两种迭代器private:// 指向哨兵节点// 维护链表长度的计数器哨兵节点(也叫头节点)是带头双向循环链表的标志。它是一个真实存在的节点,不存储有效数据(其_data用默认值填充),它的_next指向第一个有效节点,_prev指向最后一个有效节点。空链表时,和都指向自己。今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。

2026-04-24 20:41:24 1141 24

原创 【C++ STL 篇(五)】手撕vector:从零开始,手把手带你造轮子!

对于vectorpublic:我们还需要提供begin()和end()的const和非const操作是否重新分配内存失效的迭代器push_back若 size==capacity若扩容,所有迭代器失效;否则仅 end() 失效pop_back否被删除元素的迭代器和 end() 失效insert若 size==capacity若扩容,所有迭代器失效;否则插入点及之后失效erase否被删除元素及之后所有迭代器失效reserve若 n>capacity若扩容,所有迭代器失效。

2026-04-20 17:35:53 977 19

原创 【C++ STL篇(四)】一文拿捏vector常用接口!

今天的内容到这里就结束了,希望你能有所收获~代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。

2026-04-18 17:26:24 809 10

原创 【C++ STL篇(三)】从零实现一个string 类——手把手教你造轮子

/ 必须在 cpp 文件中定义静态成员变量需要在类外单独定义,否则链接时会报"未定义引用"错误。这里赋值为 -1 是因为size_t是无符号类型,-1 转换后就是最大的size_t值。今天的内容到这里就结束了,希望你能有所收获~代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。

2026-04-15 17:31:09 1066 14

原创 【C++ STL篇(二)】C++ STL string万字剖析(下篇)新手也能看懂!

返回字符串最后一个字符的引用。字符串不能为空。对空字符串调用back()是未定义行为。s.back()等价于或(但无边界检查)。int main()cout << "最后一个字符:" << s.back() << endl;// 'o'// 修改最后一个字符// "Hellp"return 0;移除字符串的最后一个字符,将size()减少 1。字符串不能为空,否则行为未定义。O(1),不会重新分配内存。// "hello"查找str中任意字符在字符串中最后一次出现的位置。

2026-04-13 18:32:51 714 15

原创 【C++ STL篇(一)】耗时3天整理!C++ STL string万字剖析(上篇)新手也能看懂!

STL= 标准模板库,是C++自带的、帮你搞定“常用数据结构和算法”的一套工具包。你不用自己写链表、不用自己写排序算法,STL已经帮你写好了,而且写得又快又稳。୧(´▽`★)୭因为编译器只推导第一个变量的类型,后面的变量都得用这个类型。// 正确,都是 int// 错误!c 是 int,d 推导出 double,冲突接口功能简述是否改变 size()是否改变 capacity()是否改变内容size()length()获取当前字符数否否否max_size()获取理论上最大容量否否。

2026-04-12 13:38:30 778 7

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除