- 博客(58)
- 收藏
- 关注
原创 back_insert_iterator-尾插迭代器类
传统迭代器只能修改已存在元素,无法向空容器追加元素。back_inserter_iterator通过绑定容器,在赋值时自动调用push_back实现尾部插入,解决拷贝到空容器的问题。其核心是重载operator=,在copy等算法中将数据逐个追加至目标容器末尾。redis.smembers("key", std::back_inserter(res))即利用此机制将结果自动存入res。若容器无push_back则编译失败。
2026-10-24 16:02:58
193
原创 Linux 中安装 Redis 5
在Linux中,先以root用户通过apt安装Redis,默认端口6379,仅限本地访问。为实现跨主机访问,需修改配置文件将绑定IP从127.0.0.1改为0.0.0.0,并关闭保护模式(protected-mode no)。完成后重启服务,使用redis-cli连接即可。操作简便,适合学习与测试环境。
2026-09-15 20:30:48
226
原创 仿muduo库实现高并发服务器-下
本文系统阐述了基于Reactor模型的高性能HTTP服务器设计与实现,核心包括:通过LoopThread与LoopThreadPool模块实现线程池管理及事件循环分发;TcpServer封装监听、连接管理与回调机制,支持主从反应堆模式;HttpRequest与HttpResponse模块解析与构造HTTP请求/响应,结合正则表达式精准提取路径、参数与头部信息;HttpContent负责分包粘包处理与完整请求解析;最终由HttpServer整合路由表(支持动态与静态资源)完成请求分发与响应生成。
2026-09-14 23:07:40
94
原创 仿muduo库实现高并发服务器-上
本文系统设计了一个高性能网络通信框架,核心模块包括:Buffer缓冲区实现高效数据读写;Socket封装套接字操作,支持TCP连接建立与收发;Channel作为事件管理器,绑定fd与回调;Poller基于epoll实现多路复用;EventLoop通过eventfd实现跨线程任务调度;TimerWheel时间轮机制高效处理定时任务;Connection管理完整连接生命周期,结合Any类实现协议上下文通用化。整体架构采用主从Reactor模型,保障高并发、低延迟与线程安全。
2026-07-11 19:43:35
283
原创 多路转接-epoll下
question接下来转到Connection模块-描述fd和对应事件的,设置 conn对应的fd 关心的事件,在listen对象初始化的时候,直接设置listensockfd关心的事件所以,这就需要TcpServer的另一个成员--epoll_ptr,引入Epoll模型,让它来做!接着在tcpserver里,添加成员,就绪事件的数组,统一管理就绪事件,然后底层通过epoll_wait来填写它们接着处理就绪的fd!接着完成connection模块和 listener模块的 recv函数。
2026-07-08 23:08:04
219
原创 多路转接-poll
注意:客户端退出,服务端对应的fd也就绪,服务端recv读到0,然后 poll不再关心这个fd上的事件,并 close fd。主体逻辑和server相同,就是接口差异。未来解决poll 的问题,
2026-06-18 21:56:46
210
原创 网络原理-5.NAT技术
所有子网中的主机,要请求的话,它的IP,都得替换成这个公网的出入口路由器IP,然后去访问 目标服务器)反向代理隐藏的是后端服务器的真实 IP:客户端只看到代理服务器的 IP,看不到后端服务器集群的地址。正向代理隐藏的是客户端的真实 IP:服务器只看到代理服务器的 IP,看不到发起请求的客户端 IP。NAT解决了IP地址不足的问题,将私有IP 转化成为公网IP,然后对外通信,上上节谈过,缓存,代理服务器可以缓存 后端服务器的响应,对于重复的请求,直接返回缓存内容。中间转发我的请求,隐藏了真实的 IP地址。
2026-06-10 23:12:54
210
原创 网络原理-4.数据链路层
d.分片的过程不一定在源主机内分片,还有可能在路上进行分片,不同的数据链路层对应的MTU的标准不同,比如在路由器的IP层,可能会再次进行分片,然后发送。c.MTU,规定从上层传到数据链路层的报文字节数不能超过1500字节,否则就要在IP网络层进行分片,上节谈过。MTU对UDP的影响:1500-20(IP首部)-20(TCP首部)=1800--MSS。MTU对UDP的影响:1500-20(IP首部)-8(UDP首部)=1472。b.MAC地址,是短期目标,根据IP进行 mac地址的选择。
2026-06-10 23:11:58
237
原创 网络原理-3.网络层&协议IP
本文摘要:文章系统梳理了IP协议的核心内容,首先阐述传输层与网络层关系,分析IP协议的核心功能、报头结构和子网划分原理,指出子网划分通过提高地址利用率缓解IPv4短缺问题(实际解决方案为NAT技术)。重点解析了公网与内网IP的区别,通过俄罗斯报文路由实例详细说明IP路由选择过程:数据包通过逐跳"与运算"匹配路由表,经多级路由器转发至目标网络。同时解释了主机与路由器的路由表协同工作机制,区分同子网直连通信和跨子网默认路由转发两种场景,并以192.168.56.3为例演示了具体路由匹配逻辑。
2026-06-10 23:11:08
431
2
原创 网络原理-2.传输层协议TCP
TCP可靠性机制摘要(148字): TCP通过确认应答、序号、超时重传和连接管理(三次握手/四次挥手)保障可靠性。其中CLOSE_WAIT状态需应用层主动关闭连接。异常处理包括进程终止自动释放连接,以及保活机制检测断连。流量控制通过16位窗口大小动态调整发送速率,避免接收方缓冲区溢出;拥塞控制则根据网络状况调节发送量。延迟应答和捎带应答提升传输效率。面向字节流特性需应用层通过定界符或长度字段解决粘包问题,确保完整请求的解析。滑动窗口机制支持并行数据传输,PSH标志位可催促上层及时读取数据。
2026-06-04 21:44:31
371
原创 应用层自定义协议
本文介绍了基于模板方法模式的Socket套接字封装实现,以及服务器守护进程化的改造过程。主要内容包括:1) 使用模板方法模式封装Socket,子类通过重写SockOrDie方法实现定制;2) 完善协议模块处理流程,包括序列化/反序列化和请求处理;3) 实现守护进程化,通过Daemon类处理信号、创建子进程、脱离终端等操作;4) 重构主程序,采用三层架构(业务层、协议层、服务层)并集成守护进程功能。日志系统被重定向到文件,确保守护进程稳定运行。最终实现了一个可后台运行的TCP服务器框架。
2026-05-19 18:31:22
211
原创 TCP--面向字节流
本文介绍了TCP服务器的多进程与多线程实现方案。首先分析了多进程版本中端口绑定失败的问题,随后提出了多线程和线程池两种优化方案。重点阐述了回调机制的设计:在TCP服务器初始化时传入回调函数,当线程处理请求时通过_func回调上层业务逻辑。具体实现中,通过绑定成员函数、对象和占位符,将std::string func(const std::string& cmd, InetAddr& client)包装为可调用对象,最终完成Execute(buffer, client)的回调执行。
2026-05-19 18:24:23
79
原创 socket-udp
摘要:文章讨论了UDP服务器的分层架构设计,网络通信由底层处理,数据业务通过回调函数交给上层。介绍了网络序列转换类InteAddr.hpp的实现,以及聊天室应用中消息广播机制。重点分析了文件描述符重定向原理,通过修改底层文件描述符指向实现终端重定向。最后提出将UDP接收的消息放入线程池,由其他线程完成广播发送的方案。全文涉及网络编程、多线程和Linux系统底层机制等技术要点。
2026-05-18 15:32:01
249
原创 进程间通信
接下来通信,使用共享内存返回的虚拟地址,当作一个字符串。继续优化,挂接这些不要让用户调用,创建内部直接封装。子进程拿到任务码后做处理--lesson23。systemV消息队列、systemV信号量。匿名管道-2-5种特性,4种通信情况。匿名管道-1-demo测试代码。看到了同一份资源,还没开始通信。systemV进程间通信方案。
2026-04-25 23:07:08
74
原创 深刻理解进程信号
摘要:CPU执行用户代码时处于用户态,执行内核代码时处于内核态。典型流程为:用户态进程触发系统调用→CPU切换到内核态执行内核代码→处理完成后恢复进程上下文→切回用户态继续执行用户代码。这种切换实现了用户程序与内核功能的交互。(99字)
2026-04-25 22:53:31
186
原创 线程同步与互斥
死锁:一组执行流中的各个执行流,互相申请彼此所占用的锁,永久等待,上面就是死锁现象。多多:还要多维护生产者之间的互斥,消费者之间的的互斥,要加锁。单单:只用维护1种关系--维护生产者和消费者之间同步与互斥。基于环形队列的单生产单消费的生产消费雏形。重入:多线程重入、信号导致重入。基于阻塞队列的生产消费模型代码。基于环形队列的生产消费模型代码。thread库封装代码。
2026-04-15 21:52:36
173
原创 深刻理解线程
越界了不一定崩溃,因为访问的可能是合法的虚拟地址,对应的物理地址和权限也合法。一段连续的虚拟地址,大概率都在同一个二级页表里,甚至同一个物理页框里,--对虚拟地址空间的申请,其实就是对物理内存的延迟申请。
2026-04-15 19:58:48
37
原创 Linux-库制作与原理
摘要:本文介绍了ELF文件生成与加载过程。首先通过自制库生成静态库和动态库,编译为目标文件后形成ELF格式。操作系统加载时通过Program Header Table设置内存页权限。静态链接涉及地址重定位,目标文件因此被称为可重定位文件。动态链接采用延迟绑定(PLT)技术,将库函数地址重定位延迟到首次调用时执行,减少初始加载开销。整个过程涵盖了从编译到执行的完整链接机制。
2026-04-01 16:54:06
157
1
原创 Linux-文件系统
本文探讨了未打开文件的存储机制,首先分析磁盘硬件特性,然后研究文件系统结构。重点阐述了文件分组原理:inode决定文件所属分组,当数据块不足时可跨组存储(在分区容量允许范围内)。同时说明了通过此机制可回溯定位根目录/的inode,并提及软硬链接的实现。研究从已打开文件转向未打开文件的存储管理机制。
2026-04-01 16:51:21
42
原创 Linux-基础IO
本文系统介绍了文件I/O操作的关键概念:从文件描述符(fd)的底层原理到上层应用,详细解析了open/close系统调用、文件描述符映射机制以及重定向的实现原理。重点讨论了shell中重定向功能的实现方式,包括标准输入/输出的临时保存与恢复机制。同时深入剖析了"一切皆文件"的设计思想,比较了系统级文件I/O与C库FILE结构体的差异,并探讨了缓冲区管理机制。最后通过glibc接口的封装示例,展示了系统调用与库函数之间的抽象层次关系。
2026-03-23 23:02:32
77
1
原创 Linux-进程2
摘要 本文探讨了Linux进程管理中的几个关键问题。首先分析了mm_struct在进程替换时的处理机制,指出其内部字段会被清空并重新初始化而非销毁。其次讨论了进程替换的本质是虚拟地址空间的替换,并介绍了exec*系列函数的使用场景。接着针对自定义shell实现中的问题,提出了处理内置命令和环境变量的方案,包括环境变量表的修改和继承机制。最后解释了字符串处理中的常见问题,如换行符处理、字符数组与指针的区别,以及strtok函数的工作原理。
2026-03-21 22:52:50
326
原创 linux-进程1
本文探讨了进程管理中的关键问题,包括虚拟地址空间、进程状态和内核链表。重点分析了内存泄漏、进程控制块(PCB)结构以及进程优先级申请机制。在进程调度方面,详细讲解了O(1)调度算法和进程切换过程。针对fork系统调用产生的写时拷贝现象,解释了父子进程通过相同虚拟地址访问不同物理地址的机制,使子进程id=0而父进程id>0的情况得以实现。最后讨论了环境变量和程序地址空间等系统级概念,完整解答了进程管理中的三个核心问题。
2026-03-20 21:49:53
161
原创 基础开发工具git,gdb
摘要:本文介绍了使用gdb和cgdb的3个调试技巧:1.区分基础命令与调试思想;2.cgdb分屏操作(Esc+上下键浏览代码);3.模式切换(输入i返回交互界面)。内容简明扼要,适合开发者快速掌握关键调试方法。
2026-03-20 21:46:22
47
原创 make/makefile(+实现进度条)
GCC编译器使用-o选项可以指定输出文件名,该选项可以灵活放置于命令行的任意位置。例如"gcc -o code code.c"与"gcc code.c -o code"效果相同,都会将code.c编译输出为code可执行文件。类似的,"-c"选项用于生成目标文件时也遵循同样的规则。GCC命令的基本格式为:gcc [选项] 源文件 [选项] [输出文件],其中-o选项可以出现在命令的任何位置。
2026-03-20 21:44:43
43
原创 yum和开发工具vim/gcc
本文介绍了vim编辑器的基本操作和GCC编译流程。在vim方面,讲解了模式切换、批量替换、注释等常用命令,以及vim配置技巧。在GCC/G++编译方面,详细说明了从预处理到链接的四个步骤:预处理生成.i文件、编译生成汇编代码、汇编生成二进制机器码、最后进行动静态库链接。文章还提及了ISO标准和链接验证等内容,为开发者提供了实用的编程工具使用指南。
2026-03-20 21:42:19
72
原创 linux权限
摘要:Linux系统中,超级用户提示符为#,普通用户为$。sudo用于临时提权,文件删除权限取决于所在目录的写权限(w),而非文件自身权限。当root在用户目录创建文件时,用户可删除该文件。要实现文件共享,可将文件存放在临时目录(temp)中供多人读写。文件能否被删除取决于目录权限设置,与文件权限无关。
2026-03-20 21:40:06
47
原创 linux基本指令与shell初步理解
本文摘要:文章介绍了Linux常用命令和操作技巧,包括目录操作(cd、mkdir、pwd)、文件管理(touch、rm、cp、mv)、文本处理(cat、tac、echo)、查找命令(find、grep)以及压缩工具(zip、tar)。同时讲解了路径概念(绝对/相对路径)、文件权限、命令本质(可执行文件)和实用技巧(Tab补全、历史命令查看)。还涉及系统信息查看(date、cal)、计算器(bc)、关机命令(shutdown、reboot)等基础知识,并解释了Shell与Bash的区别。适合Linux初学者快
2026-03-10 22:43:10
89
4
原创 用红黑树封装map和set
本文详细介绍了红黑树的实现及其在STL容器set和map中的应用。主要内容包括:1)红黑树节点的模板化设计,使其能同时支持set(存储key)和map(存储pair);2)通过仿函数KeyOfT统一提取节点中的key值,解决不同类型数据比较问题;3)迭代器实现,包括operator++和operator--的中序遍历逻辑;4)红黑树插入操作的完整实现,包括颜色调整和旋转处理;5)set和map的封装,通过模板参数控制key的不可修改性;6)map中operator[]的实现原理。最后给出了完整的红黑树、se
2025-11-24 23:54:12
947
10
原创 《红黑树的平衡密码:不追求完美,却赢了性能^~^》
红黑树是一种自平衡二叉搜索树,通过颜色标记和旋转操作维持平衡。其核心规则包括:节点为红或黑、根节点为黑、无连续红节点、各路径黑节点数相同。插入时通过变色和旋转(单旋或双旋)调整结构,保持平衡。查找效率为O(logN),验证平衡需检查颜色规则和路径黑节点数。红黑树通过限制最长路径不超过最短路径2倍,避免退化为单支树,确保高效操作。
2025-10-19 20:45:59
653
15
原创 《二叉树“防塌”指南:AVL 树如何用旋转 “稳住” 平衡?》
AVL树是一种平衡二叉搜索树,通过控制左右子树高度差不超过1来保证高效查找(O(logN))。本文详细介绍了AVL树的结构、插入操作及四种旋转方式(右单旋、左单旋、左右双旋和右左双旋),并提供了检查平衡性、计算高度、节点数量和中序遍历等功能的实现代码。与普通BST相比,AVL树能有效避免退化成单支树的情况,确保操作效率。文中还包含了平衡因子更新规则和异常处理机制,为理解和实现AVL树提供了完整指导。
2025-10-19 20:45:56
1033
13
原创 C++:set和map详解版
本文主要介绍了C++ STL中的关联式容器set和map,重点讲解了它们的基本特性、迭代器、构造方法以及增删查操作。set是基于红黑树实现的平衡二叉搜索树,具有自动排序和去重功能,支持高效查找、插入和删除操作。map则是key-value结构,同样基于红黑树实现,支持通过key快速查找和修改value。文章还详细介绍了它们的插入方法、删除操作、查找功能以及特殊函数如lower_bound和upper_bound的使用。此外,还对比了set和multiset的区别,以及map的特殊操作符[]的实现原理。最后通
2025-10-11 14:06:46
1073
17
原创 C++--二叉搜索树
本文介绍了二叉搜索树(BST)的基本概念和实现方法。BST是一种左子树节点值均小于根节点,右子树节点值均大于根节点的数据结构,查找效率在O(log2N)到O(N)之间。文章详细讲解了BST的节点结构、插入(insert)、中序遍历(InOrder)、查找(Find)和删除(Erase)等操作的具体实现,并分析了各种情况下的处理逻辑。此外,还介绍了BST在key/value应用场景中的扩展使用,如通讯录、停车场系统等,展示了如何通过key索引value。文章强调BST不允许修改key值以避免破坏结构,并提供了
2025-10-06 20:39:32
996
12
原创 C++多态详解
文章摘要:本文深入探讨了C++多态的实现原理与关键概念。首先分析了多态的实现条件,包括基类指针/引用调用虚函数和虚函数重写的要求。重点讨论了虚函数重写中的特殊问题:协变(允许返回派生类指针)和析构函数重写(需统一处理函数名)。介绍了override和final关键字的作用,对比了重载、重写和隐藏的区别。解析了抽象类和纯虚函数的概念,通过形状类示例说明其应用。详细阐述了多态底层原理,包括虚函数表指针(_vfptr)和虚函数表的结构,展示了父子类虚函数表的差异。最后说明虚函数表存储于常量区。
2025-10-01 17:26:18
813
3
原创 《当子类遇见父类:一场 C++ 继承的奇妙旅程》
本文系统介绍了C++继承机制,包括访问限定符、继承方式、派生类成员函数等核心概念。重点分析了赋值兼容转换、作用域隐藏规则、派生类默认成员函数的实现原理。通过实例讲解了如何实现不可继承类、友元关系继承、静态成员处理等特殊场景。深入探讨了单继承、多继承和菱形继承问题,提出了虚继承解决方案。最后对比了继承(is-a)和组合(has-a)的适用场景,指出组合能更好保持封装性。全文通过代码示例演示了继承体系中的各种特性,为理解C++面向对象编程提供了全面指导。
2025-09-25 21:04:08
922
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅