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


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


1.面试前


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


2.介绍


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


3.得到问题


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


4.编码过程中

aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3Bu



5.编码过后


事项
aHR0cHM6Ly9tbWJpei5xbG9nby5jbi9tbWJpel9w

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

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


6.结束


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


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

译者:蒲公英