代码面试技巧
作者 Aaron Cao · 更新于
写代码前先澄清问题和限制条件,大声说出你的思路,先做出可运行的方案再优化,用边界情况测试,并说明时间和空间复杂度。面试官评估的是你的推理和沟通方式,而不仅仅是最终代码能否运行。
写代码之前:先澄清,再规划
如果你在压力下的本能反应是立刻开始打字,这一节正是为了纠正这种本能。最优秀的候选人往往会先花几分钟完全不写代码,面试官会注意到这一点。
先用自己的话复述问题,并向面试官确认理解无误。询问限制条件:输入规模、取值范围、输入是否已排序、如何处理空输入或格式错误的输入。然后在动手写任何代码之前,说明你打算采用的方法及其复杂度。这一短暂的规划步骤能及早发现理解偏差,并展示结构化思维,而这正是评分的重要部分。
写代码时:边思考边说,逐步构建
沉默是能力很强的解题者显得能力不足的最常见方式。持续讲解你正在写什么以及为什么这样写,这样面试官才能跟上你的思路,并在你偏离方向时提醒你。
先得出正确答案,再追求巧妙。一个能运行的暴力解法,价值高于一个从未编译通过的精妙想法,等有了可运行的方案之后再优化。以小而可测试的片段编写代码,使用清晰的变量名;如果卡住了,说出你正在考虑的思路,而不是陷入沉默。面试官经常会给提示,但前提是他们能听到你当下的想法。
代码跑通之后:测试、边界情况与复杂度
代码编译通过并不代表完成;只有当你尝试过让它出错之后才算完成。先用一个普通输入走一遍代码逻辑,再故意用一些刁钻的输入:空输入、单个元素、重复元素、负数、限制条件允许的最大规模。
设想一位应聘中级职位的前端工程师,写出了一个可运行的双指针解法,然后主动、不需要提示地用空数组和单元素数组走一遍逻辑,并说明其运行时间为 O(n)。这最后一分钟的自我测试和复杂度分析,往往是决定录用还是待定的关键,因为它表明这名工程师在实际工作中也会发现自己的 bug。即使没有被要求,也要主动说出时间和空间复杂度。