id: coding-interview-prep title: '编码面试:你需要准备的一切' description: 面试过程中可能会遇到什么,如何准备以及如何在软件工程师编码面试中脱颖而出 keywords: [ 编码面试准备, 编码面试, 软件工程师面试准备, 软件工程师编码面试, 技术面试准备, 技术面试, 练习题目, 学习主题, 如何为编码面试做准备, 如何为技术面试做准备 ] sidebar_label: 逐步如何准备


import InDocAd from './_components/InDocAd';

最终指南:如何高效准备软件工程师的编码面试——编程测试环节。

如果你决定开始准备你的编码面试,并且不知道如何最大限度地利用时间,那么这是你从零到英雄的唯一指南。

什么是软件工程编码面试?

编码面试是一种技术面试形式,通过向候选人提出编程问题来评估他们作为软件工程师的胜任能力。通常,编码面试侧重于数据结构和算法,而其他技术环节可能包括系统设计(特别是对于中级至高级候选人)。

编码面试环节通常持续30 - 45分钟。面试官会向你提出一个或多个技术问题(或多个),并要求你在实时协作编辑器(如CodePen或CoderPad)或白板上(现场)编写代码,在30–45分钟内解决问题。

在编码面试中你会如何被评估?

我汇总了顶尖科技公司的评估标准,并将其归纳为一个编码面试评估标准表,你可以使用它。具体术语或权重可能因公司而异,但顶尖科技公司在评估中通常包括以下标准:

  1. 沟通能力 - 提出清晰的问题,清楚地阐述方法论和权衡,以便面试官能够轻松理解。
  2. 问题解决能力 - 理解问题并进行系统性、逻辑准确、准确的解决。讨论多种潜在方法和权衡的能力。准确确定时间和空间复杂度并优化它们。
  3. 技术能力 - 将讨论的解决方案转化为可运行的代码,没有重大困难。干净、正确的实现,对语言构造有扎实的了解。
  4. 测试能力 - 能够测试代码以应对正常情况和边缘情况,自我纠正代码中的问题。

更多关于如何在编码面试中展示招聘信号的行为的信息。

如何最好地准备编码面试?

仅仅依靠LeetCode本身并不足以为你准备编码面试。直接投入LeetCode并在认为可以完成所有数千个问题的想法是浪费时间,也永远不会像结构化的方法那样为你做好准备。

假设每天有30分钟解答一个问题,平均每天练习3小时,那么一个人在3-4周内最多只能完成160个问题,可能无法内化正确的方法或记住之前练习过的问题。

相反,这是如何为软件工程师编码面试做准备的步骤:

  1. 选择一个好的编程语言使用
  2. 计划你的时间,并按重要性优先处理主题和问题
  3. 结合学习和练习单一主题
  4. 用编码面试作弊表辅助练习,以内化必须做的事情和必须记住的事情
  5. 准备一个好的自我介绍和最后的问题
  6. 尝试模拟编码面试(与Google和Facebook工程师一起进行)
  7. (如果还有额外时间) 内化关键的技术面试问题模式

1. 选择一个好的编程语言使用 {#pick-programming-language}

用于编码面试的良好编程语言是你熟悉的,并且适合面试。

是什么决定了应该使用哪种编程语言进行面试?一般来说,我们希望使用具有许多标准库函数和数据结构的更高层次的语言,因此“更容易”编写。

推荐用于编码面试的编程语言:Python、C++、Java、JavaScript

更多关于选择编程语言的考虑因素的信息,请在此处阅读。

2. 计划你的时间并按重要性优先处理主题和问题 {#plan}

准备编码面试需要多长时间?实际上取决于你希望准备到什么程度。平均来说,大约需要30小时达到基本要求,而~100小时才能充分准备

为了开始准备你的编码面试,始终要有一个计划。计算从现在到编码测试当天剩余的时间,合理规划你将如何准备面试,并仔细制定每天要涵盖的主题和问题的计划,优先处理最重要的那些。

但是,你如何知道根据剩余时间哪些是最重要的主题和问题呢?你可以使用免费的Grind 75工具(由我创建),它可以根据不同的准备时间生成编码面试学习计划。它背后的算法包括按优先级对问题进行排名,以及在覆盖的主题广度和深度之间取得平衡。 如果你有时间准备,建议花大约3个月(每天2-3小时)进行更全面的准备。我制定了一份个人3个月学习计划,引导你完成哪些主题和问题。

3. 将学习和练习结合起来,针对单一主题 {#study-and-practice}

为了便于记忆和效率,最好先学习一个概念,然后立即对该主题进行相关的练习题。

幸运的是,已经有很好的编码面试准备资源,可以让你轻松系统地做到这一点:

  1. AlgoMonster
  2. Grokking the Coding Interview: Patterns for Coding Questions

AlgoMonster

除了通过实践和易于理解的指南帮助你掌握重要的编码面试数据结构和算法问题外,AlgoMonster还提供了合成的常见编码面试问题模式,你可以应用这些模式来解决你从未遇到过的问题。由谷歌工程师制作的这个平台,与LeetCode刷题的无结构性质相比,无疑是一个更好的选择。数据结构和算法问题涵盖了所有常见的编程语言——Python、Java、C#、JavaScript、C++、Golang等。今天就加入,享受70%的折扣!

Grokking the Coding Interview: Patterns for Coding Questions

Design Gurus的课程在推荐的练习问题的基础上进行了扩展,但采用从问题模式的角度进行练习的方法,这也是我同意的学习方法,并且我已经亲自使用这种方法来提高我的编码面试技能。该课程允许你在Java、Python、C++、JavaScript中练习选定的问题,并提供这些语言的样本解决方案以及逐步可视化的步骤。学习并理解模式,而不是记住答案! 今天就获得终身访问权限!

4. 在学习和练习时结合使用编码面试作弊表,以内化必须做的和必须记得的事情 {#practice-with-cheatsheets}

为了充分利用你的练习,我建议你在学习练习时参考以下编码面试作弊表:

  • 编码面试技巧:如何找到解决方案并优化你的方法
  • 编码面试最佳实践:如何在面试过程中表现出展示招聘信号的行为
  • 算法学习作弊表:涵盖最佳学习资源、必须记住的事项(提示、边界情况)以及每个数据结构和算法必须做的练习题

编码面试技巧

这里列出了大约10种技巧,用于完成编码面试中最重要的事情:找到解决问题的方法,以及优化你的方法和空间复杂度。

当你遇到你从未遇到过的问题时,这些技巧很有用,可以帮助你摆脱困境。

编码面试最佳实践

顶尖科技公司评估候选人时,主要考虑四个方面:沟通、解决问题、技术能力和测试。为了展现出满足这些标准的行为,我准备了一个编码面试最佳实践作弊表,概述了你在编码面试前、中、后应该做什么。这基于我个人作为面试者的经验,以及我在Facebook担任面试官时观察顶尖候选人的经验。

使用这个指南来配合练习,可以确保你从一开始就培养出关于面试的良好习惯和肌肉记忆。

编码面试的算法学习作弊表

这些实际上是我就自己的编码面试准备整理的个人笔记。我将它们组织成了1页纸的最佳学习资源、在LeetCode上应该练习的最佳问题,以及每个数据结构和算法的必须记住的事项(提示、边界情况)。它们确保你内化最重要的概念,并充分利用你的准备工作。查看它们

5. 准备一个好的自我介绍和最后的问题 {#prepare-self-introduction}

在任何软件工程面试的开始和结束时,自我介绍和最后的问题几乎总是要求的。因此,你应该花一些时间来精心准备一个出色的自我介绍和一组最后的问题。当做得好时,这些可以向面试官留下良好的印象,可能会对你有利。

对于最好的软件自我介绍样本和提示,请查看这个软件工程师自我介绍指南。另外,也可以查看这个软件工程师的最后问题指南中最好的样本。

6. 尝试模拟编码面试 {#mock-interviews}

在面试官面前直接编码可能是一种令人紧张的经历,特别是如果你以前从未这样做过——这就是为什么获得实际操作经验如此重要。

interviewing.io 是目前市场上最好的模拟技术面试资源。它允许你预订与真实谷歌和Facebook工程师的模拟编码面试,尽管是匿名的。你甚至可以为特定的角色如移动、前端、工程管理预订面试。更好的是——如果你想更容易地过渡到现实世界的编码面试——你可以观看录制的面试,了解电话面试是什么样的。 此外,如果你在模拟面试中表现得非常好,你将能够解锁“职位页面”,它允许你直接预订Uber、Lyft、Quora、Asana等顶尖公司的面试。我曾使用interviewing.io作为面试官和面试者,发现这次经历非常出色。

更多关于不同模拟编程面试平台的信息,请点击这里

7.(如果你有额外时间)内化关键的技术面试问题模式 {#question-patterns}

许多编程面试解决方案实际上涉及一组相似的关键模式——学习它们将帮助你解决不在常见编程面试问题范围内的长尾问题。

AlgoMonster

互联网上的资源中,AlgoMonster是由Google工程师创建的一个优秀的平台。它采用数据驱动的方法,将软件工程编程面试问题压缩成一组关键模式,并总结成一个结构化、易于消化的学习课程。想象一下LeetCode,但只包含你需要知道的那些关键模式。

最重要的是,AlgoMonster不是订阅制的——支付一次性费用,即可获得终身访问权限。立即加入,享受70%的折扣!→

Grokking the Coding Interview: Patterns for Coding Questions

Design Gurus的这款课程扩展了推荐练习问题中的问题,但从问题的模式角度进行练习,这也是我在学习和应对编程面试时同意的方法。该课程允许你在Java、Python、C++、JavaScript等语言中练习选定的问题,并在这些语言中提供样例解决方案。

学习并理解模式,而不是死记硬背答案!立即加入,享受10%的折扣!→


这就是我的全部内容——有关软件工程师编程面试准备过程的每个步骤的更多细节,请通过侧边栏或导航到下一页深入了解手册中的每个主题!