# 如何逐步准备

如果您已决定踏上准备编码面试的艰苦过程，但又不知道如何最大限度地利用时间，那么这是您在编码测试中从零开始成为英雄所需的唯一指南。

### ★什么是软件工程编码面试 <a href="#what-is-a-software-engineering-coding-interview" id="what-is-a-software-engineering-coding-interview"></a>

编程面试是一种技术面试，通过向潜在软件工程师候选人展示编程问题来评估其能力。通常，编程面试侧重于数据结构和算法，而其他技术面试可能涉及[系统设计](https://tonyyipx.gitbook.io/interview/xi-tong-she-ji-mian-shi-zhun-bei/xi-tong-she-ji-zhun-bei-zhi-nan)（尤其是针对中高级候选人）。

一轮编程面试通常持续 30 - 45 分钟。面试官会给你一个（或多个）技术问题，你需要在 30-45 分钟内使用实时协作编辑器（如 CodePen 或 CoderPad（电话面试/虚拟现场））或白板（现场）编写代码来解决问题。

### ★在编码面试中您将如何被评估 <a href="#how-will-you-be-evaluated-during-a-coding-interview" id="how-will-you-be-evaluated-during-a-coding-interview"></a>

我整理了顶级科技公司的评估标准，并将其概括为您可以使用的[编码面试评估标准](https://tonyyipx.gitbook.io/interview/bian-ma-mian-shi-zhun-bei/bian-ma-mian-shi-ping-fen-biao-zhun)。具体术语或权重可能因公司而异，但顶级科技公司在评估中始终包含以下标准：

1. **沟通**——提出澄清问题，清楚地传达方法和权衡，以便面试官能够轻松理解。
2. **解决问题**- 理解问题并系统、逻辑和准确地​​解决问题，讨论多种潜在方法和权衡。能够准确确定时间和空间复杂度并进行优化。
3. **技术能力**- 轻松将讨论的解决方案转化为可行代码。清晰、正确的实现，对语言结构有深入的了解。
4. **测试**——能够针对正常情况和特殊情况测试代码，自我纠正代码中的问题。

了解更多关于[在编码面试中应如何表现以显示聘用信号的信息](https://tonyyipx.gitbook.io/interview/bian-ma-mian-shi-zhun-bei/shi-qian-shi-zhong-he-shi-hou-de-zui-jia-shi-jian)。

### ★如何最好地准备编码面试 <a href="#how-to-best-prepare-for-a-coding-interview" id="how-to-best-prepare-for-a-coding-interview"></a>

LeetCode 本身实际上并不足以让你为编程面试做好准备。直接进入 LeetCode 并认为你可以完成所有数千道题目是对时间的浪费，而且永远不会像结构化方法那样为你做好准备。

假设每道题花 30 分钟，每天平均练习 3 个小时，一般人 3-4 周内只能完成 160 道题，而且可能无法内化正确的方法或记住以前练习过的问题。

相反，这是为软件工程师编码面试做准备的方法：

1. [选择一种好的编程语言来使用](#pick-programming-language)
2. [规划你的时间并按重要性顺序处理主题和问题](#plan)
3. [针对单一主题，结合学习和练习](#study-and-practice)
4. [结合编程面试备忘单进行练习，以内化必须做和必须记住的事情](#practice-with-cheatsheets)
5. [准备好自我介绍和最终问题](#prepare-self-introduction)
6. [尝试模拟编码面试（与 google 和 Facebook 工程师）](#mock-interviews)
7. [（如果你有空闲时间）记住关键技术面试问题模式](#question-patterns)

#### ◇1. 选择一种好的编程语言来使用 <a href="#pick-programming-language" id="pick-programming-language"></a>

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

什么决定了某种编程语言是否适合用于面试？通常，我们需要更高级的语言，这些语言具有许多标准库函数和数据结构，因此“更容易”编写代码。

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

在此阅读有关[选择编程语言的注意事项的](https://tonyyipx.gitbook.io/interview/bian-ma-mian-shi-zhun-bei/xuan-ze-bian-cheng-yu-yan)更多信息。

#### ◇2. 规划你的时间并按重要性顺序处理主题和问题 <a href="#plan" id="plan"></a>

准备编程面试需要多长时间？这实际上取决于你想准备得有多充分。平均而言，[准备最低要求需要大约 30 小时，而准备充分则需要大约 100 小时](https://tonyyipx.gitbook.io/interview/bian-ma-mian-shi-zhun-bei/xue-xi-shi-jian-ji-hua)。

在开始准备编程面试之前，一定要先制定一个计划。计算从现在到编程测试当天你还剩下多少时间来准备面试，然后仔细制定每天要涉及的主题和问题的计划，优先考虑最重要的主题和问题。

但是，根据你剩余的时间，你如何知道哪些是最重要的主题和问题需要练习？你可以使用免费的[Grind 75 工具](https://www.techinterviewhandbook.org/grind75)（由我开发），它可以为不同长度的准备时间制定编码面试学习计划。其背后的算法包括按优先级对问题进行排序，以及在涵盖的主题广度和深度之间取得平衡。

如果你有充裕的时间准备，建议花大约 3 个月（每天 2-3 小时）进行更全面的准备。我制定了一个[个人 3 个月学习计划](https://tonyyipx.gitbook.io/interview/bian-ma-mian-shi-zhun-bei/xue-xi-shi-jian-ji-hua)，它会指导你从头到尾完成哪些主题和问题。

#### ◇3. 针对单一主题，结合学习和练习 <a href="#study-and-practice" id="study-and-practice"></a>

为了记忆和效率，最好先学习一个概念，然后立即做该主题相关的练习题。

幸运的是，现在已经有了非常优秀的编码面试准备资源，可以让你非常轻松、系统地做到这一点：

1. [AlgoMonster](https://shareasale.com/r.cfm?b=1873647\&u=3114753\&m=114505\&urllink=\&afftrack=)
2. [理解编码面试：编码问题模式](https://designgurus.org/link/kJSIoU?url=https%3A%2F%2Fdesigngurus.org%2Fcourse%3Fcourseid%3Dgrokking-the-coding-interview)

[**AlgoMonster**](https://www.techinterviewhandbook.org/coding-interview-prep/#algomonster)

除了通过练习和易于理解的指南帮助您掌握重要的编码面试数据结构和算法问题外，AlgoMonster 还具有综合[常见面试问题模式](https://algo.monster/problems/stats)的额外优势，您可以应用这些模式来解决您从未遇到过的任何其他问题。由 Google 工程师制作，与 LeetCode 的非结构化性质相比，这绝对是一个优质的平台。数据结构和算法问题涵盖了所有常用语言 - Python、Java、C#、JavaScript、C++、Golang 等。立即[**加入可享受 70% 折扣 →**](https://shareasale.com/r.cfm?b=1873647\&u=3114753\&m=114505\&urllink=\&afftrack=)

[**理解编码面试：编码**](https://designgurus.org/link/kJSIoU?url=https%3A%2F%2Fdesigngurus.org%2Fcourse%3Fcourseid%3Dgrokking-the-coding-interview)[**问题**](https://www.techinterviewhandbook.org/coding-interview-prep/#grokking-the-coding-interview-patterns-for-coding-questions)

Design Gurus 的这门课程扩展了推荐练习题中的问题，但从问题模式的角度进行练习，这也是我认同的学习方法，并且亲自用来提高编码面试水平。本课程允许您练习 Java、Python、C++、JavaScript 中的选定问题，还提供这些语言的示例解决方案以及分步可视化。**学习和理解模式，而不是记住答案！** [**立即获得终身访问权限 →**](https://designgurus.org/link/kJSIoU?url=https%3A%2F%2Fdesigngurus.org%2Fcourse%3Fcourseid%3Dgrokking-the-coding-interview)

#### ◇4. 结合编程面试备忘单进行练习，以内化必须做和必须记住的事情 <a href="#practice-with-cheatsheets" id="practice-with-cheatsheets"></a>

为了最大限度地提高你的练习成果，我建议你在学习和练习*时参考以下编码面试备忘单：*

* **编码面试技巧**：如何找到解决方案并优化你的方法
* **编码面试最佳实践**：如何在面试中表现出聘用信号
* **算法学习备忘单**：涵盖最佳学习资源、必记内容（技巧、特殊情况）以及每个数据结构和算法必做的练习题

**编码面试技巧**

这里[列出了大约 10 种技巧](https://tonyyipx.gitbook.io/interview/bian-ma-mian-shi-zhun-bei/jie-da-wen-ti-de-ji-qiao)来完成编码面试中需要做的两件最重要的事情：找到解决所提出问题的方法，并优化方法的时间和空间复杂度。

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

**编码面试最佳实践**

顶级科技公司评估候选人的四个主要标准是：沟通、解决问题、技术能力和测试。为了展示符合这些标准的行为，我准备了一份[编程面试最佳实践速查表](https://tonyyipx.gitbook.io/interview/bian-ma-mian-shi-zhun-bei/shi-qian-shi-zhong-he-shi-hou-de-zui-jia-shi-jian)，其中概述了编程面试之前、期间和之后应该做的事情。这是基于我作为面试官的个人经历以及我在 Facebook 担任面试官时对顶级候选人的观察。

使用本指南配合练习可确保您从一开始就培养与面试相关的良好习惯和肌肉记忆。

**编码面试**

这些实际上是我亲自整理的用于准备编程面试的笔记。我将它们整理成一页纸，其中包含最佳学习资源、最佳 LeetCode 练习题以及每个数据结构和算法的必记内容（提示、极端情况）。它们可确保您内化最重要的概念，并从准备工作中获得最大收益。[查看它们](https://tonyyipx.gitbook.io/interview/algorithms-study-cheatsheet)。

#### ◇5. 准备好自我介绍和最终问题 <a href="#prepare-self-introduction" id="prepare-self-introduction"></a>

任何软件工程面试的开始和结束时几乎都需要自我介绍和最后的问题。因此，你应该花一些时间精心准备一份出色的自我介绍和最后的问题。如果做得好，这些可以给面试官留下好印象，从而让你的面试变得有利。

欲了解最佳的软件自我介绍示例和技巧，请查看[软件工程师的自我介绍指南](https://tonyyipx.gitbook.io/interview/xing-wei-mian-shi-zhun-bei/zhun-bei-zi-wo-jie-shao)。此外，请查看本[期末问题指南](https://tonyyipx.gitbook.io/interview/xing-wei-mian-shi-zhun-bei/zhun-bei-zui-hou-yao-wen-de-wen-ti)中针对软件工程师的最佳期末问题示例。

#### ◇6. 尝试模拟编码面试（与 google 和 Facebook 工程师） <a href="#mock-interviews" id="mock-interviews"></a>

在面试官面前编写代码可能会是一种令人紧张的经历，特别是如果你以前从未这样做过 - 这就是为什么获得实践经验如此重要。

[interviewing.io](https://iio.sh/r/DMCa)是目前市场上最好的模拟技术面试资源。它允许您与真正的 Google 和 Facebook 工程师预约模拟编码面试，尽管是匿名的。您甚至可以预约特定职位的面试，例如移动、前端、工程管理。更好的是 - 如果您想更轻松地过渡到现实世界的编码面试 - 您可以查看录制的面试并了解电话面试是什么样的。

此外，如果你在模拟面试中表现优异，你将能够解锁“工作页面”，该页面允许你直接预约 Uber、Lyft、Quora、Asana 等顶级公司的面试。我曾以面试官和被面试者的身份使用过[interviewing.io](https://iio.sh/r/DMCa)，体验非常棒。

在此阅读有关[不同的模拟编码面试平台的](https://tonyyipx.gitbook.io/interview/bian-ma-mian-shi-zhun-bei/mo-ni-bian-ma-mian-shi)更多信息。

#### ◇7.（如果你有空闲时间）记住关键技术面试问题模式 <a href="#question-patterns" id="question-patterns"></a>

许多编码面试解决方案实际上涉及一组类似的关键模式——学习它们将帮助您解决常见编码面试问题集之外的任何长尾问题。

**AlgoMonster**

在互联网资源中 - AlgoMonster 是 Google 工程师创建的一个优秀平台。它使用数据驱动的方法将软件工程编码面试问题浓缩为一组关键模式，并将它们总结成一个结构化、易于理解的课程。想象一下 LeetCode，但只有你需要知道的关键模式。

最重要的是，AlgoMonster 不收取订阅费 - 只需支付一次性费用即可获得终身访问权限。[立即加入可享受 70% 折扣 →](https://shareasale.com/r.cfm?b=1873647\&u=3114753\&m=114505\&urllink=\&afftrack=)

**理解编码面试：编码问题**

Design Gurus 的这门课程扩展了推荐练习题中的问题，但从问题模式的角度进行练习，这也是我认同的学习方法，并且亲自用来提高编码面试水平。本课程允许您练习 Java、Python、C++、JavaScript 中的选定问题，还提供这些语言的示例解决方案。

学习并理解模式，而不是死记硬背答案！[立即加入可享受 10% 折扣 →](https://designgurus.org/link/kJSIoU?url=https%3A%2F%2Fdesigngurus.org%2Fcourse%3Fcourseid%3Dgrokking-the-coding-interview)

***

这就是我要说的全部内容了——要了解软件工程师编码面试准备过程的每个步骤的更多详细信息，请通过侧边栏或导航到下一页深入了解我的手册中的每个主题！


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tonyyipx.gitbook.io/interview/bian-ma-mian-shi-zhun-bei/ru-he-zhu-bu-zhun-bei.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
