如何准备编码面试





5.00/5 (8投票s)
指南:如何准备编码面试。
引言
本文的编写风格将比Code Project的 usual 文章更偏向于技术性。我想和大家分享一下如何准备编码面试。编码面试很大程度上取决于国家、公司、软件工程师级别等因素。细节非常多,每次准备都是有针对性的。在本文中,我们将探讨如何准备大型科技公司的面试。
面试流程
每家大型科技公司(微软、谷歌、亚马逊、Facebook、苹果)的面试流程或多或少是相似的。第一次面试是电话初试,之后是现场面试。电话面试大约需要一小时。面试中会有一个简单的编码题,你需要通过共享屏幕在线编写代码。初试的目的是考察你的整体水平,并判断你是否值得获得现场面试资格。是的,他们知道你会紧张,这没关系。每个人都会紧张。初试比现场面试容易得多,但你也必须为此做好准备。初试的准备与现场面试的准备截然不同。在本文中,我们将重点关注如何准备现场面试。
现场面试
假设你已经通过了电话面试,现在你既兴奋又紧张地期待着现场面试。现场面试通常持续约4-5小时。面试内容包括:
- 2-3场编码面试
- 午餐
- 1场系统设计面试
编码面试
每场编码面试大约持续45分钟。在此期间,你必须解决一个问题。解决问题意味着什么?你需要在白板上写出可运行的代码,并回答问题。最常见的问题是关于时间复杂度。你将无法使用你喜欢的IDE,所以可以忘记代码提示功能。你只有一支笔和一块白板。要想通过这一阶段的面试,你需要知道如何解决这类问题。如果你不知道如何处理这些问题,你就没有足够的时间找出最优解决方案。你需要大量练习。但不仅是编码面试。你还需要展示出你能够倾听、提问并进行讨论。我们在团队中工作,展示自己是团队的一员非常重要。是的,解决问题的能力非常重要,但团队合作同样重要,甚至可能比解决问题更重要。
午餐
这是技术面试的休息时间。请记住,午餐也是面试的一部分。唯一的区别是它不如技术部分重要。它仍然重要,但权重比编码题略低。这次面试的目的是了解你的另一面。你为什么选择这家公司?你对什么感兴趣?你的谈吐以及你提出的问题。例如,如果你不问关于公司的问题,反而开始问政治问题,那将是一个危险信号。无论如何,这是午餐,别忘了它。:)
系统设计面试
在这次面试中,他们想了解你的思考方式、如何寻找答案、如何提问、你的背景以及你如何进行对话。这是展示你经验的绝佳机会,但别忘了解决实际问题,也别忘了时间。
编码面试准备
在开始准备之前,有一件事你需要做:接受现实,这不会很容易,需要时间和耐心。现在我们可以开始准备了。:) 让我们把这次准备看作一个优化问题,事实上它就是。:) 你时间有限,有很多主题需要学习,还有一个目标。问题是如何有效地利用时间来达成目标。准备工作非常主观:它很大程度上取决于个人以及你已有的知识。例如,如果你不知道O(n)
是什么,你将比已经知道它是什么以及如何计算的人花费更多时间。总会有一些个性化的地方,只有你自己知道你不知道什么。这篇文章是一个通用的准备算法,你需要根据自己的情况进行调整。好吧,如果你还在阅读,你肯定想通过你的面试。
在开始学习之前,你需要做以下几点:
- 确定你想为哪家公司工作
- 准备一个笔记本和一支笔
公司名称对于制定有效的学习计划至关重要;笔记本是用来写下解决方案的。正如你所记得的,面试时你只有白板。每家公司都有自己的问题偏好。有些公司偏好动态规划,有些偏好二叉树等。这并不意味着你只需要学习一个主题,不,绝对不是。我们是软件工程师,我们知道如何计算概率。如果一家公司比其他主题更偏好二叉树,这意味着你需要先学习二叉树,这将增加通过面试的概率。你需要知道的另一个关键点是:面试需要近一个月的时间。换句话说,你需要至少花一个月的时间准备。初试总是比现场面试简单。你可以先从解决“简单”问题开始。在现场面试中,会有中等或困难级别的问题。
以下是提高通过概率的步骤:
- 按公司名称过滤问题。尽量查阅多个来源。不要在这上面花费超过1-2小时的研究。
- 先从解决简单问题开始。如果你不知道如何解决一个问题,查找答案是可以的,但这只在刚开始时是正常的。你最终应该能够独立解决所有问题。每天花大约一周的时间解决至少3-5个问题。
- 学习
大O
表示法。检查所有已解决的问题,找出每个问题的时间复杂度。 - 开始解决中等难度问题。不要在主题之间跳来跳去,专注于一个主题。每个主题花2-3天。你每天需要解决3-4个问题。
- 花1-2天回顾你过去的工作。检查已解决的问题,但只阅读描述,并尝试回忆你是如何解决它们的。这一步非常重要。你可以在这里找到更多信息:遗忘曲线。
- 开始解决困难问题。每个主题花2-3天。你每天需要解决3-4个问题。
此时,你已经知道自己不知道什么了,继续解决你在最薄弱主题上的问题。别担心,这只是一个面试。:)
好了,我们现在有了一个计划,接下来就是找出在哪里练习以及如何按公司过滤。
在哪里练习
有几个在线平台,但只有一些更适合。还记得效率和时间限制吗?这是列表:
这不是完整的列表,但它适合我们的目标,尽管这个列表包含了一些不太有用的平台。当我们逐一分析它们时,你就会明白。你可能已经有自己喜欢的平台了,只是不要忘记你的目标。勺子可以在不同的场合使用,但最有效的用途是喝汤。:)
这是我的标准:
- 能够按公司名称过滤
- 不同难度级别:
简单
、中等
、困难
- 能够专注于一个主题(即按主题过滤问题)
- 问题描述。不应该是一页或半页。问题应该非常严格。面试需要45分钟;在此期间,不可能提出一个描述巨大的问题。
LeetCode
LeetCode是一个编程学习平台。让我们看看它的功能以及它如何满足我们的需求。
能够按公司名称过滤:是的,可以按公司名称过滤,但这是一个付费功能。
不同难度级别:简单
、中等
、困难
。这个功能一切都好。确实有三个难度级别:简单、中等和困难。
能够专注于一个主题(即按主题过滤问题):这个功能也很好。
问题描述:记住,一次编码面试大约需要45分钟。问题应该易于理解和记忆。不应该是庞大的(没有公式等)。让我们看一个例子。
描述非常直接、简短,并包含一些示例。
总结:Leetcode是准备编码面试的一个不错的平台。有一个缺点:并非所有问题都可以免费访问,并且按公司过滤是付费功能。
HackerRank
HackerRank是另一个学习平台。
能够按公司名称过滤:否,该平台没有此功能。
不同难度级别:简单
、中等
、困难
:是的,此功能存在。
能够专注于一个主题(即按主题过滤问题):此功能一切都好。
问题描述:是也不是 :) 其中一些问题可能在面试中出现,有些则不会。让我们看一个例子。
描述很好,但你在面试中很难看到这样的描述,而且这甚至不是完整版本。
总结:一个用于提高解决问题能力的不错资源,但不是准备编码面试的好资源。该资源有其自身侧重点,准备编码面试不是其主要目标。
CodeStandard
CodeStandard - 在线编程学习平台
能够按公司名称过滤:是的,可以按公司名称过滤,而且此功能是免费的。
不同难度级别:简单
、中等
、困难
。此功能一切都好。
能够专注于一个主题(即按主题过滤问题):也很好,可以按主题过滤。
问题描述:也很好。让我们看一个例子。
描述非常接近你在编码面试中会遇到的情况。
总结:CodeStandard是准备编码面试的一个绝佳起点,而且是完全免费的。我只看到一个缺点:它的问题数量不如 Leetcode 多。
ProjectEuler
ProjectEuler是一个系列计算问题的来源,旨在通过计算机程序解决。
能够按公司名称过滤:否,该网站没有此功能。
不同难度级别:简单
、中等
、困难
。否,该网站没有此功能。
能够专注于一个主题(即按主题过滤问题):否,该网站没有此功能。
问题描述:描述很好,但更适合一般性地提高解决问题的能力,而不是为编码面试做准备。
摘要
希望这篇文章能帮助你从不同的角度看待编码面试。关键在于:制定一个准备计划,记住你的目标,并不断练习、练习、再练习。
还有,请不要忘记你将要在一个团队中工作,你也需要具备社交能力。:)
历史
- 2020年9月25日:初始版本