共计 2802 个字符,预计需要花费 8 分钟才能阅读完成。
校招前几个月,如何高效地进行复习?距离明年春招还有三个多月的时间,很多想找实习和想参加补招的同学应该也都在忙着复习。今年的春招已结束,我在开始准备秋招了,也就是从 4 月份到 7 月份这段时间,我完成了一次比较系统的复习。所以把一些经验分享给大家,总归会有一些参考价值的。
壹
平时的积累和沉淀
研究生期间我有一件事情一直在坚持,那就是做笔记和写博客。
做笔记,就是记录学习中大大小小的事情,可能是面试问题,可能是一周的学习计划,也可能知识一个知识点,总归都是值得记录的东西,对我来说,就是一种积累。而对于博客,我从一开始只用于记录项目,到后来做转载,再到后来写原创,整理系列文章,则更像是一种沉淀。
但是在春招刚刚结束的这段时间,我发现一个问题,之前学过的东西忘记了很多,特别是那些理解的不够深的知识点,总是特别容易忘记。另外我发现,虽然我在笔记中记录了很多的知识点和面试题,但是往往我只看过一次,不会再去看第二次。
这也意味着,虽然记录的内容很多,但是真正消化吸收的内容很少,脑子里充斥着总是那些零碎的知识点和面试问题,对于完整的知识体系知之甚少。这些问题在春招期间也不断地暴露出来,让我思考了很久。
面对如此窘境,我想做出改变,趁着现在时间充裕,我想要为这些内容做一次减法,并且借此机会,推翻自己原有的知识体系,重建新的知识框架。简单说来,就是重新开始学习 Java 后端,这次我要用一种更高效的方式,避免走之前走的弯路,要用最高效,最合理的方式去复习。由于我之前已经有基础,所以我对完成这一目标有信心,相应地我也为此做出了明确且详细的学习计划。
具体怎么重建知识体系,我后面会单独写一篇文章探讨,一言以蔽之,就是重新梳理知识点,让自己对每个知识点都能有较深入理解,这样在面试中才能够做到胸有成竹。
我把秋招前几个月的复习过程总结为一下几个关键词,每个部分的复习内容都是针对我之前的一些短板,加以完善和补充。
贰
做计划,也写博客“具体可靠的学习计划”
在三个月的时间里,我首先按照 Java 后端路线图安排好复习计划,每个知识点都会对应安排一段时间,比如我可能花一天时间复习“Java 反射”,两天时间复习“设计模式”,一周的时间用于复习 ”JVM 虚拟机”。我一般会在月初做好整个月的计划,然后根据进度做一些微调,但是基本上我都可以跟上进度,并且是在复习到位的前提下。
所以我觉得,对于秋招这一场苦战,指定计划尤为重要,一旦计划定下来,战略目标清晰,对应的战术制定也会变得清晰,执行力也会随之变强。
“写博客整合知识点”
至于复习方法,我主要通过看高质量博客,并且结合代码实践的方式巩固这部分知识点,比如今天学习“concurrenthashmap”,我会去找两三篇比较好的博客先看看,主要是源码解读方面的,然后我会把它们进行整合,如果有遗漏的知识点我会再进行补充,有时候我还会自己去看看 JDK 源码,以便更好地理解博客内容,完成知识整合之后,我就会对应地整理出一篇博客出来,发在我的个人博客上。
除此之外,当我完成了一整个专题的复习之后,我会把这些文章整理成一个专题,比如上面说的“concurrenthashmap”,实际上属于 Java 并发包,所以我会专门做一个博客专栏,用来完成 Java 并发系列的文章专题。对于每一个文章专题,我都会先理清这个专题一共有哪些内容,然后再开始整理。比如对于 Java 并发包,我会先写 Java 多线程基础的文章,再写 JMM 内存模型的文章,接着一步步着手写 Java 线程池,阻塞队列,工具类,原子类等等。这样一来这部分内容就复习完毕了,写系列文章的好处就在于,我可以从头到尾理清脉络,并且对于每一部分的知识点都做了比较好的总结。
对于博客的选择,我吸取了之前的教训,宁愿花半小时看一篇高质量文章,也不花 10 分钟看 5 篇烂文章。深度阅读的好处,就是可以让这部分内容更好地融入你脑内的知识体系,而不是像其他快餐文章一样转瞬即逝。
叁
做项目,也刷算法
“做项目巩固实践能力”
由于之前在实习期间参加的项目都比较大,我接触的模块也比较单一,没有对整体项目有一个很好的把握,所以我决定趁这段时间再巩固一下我的项目实践能力,这里的能力主要是指的是对项目架构的把握能力,以及对业务开发的熟练度,当然也包括对各种常用后端技术的熟悉程度。
我花了大概一个月的时间完成了两个项目的开发,当然主要也是模仿两个开源项目做了,这两个项目都使用 SpringBoot 快速开发,并且用到一些常用的后端技术比如 redis,云存储,以及一些常见 Web 框架,除此之外还涉及到了 solr,爬虫等技术。虽然项目不算很难,但是我在这段时间里很快地熟悉了完整项目开发的流程,并且每天做迭代,通过 Git 来跟进版本,每个版本都会写清所做的内容,这也让我对项目的架构非常熟悉。
在项目之余,我也找一些常用的后端组件来跑一跑 demo,以便让我对这些技术有一个直观的了解,比如面试常问的 dubbo,zookeeper,消息队列等组件。这些尝试也让我在理解它们的原理时更加得心应手了。
“坚持刷题,注重方法”
算法题是秋招笔试面试中的重头戏,每个研发同学都免不了经历算法题的摧残,对我这么一个非科班同学来说,更是让人头大。正因为如此,我放弃了刷大量 LeetCode 题目的方法,选择了更加行之有效的刷题方式。
首先我重新刷了一遍剑指 offer,并且对每道题目进行总结,尽量保证每一道题都可以记在脑子里,众所周知剑指 offer 中的题是面试时非常喜欢考的,所以先搞定这部分题目是最为关键的。
搞定剑指 offer 之后,当然还要刷 LeetCode 了,LeetCode 题目这么多,怎么选择呢,我没有按照 tag 刷,也没有按照顺序刷,而是参考当时一个大佬的 LeetCode 刷题指南来进行刷题的,他把每个类型的题目都做了归纳,每部分只放一些比较经典的题目。所以我前后大概刷了 100 多道 LeetCode 的题目,并且在第二遍刷题复习的时候,我也对这些题目做了一份总结。
除了上面两个经典题库,我还着重刷了大厂的历年真题,这部分我主要是通过牛客网的历年真题题库来完成刷题的。说实话,真题是非常重要的,因为公司出的题目不像平时的那些算法题,可能会出得非常奇葩,所以你如果不提前适应的话会比较吃亏。完成这部分题目之后,我对算法题的复习也基本告一段落了。
当我完成所有内容的复习时,提前批已经开始了。终于要上战场了,因为战前准备比较充分,所以我对秋招还是比较乐观的,但事实上,秋招不仅是攻坚战,而且是持久战,要笑到最后,确实也不是那么容易的事情。最终我还是比较幸运地通过了几家大公司的面试,包括 BAT、头条、网易,以及后面面试的滴滴和亚马逊。
当然,研究生两年时间的学习和积累是更重要的部分,但是临考的这段时间,你还是需要做一些比较科学的计划,有选择性地进行查缺补漏,对每个知识点都要做到心中有数,只有这样,你才能够在校招的考场上笑到最后。