# 编写面试学习计划——根据剩余时间学习和练习什么 > 原文:
在开始准备编码面试时,需要回答的一个最重要的问题是:为了最有效地准备编码面试,你应该做哪些研究课题和练习题? 互联网上有大量的资源,但很难知道它们如何适应你剩下的准备时间。谢天谢地,这篇文章将帮助你解决这个问题。 我亲自经历过几次可怕的软件工程师面试过程,并准备了自己的学习计划,每次都加以完善。 在这篇文章中,我将分享我个人用来准备编码面试的 3 个月学习计划。您将找到要学习的确切主题(带有推荐链接)和要练习的确切问题(带有练习链接)。 ## 建议的准备时间和方法[和](#recommended-preparation-time-and-approach "Direct link to heading") 你需要多少时间来准备你的编码面试?一般来说,3 个月(如果你能每周投入 11 个小时)是更全面准备的推荐时间。我将分享 3 个月的推荐学习计划(推荐期),但你可以通过 Grind 75 工具(由我构建)为任何时间框架的练习题生成学习计划。更多的选项,如按难度过滤,主题,可选择的问题分组可以在那里找到。 不管你有多长时间,如果你不熟悉核心数据结构和算法知识,建议你在开始编码面试问题练习之前复习一下。不同的人有不同的练习方式,你应该做最适合你的。各种可能的方法有: 1. 广度优先准备——复习每个话题,然后开始练习所有话题的各种问题。如果你有大约一个月的空闲时间,这一策略是值得推荐的。 2. 深度优先准备——一次处理一个话题——修改一个话题的材料,练习该话题的大量问题。在确保掌握了一个话题之后,继续下一个话题。对所有或选定的主题重复上述步骤。如果你没有太多时间,这可能是最好的准备方式。您可以专注于我们推荐的学习计划中的高优先级主题。 3. 先深度后广度的准备——一次处理一个话题——为一个话题修改材料,为这个话题练习几个问题。确保掌握之后,进入下一个话题。对所有主题重复上述步骤。最后,练习所有主题的各种问题。这个策略比其他的要花更多的时间,所以如果你有一个月以上的时间的话,推荐使用。 我个人推荐的是**广度优先准备**或**深度优先然后广度准备**。在你的时间表中安排一些广度的学习/练习是很重要的,这样当你继续后面的话题时,你就不会忘记前面的话题。 ## 3 个月学习计划-包含推荐学习资源和练习题链接[](#the-3-month-study-plan---with-recommended-study-resources-and-practice-question-links "Direct link to heading") 在每个学习计划中,你会发现一个包含资源和练习问题的编码面试主题列表,你应该每周按照优先级顺序完成**。** 为了更好地利用它,你应该创建一个模板,将每天的剩余日期和剩余时间分解,这样你就可以在以后填写每天要涉及的主题/问题。 保持相对保守的估计,这样你就不会筋疲力尽。 ### 第 1 - 4 周:专题学习+练习[](#week-1---4-topical-study--practice "Direct link to heading") 这些都是你应该研究的课题,按优先顺序排列。链接的学习资源是我的算法备忘单——它概述了必须记住的内容,如时间复杂性、极限情况、特定主题的有用技术,以及基本的和推荐的练习题。 在你练习的早期,不要忘记应用[编码面试最佳实践](/coding-interview-cheatsheet/)中的行为和[编码面试技巧](/coding-interview-techniques/)中的方法! #### 第一周[](#week-1 "Direct link to heading") | 主题 | 优先 | 所需时间 | | --- | --- | --- | | [数组](/algorithms/array/) | 高的 | 2 小时 | | [字符串](/algorithms/string/) | 高的 | 3 小时 | | [哈希表](/algorithms/hash-table/) | 中间的 | 3 小时 | | [递归](/algorithms/recursion/) | 中间的 | 3 小时 | #### 第二周[](#week-2 "Direct link to heading") | 主题 | 优先 | 所需时间 | | --- | --- | --- | | [分类和搜索](/algorithms/sorting-searching/) | 高的 | 3 小时 | | [矩阵](/algorithms/matrix/) | 高的 | 1 小时 | | [链表](/algorithms/linked-list/) | 中间的 | 3 小时 | | [队列](/algorithms/queue/) | 中间的 | 2 小时 | | [堆栈](/algorithms/stack/) | 中间的 | 2 小时 | #### 第三周[](#week-3 "Direct link to heading") | 主题 | 优先 | 所需时间 | | --- | --- | --- | | [树](/algorithms/tree/) | 高的 | 4 小时 | | [图形](/algorithms/graph/) | 高的 | 4 小时 | | [堆](/algorithms/heap/) | 中间的 | 3 小时 | | 排序 | 中间的 | 3 小时 | #### 第四周[](#week-4 "Direct link to heading") | 主题 | 优先 | 所需时间 | | --- | --- | --- | | [间隔](/algorithms/interval/) | 中间的 | 2 小时 | | [动态编程](/algorithms/dynamic-programming/) | 低的 | 4 小时 | | [二进制](/algorithms/binary/) | 低的 | 2 小时 | | [数学](/algorithms/math/) | 低的 | 1 小时 | | [几何形状](/algorithms/geometry/) | 低的 | 1 小时 | ### 第 5 - 12 周:深度练习[](#week-5---12-in-depth-practice "Direct link to heading") 在这里,我列出了你应该做的 75 个问题,为你的编码面试做好充分准备。这个问题列表是从 [**Grind 75 工具**](https://www.techinterviewhandbook.org/grind75/) (由我搭建)中生成的,它根据你所剩的时间生成编码面试的推荐学习计划。更多的选项,如按难度过滤,主题,可选择的问题分组可以在那里找到。 * 如果你遵循了第 1 - 4 周的学习计划,你应该已经完成了这里的一些问题。随意跳过它们或者再做一遍。 * 如果你没有研究过动态编程问题或者觉得这些问题不相关,可以跳过它们。无论如何,许多动态规划问题都可以用递归/回溯来解决。 在你练习的早期,不要忘记应用[编码面试最佳实践](/coding-interview-cheatsheet/)中的行为和[编码面试技巧](/coding-interview-techniques/)中的方法! 我们推荐使用 [**Grind 75**](https://www.techinterviewhandbook.org/grind75/) 工具,它可以让你跟踪你的练习进度。 ## 为你的自我介绍、最终问题和模拟编码面试留出时间[](#factor-time-for-your-self-introduction-final-questions-and-mock-coding-interviews "Direct link to heading") 除了学习和练习编码面试,你还应该准备你的自我介绍,最后的问题,并尝试模拟编码面试。 ### 准备自我介绍和要问的最后问题[](#prepare-self-introduction-and-final-questions-to-ask "Direct link to heading") 我建议用大约 3 个小时来准备你的自我介绍,并准备一些最后要问的问题。你可以参考这个[自我介绍指南](/self-introduction/)和[最终问题提问指南](/final-questions/),它们应该可以帮助你相当快速地完成这些步骤。 ### 安排模拟编码面试[](#schedule-mock-coding-interviews "Direct link to heading") 当您的编码面试学习和实践计划完成了 60%时,您应该开始安排模拟编码面试。面试时间通常是由面试官提供的,所以你可以提前查看和预订。我个人用过并推荐的平台是[interview . io](https://iio.sh/r/DMCa)。在这里阅读更多关于[不同模拟编码面试平台的信息](/mock-interviews/)。