自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 LRU 缓存:为什么教科书答案在工业界全被改写?——哈希表 + 双向链表、Redis 近似 LRU 与 InnoDB 两段式 LRU 的工程级解析

某电商详情页缓存,Redis 单实例 、策略 。上线时热点命中率 96%,两个月后掉到 71%。值班同学的第一反应是容量不够,把内存扩到 16 GB,重启,命中率回来了三天,第四天又跌回 72%。抓 看 ,每秒在涨;再看业务侧日志,凌晨两点有一个定时任务全量拉取在售商品(约 12 万条 key)写进 Redis 做对账。这个任务跑完,白天热点命中率必然塌一轮。数据摆出来是这样的:这份表格里没有一个格子指向"内存不够"。问题的形状是:一个把"最近被访问过"当作"将来还会被访问"的算法,遇到一次性灌入的冷数据

2026-09-22 18:47:33 379

原创 柱状图中最大的矩形:单调栈为什么被称为“一题通八题“?——从左右边界到哨兵的工程级解析

0。

2026-09-18 19:06:33 45

原创 接雨水:为什么多数人写不出 O(n) 的栈解法?——从暴力到双指针到单调栈的工程化选择

leftMax。

2026-09-17 18:53:41 146

原创 Top K 工程实战:从热搜榜到第 K 大元素,为什么 80% 候选人栽在「快排分区 vs 堆」的二选一?

half。

2026-09-13 18:25:07 217

原创 双指针 + 滑动窗口:为什么这两招能压到 O(n)?——从秋招最高频模式看 O(n) 解法的工程取舍

—提示:这题的窗口会出现"第二层收缩逻辑",它和标准"右扩左缩"差在哪,正是区分"会模板"和"会变通"的分水岭。于是很多人刷完 200 道,对这两个模式的理解停留在"哦,是一种技巧",而不是"一种有严格正确性证明的算法范式"。正因为每次排除的都是"一整段"而不是"一个点",总复杂度才从 O(n²) 收敛到 O(n)。很多人的认知是"哈希 O(n) 空间换时间,双指针 O(1) 空间,双指针更省内存"。常数上能省下约 2 倍。是双指针里最需要"证明"的一题,也是面试官最爱追问"你为什么这么移动"的题。

2026-09-08 18:37:48 181

原创 最短路径:从 BFS 到 Dijkstra、Bellman-Ford、Floyd——三种改写层序的进路,为什么 Dijkstra 必须用优先队列?

这一句叫松弛(relax)。名字的来由:把 "dist[u] 到 dist[v] 的这条边" 想象成一根橡皮筋,若 dist[u] + w < dist[v],说明原来的 dist[v] 绷得太紧(太大了),现在可以放松到更小的值。松弛操作是几乎所有最短路算法(Dijkstra / Bellman-Ford / SPFA / Floyd)共用的原子动作。松弛为什么正确?它本质是在迭代三角不等式。

2026-09-07 18:36:26 268

原创 图论基础:BFS 与 DFS 从模板到应用——同样的遍历,为什么有时用队列有时用递归?

这解释了为什么判环必须用 DFS(或等价的三色/入度机制),而 BFS 无法直接回答"有没有环"——BFS 队列不保留"父路径"信息,它只记得"谁是我在第几层发现的",无法判断"这个邻居是不是我的祖先"。染色法是 BFS/DFS 都能做的"变体"——它用"两种颜色"代替"距离/路径",本质仍是三色/两色的状态机。任何"多记一次"(visited 打晚了、重复入队)都会让这个账从线性变成指数,这就是为什么"入队即标记""每条边只被起点扫一次"是模板里不可妥协的纪律。:本篇 BFS 只能处理"无权图最短路"。

2026-09-03 21:08:12 378

原创 为什么TopK问题都要用堆?堆与优先队列的工程级演进解析

如果一个个 push,n 个元素建堆是 O(n log n)。从最后一个非叶子节点(index = n/2 − 1)开始,倒序对每个节点做下沉。大部分节点是叶子或靠近叶子,下沉代价很小甚至为 0。最底层 n/2 个叶子:O(0),不需要调整倒数第二层 n/4 个节点:最多下沉 1 次倒数第三层 n/8 个节点:最多下沉 2 次总代价 Σ (n/2^k × k) =O(n)。只有根节点的下沉才是 O(log n),但只有一个根。💡关键结论heapify是"从下往上"建堆;

2026-08-23 18:46:57 200

原创 为什么MySQL索引用B+树不用红黑树?从二叉树到B+树的工程级演进解析

上一篇我们讲过链表——每个节点一个next指针,串成一条链。把每个节点的一根指针变成两根。int val;Node* left;// 左子树// 右子树定义本身是递归的:一棵二叉树是空树,或"根节点 + 左子树 + 右子树",左右子树各自也是二叉树。🔧工程建议:写树相关的代码时,凡是看到"子树"两个字,第一反应就该写递归——树的递归定义决定了递归解法是天然匹配的。

2026-08-22 19:42:45 308

原创 为什么Java HashMap的链表超过8就转红黑树?从哈希函数到冲突解决的工程级深度解析

最坏情况 O(n),且这个"最坏"不是理论假象:2003年 Crosby & Wallach 论文演示了对多个网络服务的 HashDoS 攻击,2011年影响波及 Java/Python/PHP/Ruby 等主流语言。:如果服务端用 HashMap 接收用户输入作为 key,且哈希函数可预测,攻击者可构造碰撞 key 集合,将单次请求复杂度从 O(1) 拉到 O(n²)。——用 O(log n) 兜底,不让链表退化到 O(n)。:n=365 个桶,只需 m=23 个 key,冲突概率就超过 50%。

2026-08-19 18:13:28 336

原创 栈与队列:从函数调用到消息队列,无处不在的受限表

每个元素最多入队一次、出队一次(不管是被更大的从队尾挤出,还是被窗口从队首过期弹出)。总操作 ≤ 2n →。

2026-08-16 23:04:58 344

原创 链表:指针串联的灵活锁链,为什么它能随便插删?

链表本质#链表VS数组#侵入式链表#LRU设计关键词:链表, 双向链表, 指针操作, 侵入式链表, LRU缓存, list_head受众:计算机专业人员为主,兼顾初学者(讲清深度,不降深度)

2026-08-16 22:55:46 341

原创 数组:从内存模型到工程实现,重新理解这个最基础的数据结构

动态数组扩容单次 O(n),为何尾部插入记作 O(1) 摊还?用聚合法证明:设容量从 1 开始,每次翻倍。n 次插入总代价 2n-1,平均每次 (2n-1)/n ≈ 2 →O(1) 摊还。扩容因子 > 1(几何增长)。若每次只扩容 1 个(线性增长),总搬迁 1+2+3+...+n = O(n²),摊还 O(n)——这是新手常犯的致命错误。

2026-08-14 18:32:28 356

原创 【2024最新版】WireShark4.4.0安装教程(Windows11)

WireShark安装程序包包含最新的Npcap安装程序。若不安装Npcap,将无法捕获实时网络流量,但是能够打开已保存的捕获文件。默认情况下会自动安装最新版本的Npcap。若想要安装或重装Npcap可以勾选Install Npcap框,若不想安装,取消勾选即可。

2024-09-26 18:02:15 2940

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除