制定计划
《掌控习惯》 中提到,养成习惯之前首先是身份的认同,在准备面试之前,先思考以下几个问题:
- 你想要成为怎样的工程师?
- 这样的工程师需要有哪些能力?
- 需要怎样学习才能成为这样的工程师?
回答了上述问题后,制定计划以及持续练习能够帮助你达到身份认同。计划应该分为三个部分:复习时间表,整体计划以及每周计划,其中你的整体计划是根据复习时间表所制定,而每周计划是根据整体计划所细分的。通常来说,制定计划后你需要找一位导师或者有经验的工程师朋友协助你调整计划使其符合实际情况,例如如果你没有学习过系统设计,可能会对其学习时间以及具体内容有错误的预估。以下为复习时间表,整体计划以及每周计划示例(你可以使用我们提供的免费 Notion 模版来调整并且制定计划)
整体时间表

整体计划

每周计划

note
如果你应聘的是校招岗位,那么就没有必要学习系统设计。如果你不确定自己能获得 Big Five 中哪些公司的面试机会的话,优先准备共同的部分,例如算法以及非技术问题。
设定计划的原则
好的计划应该有以下几个特点:
- 合适难度
- 有反馈
- 针对性
合适难度
你选择的学习内容不应该对于你太简单或者太难,应该选择一些你需要一些思考以及时间才能完成的题目。对于算法题来说,每题所花费的时间应该在 30 分钟左右,否则你应该提高或者降低难度。
有反馈
计划中的内容应该能够及时得到反馈的,算法训练你可以通过代码平台获得反馈,并且通过多个指标来观察自己没有掌握的细节:
| 观察指标 | 目的 |
|---|---|
| 通过测试用例 | 这是最基本的要求,代表代码能够在限制时间和内存内通过测试用例 |
| 做题时间 | 如果你清楚自己大概的做题时间的话,那么在面试中就不会那么紧张,同时能够有更多的时间进行前期的分析以及思考 |
| 正确分析时空复杂度 | 分析时空复杂度能够帮助你理解程序的运行流程以及方式,能够在脑海中形成更加清晰的思路。而且这个在面试中也会被问到 |
| 能用两个解法解题 | 强制要求你从不同角度去观察与分析题目,帮助你熟悉不同类型题目的常见解法以及模式 |
| 三天后 15 分钟内能够通过 | 有的题目你可能当天无法自己解答,需要看题解或者通过讨论,那么三天后再次做的话就能检查是不是真正掌握 |
针对性
你的计划应该是具体明确而不是一个广泛的计划,例如,能够完成简单难度的算法题就不是一个有针对性的计划,有针对性的计划应该像:
| 主题 | 计划 |
|---|---|
| 算法 | 学习位运算的运算律部分,完成 3 题相关习题,并使用文档进行总结 |
| 系统设计 | 学习数据库的高可用以及灾难恢复方式 |