这是关于技术面试要做和不要做的一个列表,主要用于算法面试。其中一些可能只适用于白板面试或电话交流,但大多数两者都适用。每次面试前我都会温习这个清单,提醒自己,并最终把所有这些都消化到我不再需要依赖的地步。


图例: = 要做,   = 不要做,    = 视情况而定


1.面试前


事项
准备笔,纸和耳机/头戴式耳机。
找一个网络连接良好的安静环境。
确保摄像头和音频正常工作。有几次我不得不重新启动Chrome让Hangouts重新工作。
申请通过Hangouts/Skype而不是电话面试;Hangouts/Skype更容易传递链接或文本。
采用熟悉的编程语言。 
熟悉编码环境(CoderPad/CodePen)。设置编码的快捷方式,打开自动填充,tab的空格数量等。
准备面试中常见问题的答案。
准备面试结束时要问的一些问题。
穿着舒适。通常你不需要穿时髦的衣服,休闲装就可以。T恤衫和牛仔裤在大多数地方都是可以接受的。
镇静沉着。
如果可能的话,关掉网络摄像头。


2.介绍


事项
在一两分钟内用几句话介绍自己。
提及与你申请的职位相关的兴趣点。
听起来热情!带着微笑说话,你的声音自然会更迷人。
自我介绍花费太长时间。你花在谈话上的时间越多,你编码的时间就越少。


3.得到问题


事项
在面试官面前重复这个问题。
澄清你下意识做的任何假设。许多问题都是故意规定的。一个像树的图很可能是一个允许循环的图,而一个简单的递归解法无效。
澄清输入格式和范围。询问输入是否可以被假定为格式良好的和非空的。
通过一个小例子来确保你理解这个问题。
解释一个高水平的方法,即使它是“蛮力”的。
改进方法并优化。减少重复工作和缓存重复的计算。
仔细想想,然后陈述和解释你采用方法的时间和空间的复杂性。
如果卡住了,想想你以前见过的相关问题,以及它们是如何解决的。查看本节的提示。
忽略给你的信息。每个都很重要。
直接跳到编码。
在没有面试官允许的情况下开始编写代码。
对你的方法或分析不太确定。


4.编码过程中



5.编码过后


事项

仔细细看代码来查找错误,就好像这是你第一次看到别人写的代码一样。

检查一个错误。 
想出更多的测试用例。尝试极端测试用例。
用这些测试用例单步执行代码。
寻找你可以重构的地方。
重申代码的时间和空间复杂度。
解释取舍以及在给定更多时间的情况下如何改进代码/方法。
马上宣布你完成了编码。先做上面的事!
与面试官争论。他们可能是错的,但鉴于他们熟悉这个问题,这是不大可能的。


6.结束


事项
问问题。更重要的是,问针对该公司的好的、引人入胜的问题!从这个列表(日后会作为单独的文章发出)中挑选一些问题。
感谢面试官。
询问你的面试表现。会很尴尬。
什么都不问就结束面试。


英文原文:https://github.com/yangshun/tech-interview-handbook/blob/master/preparing/cheatsheet.md

译者:蒲公英