超硬核Java工程师秋招回忆录+面经汇总,为了拿BAT的研发offer我都做了那些准备? (4)

对于博客的选择,我吸取了之前的教训,宁愿花半小时看一篇高质量文章,也不花10分钟看5篇烂文章。深度阅读的好处,就是可以让这部分内容更好地融入你脑内的知识体系,而不是像其他快餐文章一样转瞬即逝。

“做项目巩固实践能力”

由于之前在实习期间参加的项目都比较大,我接触的模块也比较单一,没有对整体项目有一个很好的把握,所以我决定趁这段时间再巩固一下我的项目实践能力,这里的能力主要是指的是对项目架构的把握能力,以及对业务开发的熟练度,当然也包括对各种常用后端技术的熟悉程度。

我花了大概一个月的时间完成了两个项目的开发,当然主要也是模仿两个开源项目做了,这两个项目都使用SpringBoot快速开发,并且用到一些常用的后端技术比如redis,云存储,以及一些常见Web框架,除此之外还涉及到了solr,爬虫等技术。虽然项目不算很难,但是我在这段时间里很快地熟悉了完整项目开发的流程,并且每天做迭代,通过Git来跟进版本,每个版本都会写清所做的内容,这也让我对项目的架构非常熟悉。

在项目之余,我也找一些常用的后端组件来跑一跑demo,以便让我对这些技术有一个直观的了解,比如面试常问的dubbo,zookeeper,消息队列等组件。这些尝试也让我在理解它们的原理时更加得心应手了。

“坚持刷题,注重方法”

算法题是秋招笔试面试中的重头戏,每个研发同学都免不了经历算法题的摧残,对我这么一个非科班同学来说,更是让人头大。正因为如此,我放弃了刷大量LeetCode题目的方法,选择了更加行之有效的刷题方式。

首先我重新刷了一遍剑指offer,并且对每道题目进行总结,尽量保证每一道题都可以记在脑子里,众所周知剑指offer中的题是面试时非常喜欢考的,所以先搞定这部分题目是最为关键的。

搞定剑指offer之后,当然还要刷LeetCode了,LeetCode题目这么多,怎么选择呢,我没有按照tag刷,也没有按照顺序刷,而是参考当时一个大佬的LeetCode刷题指南来进行刷题的,他把每个类型的题目都做了归纳,每部分只放一些比较经典的题目。所以我前后大概刷了100多道LeetCode的题目,并且在第二遍刷题复习的时候,我也对这些题目做了一份总结。

除了上面两个经典题库,我还着重刷了大厂的历年真题,这部分我主要是通过牛客网的历年真题题库来完成刷题的。说实话,真题是非常重要的,因为公司出的题目不像平时的那些算法题,可能会出得非常奇葩,所以你如果不提前适应的话会比较吃亏。完成这部分题目之后,我对算法题的复习也基本告一段落了。

当我完成所有内容的复习时,提前批已经开始了。终于要上战场了,因为战前准备比较充分,所以我对秋招还是比较乐观的,但事实上,秋招不仅是攻坚战,而且是持久战,要笑到最后,确实也不是那么容易的事情。

重建知识体系,对学过的东西做减法

前面提到我在秋招前完成了知识体系重建,那在这里我也想跟大家分享一下我当时大致的知识体系构成。就跟我前面说的一样,我选择重新再学一遍Java后端相关的技术内容,因为我知道大致的学习方向,并且有一定的基础,所以看很多文章变得更加得心应手,写文章和做总结也更加有底气了。

首先在Java基础方面,我写了20多篇原创博客,主要是对Java核心技术的解析,比如“Java反射”,“Java序列化和反序列化”,“Java异常体系”等等。

在Java集合类方面,我原创了部分文章,另外整合了一些比较好的技术文章,其中最主要的就是关于hashmap的文章,当时我整合的文章几乎没有遗漏任何一个知识点。

在Java并发编程方面

我主要参考了并发编程网以及一些优质博客的文章,先搞懂了Java并发原理,再一步步学习JUC并发包的组件,其中重点看了chm,并发工具类以及阻塞队列等JDK源码的解析文章,除此之外,我还会在IDE中跑JUC相关的emo,毕竟这方面的内容非常需要实践。

在Java网络编程方面

我先从最基础的socket入手,再讲到NIO,AIO,并且加入了几篇对Linux IO模型解析的文章,让整个知识体系更加完整(因为NIO是基于Linux Epoll实现的),接着我又加入了对Netty的探讨,以及Tomcat中对NIO的应用,可以说是把Java网络编程一些比较重要的部分都囊括进来了。为了更好理解这部分内容,我也在网上参考了很多客户端和服务端通信的demo,最后我分别用Socket,NIO,AIO以及Netty把C/S 通信的demo都写了一遍。

在JVM虚拟机方面

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwsywy.html