编码面试:你需要准备的一切
原文:https://www.techinterviewhandbook.org/coding-interview-prep/
如何有效准备软件工程技术面试的终极指南——编码测试。
如果你已经决定开始准备编码面试的艰苦过程,并且你不知道如何最大限度地利用你的时间,这是你在编码测试中从零到英雄的唯一指南。
什么是软件工程编码面试?
编码面试是一种技术面试的形式,通过向潜在的软件工程师候选人提出编程问题来评估他们的能力。通常情况下,编码面试的重点是数据结构和算法,而其他技术回合可能包括系统设计(特别是对中高级候选人)。
一轮编码面试通常需要 30 - 45 分钟。面试官将向您提出一个(或多个)技术问题,要求您在 CodePen 或 CoderPad(电话屏幕/虚拟现场)等实时协作编辑器中或白板(现场)上编写代码,在 30-45 分钟内解决问题。
在编码面试中你会被如何评价?
我整理了顶级科技公司的评估标准,并将其归纳为一个你可以使用的编码面试评估标题。具体术语或权重可能因公司而异,顶级科技公司在评估中总是包括以下标准:
- 沟通 -提出澄清性的问题,清楚地交流方法和权衡,这样面试官就不会感到困惑。
- 解决问题 -理解问题并系统、逻辑、准确地解决问题,讨论多种可能的方法和权衡。能够准确确定时间和空间的复杂性,并对其进行优化。
- 技术能力——将讨论过的解决方案翻译成工作代码,而没有明显的困难。干净、正确的实现,具有丰富的语言结构知识。
- 测试 -能够针对正常情况和极端情况测试代码,自动纠正代码中的问题。
阅读更多关于在展示招聘信号的编码面试中你应该如何表现。
如何最好地准备编码面试?
LeetCode 本身实际上不足以让你为编码面试做好准备。一头扎进 LeetCode,并认为你可以完成所有成千上万的问题,这是对你时间的浪费,而且永远不会像结构化方法那样让你做好准备。
假设每个问题 30 分钟,平均每天练习 3 小时,一般人将只能在 3-4 周内完成 160 个问题,并且可能不会内化正确的方法或记住他们以前练习过的问题。
相反,这是如何准备你的软件工程师编码面试:
- 选择一种好的编程语言来使用
- 计划好你的时间,按照重要性的顺序处理话题和问题
- 结合单个题目的学习和练习
- 在练习的同时编写面试备忘单,将必须做的事情和必须记住的事情内在化
- 准备好自我介绍和最后的问题
- 尝试模拟编码面试(与谷歌和脸书的工程师)
- (如果你有多余的时间)记住关键技术面试问题模式
1.挑选一门好的编程语言来使用
用于编写面试代码的好的编程语言是你熟悉的,并且适合面试的语言。
是什么决定了面试是否应该使用编程语言?一般来说,我们希望高级语言有许多标准的库函数和数据结构,因此“更容易”编码。
推荐用于编码面试的编程语言:Python,C++,Java,JavaScript
在这里阅读更多关于选择编程语言的考虑。
2.计划好你的时间,按照重要性的顺序处理话题和问题
编码面试需要准备多长时间?这实际上取决于你想做多充分的准备。平均来说,完成最低限度需要大约 30 个小时,做好充分准备需要大约 100 个小时。
要开始准备你的编码面试,总是从一个计划开始。计算一下从现在到编码测试那天,你还有多少时间来为面试做准备,仔细地计划一下你每天要涉及的主题和问题,首先把最重要的放在首位。
但是你怎么知道在你剩下的时间里哪些是最重要的话题和问题需要练习呢?你可以使用免费的 Grind 75 工具(由我制作),它可以为不同长度的准备时间生成编码面试研究计划。其背后的算法包括按优先级对问题进行排序,以及平衡所涵盖主题的广度和深度。
如果你有充裕的时间准备,建议花 3 个月左右的时间(每天 2-3 个小时)做更全面的准备。我想出了一个个人 3 个月学习计划,从头到尾带你完成哪些题目和问题。
3.结合单个主题 的学习和练习
为了记忆的保持和效率,最好是针对单个概念进行学习,然后立即做该题目的相关练习题。
幸运的是,已经有很好的编码面试准备资源,可以让你非常容易地、系统地做这件事:
AlgoMonsterT3】
除了通过实践和易于理解的指南帮助你掌握重要的编码面试数据结构和算法问题,AlgoMonster 还有一个额外的好处,即综合种常见面试问题模式,你可以用它们来解决你以前从未遇到过的任何其他问题。与 LeetCode grinding 的非结构化性质相比,这绝对是一个高质量的平台。数据结构和算法问题涵盖了所有常见语言——Python、Java、C#、JavaScript、C++、Golang 等等。 今天加入七折优惠→
寻找编码面试:编码问题的模式
这个由设计大师设计的课程扩展了推荐练习题中的问题,但是从问题模式的角度来进行练习,这是一个我也同意的学习方法,我个人也使用这个方法来更好地编写面试代码。本课程允许你用 Java、Python、C++、JavaScript 来练习选定的问题,并提供这些语言的示例解决方案以及一步一步的可视化。学习和理解模式,而不是背答案! 今天获得终身访问权→
4.伴随实践的是编写面试备忘单,以便将必做事项和必须记住的事项
为了最大化你从实践中获得的东西,我建议你在学习和实践时参考下面的编码面试备忘单:
- 编码面试技巧:如何找到解决方案并优化你的方法
- 编码面试最佳实践:如何在面试中表现出招聘信号
- 算法学习备忘单:涵盖了最好的学习资源,必须记住(提示、边角案例)并且必须做每一种数据结构和算法的练习题
编码面试技巧
这里有大约 10 个技巧的列表来做你在编码面试中需要做的 2 件最重要的事情:找到解决问题的方法,优化你的方法的时间和空间复杂度。
当你面对从未遇到过的问题时,这些技巧非常有用,可以帮助你走出困境。
编码面试最佳实践
顶级科技公司根据 4 个主要标准评估候选人:沟通、解决问题、技术能力和测试。为了展示符合这些标准的行为,我准备了一份编码面试最佳实践备忘单,它概述了你在编码面试之前、之中和之后应该做的事情。这是基于我作为一名受访者的个人经历,以及我作为一名脸书面试官对顶级候选人的观察。
使用这个指南来伴随练习可以确保你从一开始就培养良好的习惯和肌肉记忆。
算法研究编码面试备忘单
这些其实是我自己整理的笔记,为自己的编码面试准备的。我已经把它们整理成了 1 页的最佳学习资源,最佳 LeetCode 练习题,以及每种数据结构和算法的必读内容(技巧,边角案例)。它们确保你将最重要的概念内化,并从准备中获得最大收益。检查它们。
5.准备好自我介绍和最后的问题
在任何软件工程面试的开始和结束时,自我介绍和最后要问的问题几乎总是必需的。因此,你应该花些时间精心准备一份精彩的自我介绍和一系列要问的最后问题。如果做得好,这些可以给面试官留下一个好印象,让事情变得对你有利。
要获得最好的软件自我介绍示例和技巧,请查看这个软件工程师自我介绍指南。在这个期末问题指南中,还可以查看向软件工程师提问的最佳期末问题的样本。
6.尝试模拟编码面试
在你的面试官面前编写代码可能是一个令人伤脑筋的经历,尤其是如果你以前从未做过的话——这就是获得实践经验如此重要的原因。
interview . io是目前市场上最好的模拟技术面试资源。它允许你与真正的谷歌和脸书工程师预约模拟编码面试,尽管是匿名的。你甚至可以预约特定职位的面试,比如移动、前端、工程管理。更好的是——如果你想更容易地过渡到现实世界的编码面试——你可以观看录制的面试,看看电话面试是什么样的。
此外,如果你在模拟面试中表现出色,你将能够打开“工作页面”,让你直接预约像优步、Lyft、Quora、Asana 等顶级公司的面试。我作为面试官和被面试者都使用过interview . io并发现这种体验非常棒。
点击阅读更多关于不同模拟编码面试平台的信息。
7.(如果你有多余的时间)内化关键技术面试问题模式
许多编码面试解决方案实际上涉及一组相似的关键模式——学习它们将有助于你解决编码面试常见问题之外的任何长尾问题。
AlgoMonster
出互联网上的资源——algo monster 是 Google 工程师打造的优秀平台。它使用数据驱动的方法将软件工程编码面试问题浓缩成一组关键模式,并将其总结成一门结构化、易于消化的课程。想象一下 LeetCode,但是只有你需要知道的关键模式。
最重要的是,AlgoMonster 不是基于订阅的——支付一次性费用并获得终身访问权。立即加入,享受七折优惠→
寻找编码面试:编码问题的模式
这个由设计大师设计的课程扩展了推荐练习题中的问题,但是从问题模式的角度来进行练习,这是一个我也同意的学习方法,我个人也使用这个方法来更好地编写面试代码。本课程允许你用 Java、Python、C++、JavaScript 来练习选定的问题,并提供这些语言的示例解决方案。
学习和理解模式,而不是背答案!立即加入,享受九折优惠→
以上就是我的全部内容——关于软件工程师编码面试准备过程的每一步的更多细节,请通过侧边栏或导航到下一页来深入了解我的手册中的每个主题!