- 博客(16)
- 收藏
- 关注
原创 Floyd 判圈算法:为什么第二次一定在入口相遇
Floyd判圈算法数学推导摘要: 算法步骤: 快指针(2步/次)和慢指针(1步/次)在环内相遇 重置慢指针到起点,两指针同步1步/次移动 再次相遇点即为环入口 数学推导: 设起点到入口距离a,入口到首次相遇点距离b,环长b+c 由速度关系得:a = (n-2k)(b+c)-b 表明a步等效于走整圈后剩余c步 结论: 第二次移动时,两指针分别走a步必然在入口相遇 第一次相遇证明有环,第二次利用路径等式定位入口 时间复杂度:O(n) 空间复杂度:O(1)
2026-06-01 22:00:34
297
原创 技术精炼:全面拆解 LSM-tree 的 Version 核心机制
本文深入剖析了LSM-tree中Version机制的核心原理与战略作用。Version本质上是静态的磁盘SSTable资产清单,通过二维数组管理7个层级的文件元数据。其绝对只读性和引用计数机制确保了线程安全。Version在数据流中扮演关键角色:前台点查时路由检索顺序,范围扫描时缝合离散文件,后台操作时决策文件位置和触发合并。文章详细映射了Version的核心控制函数及其物理执行流,揭示了其作为多版本控制基石的机制。Version通过严格的时空边界锁定,使LSM-tree在并发环境下保持高性能。
2026-05-27 17:47:11
375
原创 LSM-tree 存储引擎:SSTable 文件的物理结构与迭代器检索机制全面解析
LSM-tree的SSTable采用严格有序的垂直物理结构,包含数据块区、布隆过滤器块区、元索引块区、核心索引块区和固定页脚。数据块通过前缀差分压缩优化存储空间,每隔16个条目设置重启点确保查询效率。各模块按顺序追加写入,最终形成自包含的静态只读字节流。这种设计充分利用了内存预排序的优势,实现了高效的二分查找和范围扫描,同时通过布隆过滤器减少不必要的磁盘I/O。
2026-05-17 19:36:43
377
原创 对lsof、tcpdump、strace命令的简单记录
Linux 中一切皆文件(包括磁盘文件、网络 Socket、设备)。:同时显示十六进制与 ASCII 码(最关键,用于看业务逻辑)。:代表网络 IO 等待。观察程序是在忙着处理请求还是在空转。(索引),无需在代码里打日志即可验证分布式一致性逻辑。:不触动程序本身,从网卡抓取最真实的通信数据。:监控程序与内核之间的“对话”(系统调用)。:禁止解析主机名和端口名,提高显示速度。:观察数据落盘或网络发送的真实频率。:统计所有系统调用的耗时分布。:实时跟踪程序的运行轨迹。:只看程序打开了哪些文件。
2026-05-11 20:27:03
212
原创 深入理解 C++ 高并发基石:原子性与 Acquire-Release 语义
本文深入解析了C++高并发编程中的三种核心内存语义:Acquire、Release和Relaxed。Release语义作为"向下拦截"屏障,确保数据在发布前完全准备好;Acquire语义作为"向上拦截"屏障,保证读取后能看到最新状态;Relaxed语义则仅保证原子性,追求极致性能。文章通过LevelDB跳表示例,展示了Acquire-Release语义如何建立线程间同步契约:当写线程使用Release发布数据,读线程通过Acquire获取时,写线程的所有修改对读线程可
2026-05-06 18:00:53
239
原创 从0理解 DFS 和 BFS
本文介绍了深度优先搜索(DFS)和广度优先搜索(BFS)两种基础算法。DFS采用递归和回溯思想,通过栈结构实现,适用于遍历所有可能方案;BFS通过队列实现逐层扩展,常用于最短路径问题。文章以全排列和N皇后问题为例,详细解析了DFS的实现过程,包括状态树的构建、回溯和剪枝技巧。最后通过二叉树遍历的三种方式(前序、中序、后序)进一步阐释DFS的递归思想。
2025-08-05 16:36:38
795
原创 【Linux网络编程】实现epoll多路IO转接以及C++封装epoll反应堆
从实用性出发讲解epoll多路IO转接及用C++的class类封装epoll反应堆
2025-05-20 21:06:43
794
原创 【Linux】c语言实现shell
实现的Shell支持管道(|)、输入输出重定向(<、>、>>)、cd命令(支持绝对路径、相对路径和cd -)、屏蔽某些信号(如Ctrl+C),并具备美观的界面。
2025-05-10 15:38:45
497
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1