- 博客(92)
- 收藏
- 关注
原创 网络编程时内核究竟做了什么???
本文摘要:文章通过简化内核代码,解析了TCP/IPv4套接字创建和连接的核心流程。主要步骤包括:1) socket()创建套接字结构体并关联文件描述符;2) bind()绑定IP和端口到内核哈希表;3) listen()建立监听状态和连接队列;4) connect()发起三次握手;5) accept()从全连接队列创建新套接字。每个步骤详细说明了内核如何管理套接字资源、维护状态和队列,以及用户态与内核态的交互过程,揭示了TCP连接建立的核心机制。
2026-05-19 11:40:07
315
原创 多线程redis项目之rdb
Redis持久化策略解析:RDB实现机制与优化思考 本文深入探讨了Redis的RDB持久化机制,重点分析了其二进制序列化方案的设计原理。RDB采用紧凑的自描述二进制格式,通过类型标记、长度前缀等实现高效存储,相比文本格式可节省30%-50%空间。文章详细解释了为何Redis选择fork子进程而非多线程方案来保证数据一致性,并剖析了LZF压缩算法在线应用的实现细节。通过rio抽象层的设计案例,展示了如何通过架构演化实现I/O操作的解耦。虽然当前简化版采用文本格式实现,但作者明确指出二进制格式在空间效率、解析速
2026-05-18 11:33:33
503
原创 redis项目之命令解析器
Redis命令处理机制解析:Redis采用客户端-服务器架构,通过RESP协议通信。服务器端使用哈希表存储命令元信息(redisCommand结构体),实现O(1)查找。命令处理流程包括RESP解析、参数校验、权限检查等8类关键校验,确保命令合法性。系统采用分层设计,网络层负责数据传输,命令分配器处理协议转换和调度,业务层执行具体操作。支持同进程(函数调用)和跨进程(TCP通信)两种部署方式,适用于不同规模场景。核心特点是高效命令查找、严格参数校验和灵活部署架构。
2026-05-18 11:29:53
366
原创 多线程redis项目基石
Redis存储类型核心设计总结:采用链地址法哈希表,通过渐进式rehash避免扩容阻塞,使用MurmurHash2优化哈希分布。过期策略结合惰性删除和定期扫描,持久化提供RDB快照和AOF命令日志两种方式。跳表实现通过概率晋升(p=0.25)建立多级索引,平衡查询性能与内存消耗。时间获取采用steady_clock保证单调性,容器操作使用find_if进行高效查找。整体在数据结构、内存管理和持久化等方面进行了深度优化。
2026-05-14 17:51:58
392
原创 高并发内存池如何实现
本文实现了一个高效的高并发内存池,参考Google TCMalloc设计思想,解决传统glibc malloc在多线程环境下的锁竞争与内存碎片问题。系统采用三级架构:ThreadCache(线程独享无锁分配)、CentralCache(中心缓存桶锁管理)、PageCache(页缓存合并碎片)。关键技术包括:定长内存池减少内碎片、基数树实现O(1)页号映射、慢启动算法平衡分配效率。测试表明相比ptmalloc性能提升20%,特别适合高频小对象分配场景。项目通过TLS隔离线程资源、分级对齐策略(8B-8KB)、
2026-05-14 17:47:40
474
原创 mini-redis项目之Resp协议
本文详细解析了Redis协议(RESP)的格式规范与实现原理,重点介绍了6种RESP数据类型及其解析规则。文章深入探讨了C++17特性在Redis实现中的关键应用,包括string_view的零拷贝特性、optional的安全空值处理、enum class的强类型枚举等。同时对比了传统C++实现与现代C++17方案的性能差异,阐述了Redis协议解析的最佳实践,包括数值转换优化、非法字符处理机制等。通过分析底层函数选择(如memchr vs find)和语法特性(如逗号表达式),揭示了Redis高性能协议解
2026-03-14 21:01:18
444
原创 背包问题详解:从入门到精通
摘要:背包问题是动态规划的经典分支,核心是在有限约束下选择物品组合以优化目标值。主要分为01背包(物品选0/1次)、完全背包(物品无限选)、多重背包(物品有限制)和多维背包(多约束条件)四种类型。所有背包问题遵循「状态定义→转移逻辑→初始化」的统一框架,差异在于物品选择规则和约束维度。解题关键在于状态转移方程的设计,通常采用二维/三维DP数组,并通过滚动数组优化空间。典型应用包括分割等和子集、零钱兑换等问题。背包问题的核心是识别问题特征并正确转化为对应的背包模型。
2026-03-12 11:00:00
431
原创 双数组DP:算法刷题必备技巧
双数组DP是处理两个数组/字符串关联问题的核心算法,常用于求解最优匹配、最长公共子序列、编辑距离等问题。其核心是定义二维状态dp[i][j],表示数组A前i个元素和数组B前j个元素的最优解。解题步骤包括:初始化边界条件(处理空串)、状态转移(根据元素匹配情况推导)、返回结果dp[n][m]。典型例题包括1143最长公共子序列、712最小ASCII删除和等,其中子数组问题需注意连续特性。关键技巧是采用1-based下标简化边界处理,并可通过空间优化压缩为1维DP表。掌握状态定义和转移逻辑是解决此类问题的核心。
2026-03-09 10:00:00
383
原创 回文子串与子序列dp全解析
本文系统梳理了回文子串与回文子序列的核心算法。回文子串强调连续性,常用中心扩展法(O(n²)时间)或动态规划;回文子序列则必须使用区间DP。动态规划通过构建dp表存储回文信息,适用于分割、计数等复杂问题。关键区别在于连续性与状态转移方式:子串两端相同且中间回文则为真,子序列则需比较左右边界。典型例题包括统计回文子串数、最长回文子串/序列等,预处理回文信息可显著优化分割类问题的求解效率。
2026-03-07 18:30:00
395
原创 子序列的DP奥秘
本文系统总结了子序列问题的解题框架与核心技巧。主要内容包括: 子序列与子数组的核心区别:子序列不要求连续,导致解法复杂度更高 常见题型分类: 最长类(LIS、等差序列等) 计数类(等差数列划分等) 存在性类 构造类 通用解题方法: 动态规划是核心(90%题目适用) 状态定义技巧(以i结尾而非前i个) 哈希优化(避免O(n²)复杂度) 避免暴力枚举(子序列总数2ⁿ必超时) 关键避坑点: 下标越界处理 重复元素处理 大数溢出问题 边界条件处理 典型题目分析:最长递增子序列、摆动序列、等差数列等题目的解法对比与优
2026-03-07 12:00:00
541
原创 动态规划核心:数组问题实战
本文总结了动态规划在数组问题中的核心应用,重点分析了连续子数组/子序列问题的解法框架。通过6道典型例题(最大子数组和、环形子数组、乘积最大子数组等),揭示了这类问题的通用解法:以dp[i]表示以i结尾的子数组最优解,状态转移分为"延续前状态"或"重新开始"两种情况。针对乘积类问题需同时维护最大/最小值状态,计数类问题要注意去重处理。文章提炼出子数组DP的三要素:状态定义必含"以i结尾"、转移依赖前状态、初始化要考虑边界条件,为处理连续子数组问题提供
2026-03-04 21:39:11
461
原创 简单多状态dp问题:从按摩师到股票买卖
本文总结了力扣上多状态动态规划问题的解题思路,主要包含按摩师、打家劫舍、股票买卖等经典题型。通过分析状态定义、转移方程和边界条件,提出五步解题法:1)定义互斥状态;2)推导状态转移;3)初始化边界;4)确定结果范围;5)优化空间/时间。重点强调了状态机的思维模式,将问题抽象为状态节点间的转移过程,并指出常见错误如状态定义模糊、边界处理不当等。文章提供了模板化解决方案,适用于90%的简单多状态DP问题,帮助读者建立系统性的解题框架。
2026-03-04 12:00:00
415
原创 Redis缓存深度解析:20%数据应对80%请求
Redis作为高性能内存数据库,主要应用于数据存储、缓存和消息队列三大场景。在缓存应用方面,Redis通过存储热点数据有效拦截80%的请求,显著降低MySQL等关系型数据库压力。文章详细分析了Redis的缓存策略,包括内存淘汰机制(LRU/LFU)、缓存预热以及应对缓存穿透、雪崩和击穿的解决方案。同时深入探讨了分布式锁的实现,包括SETNX命令、看门狗机制和Lua脚本的原子操作,并比较了Redlock算法与业务兜底方案。最后指出Redis集群模式下锁丢失问题的处理策略,强调在性能与可靠性之间的权衡选择。
2026-02-25 21:34:24
792
原创 Redis集群:从单点故障到高可用的进阶之路
Redis高可用架构演进 单点问题 单点部署存在可用性和性能瓶颈,服务器宕机导致服务不可用,硬件资源限制并发处理能力。 主从模式 主节点处理写请求,从节点复制数据并处理读请求 提升读性能和数据冗余,但主节点仍是单点 哨兵模式 引入哨兵进程监控节点状态 实现自动故障转移,主节点宕机时自动选举新主 但仍存在单点写瓶颈和存储限制 集群模式 采用哈希槽分区算法(16384个槽位) 数据分片存储在多个主节点,实现水平扩展 主节点故障时自动转移槽位 支持多主节点同时写入,解决单点写问题 三种模式逐步解决了单点故障、自动
2026-02-25 10:50:04
1090
原创 揭秘Redis事务:弱原子性的背后逻辑
事务是一组操作的集合,确保操作的完整性——要么全部成功,要么全部失败。Redis事务与MySQL事务的主要区别在于:Redis仅支持弱原子性(语法错误全不执行,运行时错误部分执行)、无回滚机制、依赖业务逻辑保证一致性,采用乐观锁(WATCH)而非悲观锁。Redis事务适合简单批量操作,不适合强一致性场景。通过Lua脚本可实现原子性操作解决超卖问题,相比WATCH机制性能更高。Redis本身不保证一致性,需开发者自行维护业务逻辑。
2026-02-18 20:00:00
1198
原创 Redis持久化策略与实战指南
摘要:Redis提供RDB和AOF两种持久化机制。RDB通过定时生成内存快照实现高效备份,但可能丢失两次快照间的数据;AOF通过记录所有写命令确保数据完整性,但文件体积较大。4.0+版本支持混合持久化,结合两者优势。Redis还支持冷备(RDB文件拷贝)和热备(AOF实时记录)。实际应用中,AOF(混合模式)适合热备保证低丢失,RDB适合冷备和快速恢复。系统服务管理可通过systemctl操作Redis服务,包括启动、停止、状态查看等。持久化策略应根据业务对数据安全性和恢复速度的需求进行选择。
2026-02-18 17:00:00
819
原创 muduo项目排查错误+测试
文章摘要:本文详细记录了HTTP服务器开发与测试的全过程。首先排查了服务器初始化问题,发现Acceptor未正确监听导致阻塞。接着分析了浏览器双重TCP连接行为及favicon.ico请求处理机制。针对路径解析的段错误问题,修正了子字符串分割逻辑。测试了连接超时管理,提出将释放操作延迟到任务池执行的解决方案。通过PUT请求验证了大文件传输的完整性,MD5校验确认功能正常。最后使用Webbench进行压力测试,在2核2GB环境下达到约1400QPS的稳定处理能力,5000并发时仍保持100%成功率,验证了服务
2026-02-06 21:45:39
1113
原创 高并发网络框架:Reactor模式深度解析
本文介绍了基于Reactor模式的高性能网络服务器设计。核心采用主从Reactor多线程模型,主Reactor处理新连接,子Reactor处理通信事件。通过epoll实现I/O多路复用,每个线程运行独立事件循环(EventLoop),配合Channel管理事件回调,Poller封装epoll操作,Connection管理单个连接。模块化设计包括Acceptor、TimerQueue等组件,支持HTTP协议扩展。该架构实现线程隔离,避免锁竞争,适合IO密集型场景,但不适合CPU密集型任务。文章详细阐述了各模块
2026-02-06 21:27:17
951
原创 Linux项目自动化构建工具全解析
本文介绍了Linux项目自动化构建工具make/makefile/cmake的核心概念和使用方法。首先讲解了手动编译的痛点,以及make工具如何通过makefile实现编译流程自动化。然后重点介绍了CMake作为跨平台构建工具的优势,详细说明了CMakeLists.txt的语法规则,包括基础指令、构建指令、变量设置、头文件配置等关键内容。文章提供了实用示例和避坑指南,强调了现代CMake推荐的目标级配置方式和离源构建的最佳实践。通过CMake可以消除不同操作系统的差异,实现高效的项目构建和管理。
2026-02-02 11:49:49
708
原创 动态规划解路径问题精髓
本文总结了动态规划解决路径问题的几种典型算法。主要内容包括:1) 不同路径问题(LeetCode 62题)的两种解法,重点分析状态转移方程dp[i][j]=dp[i][j+1]+dp[i+1][j];2) 带障碍物的不同路径问题(LeetCode 63题)的处理方法;3) 珠宝价值最大化问题(LCR 166)的优化技巧;4) 下降路径最小和问题(LeetCode 931)的三方向状态转移;5) 最小路径和问题(LeetCode 64)的解法;6) 地下城游戏问题(LeetCode 174)的特殊处理逻辑。文
2026-02-01 13:49:40
648
原创 记忆化搜索优化技巧
本文介绍了记忆化搜索在算法问题中的应用。通过斐波那契数列、不同路径、最长递增子序列等经典问题,展示了如何通过添加备忘录来优化递归解法,将时间复杂度从指数级降低到线性级。记忆化搜索本质是带备忘录的递归,与动态规划互为递归和迭代形式。文章详细讲解了记忆化搜索的实现方法,包括备忘录设计、初始化和剪枝策略,并强调其在动态规划问题中的桥梁作用,即通过暴力搜索为动态规划提供状态定义思路。最后指出记忆化搜索能有效减少重复计算,是优化算法性能的重要技术。
2026-01-29 12:00:00
1424
原创 史上最全回溯算法实战:从实战中掌握算法的美妙
本文总结了回溯算法在LeetCode多道题目中的应用,包括子集异或总和、全排列、字母组合、括号生成、组合总和、数独等问题。核心解题步骤为:1.画出决策树明确枚举逻辑;2.设计DFS函数,确定全局变量;3.考虑剪枝条件和回溯操作;4.设置递归出口。文章特别强调区分是否需要返回值的两种场景:无返回值用于收集所有解,有返回值用于找到解即终止。针对矩阵类问题(如单词搜索、黄金矿工),详细说明了如何通过方向向量进行四向搜索,并使用访问标记数组避免重复访问。每道题目都给出了关键代码实现和算法思路的详细解析。
2026-01-25 18:00:00
1360
原创 全排列与子集算法精解
本文讲解了LeetCode中全排列和子集问题的算法原理与实现。全排列采用回溯法,通过决策树分析,使用path记录路径,check数组剪枝,注意恢复现场的两种方式。子集问题有两种解法:一是每个元素选与不选,二是通过决策树枚举所有情况并剪枝。两个问题都通过深度优先搜索实现,全排列代码使用全局变量存储结果,子集解法则通过传入下标参数避免重复。代码实现展示了回溯和剪枝的具体应用。
2026-01-14 18:00:00
585
原创 二叉树遍历与回溯算法实战
本文摘要:文章讲解了5道二叉树相关算法题的解法思路和代码实现。1. 计算布尔二叉树值:通过DFS递归计算左右子树值,根据节点值进行OR/AND运算。2. 根到叶节点数字和:两种DFS解法,分别使用全局变量和函数参数传递前缀和。3. 二叉树剪枝:两种剪枝策略,通过判断子树是否全0来决定是否剪枝。4. 验证二叉搜索树:利用中序遍历特性,比较当前值与前一节点值。5. 二叉树所有路径:使用先序遍历和回溯,演示了两种恢复现场的方法。重点强调了递归、回溯、剪枝等技巧的应用,以及全局变量和函数参数的不同处理方式。
2026-01-14 12:00:00
1194
原创 IO模型全解析:从阻塞到异步(高并发的reactor模型)
本文系统介绍了Linux系统中的五种I/O模型,重点分析了select、poll和epoll三种I/O多路复用技术。主要内容包括: I/O模型基础概念:详细阐述了阻塞I/O、非阻塞I/O、信号驱动I/O、I/O多路复用和异步I/O五种模型的工作原理和特点。 多路复用技术对比: select模型:存在1024个文件描述符限制,需要每次重新设置监听集合 poll模型:解决了select的fd数量限制问题,但仍需遍历所有fd epoll模型:采用红黑树管理fd,就绪队列通知机制,支持边缘触发模式,性能最优 实践应
2026-01-11 18:00:00
969
原创 浏览器输入URL之后究竟会发生啥???
本文通过浏览器访问百度的实例,详细讲解了网络数据包的传输过程。从浏览器输入网址触发DNS查询(遵循"从近到远"原则),到TCP三次握手建立连接,再到数据包经过路由器层层转发(涉及NAT转换和路由查询),最终与服务器建立HTTPS加密通信。文章完整呈现了请求响应全过程,包括数据封装、网络传输、服务器处理及连接释放等环节,展现了从用户输入URL到页面呈现的完整网络通信流程。如需了解具体协议细节,可参考前文相关内容。
2025-12-23 16:09:39
591
原创 深入解析网络层与数据链路层
本文系统讲解了TCP/IP协议栈中的网络层和数据链路层。网络层通过IP协议实现跨网络数据传输,核心功能包括路由选择、IP分片与重组;数据链路层负责同一局域网内的帧传输,通过MAC地址和ARP协议实现设备间通信。文章详细解析了IP协议格式、子网划分、NAT技术、路由表原理,以及以太网帧结构。同时探讨了ARP协议、DNS系统、ICMP协议的工作原理,并对比了NAT与代理服务器的区别。最后指出网络层负责全局路径规划,数据链路层执行具体传输,二者协同完成端到端通信。
2025-12-22 21:40:14
1274
原创 深入解析TCP/IP:从端口号到可靠性机制
本文深入探讨了TCP/IP协议栈中传输层的核心机制,重点分析了TCP协议的可靠性实现原理。文章首先介绍了端口号的作用和范围划分,详细解析了TCP协议头各字段的功能,包括序列号、确认号、窗口大小等。随后系统阐述了TCP保证可靠传输的五大机制:确认应答、超时重传、连接管理、流量控制和拥塞控制,并解释了滑动窗口的工作原理。此外,文章还讨论了延迟应答、捎带应答等提高传输效率的技术,以及字节流粘包问题的解决方案。最后,对listen系统调用的第二个参数backlog进行了深入分析,揭示了半连接队列和全连接队列的区别与
2025-12-22 18:30:00
1678
1
原创 HTTPS加密原理:安全传输全解析
HTTP协议采用明文传输数据,存在安全风险,而HTTPS通过TLS/SSL加密解决了这一问题。HTTPS采用非对称加密传输对称密钥,再使用对称加密传输数据,确保通信安全。CA机构通过数字证书验证公钥合法性,防止中间人攻击。虽然HTTP因历史遗留和成本问题尚未完全淘汰,但主流趋势已转向HTTPS。中间人攻击手段包括ARP欺骗、ICMP攻击等,需警惕公共WiFi等不安全网络环境。
2025-12-18 22:00:00
2412
1
原创 深入解析HTTP协议与应用层编程
本文系统讲解了网络协议栈的应用层和传输层核心知识。重点内容包括:1. 应用层协议设计:通过自定义网络计算器案例,详细说明结构化数据序列化、报文边界划分等关键问题;2. HTTP协议详解:包括URL编码、请求/响应格式、方法语义、状态码体系、头部字段等核心要素;3. 会话保持技术:深入分析Cookie/Session机制及其安全考量;4. 开发实践:给出C++实现的HTTP服务器框架代码;5. 调试工具:介绍telnet、Postman等实用网络调试工具。文章从协议设计原理到工程实践,全面解析了网络通信的核心
2025-12-18 18:00:00
1991
原创 SSH连接原理与守护进程实战
本文深入解析了SSH远程连接机制与守护进程原理。通过Xshell连接云服务器的过程展示了SSH协议的应用层通信本质:sshd守护进程监听22端口,Xshell发起TCP连接请求,经NAT转发后建立加密通信通道。详细阐述了守护进程的关键特性:脱离终端控制、后台持续运行、自成会话等。通过两次fork调用规避进程组问题,使用setsid创建新会话,重定向标准I/O到/dev/null。对比了前台/后台任务、普通进程与守护进程的区别,解释了Bash通过fork子进程执行命令的必要性。最后通过代码示例实现了自定义守护
2025-12-14 23:10:11
1057
原创 TCP网络编程:从握手到挥手全解析
本文介绍了TCP协议网络编程的核心内容。首先讲解了TCP与UDP的关键区别:TCP需要建立连接、维护连接队列,而UDP是无连接的。重点分析了TCP编程中三个关键API:listen()用于服务器监听连接请求,accept()处理已建立的连接,connect()用于客户端发起连接。详细阐述了TCP三次握手建立连接和四次挥手断开连接的原理,解释了为何需要三次握手(确认双方收发能力)和四次挥手(独立关闭双向通道)。最后给出了简单的TCP服务端和客户端实现代码示例,展示了从创建套接字到建立连接、数据传输的完整流程。
2025-12-14 12:00:00
1066
原创 C++11(五):类型转换全解析
C++类型转换机制解析 C++作为强类型语言,提供了比C语言更规范的类型转换机制。C语言只有隐式和显式两种转换方式,存在可视性差、错误难追踪的问题。C++引入四种强制类型转换操作符: static_cast:用于相近类型的转换 reinterpret_cast:处理不相近类型的强制转换 const_cast:去除const属性 dynamic_cast:用于多态类型的安全向下转型 dynamic_cast通过虚表识别实际类型,仅适用于含虚函数的类。此外,C++还通过typeid运算符支持运行时类型识别(RT
2025-12-10 17:09:57
828
原创 C++11(四):特殊类与单例模式设计精要
本文介绍了C++中特殊类的设计方法及单例模式实现。主要内容包括:1)只能在堆/栈上创建对象的实现方式,通过禁用构造/拷贝构造并提供静态创建接口;2)不可拷贝类通过禁用拷贝构造和赋值运算符实现;3)不可继承类的两种实现方式(C++98私有构造和C++11 final关键字)。重点讲解了单例模式的两种实现:懒汉模式(使用时创建,需处理线程安全)和饿汉模式(启动时创建,无线程安全问题),分析了各自的优缺点。其中懒汉模式通过双检查锁机制解决线程安全问题,饿汉模式则利用静态成员变量在程序启动时初始化的特性。
2025-12-10 14:06:17
951
原创 C++11新特性全面解析(三):智能指针与死锁
本文系统介绍了C++智能指针的核心概念与技术要点。首先阐述了智能指针的必要性,通过RAII机制解决资源管理问题。重点分析了三种智能指针实现方案:auto_ptr(管理权转移)、unique_ptr(禁用拷贝)和shared_ptr(引用计数),并详细讨论了shared_ptr的线程安全问题及循环引用缺陷(通过weak_ptr解决)。文章还探讨了死锁问题与RAII锁管理机制(lock_guard/unique_lock),最后总结了内存泄漏的危害及检测方法。全文从原理到实践,完整呈现了C++资源管理的核心技术
2025-12-09 22:32:00
875
原创 C++11新特性全面解析(二):线程库+异常体系
本文摘要:本文系统介绍了C++11中的线程库和异常处理机制。线程库部分详细讲解了thread类的使用、线程函数参数传递、原子操作库(atomic)、互斥锁(mutex)和条件变量的应用。异常处理部分对比了C语言传统错误处理方式的缺陷,阐述了C++异常的概念、使用方法和安全规范,包括异常抛出与匹配规则、自定义异常体系设计等。文章通过代码示例展示了多线程编程中常见的竞争条件和资源管理问题,以及异常处理的最佳实践。最后分析了异常机制的优缺点,指出虽然存在执行流混乱等问题,但在现代编程中仍利大于弊,是错误处理的重要
2025-12-04 22:32:41
1044
原创 C++11新特性全面解析(一)
C++11新特性摘要 C++11标准带来了140多项新特性,主要包括: 列表初始化:统一了内置类型和自定义类型的初始化方式,支持更简洁的初始化语法。 类型推导:auto和decltype关键字简化了复杂类型的声明。 右值引用:引入移动语义,通过移动构造和移动赋值减少不必要的拷贝,提升性能。 智能指针:unique_ptr、shared_ptr等帮助管理内存资源。 lambda表达式:提供匿名函数的简洁写法,支持闭包特性。 容器增强:新增array、forward_list等容器,改进unordered系列容
2025-12-03 12:08:10
848
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅