如果你是一个刚毕业的学生业生或一个职业生涯中期的工程师,那么准备接受你梦寐以求的工作的技术面试可能既费时又令人紧张。想象一下,人们期望你能够在现场解决一个复杂的挑战,并将其转化为无错误的代码?
好了,不用担心了。在这篇文章中,我将向您展示一些提示和技巧,以帮助您在技术面试中度过难关并获得下一个梦想的工作。
面试之前
了解范围让我们面对现实吧:多年的计算机科学学习包含很多内容。如果你在没有面试重点准备的情况下复习资料,你可能会面临精力分散的问题。好消息是:许多公司都足够信息透明,可以让您广泛了解面试中涉及的重点。就问招聘人员好了。
尽早准备你应该为自己面试准备足够的时间。作为一般准则,至少提前两周开始准备面试,特别是当你从未接受过技术面试或者很久没有做技术面试了。要做到平均每天花一到两个小时。如果你是全职工作,一定要留出足够的非工作时间进行面试。
为什么?因为需要时间让你进入解决问题的思维模式,并让你重温你在学校学到的计算机科学基础知识,这对于帮助你完成面试是至关重要的。一旦开始,你可能会对你需要多少 CS 知识感到惊讶,并且你会庆幸你尽早准备,所以你不必急于完成。
当我准备在微软面试时,我开始准备两周。事后看来,我认为它在我顺利通过微软的面试中发挥了重要作用。不相信?这是另一个例子:这家伙花了 8 个月的时间准备 Google 技术面试。这可能听起来有点极端,我不建议你走那么远,但你明白我的意思了。
技术书籍清单以下是为即将到来的技术访谈准备的必读书籍清单。
Cracking the Code Interview, by Gayle Laakmann McDowell. 本书包括 150 个编程面试问题和答案,以及其他建议,为您提供获得顶级软件开发人员工作所需的面试准备。
Programming Interviews Exposed, by John Mongan, et al. 这是来自亚马逊的评价:
查看当前的求职和招聘流程,例如利用 LinkedIn 和其他社交网络作为招聘资源
为程序员提供针对最重要的语言做准备,以便了解和提供多种语言的示例
包括旨在提高您的知识的新的编程问题
提供有关设计模式和排序的全新章节,包括如何处理内存约束和移动性问题
我个人对本书的看法是,除了提高您的技术技能的建议外,它还提供了关于自己营销以及如何开始工作申请流程的完整章节。这样可以鸟瞰整个过程,这对于即将首次进入人才市场的人来说尤其有价值。
Elements of Programming Interviews, by Adnan Aziz, et al. 本书将技术面试问题分成不同的章节,每章都处理 CS 的基本概念,如数组,列表等。
来自亚马逊的评价:
由于不同的应聘人有不同的时间限制,EPI 包括一个有几个场景的学习指南,从周末的 Hackathon 到学期的长期准备,并为每个场景推荐一系列问题。
所有问题都根据其难易程度进行分类,并包含许多变体,以帮助您更广泛地应用所学内容。
所有问题都包括对陷入困境的读者的提示。这模拟了您在真实面试中将面临的问题。
练习!练习!练习!现在你已经花了很多时间复习,你将在下一次技术面试中获得成功。对吗?
好吧,也许还没有。
正如许多应聘人经历的那样,能够解决复杂的技术挑战只是面试的一部分。在面试期间,您必须在指定的时间范围内同时对解决方案进行描述,推理和编程。如果你认为这听起来像是在处理多项任务,那是因为实际情况就是这样。
为了能够熟练地掌握这种能力,你需要练习。只要有可能,选择一个合理的面试问题,仔细考虑,开始白板,记下你的思考过程,并尝试将解决方案作为代码实现。在 45 分钟到一小时内完成所有这些工作。
此外,最好与一位具有编码背景的朋友配对,让他担任面试官。这种设置的目的是尽可能地模拟面试场景,以便您了解在真正的面试中的感受。很多人发现他们比单独解决面试挑战更加重视这种模拟面试。此外,这种模拟面试有助于候选人减轻压力,更好地传达他们的想法,并在真实的面试中表现更好。
这是来自一个面试者的心声:在自我导向的时间压力下解决技术挑战是一回事。当另一个人在场并等待你提出你的解决方案时,解决它是另一回事。
在过去几年中,技术公司正在转向使用在线协作编码平台进行远程面试。这些工具允许公司在将他们带到现场采访之前,在线快速评估候选人的编码技能。Codidate 就是这样一种工具。
如果您要采访的公司要求您在第一轮使用此类工具,请务必事先熟悉它。此外,请确保您在安静的地方拥有可靠的互联网连接,以便不会中断访谈。
此外,复习一下简历中的内容,以便您可以提供过去项目的细节,这样您会在面试中对答如流。
面试中
目的请记住,技术面试的目标是让您(候选人)展示您的解决问题的能力。毕竟解决问题的技能在您未来的工作表现中起着至关重要的作用。
具体而言,您需要能够分析问题,分解问题,使用结构化方法解决问题,将解决方案作为代码实施,适应需求变更,进行必要的权衡,并能够对你的选择进行合理的解释。这是一个可以在面试中使用的问题解决框架。
同样重要的是确保在整个面试过程中与面试官保持有效的沟通。在进行分析,处理解决方案,测试代码等时要说出来,这样面试官就可以按照你的思路进行思考,让你们沟通顺畅。
分析问题在你遇到这个问题的那一刻,很有可能想一步到位,直接编码解决问题。请不要这样做。相反,请确保您首先完全理解问题,它的约束、边界情况等。每当有疑问或您需要澄清时,请求面试官验证您的假设。例如,“我是否可以访问 C ++ STL?”或“我可以使用递归来解决此问题吗?”
您还可以列举一些案例,并让面试官确认您的理解是正确的。例如,“我认为在此步骤之后数组中有 3 个元素。它们是 a,b 和 c。正确吗?”
掌握了手头的问题,你就可以解决它了。
分解问题通常你很难在一个步骤中解决问题,尤其是现实问题。一旦分解为子问题,许多看似具有挑战性的问题变得更加容易。如果您能够做到这一点,您很可能能够解决每个子问题,并将它们组合成最终解决方案。
将解决方案变成代码一旦您认为自己已经找到了解决方案,就应该将它作为代码组合在一起。您可以尝试使用您最熟悉的编程语言来实现它,许多公司都允许您选择自己的语言。但再一次,在继续之前询问面试官。
一些公司,如 Facebook,希望候选人在面试中写出无错的代码。如果您碰巧遇到这种情况,请密切注意边界情况。在提交解决方案之前,请确保您的算法适用于所有边界情况。
如果对解决方案施加时间 / 空间限制,请确保您也满足此类要求。如果您能够在没有任何优化的情况下提出可行的解决方案,您可以先实现基本解决方案,然后再修改它以满足时间 / 空间要求。
适应变化许多候选人常犯的一个错误是,他们倾向于认为他们所需要的只是在整个一小时的面试中制定出有效的解决方案,因此他们花了太多时间研究面试官提出的第一个问题。但这通常不符合实际情况。很多时候,在候选人完成第一次挑战后,面试官将提出另一个进一步的问题,可能与前一个问题有关,以进一步测试候选人的解决问题的能力。
例如,以下是一系列编码挑战:
招聘人:实现一种算法来对对象数组进行排序。
应聘者:没问题。
招聘人:如果数组大小为 10GB,物理内存只有 4GB 怎么办?
应聘者:没问题。
招聘人:如果数组增长超出硬盘的容量怎么办?
应聘者:没问题。
请记住,在您尝试解决的问题之后可能会遇到更多挑战,因此一旦您确信您的解决方案是正确的,请准备好继续前进。你解决的挑战越多,面试官的印象就越深刻。
资源
A complete computer science study plan to become a software engineer
How to Win the Coding Interview
How to Get a Job at the Big 4 – Amazon, Facebook, Google & Microsoft
原文来自 How to Ace Your Technical Interview,已经经过作者同意。