Skip to content

面试策略

本章目标:掌握算法面试的五步法,学会沟通技巧,从容应对各种面试场景。

你将学到

  • 面试五步法标准流程
  • 沟通与白板技巧
  • 复杂度口述方法
  • 遇到没思路时的破局方法
  • 最容易翻车的边界用例清单

面试五步法

算法面试不是默写代码,而是展示思维过程的舞台。以下五步法适用于绝大多数面试场景:

第一步:澄清题意(2-3 分钟)

目标:确保你完全理解了题目。

  • 主动问问题:数据范围?有没有负数?数组是否有序?是否可以修改输入?
  • 复述题目:用你自己的话把题意说一遍,确认理解无误
  • 举几个例子:用小例子验证你对题目的理解

常见澄清问题清单:

- 输入可以为空吗?大小为零?
- 数组可以有重复元素吗?
- 元素可以是负数吗?
- 需要原地修改吗?
- 对时间/空间复杂度有要求吗?
- 需要返回所有解还是解的数量?

第二步:暴力解(2-3 分钟)

目标:先给出一个正确的解法,再逐步优化。

  • 从最直观的暴力解开始说,即使你知道是 O(n²) 甚至 O(2ⁿ)
  • 说清楚暴力解的思路和复杂度
  • 明确指出瓶颈在哪里——"这部分的 O(n²) 可以用哈希表优化"

面试官想看到的是你的推理过程,而不是直接跳到最优解。

第三步:优化方案(3-5 分钟)

目标:从暴力解推导出更优解。

  • 分析瓶颈:时间花在哪里?空间花在哪里?
  • 尝试已知模式:这个问题像什么类型?(双指针?DP?二分?)
  • 用小例子手动模拟优化思路,确认正确性

优化思路清单:

O(n²) → O(n):哈希表、双指针、滑动窗口、单调栈
O(n) → O(log n):二分查找
O(2ⁿ) → O(n²):动态规划(记忆化)
O(n) 空间 → O(1):滚动数组、原地修改

第四步:编码(10-15 分钟)

目标:写出干净、正确的代码。

  • 先写注释列出主要步骤(等于打草稿)
  • 变量命名要有意义(left/right 而非 a/b
  • 边写边解释关键逻辑
  • 写完后快速 review 一遍

第五步:测试(3-5 分钟)

目标:验证代码正确性,展示严谨态度。

  • 用题目给的例子走一遍
  • 用空输入、单元素测试
  • 检查边界和特殊条件

沟通技巧

边想边说

面试官不在意你是否沉默思考 30 秒,但长时间的沉默会让面试官无法帮你。养成边想边说出声的习惯:

"我在考虑用滑动窗口,因为这道题要求连续子数组的最值……窗口需要维护一个最大值,我可以用单调队列……"

应对"没思路"

如果拿到题目完全没思路,试试以下策略:

  1. 画几个小例子:手动算 2-3 个例子,找规律
  2. 从暴力开始:哪怕 O(2ⁿ) 也写出来,然后找冗余
  3. 分类讨论:把问题拆成几种情况
  4. 联想类似题目:"这和 XX 题很像"
  5. 寻求提示:礼貌地请求——"我想确认一下,这里是否可以修改输入?"

白板技巧

  • 先在角落写小例子
  • 代码不要写太挤
  • 变量名短但有含义
  • 留出修改空间

复杂度口述模板

"时间复杂度是 O(n log n),因为排序需要 n log n,后面的双指针扫描是 O(n),
总体由排序主导。空间复杂度取决于排序实现,快排是 O(log n) 的递归栈空间。"

要点:

  • 说清楚为什么是这个复杂度
  • 区分最坏情况和平均情况
  • 别忘了空间复杂度(包括递归栈)

最容易翻车的边界用例

场景示例容易出什么问题
空输入[], ""数组越界、空指针
单元素[1]循环不执行、返回默认值
负数[-3, -2, -1]最大值/乘积逻辑错误
全相同[1, 1, 1]去重/比较逻辑遗漏
已排序[1, 2, 3, 4]二分边界、快速排序退化
逆序[4, 3, 2, 1]排序算法退化
超大输入n = 10⁶O(n²) 超时、整数溢出
循环环形链表死循环、栈溢出
最值边界INT_MAX, INT_MIN溢出、abs() 对 INT_MIN
二进制全 0 或全 1位运算边界

时间管理建议

一场 45 分钟的算法面试时间分配:

澄清题意:     3 分钟
讨论方案:     7 分钟
编码:        20 分钟
测试调试:     10 分钟
提问环节:      5 分钟

如果 20 分钟还没写出代码,果断简化方案——一个正确的暴力解远好于一个写不完的最优解

面试后的复盘

每次面试后记录:

  1. 题目是什么?
  2. 我用了什么方法?
  3. 哪里卡住了?
  4. 面试官给了什么提示?
  5. 最优解是什么?

面试是最好的训练。每次失败都是查漏补缺的机会。

延伸阅读

基于 VitePress 构建 · 部署于 Cloudflare Pages