第一部分 · 数据结构与算法(DSA)
note
这一整部分的目标:用工程实战级的深度,把 DSA 在脑子里重新 "焊一遍"。读完你应该能在日常工程里:看一段代码就能说出大概的复杂度,看一个需求就能给出合理的数据结构选型,并能落地到至少两种语言。
为什么从头学 DSA
很多有经验的工程师会把 DSA 视为"面试才用得上"的东西。这是一个严重的认知偏差。真实世界里,DSA 决定的不是能不能写出代码,而是:
- 你能不能在几亿行日志里 5 分钟内找到重复事件;
- 你的服务体系结构能不能替换一个
map为lsm-tree,写入吞吐翻一个量级; - 你能不能看出来某个"看起来正确"的缓存实现其实是 O(n²),被一个意外输入直接打挂。
DSA 不是面试题,是 "数据形态 × 性能空间" 的设计空间本身。
这里和别处有什么不同
- 每个数据结构:语义 → 复杂度 → 实现 → 工程取舍 → 易错点 → 经典题。
- 多语言实现:Go / TypeScript / Python / C++,对照看会让你发现"语言运行时帮你藏了多少东西"。
- 重视 amortized / worst-case / cache 的差异,而不是只记一张表。
- 每章末尾有"反推设计":给一个真实负载,让你反推出该用什么。
阅读路径建议
算法 = 空?→ 先读《复杂度分析》
│ 因为后面每一章都会用 O(·) × θ(·) × Θ(·)
↓
结构 → 数组/链表/栈队列/哈希
↓
树 → 二叉搜索树 → 平衡 → 堆 → 字典树/并查集
↓
图 → 表示 → 路径 → MST → 拓扑 → 网络流
↓
算法范式 → 分治/贪心/DP/回溯/分支限界
↓
专题 → 排序/搜索/字符串/数论
↓
附录 → snippets + LeetCode 路线
tip
如果你不是第一次学,可以快速翻过前面,但复杂度分析和树的非递归实现这两节建议精读——这俩最容易"以为自己懂了"。