第二个是选择方向,虽然都是计算机,但是门类却分了很多种。因为我喜欢网络游戏,我最先是想做游戏开发的,于是我在网上了解对应方向的资讯,发现游戏研发的就业面比较窄。
没有了明确的方向,我的研一上学期其实比较慌乱。我在网上对比查看了一下每个公司的校招、社招的岗位数量与情况,综合公司的岗位情况,个人兴趣,以及我之前的学习经历等因素,选定了Java开发方向。
在实习实训期间,我就朝着java的方向走,选择了Java Web项目,从此也真正意义上地踏上了Java的学习之路。
No.3笨鸟先飞,勤能补拙
我的本科是一个普通的一本,考入985的华科后,身边的同学们基本都是学霸。特别是本科也是985计算机的学生,他们不仅熟练掌握计算机网络,操作系统,数据结构等等,还一般都会几段比较完整的项目经验。
而我在当时,只学了数据结构,另外接触过一些Java基础,有一部分项目经验,基本上就是入门水平。
在这样的环境下(所以说985高校的好处也在于可以激励我们),我基本有空就泡在图书馆,不仅仅是阅读现在正在学习或者攻克的项目,还找了一些操作系统、数据库等本科基础课程的参考书目阅读,以至于我连计算机组成原理,编译原理,软件测试等方面的书都特地找来看,现在想想也是挺逗比的。
除此之外,我还花时间研究了一下本科生的课表,趁着自己没课的时候赶紧去旁听课程,985的本科生课程可以大大提升我们的基础知识。
此外,我还在各种视频网站上看网课,亦或是看中国MOOC的计算机基础课程。
就这样,每天我都把自己的时间填满,愣是一个学期能看完大几本书,还完整的上完了2-3门本科课程,大大弥补了我基础不好的缺陷。
研一下学期,我刚刚结束了Java Web项目实训,在做这个项目期间,我发现自己暴露出了很多问题,技术实践能力不足,Java基础不扎实。我觉得我是时候要出去实践锻炼自己了,于是开始考虑投递一些大厂实习岗位。
从那时候起,我开始了“留守“实验室的学习生活。为什么要在实验室学习,一是因为学习气氛好,二是因为平时大家也可以互相交流问题。
每天早上9点到实验室打开电脑,晚上9点背电脑回寝室。一大部分时间用来看书,另外一部分时间我会用来看一些技术博客,我主要是根据面经上的知识点按图索骥。
除此之外在面试前几天我会花时间去看这家公司的面经,搞懂每一个面经上的知识点,并且记录在我的笔记上,光是面经相关的笔记我就记了100多篇。这样的学习习惯我一直坚持到了秋招,确保每个面试知识点都能被我记住,消化,直至完全理解。
慢慢的,笔记越来越多,我参加面试的公司也越来越多,于是我开始不断完善自己的简历,总结自己的面试技巧,选择合适的网申时机。
大约花了3个月时间在投递实习简历上,面试参加了大大小小20多次,从一问三不知的笨鸟变成了面霸,同时也越来越自信,不管面什么大厂都不慌不忙。
No.4秋招的沉淀与积累
工科面试讲求的是基础、专业与能力,我参与的各种面试中,专业问题一定是首当其中的,因此上学期间的阅读量会大大提升你对每个专业问题所掌握的知识点。
我虽然有记笔记的习惯,但是因为研究生三年内容过多,我的记忆力与知识比较杂乱无章,脑子里充斥着总是那些零碎的知识点和面试问题,对于完整的知识体系知之甚少。面对如此窘境,我想做出改变,趁着现在时间充裕,我想要为这些内容做一次减法。
这次我要用一种更高效的方式,避免走之前走的弯路,要用最高效,最合理的方式去应对秋招。
01
制定一个具体可靠的学习计划
在秋招期间,我针对我的专业方向制定了一套秋招考试及面试的复习计划,每个知识点都会对应安排一段时间,比如我可能花一天时间复习“Java反射”,两天时间复习“设计模式”,一周的时间用于复习"JVM虚拟机”。
对于秋招这一场苦战,指定计划尤为重要,一旦计划定下来,战略目标清晰,对应的战术制定也会变得清晰,执行力也会随之变强。
02
坚持刷题,注重方法
算法题是秋招笔试面试中的重头戏,每个研发同学都免不了经历算法题的摧残。我放弃了刷大量LeetCode题目的方法,选择了更加行之有效的刷题方式。
首先我重新刷了一遍剑指offer,并且对每道题目进行总结,尽量保证每一道题都可以记在脑子里,众所周知剑指offer中的题是面试时非常喜欢考的,所以先搞定这部分题目是最为关键的。
除了上面两个经典题库,我还着重刷了大厂的历年真题,这部分我主要是通过牛客网的历年真题题库来完成刷题的。说实话,真题是非常重要的,因为公司出的题目不像平时的那些算法题,可能会出得非常奇葩,所以你如果不提前适应的话会比较吃亏。
因为战前准备比较充分,所以我对秋招还是比较乐观的,但事实上,秋招不仅是攻坚战,而且是持久战,要笑到最后,确实也不是那么容易的事情。
03
重建知识体系,对学过的东西做减法
在Java并发编程方面,我主要参考了并发编程网以及一些优质博客的文章,先搞懂了Java并发原理,再一步步学习JUC并发包的组件,其中重点看了chm。
在Java网络编程方面,我先从最基础的socket入手,再讲到NIO,AIO,并且加入了几篇对Linux IO模型解析的文章,让整个知识体系更加完整。
在JVM虚拟机方面,我则按照《深入理解JVM虚拟机》这本书的行文脉络进行文章的整理。
在JavaWeb方面,我从Java Web相关技术的发展入手,一步步了解了每种技术存在的意义。
在数据库和缓存方面,我主要学习了MySQL和Redis这两种最常用的数据库。
最后一部分就是分布式相关的理论和技术了,这个也是困扰我很久的一块内容,我主要把这块内容分为两个部分,分别是分布式理论和分布式技术。
至此,我的知识体系基本构建完成,这也是我在秋招中能够成功闯过那么多面试的原因。
在完成知识体系重建以后,我把重点转向了另外几件事,一是完善和熟悉我的简历,以便在面试中能够比较好地发挥,二是持续刷题,保持对算法题和笔试真题的手感和熟练度,三则是看面经查缺补漏,我一直认为看面经是很重要的一项复习内容。
起初,我面了几家小公司练手,接着阿里的提前批接踵而至,一共四轮面试,当时我的表现也还不错,问题基本都答上来了。面完不到一周以后我就收到了通过的消息,当时还有点懵。没想到第一个offer这么快就来了。
阿里提前批的胜利确实是意外之喜,但也大大地鼓舞了我,于是我又参加了百度和腾讯的提前批面试,由于百度的提前批不走流程,一共有四个部门面试了我,每个部门都有2到3轮面试,总计约为12次面试,到后来我已经快晕了,看到百度的电话就害怕。
经历了百度面试的摧残以后,我手写算法的速度也变快了,很多坑也被我填上了。接下来面对腾讯的面试,我也是既激动又担心,腾讯的面试难度比较大,对于操作系统和网络的知识喜欢深挖,问的东西也很有深度,面完前三面以后,第四面拖了3周才进行。
在等待腾讯终面的期间,我参加了今日头条的面试,当时有幸拿到了一个白金码,免去笔试,事实证明白金码作用真的很大。头条的面试难度和腾讯差不多,三轮面试,同样需要写各种算法,由于是视频面试,我可以清楚地看到,头条的面试官真的非常高冷啊。
蚂蚁金服的两个部门也给了我面试机会,我都参加了它们的面试,并且顺利地拿到了其中一个部门的offer。由于我对蚂蚁这边的业务比较感兴趣,最终选择了蚂蚁金服的offer。
结束这几家大厂的面试之后,我觉得我的秋招已经接近尾声了,我又面了几家大公司,如网易,华为,快手等。到9月上旬的时候,我接连收到了bat和头条,网易的意向书,阿里最早,腾讯最晚,每收到一封意向书我都很开心,没想到最后我真的可以集齐bat等大厂的offer。
综合各方面因素的考虑,最后应该会签阿里,原因是部门是我自己喜欢的,同时给的评级也比较高。虽然腾讯也给了sp,但是最后还是忍痛割爱啦。