自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入理解计算机系统书籍(2)

继续第二章剩下的内容。

2026-03-30 15:20:52 450

原创 深入理解计算机系统书籍 (1)

主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成的。从逻辑上来说,存储 器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),这些地址是从零开始 的。一般来说,组成程序的每条机器指令都由不同数量的字节构成。与C程序变量相对应的数据项的大小是根据类型变化的。比如,在运行Linux的x86-64机器上,short类型的数据需要2个字节,int和。

2026-03-29 23:35:36 403

原创 Cmake (4)

CTest 是CMake的⼀个集成测试框架,⽤于⾃动化执⾏项⽬测试。⽀持多种测试类型(如单元测试、性 能测试),并能⽣成详细的测试报告。<name><command><arg>像这个地方我的command就是main当然test也有失败的可能性比如我们把代码改成assert(add(2, 3) == 1);

2026-03-20 08:30:00 217

原创 Protobuf (1)

PackFrom():把一个 Protobuf 对象的所有数据 “打包” 复制到另一个对象中,覆盖目标对象数据;:获取对应复杂类型字段的可修改指针(不存在则创建),用于修改字段内部的子值;核心区分:基础类型字段用set_xxx(),单个复杂类型字段用,数组字段用add_xxx()。

2026-03-19 14:26:01 423

原创 Protobuf (2)

你的 V1 只定义了 id(字段号 1)、name(字段号 2),而 V2 新增了 age(字段号 3)。当 V2 序列化数据(包含 id=1001、name = 张三、age=25)后,会把「字段号 + 字段类型 + 字段值」一起编码成二进制(比如 age=25 会编码成「字段号 3 + 类型 int32 + 值 25」的二进制字节)。能识别字段号 1(id)、字段号 2(name),会正常解析并存储;不认识字段号 3(age),不会丢弃这个字段。

2026-03-19 14:24:49 388

原创 Cmake(3)

CMake 不支持在 if 条件中直接写 a+b 这种表达式,此外 Cmake里面也不支持 >= <= == 这样的比较符号用的是 GREATER LESS EQUAL 分别对应 大于 小于 等于GREATER_EQUAL LESS_EQUAL分别对应 大于等于 小于等于此外CMake 不支持用 = 直接赋值的写法 一般都是是用set此外Cmake 中也不使用&& ||!而是使用 AND OR NOT这段是 CMake if() 条件判断的规则,分三类情况:1. 常量判断。

2026-03-17 07:00:00 394

原创 json 入门

JSON 并不是编程语言,而是一种(全称 JavaScript Object Notation),可以把它理解成 “数据的通用翻译官”。

2026-03-17 07:00:00 57

原创 Cmake (2)

CACHE 是。

2026-03-16 13:23:13 922

原创 Cmake (1)

构建树的根目录也就是我执行cmake所在的目录但是要注意 比如当我们在a目录下执行cmake ..此时构建树的根目录是在a目录而不是a目录的上级目录..的意思是去a目录的上级目录找到要执行的CMakeLists.txt文件但是实际Cmake项目的时候 我们会有多个CMakeLists.txt文件因此也会有多个构建树比如向上图我有两个CMakeLists.txt的文件当我在build文件夹执行cmake之后会在build文件夹生成my_project/CMakeLists.txt的中间文件。

2026-03-16 13:22:48 388

原创 Linux 消息队列

这个结构体在// 标准的 msqid_ds 结构体定义// 1. 权限和所有者信息(可通过 IPC_SET 修改)// 核心权限结构体(最重要)// 2. 队列状态信息(只读,内核维护)// 队列中当前的消息数量// 队列允许的最大字节数(默认通常 16384)// 最后发送消息的进程 PID// 最后接收消息的进程 PID// 3. 时间戳信息(只读,内核维护)// 最后调用 msgsnd() 的时间// 最后调用 msgrcv() 的时间。

2026-02-26 02:58:55 887

原创 Linux 信号量

在使用 System V 信号量的任何函数前,必须包含以下头文件:System V 信号量主要由三个函数操作:(创建 / 获取)、(操作)、(控制)。用于创建一个新的信号量集,或获取一个已存在的信号量集的标识符。函数原型:参数说明:返回值:这是最核心的函数,用于改变信号量的值(加、减或等待为 0)。函数原型:参数说明:关键数据结构 :你需要填充这个结构体来告诉内核要做什么操作: : 操作第几个信号量,单个信号量时填 。 : (P 操作):申请资源。如果信号量值 >= n,则减

2026-02-25 23:48:16 527

原创 Linux mmap

length size_t 要解除映射的内存长度,必须和 mmap 时指定的 length 完全一致 若长度不匹配,可能导致部分映射未释放,或解除不属于当前映射的内存(触发段错误)mmap 是 Linux/Unix 系统的核心系统调用,作用是将文件 / 设备映射到进程的虚拟地址空间,让进程可以像操作内存一样直接操作文件,避免传统 read/write 的数据拷贝开销。MAP_PRIVATE:私有映射 —— 进程对映射区的修改是 “私有” 的(写时复制),不会同步到底层文件,其他进。

2026-02-25 00:15:00 463

原创 Linux 网络(8)

HTTP Cookie 是服务器发送到浏览器并本地保存的小块数据,后续向同一服务器发起请求时会自动携带,用于识别请求是否来自同一浏览器(如保持登录状态、记录用户偏好)。HTTP Session 是服务器用于跟踪用户交互期间状态的机制,弥补了 HTTP 协议 “无状态”(每个请求独立)的缺陷,让服务器能记住用户信息。我们写入的是测试数据,如果写入的是用户的私密数据呢?重要的是,除了被盗取,还有就是用户私密数据也就泄漏了。是存储在客户端的,因此存在被篡改或窃取的风险。保存,非常容易被人盗取,更。

2026-02-24 04:14:24 960 1

原创 Linux 网络 (7)

自旋锁是一种多线程同步机制,用于保护共享资源。线程获取锁失败时,会 ** 循环自旋(不断检查锁状态)** 而非进入休眠,以此减少线程切换开销,适用于短时间锁竞争;但不合理使用会造成 CPU 资源浪费。

2026-02-24 01:30:38 1702

原创 Linux select 代码

但实际返回值 > 0 表示 “就绪的 FD 总数”,可能是 1 个(新连接),也可能是多个(多个客户端同时发数据),,未就绪的 FD 会被清空,所以下一次循环必须重新构建集合。的 FD 不会被监听,会导致客户端连接无响应。遍历判断每个 FD 是否就绪是正确的处理方式。,不同值对应不同场景,你的代码中用。常见错误原因(返回 - 1 时):你的代码中每次循环都重新。的核心要求 —— 如果。

2026-02-23 00:15:00 1021

原创 Linux poll代码

参数说明pollfdpollfd-10>0pollfd 结构体pollfd4. 常用事件常量(重点)POLLINPOLLOUTPOLLERRPOLLHUPPOLLNVAL返回值:成功,返回有事件发生的文件描述符数量;:超时,没有任何事件发生;:失败,设置errno(比如EINTR表示被信号中断)。poll 使用步骤(通用流程)初始化pollfd数组,设置要监听的 fd 和关注的events;调用poll()函数等待事件;遍历pollfd数组,检查revents字段,处理对应事件;

2026-02-23 00:15:00 776

原创 Linux 网络(6)

只收到分片 1(偏移 0,MF=1)、分片 2(偏移 10,MF=1)。→ 依据:所有收到的分片 MF 位都是 1(表示还有后续),且始终没收到「同 ID 里片偏移最大、且 MF=0」的分片,等待超时后判定缺失最后部分。MTU = 网络。

2026-02-22 00:23:13 888

原创 Linux 网络(5)

数据链路层中的一个区间,在以太网中,指从源 MAC 地址到目的 MAC 地址之间的帧传输区间。

2026-02-22 00:17:08 1389

原创 Linux 网络 (3)

CA 用私钥给服务端公钥做 “公证签名”,客户端用 CA 公钥验证签名确认公钥合法,再用这个公钥加密对称密钥,实现安全通信。所以就有了方案5。

2026-02-21 05:07:08 967

原创 Linux 网络 (4)

ACK 就是接收方给发送方的 “回执单”,但 TCP 只认按序到达的数据 —— 哪怕后面的数据先到,只要前面的丢了,就会一直要求重传前面的,直到按序补齐,确保数据完整有序。

2026-02-21 05:06:46 976

原创 Linux http代码

【代码】Linux http。

2026-02-19 04:52:29 859

原创 Linux 序列化和反序列化代码

【代码】Linux 序列化和反序列化代码。

2026-02-19 04:52:03 152

原创 Linux TCP代码

【代码】linux TCP代码。

2026-02-18 21:19:24 241

原创 Linux UDP代码

【代码】Linux UDP。

2026-02-18 21:08:50 142

原创 Linux 网络(1)

OSI 七层模型是国际标准化组织(ISO)制定的网络通信分层架构参考标准,核心是将网络通信的复杂流程拆分为 7 个独立层级,每层负责特定功能,上下层之间通过接口协作,实现跨系统的标准化通信。

2026-02-17 08:00:00 2012 1

原创 Linux 网络(2)

我们前面学过了传输层协议有UDP和TCPUDP就像我们平时互相发消息的时候一次只能发一条消息 但是你不需要对方同意可以找直接发送但是TCP就像打电话我要先给你打电话 你接了 我们才能通话但是只要联通了 我们可以聊很久TCP是面向于字节流的 也就是TCP每次传输的是多少多少字节为单位的它不在乎多少字节是一条消息UDP是面向数据报的 它每次处理一条或者几条消息。

2026-02-17 08:00:00 1523

原创 Python(1)

python中的变量声明和C++中的不一样python中生命变量可以不用显示变化 并且变量类型在执行过程中是动态的同时python也是可以定义类型的 但是和C++不一样python用的是 变量名:类型python中有type函数可以查看变量类型Python 中的变量的类型,不需要在定义变量的时候显式声明.而只是依靠初始化语句,根据初始化的值的类型来进行确定的.在 Python, int 能够表示的数据范围,是 "无穷" 的.

2026-02-16 08:00:00 690

原创 Python (2)

listpython的列表 用起来和C++的vector很相似 是数组只不过C++的vector每个元素是一样的但是python列表每个元素可以是不一样的但是和vector不同的是列表是可以执行切片操作Python 切片遵循「左闭右开」(左包含,右不包含)extend方法,其实是没有返回值的!!拿一个变量来接收一个没有返回值的方法的返回值得到的旧是NoneNone类似于C++中的nullptr 和null。

2026-02-16 08:00:00 756

原创 C++ 线程 (4)

a: 如果 t2 是在 a 状况,t1 又抢到锁,但是 flag 为 true, wait 阻塞 (同时unlock解锁)b、t1 慢一步,但是也分到时间片开始执行了,t1 lock 阻塞 t2wait 时,unlock 会唤醒 t1 获取锁。b、如果 t2 是在 b 状况,t1 解锁,唤醒 t2, t2 获取到锁,flag 是 true, t2 不会阻塞。假设 t1 先运行,t1 先抢到 lock, flag 是 false, t1 先打印。场景 1: t1 先启动,t2 待定。

2025-12-20 00:07:32 251

原创 C++ 线程(2)

作用:最基础的互斥量,保证同一时间只有一个线程能获取锁。

2025-12-19 08:00:00 667

原创 C++ 线程(1)

C++ 有专门的线程库 它的好处是 我不管在windows Linux unix 还是mac上都可以跑本质上通过条件编译形成的。

2025-12-19 03:45:00 1689

原创 Linux 线程(2)

要了解并发问题我们可以通过一段代码来学习为什么这个代码最后num会到-10???(预期最多到-1)我明明写的是num<0的时候循环就不会接着执行减减呀为什么num会到-10???我们来看这个代码num--;这个代码转换成汇编主要是三件事1.先将内存中的 num 读入到 cpu 的寄存器中2.CPU 内部进行 -- 操作3.将计算结果写回内存但是多线程的时候会有问题首先我们要了解一件事我们线程使用cpu计算的时候 有一个时间片时间片到了cpu就会切换其他线程。

2025-12-18 23:26:08 1009

原创 C++ 线程 (3)

作用:阻塞线程,直到被唤醒(或谓词满足)。参数:lock:std::unique_lock<std::mutex> 的引用(调用时需已持有锁);pred:可调用对象(函数 /lambda 等),返回bool(表示等待的条件)。返回值:无(void)。

2025-12-18 23:25:27 546

原创 Linux 信号 (2)

每个信号都有两个标志位分别表示阻塞(block)和未决(pending),还有一个函数指针表示处理动作(handler)。1.信号 产生时,内核在进程控制块中设置该信号的pending标志为1,直到信号递达才设为0。简单点说 信号产生pening 为1 信号到达后 pending设置为0等下一个信号产生pending 在信号发出到递达之间为1 其他时候都为0SIGHUP信号未阻塞也未产生过当它递达时执行默认处理动作。SIGINT信号产生过但正在被阻塞所以暂时不能递达。

2025-12-14 21:36:35 825

原创 Linux 线程(1)

线程是进程内的最小执行单元,一个进程可以包含多个线程,所有线程共享进程的资源(内存、文件句柄等),但有自己独立的执行栈和程序计数器。结合进程的核心区别可以这样理解:进程是资源分配的基本单位系统给进程分配内存、CPU 时间片等资源,进程像是一个 “独立的工作车间”。线程是 CPU 调度的基本单位线程是车间里的 “工人”,一个车间可以有多个工人,他们共享车间的工具和材料(进程资源),但各自干不同的活,且切换工人的开销远小于切换车间。

2025-12-14 21:36:00 1060

原创 Linux 信号(1)

比如我这个前台指令 当我休眠的时候我依然可以接收终端信号 但是不会立即执行比如 ll ls -l pwd当sleep结束玩后立马执行但是当我把sleep10& 后台执行的时候 我的终端可以接着输入其他指令而不会休眠10秒前台进程只能有一个 但是后台进程可以有多个。

2025-12-10 21:27:59 780

原创 Linux 进程通信

pipe 函数是 进程间通信(IPC) 和 数据流处理 中的核心工具,其核心思想是创建一个 “管道”,实现 单向数据流传递—— 数据从 “写端” 输入,从 “读端” 输出,类似现实中的管道(一端进水、一端出水)。不同编程环境中,pipe 的实现和用途略有差异,但核心逻辑一致。

2025-12-10 08:00:00 971

原创 Linux 日志文件

【代码】Linux 日志文件。

2025-12-05 15:18:39 154

原创 Linux 进程池代码

【代码】Linux 进程池代码。

2025-12-05 15:16:43 165

原创 Linux 命名管带代码

【代码】Linux 命名管带代码。

2025-12-04 23:08:51 145

算法领域蓄水池抽样算法解析:数据流随机采样方法及其概率计算详解

内容概要:蓄水池抽样算法是一种用于从大量数据流中随机抽取固定数量样本的有效算法。该算法的核心思想是:当遇到第i个元素时,以一定的概率决定是否用该元素替换当前样本集中的某个元素。具体来说,在遍历数据流的过程中,前 samp 个元素直接进入样本集,之后对于每个新元素,以 samp/i 的概率替换样本集中已有元素。随着 i 的增加,元素被保留的概率逐渐减小,但所有元素最终出现在样本集中的概率相等。; 适合人群:对算法设计与分析有一定了解,尤其是对概率算法感兴趣的计算机科学专业学生或工程师。; 使用场景及目标:①需要从海量数据中随机抽取固定数量样本的场景;②确保每个元素被选中的概率相同,以保证样本的代表性和随机性;③适用于数据流处理、大数据分析等领域。; 阅读建议:由于蓄水池抽样算法涉及概率计算和动态更新样本集,建议读者在理解基本概念的基础上,结合实例进行模拟练习,加深对算法机制的理解。同时,可以研究不同变种的蓄水池抽样算法,以应对更复杂的实际问题。

2025-05-29

.菱形继承(虚继承)可视化

.菱形继承(虚继承)可视化

2025-05-29

【数据结构与算法】红黑树变色与旋转

内容概要:本文档简要介绍了红黑树(RB_Tree)中叔节点(uncle)的不同情况及其对树结构操作的影响。红黑树是一种自平衡二叉查找树,它通过特定的着色规则(节点颜色为红色或黑色)来确保树的高度接近对数级别,从而保证插入、删除和查找操作的时间复杂度。文档指出当叔节点为红色时,它会影响树的重新着色和旋转策略;当叔节点为黑色并且是空值(NULL),这里的NULL仅用于验证节点是否属于红黑树,而不实际参与到旋转操作中;当叔节点为黑色且不是空值时,则需要根据具体情况进行不同的调整操作以维持红黑树性质。; 适合人群:计算机科学专业学生、数据结构与算法爱好者以及从事软件开发并对高效数据存储结构有兴趣的人士。; 使用场景及目标:①理解红黑树中不同情况下叔节点的角色和作用;②掌握红黑树维护平衡性的基本方法,如着色和旋转规则;③能够正确处理NULL节点在红黑树算法实现中的特殊意义。; 阅读建议:在学习过程中应结合具体的例子进行理解,可以尝试手动模拟红黑树的插入、删除操作,注意观察不同情况下叔节点的变化及其对整个树结构的影响。同时,对于NULL节点的理解不要局限于一般意义上的空指针,而要认识到它在红黑树算法中的独特含义。

2025-05-29

.AVLTree可视化

.AVLTree可视化

2025-05-29

.单继承和多继承可视化

.单继承和多继承可视化

2025-05-29

.菱形继承(非虚继承)

.菱形继承(非虚继承)

2025-05-29

空空如也

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

TA关注的人

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