<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Raymond_yang1102的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Raymond_yang1102</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Raymond_yang1102]]></copyright><item><title><![CDATA[LRU 缓存：为什么教科书答案在工业界全被改写？——哈希表 + 双向链表、Redis 近似 LRU 与 InnoDB 两段式 LRU 的工程级解析]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/166370475</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/166370475</guid><author>Raymond_yang1102</author><pubDate>Tue, 22 Sep 2026 18:47:33 +0800</pubDate><description><![CDATA[某电商详情页缓存，Redis 单实例 、策略 。上线时热点命中率 96%，两个月后掉到 71%。值班同学的第一反应是容量不够，把内存扩到 16 GB，重启，命中率回来了三天，第四天又跌回 72%。抓  看 ，每秒在涨；再看业务侧日志，凌晨两点有一个定时任务全量拉取在售商品（约 12 万条 key）写进 Redis 做对账。这个任务跑完，白天热点命中率必然塌一轮。数据摆出来是这样的：这份表格里没有一个格子指向"内存不够"。问题的形状是：一个把"最近被访问过"当作"将来还会被访问"的算法，遇到一次性灌入的冷数据]]></description><category></category></item><item><title><![CDATA[柱状图中最大的矩形：单调栈为什么被称为“一题通八题“？——从左右边界到哨兵的工程级解析]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/165888376</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/165888376</guid><author>Raymond_yang1102</author><pubDate>Fri, 18 Sep 2026 19:06:33 +0800</pubDate><description><![CDATA[0。]]></description><category></category></item><item><title><![CDATA[接雨水：为什么多数人写不出 O(n) 的栈解法？——从暴力到双指针到单调栈的工程化选择]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/165755315</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/165755315</guid><author>Raymond_yang1102</author><pubDate>Thu, 17 Sep 2026 18:53:41 +0800</pubDate><description><![CDATA[leftMax。]]></description><category></category></item><item><title><![CDATA[Top K 工程实战：从热搜榜到第 K 大元素，为什么 80% 候选人栽在「快排分区 vs 堆」的二选一？]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/165241040</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/165241040</guid><author>Raymond_yang1102</author><pubDate>Sun, 13 Sep 2026 18:25:07 +0800</pubDate><description><![CDATA[half。]]></description><category></category></item><item><title><![CDATA[双指针 + 滑动窗口：为什么这两招能压到 O(n)？——从秋招最高频模式看 O(n) 解法的工程取舍]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/164629739</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/164629739</guid><author>Raymond_yang1102</author><pubDate>Tue, 08 Sep 2026 18:37:48 +0800</pubDate><description><![CDATA[—提示：这题的窗口会出现"第二层收缩逻辑"，它和标准"右扩左缩"差在哪，正是区分"会模板"和"会变通"的分水岭。于是很多人刷完 200 道，对这两个模式的理解停留在"哦，是一种技巧"，而不是"一种有严格正确性证明的算法范式"。正因为每次排除的都是"一整段"而不是"一个点"，总复杂度才从 O(n²) 收敛到 O(n)。很多人的认知是"哈希 O(n) 空间换时间，双指针 O(1) 空间，双指针更省内存"。常数上能省下约 2 倍。是双指针里最需要"证明"的一题，也是面试官最爱追问"你为什么这么移动"的题。]]></description><category></category></item><item><title><![CDATA[最短路径：从 BFS 到 Dijkstra、Bellman-Ford、Floyd——三种改写层序的进路，为什么 Dijkstra 必须用优先队列？]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/164483820</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/164483820</guid><author>Raymond_yang1102</author><pubDate>Mon, 07 Sep 2026 18:36:26 +0800</pubDate><description><![CDATA[这一句叫松弛（relax）。名字的来由：把 "dist[u] 到 dist[v] 的这条边" 想象成一根橡皮筋，若 dist[u] + w < dist[v]，说明原来的 dist[v] 绷得太紧（太大了），现在可以放松到更小的值。松弛操作是几乎所有最短路算法（Dijkstra / Bellman-Ford / SPFA / Floyd）共用的原子动作。松弛为什么正确？它本质是在迭代三角不等式。]]></description><category></category></item><item><title><![CDATA[图论基础：BFS 与 DFS 从模板到应用——同样的遍历，为什么有时用队列有时用递归？]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/164340099</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/164340099</guid><author>Raymond_yang1102</author><pubDate>Thu, 03 Sep 2026 21:08:12 +0800</pubDate><description><![CDATA[这解释了为什么判环必须用 DFS（或等价的三色/入度机制），而 BFS 无法直接回答"有没有环"——BFS 队列不保留"父路径"信息，它只记得"谁是我在第几层发现的"，无法判断"这个邻居是不是我的祖先"。染色法是 BFS/DFS 都能做的"变体"——它用"两种颜色"代替"距离/路径"，本质仍是三色/两色的状态机。任何"多记一次"（visited 打晚了、重复入队）都会让这个账从线性变成指数，这就是为什么"入队即标记""每条边只被起点扫一次"是模板里不可妥协的纪律。：本篇 BFS 只能处理"无权图最短路"。]]></description><category></category></item><item><title><![CDATA[为什么TopK问题都要用堆？堆与优先队列的工程级演进解析]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/164000877</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/164000877</guid><author>Raymond_yang1102</author><pubDate>Sun, 23 Aug 2026 18:46:57 +0800</pubDate><description><![CDATA[如果一个个 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是"从下往上"建堆；]]></description><category></category></item><item><title><![CDATA[为什么MySQL索引用B+树不用红黑树？从二叉树到B+树的工程级演进解析]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/163979435</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/163979435</guid><author>Raymond_yang1102</author><pubDate>Sat, 22 Aug 2026 19:42:45 +0800</pubDate><description><![CDATA[上一篇我们讲过链表——每个节点一个next指针，串成一条链。把每个节点的一根指针变成两根。int val;Node* left;// 左子树// 右子树定义本身是递归的：一棵二叉树是空树，或"根节点 + 左子树 + 右子树"，左右子树各自也是二叉树。🔧工程建议：写树相关的代码时，凡是看到"子树"两个字，第一反应就该写递归——树的递归定义决定了递归解法是天然匹配的。]]></description><category></category></item><item><title><![CDATA[为什么Java HashMap的链表超过8就转红黑树？从哈希函数到冲突解决的工程级深度解析]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/163893552</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/163893552</guid><author>Raymond_yang1102</author><pubDate>Wed, 19 Aug 2026 18:13:28 +0800</pubDate><description><![CDATA[最坏情况 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%。]]></description><category></category></item><item><title><![CDATA[栈与队列：从函数调用到消息队列，无处不在的受限表]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/163803933</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/163803933</guid><author>Raymond_yang1102</author><pubDate>Sun, 16 Aug 2026 23:04:58 +0800</pubDate><description><![CDATA[每个元素最多入队一次、出队一次（不管是被更大的从队尾挤出，还是被窗口从队首过期弹出）。总操作 ≤ 2n →。]]></description><category></category></item><item><title><![CDATA[链表：指针串联的灵活锁链，为什么它能随便插删？]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/163803865</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/163803865</guid><author>Raymond_yang1102</author><pubDate>Sun, 16 Aug 2026 22:55:46 +0800</pubDate><description><![CDATA[链表本质#链表VS数组#侵入式链表#LRU设计关键词：链表, 双向链表, 指针操作, 侵入式链表, LRU缓存, list_head受众：计算机专业人员为主，兼顾初学者（讲清深度，不降深度）]]></description><category></category></item><item><title><![CDATA[数组：从内存模型到工程实现，重新理解这个最基础的数据结构]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/163704374</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/163704374</guid><author>Raymond_yang1102</author><pubDate>Fri, 14 Aug 2026 18:32:28 +0800</pubDate><description><![CDATA[动态数组扩容单次 O(n)，为何尾部插入记作 O(1) 摊还？用聚合法证明：设容量从 1 开始，每次翻倍。n 次插入总代价 2n-1，平均每次 (2n-1)/n ≈ 2 →O(1) 摊还。扩容因子 > 1（几何增长）。若每次只扩容 1 个（线性增长），总搬迁 1+2+3+...+n = O(n²)，摊还 O(n)——这是新手常犯的致命错误。]]></description><category></category></item><item><title><![CDATA[【2024最新版】WireShark4.4.0安装教程（Windows11）]]></title><link>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/142566977</link><guid>https://blog.youkuaiyun.com/Raymond_yang1102/article/details/142566977</guid><author>Raymond_yang1102</author><pubDate>Thu, 26 Sep 2024 18:02:15 +0800</pubDate><description><![CDATA[WireShark安装程序包包含最新的Npcap安装程序。若不安装Npcap，将无法捕获实时网络流量，但是能够打开已保存的捕获文件。默认情况下会自动安装最新版本的Npcap。若想要安装或重装Npcap可以勾选Install Npcap框，若不想安装，取消勾选即可。]]></description><category></category></item></channel></rss>