首页
/ Tech Interview Handbook 算法 Cheat Sheet 体系:18 个主题优先级、统一骨架与通用面试技巧解析

Tech Interview Handbook 算法 Cheat Sheet 体系:18 个主题优先级、统一骨架与通用面试技巧解析

2026-09-04 14:03:25作者:范垣楠Rhoda

在 tech-interview-handbook 仓库中,apps/website/contents/algorithms/study-cheatsheet.md 是 "Algorithms" 栏目唯一的入口页(front-matter 中 sidebar_label: Introduction),它定义了整个数据结构与算法备考资料的组织方式:18 个主题的优先级分级、每份 cheat sheet 必须包含的 7 类内容,以及一套与具体题目无关的通用面试技巧。读完本文,你能掌握如何按优先级搭建自己的 DSA(数据结构与算法)刷题体系,理解仓库中每份专题 cheat sheet 的固定骨架(时间复杂度表、corner cases、技巧与推荐题),并可以直接套用文档总结的输入校验、类型检查、功能式/命令式平衡等实战检查清单。

这个 Cheat Sheet 体系解决什么问题

原文档开篇给出了该栏目的定位:深入覆盖算法面试中高频出现的数据结构与算法的实用知识和技巧。它的核心论断是——"你的技术储备越多,通过面试的概率越高;这些技巧能帮你发现可能遗漏的 corner case,甚至直接引导出最优解"。

从仓库结构可以印证这个入口页的枢纽地位:

  • 侧边栏配置 sidebars.jsalgorithms/study-cheatsheet 放在算法栏目首位;
  • 导航与首页(docusaurus.config.jsindex.js)都以 /algorithms/study-cheatsheet 作为 "Algorithms" 链接目标;
  • 旧路径重定向(_redirects/algorithms/introduction/algorithms/algorithms-introduction)最终都指向该页,说明它是算法板块的总入口;
  • 仓库其他核心文档也反复回链到它:coding-interview-prep.md 称这些 cheat sheet 是作者"亲自整理的备考笔记,把每个数据结构/算法的最佳学习资源、最佳 LeetCode 题和 must-remembers(技巧、corner cases)组织成一页纸";coding-interview-cheatsheet.md 在"澄清假设"和"讨论边界情况"两个检查步骤中直接引用算法 cheat sheets 作为常见假设与 corner case 的查询来源。

每份专题 Cheat Sheet 的 7 类固定内容

原文档规定了每个主题的学习指南(study guide)都应包含以下 7 类内容:

  1. 简要概述(A brief overview)
  2. 学习资源(Learning resources)
  3. 语言相关的可用库(Language-specific libraries to use)
  4. 时间复杂度速查表(Time complexities cheatsheet)
  5. 面试中需要注意的事项(Things to look out for during interviews)
  6. 边界情况(Corner cases)
  7. 实用技巧及推荐的练习题(Useful techniques with recommended questions to practice)

对照仓库中实际的专题文件,可以看到这一骨架被完整执行。从 array.md 的源码结构看,实际文件在 7 类规定之外还做了两点扩展:

  • 题型分级:"Recommended questions to practice" 被进一步拆成 Essential questions(学习该主题时必须练习的核心题)和 Recommended practice questions(学完并刷完核心题后再刷的进阶题)两级,hash-table.mddynamic-programming.md 均采用同一结构;
  • 术语表:先给出 "Common terms",例如 array.md 区分了 Subarray(数组中一段连续值,如 [2,3,6,1,5,4][3,6,1] 是 subarray 而 [3,1,5] 不是)与 Subsequence(按原顺序删除部分或全部元素后得到的序列,如 [3,1,5] 是而 [3,5,1] 不是)。这类术语辨析正是面试中题目描述歧义高发区。

以下用三个真实文件说明该骨架各部分的形态:

时间复杂度速查表(array.md)

Operation Big-O Note
Access O(1)
Search O(n)
Search (sorted array) O(log(n))
Insert O(n) 插入需将后续元素整体右移一位,耗时 O(n)
Insert (at the end) O(1) 插入特例,无需移动其他元素
Remove O(n) 删除需将后续元素整体左移一位,耗时 O(n)
Remove (at the end) O(1) 删除特例,无需移动其他元素

array.md 还在 "Things to look out for" 中给出三条实战要点:确认数组是否有重复值(重复会改变答案或让题目变简单/变难);用下标迭代时防止越界;避免在代码里频繁切分或拼接数组——通常 O(n),能用起止下标界定子数组/区间就不要复制数组。

语言库与实现 API(hash-table.md)

Language API
C++ std::unordered_map
Java java.util.Map(用 java.util.HashMap
Python dict
JavaScript ObjectMap

hash-table.md 的时间复杂度表也体现了文档的严谨性:Search/Insert/Remove 均标注为 O(1)*,并附注"这是平均情况;面试中哈希表只关心平均情况"。它还顺带说明了两种冲突解决策略(Separate chaining 与 Open addressing),并明确提示"面试中不太会考冲突解决的实现细节"。

Corner cases 与面试陷阱(tree.md)

tree.md 的 "Corner cases" 列出:空树、单节点、两节点、极端倾斜树(退化成链表);"Things to look out for" 则指出:递归版的前/中/后序遍历必须烂熟于心,并建议进一步挑战迭代版——"当候选人太快写完递归版时,面试官有时会要求迭代版"。该文件还给出了 BST 的四个 O(log(n)) 操作表,并提示"当题目涉及 BST 时,面试官通常期望一个快于 O(n) 的解"。

18 个主题的优先级清单

原文档给出了应该为算法面试准备的完整主题清单及其优先级(下表链接已从原文档的局部相对路径 ./xxx.md 转换为仓库根路径):

Topic Priority
Array High
String High
Hash Table Mid
Recursion Mid
Sorting and searching High
Matrix High
Linked List Mid
Queue Mid
Stack Mid
Tree High
Graph High
Heap Mid
Trie Mid
Interval Mid
Dynamic programming Low
Binary Low
Math Low
Geometry Low

分级逻辑值得注意:High 级(数组、字符串、排序/搜索、矩阵、树、图)覆盖了绝大多数面试轮次的核心题面,Mid 级(链表、队列、栈、堆、Trie、区间、哈希表、递归)是高频辅助结构,Low 级(DP、位运算、数学、几何)是低频但可能区分度较高的加分项。以 dynamic-programming.md 为例,它虽然优先级标为 Low,但内容依然完整——开篇直言"DP 通常用于求解优化问题,唯一变强的方法是刷题,需要一定量的练习才能识别出一题适合 DP",并给出核心题(Climbing Stairs、Coin Change、House Robber、Longest Increasing Subsequence)与进阶题(0/1 Knapsack、LCS、Word Break、Unique Paths、Jump Game 等),技巧部分则点出"有时不需要把整个 DP 表存下来,只保留最近两行或两个值即可"。

仓库中还有一份可作交叉参考的细分主题大纲 topics.md,把各主题展开为二级子项,例如 Hash table 下的"冲突解决算法"、Heaps 下的 Insert/Bubble up/Extract max/Remove/Heapify/Heap sort、Graph 下的邻接矩阵/邻接表/邻接映射、Dijkstra、Bellman-Ford、Topo sort、MST、Prim/Kruskal、Union Find 等;配套的参考实现存放在 experimental/utilities 下,如 mergeSort.jsgraph_dfs.pytrie.pyunion_find.pytree_mirror.py,可当作各主题技巧的动手范本。

通用面试技巧(General interview tips)

这是原文档中信息密度最高的部分,与具体数据结构无关,适用于所有算法题。以下按原文完整梳理:

1. 澄清下意识做出的假设。 很多题目是故意欠规范(under-specified)的,要把你潜意识里做的假设说出来向面试官确认。

2. 永远先验证输入。 检查非法/为空/负数/类型不符的输入,绝不假设参数一定合法。另一种做法是直接和面试官确认"是否可以假设输入合法"(答案通常是"是"),这样可以省下写输入校验代码的时间。

3. 明确时间/空间复杂度要求或约束。 这是选择算法与数据结构的前置条件。

4. 检查 off-by-one(差一)错误。

5. 在无自动类型转换的语言中,确认拼接操作数的类型一致int/str/list 混拼是隐蔽 bug 的高发点。

6. 写完代码后,用若干示例输入测试你的解法。

7. 判断算法是否需要被多次调用。 例如运行在 Web 服务器上时,输入很可能可以预处理,从而提升每次调用的效率。

8. 混合使用函数式与命令式两种范式:

  • 尽可能写纯函数;纯函数更容易推理,能减少实现中的 bug;
  • 除非确定自己在做什么,否则避免修改按引用传入的参数;
  • 函数式写法由于不可变性和反复分配新对象,空间开销通常更大;命令式代码操作已有对象,速度更快。因此需要在"正确性 vs 效率"之间取得平衡,在合适的位置使用适量的函数式与命令式代码;
  • 避免依赖并修改全局变量——全局变量会引入状态;
  • 如果不得不依赖全局变量,确保不会误改它。

9. 提速的两种途径与理论上限。 原文指出,提高程序速度只有两条路:(1) 选择更合适的数据结构/算法;(2) 使用更多内存。后者体现经典的时空权衡,但"更快的速度不一定必须以牺牲空间为代价"。同时注意时间复杂度存在理论下限——例如在未排序数组中找最小/最大元素,任何算法都不可能快于 O(N)。

10. 数据结构是你的武器。 为正确的战场选择正确的武器是胜利关键,务必熟悉每种数据结构的强项及其各类操作的时间复杂度。数据结构还可以组合增强(augment)以获得跨操作的效率:例如哈希表配合双向链表可以实现 LRU 缓存中 getput 均为 O(1)。

11. 哈希表是最常被使用的数据结构。 如果卡在一道题上,最后的补救办法是枚举常见的候选数据结构("好在数量不多"),逐一考虑其是否适用于当前问题——作者本人靠这一招救过场。

12. 如果代码中走了捷径,大声说出来。 向面试官声明你在非面试环境(无时间压力)下会怎么做。原文给出的示例是:"我会写一个正则来解析这个字符串,而不是用可能覆盖不全所有情况的 split()。"

推荐的课程资源

入口页末尾通过导入 _courses/AlgorithmCourses.md 挂载了课程推荐区块(各专题页末尾复用同一组件),该区块列出了三门课程:

  1. AlgoMonster——由 Google 工程师打造,采用数据驱动方式教授最有用的题型模式,含数据结构与算法基础速览;一次性付费、终身访问,非订阅制;
  2. Grokking the Coding Interview: Patterns for Coding Questions(Design Gurus)——按"题型模式"而非逐题组织练习,支持 Java、Python、C++、JavaScript 多语言练习与逐题可视化讲解,强调"学习并理解模式,而不是背答案";作者明确表示认同按模式学习的方式并亲测有效;
  3. Master the Coding Interview: Data Structures + Algorithms(Udemy)——作者描述为"19 小时内容的全能包",除算法外还覆盖简历、非技术面试与谈薪,编码演示使用 JavaScript。

这三门课与 18 个专题 cheat sheet 形成互补:cheat sheet 负责"考什么、注意什么、练哪几道题"的课程表,课程负责系统化的解题模式训练。

如何使用这套体系:可验证的落点

结合仓库内证据,一套可执行的备考路径是:

  1. 定顺序:按上表优先级,从 High 级六个主题(Array、String、Sorting and searching、Matrix、Tree、Graph)开始;
  2. 走骨架:对每个主题,依次读该专题页的 Introduction → Learning resources → Common terms → Time complexity → Things to look out for → Corner cases → Techniques 七个固定小节;
  3. 刷两级题:先刷 Essential questions,再刷 Recommended practice questions(两个清单在每篇专题页末尾均有明确分节);
  4. 对答案:做题前用 coding-interview-cheatsheet.md 的面试流程检查项自查,其中"澄清假设"与"边界情况"两项直接回链到本文档所在的算法 cheat sheets;
  5. 查实现:需要动手验证某个技巧(排序、DFS、Trie、并查集等)时,参考 experimental/utilities 下的 JavaScript 与 Python 参考实现,以及 topics.md 的二级主题大纲做查漏补缺。

需要说明的是,本文所有内容均取自当前仓库文档与源码:优先级表、7 类固定内容、通用技巧逐条出自 study-cheatsheet.md 原文;各专题的时间复杂度表、术语辨析与题型清单分别出自对应专题文件;课程信息出自 AlgorithmCourses.md。仓库中不存在该栏目效果的量化数据,本文也不做任何此类断言。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
889
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
982
502
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384