- 博客(54)
- 收藏
- 关注
原创 Linux学习之高级IO
本文主要讲网络IO模型与高性能服务器实现框架。先介绍 IO 的本质和五种 IO 模型,然后重点讲解 select、poll、epoll 三种 IO 多路复用的接口、原理、优缺点和代码示例。接着深入 epoll 的 LT/ET 工作模式,说明 ET 模式必须搭配非阻塞 fd,并给出 ET 模式下基于 Reactor 的 TCP 服务器实现,包括连接管理、事件分发、读写缓冲、异常处理等。最后讨论多 Reactor、线程池等进一步优化并发的思路
2026-10-09 10:10:33
104
原创 网络学习:网络层与数据链路层知识梳理
本文系统梳理网络层与数据链路层核心知识,涵盖IP编址、子网掩码、路由、NAT/NAPT、分片、MAC 帧、ARP,并补充内网穿透、代理、DNS、ICMP等内容,帮助理解数据跨网传输的整体过程。
2026-09-10 15:24:28
125
原创 网络基础:传输层协议知识梳理
本文梳理传输层有关知识,从UDP协议出发,详细拆解了TCP的核心机制。内容涵盖:UDP 报头格式、面向数据报的特点;TCP 的确认应答、序号与确认序号、滑动窗口、流量控制、拥塞控制、超时重传与快速重传;三次握手与四次挥手的完整状态变迁;以及面向字节流带来的粘包问题与解决方案。剖析了 TCP 如何在不可靠的网络上实现可靠、高效的双向通信。
2026-09-05 10:00:00
365
原创 HTTP协议基础知识梳理、实现与简单应用
介绍了网络模块中HTTP相关的基础知识,并模拟实现HTTP和网页相连通,从而打通前后端,进一步拓展网络连通流程。
2026-08-30 08:00:00
289
原创 Linux序列与反序列化、Json的使用、对TCP面向字节流的理解与应用
介绍了序列与反序列化的原理以及Json的使用样例,另外举例说明TCP如何保证可靠传输,并结合TCP相关知识实现网络版本计算器。
2026-08-22 09:38:12
242
原创 Linux网络学习:TCP的封装与应用
介绍TCP相关的套接字接口,解析TCP的封装并用于网络实战——远程汉译英字典,另外介绍了进程守护化以及其他周边问题
2026-08-17 06:30:00
206
原创 Linux网络学习:套接字、UDP的封装与应用
介绍了网络中端口号和套接字的概念,进而引出UDP协议,解析UDP的封装并用于实战——聊天室的实现,此外介绍了相关的周边问题
2026-08-16 19:30:00
251
原创 Linux生产消费者模型、阻塞队列与环形队列、线程池
介绍操作系统中生产消费者模型,以及该模型具体实现思路和代码(阻塞队列,环形队列)。此外介绍了与该模型有一定关联的线程池的实现思路和代码。
2026-07-31 08:00:00
194
原创 Linux动静态库
本文介绍了静态库和动态库的实现原理与使用方法。静态库通过将预编译的.o文件打包成.a格式实现,使用时需指定头文件路径和库路径;动态库通过-fPIC选项编译为位置无关代码,再生成.so共享库,运行时需配置加载路径。文章详细对比了两者的差异:静态库编译时链接,代码直接嵌入可执行程序;动态库运行时加载,通过页表映射实现多进程共享代码段。特别分析了动态库地址重定位问题,解释了-fPIC生成相对偏移地址的必要性。最后通过Makefile示例演示了库的编译、安装和调用全过程,包括路径配置和环境变量设置等关键步骤。
2026-06-08 16:05:31
172
原创 Linux进程控制
本文主要探讨了Linux进程控制的四个核心环节:进程创建、退出、等待和替换。在进程创建部分,重点讲解了fork函数和写时拷贝机制;进程退出分析了正常终止与异常终止的多种方式;进程等待详细介绍了wait/waitpid函数的使用方法,包括阻塞与非阻塞模式;进程替换部分则深入解析了exec函数族的工作原理和六种不同用法。文章还通过代码示例演示了如何避免僵尸进程、获取进程状态信息,以及实现一个简单的shell程序,完整展示了进程控制的核心技术和实际应用场景。
2026-05-24 11:19:43
357
原创 C++类型转换和IO流
C++提供了四种类型转换操作符:static_cast用于相关类型转换,reinterpret_cast用于底层位模式转换,const_cast用于移除const属性,dynamic_cast用于安全的向下转型。IO流系统基于类层次结构,支持自定义类型操作。文件IO分为文本和二进制模式,stringstream则实现了字符串与数值的安全转换及对象序列化功能。这些机制增强了类型安全性,避免了C风格转换的风险,同时提供了灵活的数据处理能力。
2026-05-13 11:40:45
399
原创 Linux进程地址空间
本文介绍了虚拟内存与物理内存的关系及操作系统内存管理机制。虚拟地址空间通过页表映射到物理内存,使程序员无需关心物理布局。页表包含权限位和存在位,前者控制访问权限,后者标记数据是否加载到内存。当访问未加载数据时触发缺页中断,操作系统将数据从磁盘加载到内存。这种机制实现了进程隔离和内存保护,确保各进程独立运行。物理内存通过地址总线寻址,32位系统最大寻址4GB空间。页表允许多进程共享同一物理内存区域,提高了内存利用率。
2026-05-12 11:06:36
358
原创 C++11智能指针
摘要:本文详细介绍了C++11智能指针的应用场景及实现原理。针对传统new/delete内存管理易泄漏的问题,智能指针采用RAII机制,通过类对象生命周期自动管理资源释放。重点分析了三种智能指针:unique_ptr(禁止拷贝)、shared_ptr(引用计数)及其循环引用问题,以及weak_ptr的解决方案。最后介绍了定制删除器的实现,使智能指针能正确处理数组等特殊内存分配。通过代码示例展示了各类智能指针的具体实现和应用场景,为C++内存管理提供了安全高效的解决方案。(150字)
2026-05-10 16:21:41
454
原创 C++特殊类设计
本文介绍了三种特殊对象创建方式的设计实现:1. 只能在堆上创建对象的类:通过私有化构造函数、禁用拷贝/赋值操作,提供静态创建函数实现。2. 只能在栈上创建对象的类:私有化构造函数的同时禁用new/delete操作符。3. 单例模式的两种实现:饿汉模式(提前初始化)和懒汉模式(延迟初始化),后者通过静态指针和内部GC类实现自动释放。文章还分析了static成员的特性,指出类内定义会被视为内联函数,而类外定义更适合工程开发。这些技术通过控制构造函数的访问权限和特殊操作符的重载,实现了对对象创建方式的精确控制。
2026-05-10 15:40:34
410
原创 C++11学习
本文介绍了C++11标准引入的几个重要新特性。主要内容包括:1)统一的列表初始化语法,支持对所有类型使用{}进行初始化;2)右值引用和移动语义,通过减少拷贝提高效率,包括移动构造和移动赋值的实现;3)完美转发机制,保持参数原始属性进行传递;4)可变参数模板,支持可变数量的模板参数;5)lambda表达式,简化匿名函数的定义;6)function包装器,统一处理函数指针、仿函数和lambda表达式;7)bind绑定,支持参数重排和默认值设置。这些特性使C++语言更现代化,提高了编程效率和程序性能。
2026-04-28 12:11:29
383
原创 C++位图
在处理海量数据(如 40 亿个整数)时,传统的哈希表、set容器等等会消耗大量内存,这显然是不划算的。如果能用来表示(0不存在,1存在),就能节省大量空间,这就涉及到了所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常用于判断某个数据是否存在。我们通常使用一个int数组来实现位图。一个int有 32 个比特位,所以intbits[0]bits[1]bits[N]
2026-04-26 10:35:30
363
原创 C++哈希学习
根据前文提到的除留余数法,要得到关键码就要让传入值模容量,但并不是所有传入值都支持这样的运算,如string,同时也应当支持用户自定义哈希函数,所以这里让哈希函数作为模板参数,同时为string特别写一份根据ASCII码值生成关键码的哈希函数供用户直接使用//比较通用的哈希函数public://为什么除了string以外的多数其它类型也能用上面仿函数呢?因为size_t可以把负数、小数都换成正整数,不然找不到数组索引template<>//这里通过模板的特化对string做特别处理。
2026-04-23 10:37:53
380
原创 AVL树和红黑树学习笔记以及模拟实现
前面学习的二叉搜索树虽可缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,效率低下。因此,两位俄罗斯的数学家在发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右 子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树: 它的左右子树都是AVL树左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)
2026-03-30 11:41:16
396
原创 Linux进程(入门)个人笔记
程序是一个静态的指令集合,比如你电脑上的一个.exe文件或一段源代码。它只是在硬盘上的一堆数据。进程的官方解释:当程序被操作系统加载到内存中并开始执行时,它就变成了一个“活”的东西——进程。它拥有自己的生命周期:创建、运行、暂停、终止。计算机运行时会有多个进程,为了对进程更好地管理,按照前文讲到地管理逻辑,需要对这些进程先描述,再组织。
2026-03-15 11:12:06
435
原创 Linux环境变量个人笔记
是用来的一些。我们在编写C/C++代码的时候,在链接时虽然不知道链接的动态静态库在哪里,但照样可以链接成功,生成可执行程序,原因就是有相关环境变量。环境变量在系统中具有。
2026-03-15 10:25:58
363
原创 Linux工具(入门)笔记
vim的三种基本模式分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:1.命令模式控制屏幕光标的移动,字符、字或行的删除。2.在插入模式下才可以做文字输入。在命令模式下,shift+i 即可进入该模式。按「ESC」键可回到命令行模式。该模式是最频繁的编辑模式。3.末行模式负责文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,“” 即可进入该模式。按「ESC」键可回到命令行模式.
2026-02-23 17:22:50
702
原创 C++异常学习笔记
C语言通过返来处理错误,然而这两种方式都有不足:返回错误码是层层返回的,具体的错误区域不明确,同时错误信息也不够直观;assert断言直接终止了程序过于绝对,而且只在debug版本生效,只适用于发行前的安全保障。于是在C++新增了。
2026-02-12 15:49:02
670
原创 C++搜索二叉树笔记以及模拟实现
本文介绍了搜索二叉树的定义、结构和C++实现。搜索二叉树确保右子树节点值大于根节点,左子树节点值小于根节点,搜索效率最好为O(logn),最差为O(n)。文章详细阐述了搜索二叉树的节点结构、拷贝构造函数、析构函数的实现方法,重点讲解了插入和删除操作的递归与非递归实现,包括处理不同子节点情况的逻辑。此外还提供了中序遍历打印函数用于调试。删除操作需要特别处理具有两个子节点的情况,通常采用左子树最大节点或右子树最小节点替换被删除节点的方式。
2026-02-05 17:20:02
389
原创 Linux权限(入门)笔记
前文已经说过,目录的权限和文件的权限有所不同,在一个共享目录中,即便不是文件的拥有者也可以删除别人的文件,如何确保这个目录既是共享的,每个人创建的文件又不会被别人破坏?使用01二进制位来表示是否拥有该权限,权限如果二进制表示为101(r-x),对应八进制的5,可使用chmod 555 来为ugo用户都给上r和执行的权限。只有文件的拥有者和root才可以改变文件的权限,更改权限的权限并不包含在rwx这三个权限之中。:Read对文件而言,具有读取文件内容的权限;:execute对文件而言,具有执行文件的权限;
2026-02-01 16:27:39
553
原创 C++多态学习笔记
本文系统介绍了面向对象编程中的多态概念及其实现机制。主要内容包括:1. 多态的定义与实现条件,需通过基类指针/引用调用虚函数;2. 虚函数重写规则(三同原则)及例外情况(协变、析构函数重写);3. override和final关键字的使用;4. 虚表的存储原理与验证方法;5. 静态多态与动态多态的区别;6. 单继承和多继承下的虚表结构;7. 特殊函数(内联函数、构造函数、静态成员函数)与虚函数的关系。通过代码示例详细演示了虚表指针的存储位置和继承体系下的虚表布局,最后比较了普通函数和虚函数的调用效率差异。
2026-01-20 10:37:14
709
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅