我的测试学习站TEST LEARNING HUB
开始学习
首页/精华文章/10. 手撕代码面试表达技巧

10. 手撕代码面试表达技巧

手撕代码面试不只是写出答案,还要让面试官看到你的思路、沟通能力、边界意识和调试能力。很多候选人明明会做题,但面试时一紧张就直接闷头写,写完也不解释,出了错也不知道怎么定位。测试岗位尤其要体现测试思维:确认需求、分析边界、设计样例、验证结果。

面试官看手撕代码,不只是看最终代码是否完美,还会看你解决问题的过程。你能不能先问清题意,能不能讲出为什么用 Map 或双指针,能不能主动补空数组和重复元素,能不能发现自己的 bug 并修正,这些都会影响评价。

一、不要一上来就写代码

拿到题目后,先复述题意:

我确认一下:输入是一个整数数组和目标值,输出是两个下标。如果不存在就返回空数组,对吗?数组里可能有重复元素吗?

这样做有三个好处:

  • 避免理解错题;
  • 获取边界条件;
  • 展示沟通能力。

二、先讲思路

写代码前先说方法。

例如两数之和:

暴力法是双层循环,时间复杂度 O(n²)。我可以用 Map 保存遍历过的数字和下标,遍历当前数字时查 target - num 是否出现过,这样时间复杂度可以降到 O(n)。

这会让面试官知道你不是蒙代码。

三、写代码要清晰

代码风格尽量简单:

  • 变量名有意义;
  • 不写过度炫技的一行代码;
  • 分支清晰;
  • 边界先处理;
  • 返回值明确。

测试岗面试更看重稳定和可读,不需要为了炫技写难懂代码。

四、边写边解释关键点

不用每行都解释,但关键逻辑要说:

这里先保存 next_node,是为了反转链表时不丢失后面的节点。
这里 left 移动到 seen[ch] + 1,是为了保证窗口内没有重复字符。

关键解释能体现你真的理解。

五、写完一定要跑样例

写完后不要说“好了”。要主动用样例走一遍。

例如二分查找:

用 nums=[1,3,5,7], target=5。left=0,right=3,mid=1 值为 3,小于目标,所以 left=2;mid=2 命中,返回 2。

跑样例可以暴露很多边界错误。

六、主动补边界用例

测试岗位尤其要主动补边界。

常见边界:

  • 空数组;
  • 单元素;
  • 重复元素;
  • 目标不存在;
  • 全部相同;
  • 字符串为空;
  • 链表为空;
  • 结果在开头或结尾;
  • 大数据量。

你可以这样说:

我再补几个边界:空数组返回 -1;单元素命中返回 0;目标在首尾都能覆盖;重复元素如果要求第一个位置,需要改成继续向左找。

七、说复杂度

面试最后可以补一句复杂度。

这个解法遍历一次数组,时间复杂度 O(n),使用了 Map,空间复杂度 O(n)。

复杂度表达不用很长,但要准确。

八、写错了怎么办

写错很正常,关键是不要慌。

处理方式:

  1. 停下来复盘样例;
  2. 找到变量变化;
  3. 修正循环条件或边界;
  4. 解释原因。

可以说:

这里我发现 while 条件会漏掉最后一个元素,因为我使用的是闭区间,所以应该是 left <= right。

能自查并修正,反而是加分项。

九、测试岗表达优势

测试工程师可以在代码题中突出:

  • 需求确认;
  • 边界意识;
  • 自测样例;
  • 异常输入;
  • 可读性;
  • 结果验证;
  • 问题定位。

不要和算法岗拼难度,要展示测试岗位该有的严谨性。

十、不同题型表达模板

数组题

我先看数组是否有序、是否允许修改原数组、是否有重复。如果是查找类,我考虑 Map;如果是原地移动或有序数组,我考虑双指针。

字符串题

我先确认是否区分大小写、是否包含空格特殊字符。回文和反转用双指针,频次统计用 Map,最长无重复子串用滑动窗口。

链表题

链表题我会先处理空链表和单节点,然后画指针关系。反转链表要先保存 next,避免断链。

二分题

我会先确认数组有序,并明确使用闭区间模板,循环条件是 left <= right。

十一、常见扣分点

  • 不确认题意直接写;
  • 写完不验证;
  • 不处理空输入;
  • 变量名混乱;
  • 复杂度说错;
  • 明显 bug 不自查;
  • 只会背代码,解释不清;
  • 遇到追问直接沉默。

十二、面试回答模板

如果面试官问“手撕代码面试怎么表达”,可以这样回答:

我手撕代码时会按固定流程来:先确认题意和边界,比如输入是否为空、是否有重复、是否要求原地修改;然后讲解思路,比如用 Map、双指针、滑动窗口还是二分;接着写清晰可读的代码;写完后用正常样例跑一遍,再补充边界样例;最后说明时间和空间复杂度。如果代码中发现问题,我会通过样例回溯变量变化来修正。测试岗面试中,我会特别强调边界用例和结果验证。

十三、练习清单

  1. 每道题先复述题意;
  2. 每道题先讲思路;
  3. 写完跑一个样例;
  4. 补三个边界;
  5. 说复杂度;
  6. 练习两数之和表达;
  7. 练习反转链表表达;
  8. 练习二分查找表达;
  9. 录音复盘表达;
  10. 做一次模拟面试。

手撕代码面试的核心不是沉默写代码,而是把解决问题的过程展示出来。测试岗尤其要把边界验证和自测能力讲出来。

配套刷题: