- 博客(34)
- 收藏
- 关注
原创 高并发服务器数据库连接池设计详解
本文详细解析了MySQL C API中的关键函数和连接池实现。MySQL C API提供了原生C/C++操作MySQL的接口,包括mysql_init(初始化连接句柄)、mysql_real_connect(建立连接)、mysql_close(关闭连接)等核心函数。 重点介绍了SqlConnPool连接池的设计与实现,它通过复用数据库连接解决高并发下的性能问题。连接池采用单例模式管理,使用信号量和互斥锁保证线程安全,提供GetConn和FreeConn方法获取/释放连接。还设计了SqlConnRAII类,利
2026-06-14 18:51:19
314
5
原创 C++ 正则表达式入门详解
正则表达式是一种用于字符串模式匹配的编程工具,主流编程语言均提供支持。它通过元字符和字面字符的组合定义匹配规则,支持字符集合([abc]、\d等)、重复匹配(*、+、?等)、捕获组((dog))、锚点(^、$)等核心语法。C++中使用regex头文件处理正则,提供regex_match(完全匹配)、regex_search(部分匹配)和regex_replace(文本替换)等操作,支持通过smatch提取捕获组内容。正则表达式广泛应用于格式校验、文本提取和替换等场景,其贪婪/惰性匹配模式和零宽度断言(如?=
2026-06-13 19:25:17
247
5
原创 C++ 高性能网络缓冲区 Buffer 源码解析
本文介绍了一个自动增长的缓冲区Buffer类,主要用于网络编程中的数据存储和传输。该缓冲区具有以下核心特性: 采用vector<char>作为底层存储,读写指针分离设计,支持高效读写操作 自动扩容机制,无需手动管理内存,保证线程安全 支持多种数据类型的追加操作,包括字符串、二进制数据和缓冲区 智能空间管理策略,优先复用内存,必要时才扩容 使用readv系统调用实现高效的文件描述符读取 Buffer类通过分层设计提供简洁易用的接口,内部采用自动扩容和内存复用机制确保高性能,是网络编程中处理数据缓冲
2026-06-11 08:40:35
381
5
原创 高并发服务器必备:现代 C++ 线程池设计
本文详细介绍了C++线程池的实现,核心要点包括:1. 使用共享指针管理线程池内部数据结构,确保资源安全;2. 通过互斥锁和条件变量实现线程同步;3. 构造函数创建指定数量的工作线程,采用任务队列机制;4. 析构函数实现线程安全关闭;5. 使用完美转发技术高效添加任务。线程池支持任务队列、线程同步、安全关闭等功能,通过右值引用和移动语义优化性能,禁止拷贝构造但允许移动操作,适用于需要高效并发处理的场景。
2026-06-05 15:20:39
232
1
原创 高并发服务器必备:小根堆定时器从设计到实现全流程
本文介绍了Linux服务器中高性能小根堆定时器的实现方法。相比升序链表定时器,小根堆将添加定时器的时间复杂度从O(n)优化到O(logn),显著提升了高并发场景下的性能。文章详细讲解了小根堆定时器的核心架构、核心函数实现(包括上滤、下滤、扩容等操作)以及与服务器的集成方式。通过懒删除和双向绑定等优化手段,在保证安全性的同时实现了高效的超时管理。该方案是中小型服务器的理想选择,代码完整可运行,可直接应用于实际项目开发。
2026-06-03 20:10:56
347
7
原创 高并发服务器必备:升序链表定时器从设计到实现全流程
本文详细介绍了Linux高并发服务器中基于升序链表的定时器实现方法。首先设计了定时器核心架构,包括双向链表的数据结构、函数指针回调机制和双向绑定设计。其次讲解了服务器集成定时器的完整流程,重点阐述了信号处理与统一事件源机制,通过管道将异步信号转为安全的I/O事件。最后提供了完整的可运行代码,实现了服务器自动清理15秒无数据交互的闲置客户端连接功能。该方案通过alarm定时触发SIGALRM信号,利用epoll事件循环与定时器联动,有效管理服务器资源,适合学习Linux网络编程和服务器超时连接管理的开发者参考
2026-06-02 23:26:01
679
4
原创 高性能服务器程序框架详解(包括Reactor,有限状态机等)
摘要:本文系统介绍了服务器事件处理模式,重点分析了Reactor和Proactor两种核心模式。Reactor采用同步I/O,主线程监听事件后由工作线程处理;Proactor使用异步I/O,主线程与内核完成I/O操作后工作线程处理业务。文章还探讨了半同步/半异步模式及其变体,以及高效的线程管理方式(如主线程仅处理监听socket,工作线程管理连接socket)。最后介绍了有限状态机在HTTP协议解析中的应用,通过主从状态机协作实现请求的高效解析。各类模式在性能、复杂度、适用场景等方面各具特点,需根据具体需求
2026-05-31 19:05:39
581
原创 Socket 网络编程实战教程
本文摘要: 文章系统介绍了Socket编程的核心概念与技术细节。首先讲解字节序(大端/小端)及其检测方法,以及主机与网络字节序的转换函数。其次详细阐述IPv4/IPv6专用socket地址结构体及其通用化方法,并提供IP地址字符串与整数的互转函数。重点解析Socket API的核心操作:创建socket(domain/type/protocol参数)、命名绑定(bind)、监听(listen)、接收连接(accept)及连接发起(connect),并对比close与shutdown的差异。随后深入TCP数据
2026-05-30 20:29:04
1158
3
原创 TCP 三次握手 / 四次挥手详解
本文系统解析了TCP协议的三大状态阶段:连接建立(三次握手)、数据传输和连接释放(四次挥手)。在连接建立阶段,详细说明了LISTEN、SYN_SENT、SYN_RCVD和ESTABLISHED状态的含义及转换条件;数据传输阶段重点分析ESTABLISHED状态特性;连接释放阶段则区分主动/被动关闭方的状态流转,特别是TIME_WAIT状态的2MSL等待机制及其必要性(确保可靠终止连接和避免旧报文干扰)。文章还通过HTTP请求场景完整展示了TCP状态流转过程,并针对CLOSE_WAIT和TIME_WAIT异常
2026-05-29 19:36:22
531
7
原创 C++ 模板入门:从基础到特化全解析
摘要: C++模板包括函数模板和类模板,用于实现通用编程。函数模板通过template<typename T>定义,可自动推断或显式指定类型参数,支持隐式/显式实例化和特化(template<>)。类模板类似,成员函数需在外部定义时注明模板参数(如T Vector3<T>::getMax()),支持全特化或部分特化。模板参数可为类型或非类型(如整型常量),且支持默认值。当模板与重载函数冲突时,完全匹配优先调用重载函数。标准库中的vector等容器也基于类模板实现。
2026-05-28 19:36:08
378
4
原创 网络 IO 核心(同步/异步)概念笔记
摘要:网络IO操作分为数据准备和数据读写两个阶段。recv函数默认阻塞读取数据,非阻塞模式下会立即返回状态值(-1表示异常,0表示连接关闭,>0表示成功读取)。同步IO需要应用主动完成数据拷贝,而异步IO由内核处理并通过信号通知应用。epoll多路复用本质仍属同步IO。业务层面同步需等待结果,异步则通过回调处理。阻塞/非阻塞描述IO状态,同步/异步区分处理方式。真正的异步IO需调用aio_read等专用API,常规非阻塞模式仍属同步范畴。
2026-05-25 20:09:12
550
2
原创 Spdlog 进阶:日志基本控制、日志格式控制、异步记录器
本文介绍了日志系统的等级控制与格式配置方法。日志等级分为TRACE(技术实现细节)、DEBUG(调试信息)、INFO(业务关键节点)、WARN(异常但不影响业务)、ERROR(业务错误)和CRITICAL(系统崩溃风险)六个级别,采用两级控制机制(记录器和槽)。格式控制支持自定义模式匹配,包括时间、级别、记录器名称等元素。日志记录分为同步和异步两种模式:同步模式保证日志完整性但可能阻塞业务线程,异步模式通过线程池处理日志任务,提高性能但存在日志丢失风险。文章还提供了缓冲区刷新、溢出策略配置等实用技巧
2026-05-24 21:07:42
722
5
原创 Spdlog 入门:日志记录器与日志槽基础详解
spdlog是一个高性能、仅头文件的C++日志库,具有以下核心特性:1)支持多线程/单线程日志记录器;2)提供多种输出槽(sink),包括控制台(带颜色/无颜色)、文件(单一/回滚/按日分割)及Windows系统事件日志;3)支持一个记录器挂接多个输出槽,实现日志多路分发;4)通过智能指针管理资源,支持动态添加/清除输出槽。使用时需注意:所有sink必须用shared_ptr创建,Windows平台需特殊配置才能支持中文日志。典型应用场景包括分离标准输出与错误日志、业务日志分类管理等。
2026-05-21 23:30:25
619
原创 6. SGI STL 内存池原理与源码移植详解+测试
SGISTL内存池采用经典的双层设计架构:一级配置器直接调用malloc/free处理大块内存(>128字节),二级配置器通过自由链表管理小块内存(≤128字节)。内存池按8字节为基数划分16种规格(8-128字节),通过自由链表数组实现高效内存分配与回收。关键技术包括:1) 联合体_Obj实现零开销内存复用;2) 内存对齐算法保证规格匹配;3) 多线程安全机制;4) 内存耗尽时的应急处理。该设计显著减少系统调用开销,有效避免内存碎片,成为现代内存池的典范实现。测试验证了其支持高频内存操作
2026-05-20 19:38:29
1169
3
原创 5.SGI STL 二级空间配置器 _S_chunk_alloc核心函数解析
本文深入解析STL二级空间配置器的核心函数_S_chunk_alloc,该函数负责从内存池或系统堆中分配内存块。函数通过计算总需求字节数,根据内存池剩余空间情况采取三种处理策略:足够分配时直接返回内存;部分满足时调整分配数量;完全不足时向系统申请新内存并处理碎片。文章详细演示了首次分配流程和四种典型场景,包括内存充足、部分满足、单块分配和系统内存耗尽等情况,并介绍了应急处理机制。该设计通过批量申请和自由链表管理,有效减少系统调用次数,提升内存分配效率。
2026-05-18 20:53:50
750
原创 4.SGI STL 二级空间配置器 allocate 与_S_refill 源码解析
本文深入解析了SGISTL二级空间配置器的核心源码,重点剖析了allocate内存分配函数和_S_refill内存池填充函数的实现机制。allocate函数采用双策略分配:大内存(>128B)直接调用一级配置器,小内存通过自由链表复用。_S_refill函数负责在自由链表为空时,批量申请20个内存块(实际可能更少),首块返回用户,剩余块构建链表供后续复用。关键设计包括:8字节对齐、指针类型转换实现精准偏移、RAII锁机制保证线程安全。这种设计有效减少了内存碎片和系统调用,通过链表头尾操作实现O(1)时
2026-05-17 20:17:45
615
原创 3.SGI STL 二级配置器核心辅助函数详解
摘要:SGI二级配置器通过两个核心函数管理小内存分配。_S_round_up函数使用位运算将任意字节数向上对齐到8的倍数(如1-8字节对齐为8),确保内存规整。_S_freelist_index函数计算对齐后内存块在自由链表中的下标(如8字节对应下标0),实现快速定位。这两个函数协同工作,以8字节为最小单位划分128字节内的内存规格,构成了高效的小内存分配机制,体现了STL底层设计的精妙性。
2026-05-13 21:40:59
539
原创 2.SGI STL 内存池 空间配置器重要成员解析
本文深入解析了SGISTL二级空间配置器的核心设计原理。文章首先指出服务器开发中海量小对象分配释放的性能瓶颈,并揭示STL容器默认使用内存池的底层机制。重点剖析了二级空间配置器的关键设计:通过8字节对齐、16条自由链表管理≤128字节的小对象;采用union联合体实现零内存开销的空闲节点复用;使用静态变量记录内存池全局状态;通过volatile关键字保证多线程安全。相比一级配置器直接调用malloc/free,二级配置器通过内存池预分配和自由链表复用,有效避免了系统调用开销和内存碎片问题
2026-05-12 13:12:33
483
原创 1.SGI STL vector 内存管理与空间配置器解析
摘要:SGISTL中的vector容器通过自定义空间配置器(Allocator)实现高效内存管理。Allocator将内存分配/释放与对象构造/析构分离,采用二级配置器设计:一级直接封装malloc/free,二级基于内存池优化小块内存分配。vector的push_back/pop_back操作体现了这种分离设计:push_back使用placement new在预分配内存上构造对象,pop_back仅析构对象而不释放内存。这种设计避免了频繁系统调用和内存碎片,是STL高效性能的关键,也是理解内存池和RAI
2026-05-12 12:36:02
529
原创 Source Insight 4.0 使用简易教程
SourceInsight 4.0安装使用指南:提供网盘下载链接(提取码hwx7),包含详细安装说明。主要功能包括:1)新建工程时建议为每个项目创建独立目录;2)通过AddTree批量导入源码并Sync同步;3)利用右侧面板进行文件导航和全局搜索,左侧面板查看代码结构;4)支持自定义快捷键和文件类型解析。操作完成后可通过Project菜单关闭工程。该工具特别适合阅读开源代码,实时同步编辑内容到源文件,并提供强大的代码导航和检索功能。
2026-05-11 21:48:52
421
原创 经典排序算法总结(包括快速排序,堆排序)
本文总结了九种经典排序算法的核心思路、代码实现和特性分析。主要包括:直接插入排序、冒泡排序(优化版)、简单选择排序、希尔排序、快速排序、堆排序、归并排序、计数排序和基数排序。每种算法从时间复杂度、空间复杂度、稳定性和初始序列相关性等方面进行对比,并给出典型应用场景(如力扣215题可用快速选择或堆排序解决)。文章特别强调开发中常用算法(如TopK问题、逆序对统计)的实现要点,要求掌握快速排序、堆排序和归并排序的手写能力,理解不同算法的时间复杂度差异及适用场景。
2026-04-27 18:30:34
739
原创 软件测试核心知识点梳理(包括黑盒测试,白盒测试,抽卡,通行证测试用例等)
本文系统介绍了软件测试中的黑盒与白盒测试方法、测试用例设计、测试报告撰写等核心内容。黑盒测试关注外部功能,白盒测试验证内部逻辑,二者相辅相成。详细讲解了登录、抽卡、通行证等典型功能的测试用例设计要点,包括边界值、异常场景、性能安全等测试维度。同时阐述了测试流程规范,强调从需求分析到回归验证的全流程质量保障。文章还对比了游戏测试与传统软件测试的差异,突出了游戏在用户体验、网络同步等方面的特殊测试要求。通过丰富的案例,展现了如何系统化地进行功能验证与缺陷管理。
2026-04-24 10:55:51
918
原创 Linux GDB 调试实战:Core Dump 与多线程
本文详细介绍了Linux环境下使用CoreDump和GDB调试程序的核心技术。主要内容包括:1) CoreDump调试方法,通过ulimit设置生成崩溃转储文件,使用GDB分析core文件定位段错误;2) 多线程程序调试技巧,包括查看线程信息、切换线程上下文、设置线程调度锁等;3) 常见面试问题解答,如如何调试段错误和多线程程序。文章通过具体代码示例演示了从生成core文件到GDB分析的全过程,并提供了多线程调试的实用命令,是Linux开发人员必备的调试技术指南。
2026-04-18 15:37:07
784
原创 C++11智能指针详细解析及面试题
本文详细解析C++智能指针的三大核心组件(unique_ptr、shared_ptr、weak_ptr)及其内存管理机制。智能指针基于RAII原则,通过对象生命周期自动管理资源释放,有效解决原始指针常见的内存泄漏、野指针等问题。unique_ptr实现独占所有权,shared_ptr通过引用计数实现共享所有权,weak_ptr则辅助解决循环引用问题。文章深入剖析了智能指针的实现原理、使用场景及最佳实践,包括make_shared/make_unique的优势、自定义删
2026-04-16 20:55:27
844
原创 C++ 项目部署教程(标准生产环境架构:本地编译 + Jenkins云端部署)
本文围绕64 位 MS 环境下标准 C/C++ 工程的一键部署与替代方案展开,提供完整工程结构、编译配置、服务托管与端口占用清理流程,可实现多版本平滑替代。文中给出通用托管脚本与一键部署脚本,支持服务安装、版本更新、端口释放、目录清空等操作,适用于64 位 MS 环境下 C/C++ 工程的标准化、自动化部署,可直接用于生产环境,降低运维成本,提升交付效率。
2026-04-11 20:57:19
689
原创 C++ 网络编程项目量化:Valgrind 内存检测与 wrk 压测实战
摘要:本文介绍了C++网络编程中tinyWebServer等项目的性能优化方法。重点讲解Valgrind内存检测工具的使用,包括安装、参数配置和常见内存问题分析;以及wrk压测工具的多线程压测方法,包括安装、参数说明和结果解读。通过量化测试指标(如QPS、延迟等)来提升项目简历的含金量,并对比了不同测试工具的特点,帮助开发者构建高性能、稳定的HTTP服务器。
2026-04-10 16:05:29
469
原创 Claude 安装实操教程与 AI Agent 基础概念
本文为作者结合自身实操与B站学习笔记整理的Claude使用教程及AI Agent术语科普,使用前需准备魔法上网。文中详细介绍Win11系统下通过命令行下载、登录Claude的方法,讲解模式切换、文件操作、回滚、Figma设计稿还原、上下文管理等实用功能,还涵盖Hook、Agent Skill、SubAgent、Plugin等高级配置技巧。同时系统解释LLM、Token、Context Window、RAG、Prompt、Tool、MCP、Agent等AI Agent核心术语,清晰说明各概念含义与应用逻辑,兼
2026-04-09 09:45:23
2766
1
原创 力扣142.环形链表 II
摘要:本文介绍了检测链表环的两种解法。哈希表法利用集合存储节点地址,通过重复检测判断环入口,空间复杂度O(n)。更优的快慢指针法空间复杂度O(1):1)快指针(2步/次)与慢指针(1步/次)相遇判断有环;2)推导证明a=c(头到入口距离=相遇点到入口距离);3)相遇后将快指针重置到头部,两指针同速前进,再次相遇点即为环入口。最终给出C++实现代码,时间复杂度O(n)。
2026-03-09 13:48:55
1018
原创 力扣24.两两交换链表中的节点
本文介绍了链表两两交换节点的算法实现。通过添加虚拟头节点简化操作,使用三个指针(cur、temp1、temp2)完成节点交换,确保不断链。算法处理奇数和偶数长度链表时,分别以cur->next->next=nullptr和cur->next=nullptr为终止条件。时间复杂度O(n),空间复杂度O(1)。代码示例展示了具体实现过程,包括指针操作和边界条件处理。
2026-03-08 09:28:00
3192
原创 力扣707.设计链表
本文介绍了单链表的基本操作实现,包括初始化、插入(头插、尾插、指定位置插入)、获取节点值和删除节点。使用虚拟头结点简化操作,详细讲解了每个方法的实现逻辑和时间复杂度。头插法时间复杂度为O(1),其他操作多为O(n)。文章提供了完整的C++代码实现,涵盖链表增删查改的基本功能,并强调了边界条件处理和内存管理的重要性。
2026-03-06 17:35:06
587
原创 力扣59.螺旋矩阵||
初看这道题,我立刻想到了深度优先搜索(DFS)的思路:有明确的方向,在规定的边界内上下左右移动,并且每个元素只能遍历一次。带着这样的想法写完后,我发现它和官方题解的思路很像,也算是一种大众解法。我们可以通过偏移量来控制上下左右的移动,这通常用一个数组来表示,可以是二维数组,也可以是一维数组,原理是相同的。这是一道非常经典的模拟算法题,解题方法多样,新手第一次写很容易在边界处理上绕来绕去。我分享一种我自己习惯的解法,代码简洁,也更容易理解。的坐标,走到下一步,继续填充下一个数字。最后,根据当前的方向,更新。
2026-03-05 21:09:51
376
原创 力扣209.长度最小的子数组
摘要:本文介绍了一个经典的滑动窗口算法题,要求在数组中寻找总和≥target的最短子数组。解题思路采用固定右边界、动态收缩左边界的滑动窗口方法:初始化结果变量和累加和;通过for循环扩展右边界并累加元素;当满足条件时,用while循环收缩左边界并更新最小长度;最终判断是否存在有效解。算法时间复杂度为O(n),关键在于正确处理边界条件和区间定义(左闭右闭区间),特别注意持续收缩时需用while循环而非if判断。
2026-03-05 20:45:29
273
原创 力扣27.移除元素
摘要:本文介绍了一种使用双指针算法原地移除数组中特定值的方法。通过设置快慢指针(left和right),当快指针遇到不等于目标值的元素时,将其复制到慢指针位置并移动两个指针;遇到目标值则仅移动快指针。这种方法能在O(n)时间复杂度内完成操作,只需遍历数组一次,最终返回的有效元素数量即为慢指针的位置。相比erase操作,该算法更高效地实现了数组元素的原地修改。
2026-03-04 16:30:28
311
原创 力扣704.二分查找
本文简要解析了二分查找算法的实现要点。算法使用左右指针l和r,通过while循环比较中间值mid与目标值target,根据数组升序特性调整指针位置:当nums[mid]>=target时右移r,否则左移l。循环结束后检查nums[r]是否等于target即可确定查找结果。解析着重说明了指针移动的逻辑和循环终止条件,体现了二分查找的高效性。
2026-03-04 15:25:47
172
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅