只有程序员看的懂面试圣经|如何拿下编程面试

当我最初开始参加编程面试的时候,我所有最心仪的公司都忽视了我。现在回头看那个时候,我发现自己当时去参加面试都完全没做任何准备。虽然已经有许多博客文章和书籍在讲编程面试,但现在的我作为面试官,坐在桌子的另一边,还是能看到许多来参加编程面试的人没做任何准备,或者准备得很糟糕。这也就是为什么我开始写这篇指南的原因,刚毕业时的我、第一次参加面试的我一定非常想有这么一份指南来指引自己。而从现在开始,我自己也会照着这份指南去做。

多年以来,我在好几家公司工作过,所以我的面试技巧得到了很好的磨炼,而且我参与面试的过程也教会了我该说什么、该做哪些准备,以及如何面试。在这篇指南里,你会了解到面试的概况、面试取得成功的六大步骤,以及我在考察数据结构和算法时所考虑的方面。这篇指南无法确保你找到工作,但它能帮助你尽最大可能给面试官留下一个好印象。

声明:本文中的观点完全出自个人视角,与我目前或者以前的雇主没有关系。

面试过程

本节概述了硅谷公司的面试过程,仅仅是个情况介绍,大家可以跳过去往后看。

除了直接申请面试以外,一般说来,还有两种途径来获得面试的机会:由现在的雇主推荐,或者通过LinkedIn。虽然前者会快一些、更尊敬一些,但后者很可能是大部分应聘者所走的路径。事实上,每天都有无数的招聘人员趴在LinkedIn上,他们唯一的工作就是寻找和接触有可能换工作的员工,所以一定要保证自己的信息是最新的,而且要多交人脉、多请别人来认可自己的技能,并且要把你所具备的技能、做过的个人项目或者对开源软件所做的贡献加到个人页面里去。

最初的接触一般是通过电子邮件进行的,然后招聘人员会给你打电话,大概了解一下你的技术背景。如果你的技能和他们正在寻找的技能一致,他们就会安排一次电话面试,在电话面试时,你可能就会被要求在一份共享的在线文档里编程。那么你就会知道,这份文档很可能没有任何代码补全和句法高亮的功能。电话面试会持续半小时到45分钟,如果你表现不错,就会被邀请去参加现场面试。现在如果没有电话面试、或者在电话面试之外,你可能还得去参加一个小的编程项目。

现场面试由几次面试组成,总体会持续45分钟到一个小时。这些面试会和电话面试非常像,只是问题会更难——不过能亲眼见到面试官多少算是有所补偿。现场面试数周之后,所有反馈应该都被看过、招聘决定就会做出,招谁不招谁也就定了。如果你没拿到offer,也要明白面试是一个随机的过程,包含运气的成分,不妨把它看作是一次学习的经历。可能你还会想起布莱恩·阿克顿(BrianActon)面试Facebook和Twitter不成、后来成为WhatsApp联合创始人的故事。

理论上讲,用哪种编程语言并不重要,但你面试需要用某种特定语言来完成的工作时除外,比如iPhone开发者或者前端开发者。我强烈建议你用正在面试的公司所使用的一种编程语言来编程(以及练习面试问题)。

面试获得成功的六个步骤

编程面试的目的,是为了确定你的编程水平有多高。一般来说,你将被要求用编程来完成一个功能或者方法,但有时候,你会需要编辑一个类的定义,或者设计一系列相关的代码模块。在任何一种情况下,你都要有条不紊地解决问题,并遵循以下六个步骤:

1、首先,要确保你理解了面试官的问题。许多问题都是故意措辞模糊或者模棱两可,这个时候你可以请面试官把问题说清楚,从而确保你真正回答面试官的问题。你的提问同时还有一个好处,就是它能给你自己一些时间,让你的脑子转起来。

2、用一到两个例子来确定问题的限制条件和要求(在现场面试时在白板上完成这个过程,在电话面试时在笔记本上完成)。尝试用中等规模的例子,以便覆盖到一些特殊情况。如果你能想到可能相关的表格,就把它画出来。事实上,把你想到的任何东西都写下来是会有帮助的,因为它能为你提供一个视觉锚点,从而让你在走不通时或者思考过程中随时返回某一个点。

3、把话说清楚,这可能是最重要的一步。要试着让面试尽可能有更多的互动,面试官不知道你在想什么,而让他们参与到你的思考过程里,会让她给你一些有用的提示,防止你偏向错误的方向。你的目标就是要先和面试官确证你的答案,然后再去写代码,而且你考虑答案越清晰、越高效,你得到的即时反馈也就越好。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f441ec485446e3810a030f2eaa1f8bd8.html