乐趣区

Java工程师修炼之路

前言
在下本是跨专业渣考研的 985 渣硕一枚,经历研究生两年的学习积累,有幸于 2019 秋季招聘中拿到几个公司的研发岗 offer,包括百度,阿里,腾讯,今日头条,网易,华为等。
一路走来也遇到很多困难,也踩了很多坑,同时我自己也探索了很多的学习方法,总结了很多心得体会,并且,我对校园招聘也做了一些研究和相应的准备。
在今年的秋季招聘结束以后,我也决定把这些东西全部都写成文字,做成专题,以便分享给更多未来将要参加校招的同学。
这些内容,后续都会发布在我的微信公众号:程序员江湖
大学时期的迷茫与坚定
我的本科专业是电子信息工程,基本没有接触过计算机专业的课程,只学过 c 语言,然后在大三的时候接触过 java,Android,以及前端开发。
那时候我还不知道软件开发的水有多深,抱着试一试的态度去应聘了很多公司。结果可想而知。
当年我对游戏开发很有兴趣,特别是对网易游戏情有独钟,但是当我看到网易游戏研发工程师的招聘要求时,我只能望而却步,因为它要求学历至少是 985 的硕士。
也因为这个契机,我在大三的暑假开始准备考研,花了一个月的时间深思熟虑之后,选择了我大华科。
毕竟是跨专业,在复习过程还是有点吃力的,但是就靠着一股毅力和执着,半年之后,顺利地考上了,成绩还意外地非常好。
研究生时期的探索和规划
对于即将读研的同学来说,一般有两件事很重要,一件事是选择导师,一件事是选择方向。
我当时本着想要找实习的想法选择了我现在的导师,事实证明我的选择还是很正确的。
而选择方向这件事,我倒是折腾了好久。研一期间我做的最多的事情就是看书了,当时自己的方向还不明确,所以找了很多书来看。当别人都在专研数据挖掘和机器学习时,我还在各种方向之间摇摆不定。
我在读研之前想做游戏开发和 Android 开发,但我以前也学过 Java Web 开发。于是我在网上了解对应方向的资讯,发现游戏研发的就业面比较窄,并且基于我之前的学习经历,java 开发可能更加适合我。最终在学校的实训项目中我选择了 Java Web 项目,从此也真正意义上地踏上了 Java 的学习之路。
我的 Java 入门之路
之前说过,在研一期间看了很多计算机专业的书籍,比如计算机网络,操作系统,数据库等等,虽然吸收得都不太好,但也算是看过了。
于是我开始踏上学习 Java 的道路。最开始我找了一些 Java 的书单,然后买了一些比较基础的书籍,先啃为敬。那时候我看过《Java 从入门到精通》这种烂大街的书,也看过《Java 编程思想》这种很难懂的书。
一段时间后我感觉吸收效果不好,于是开始把目光转向视频课程了。那时候听舍友力神的建议,到极客学院上看一些视频课程,我当时就觉得这个讲的比书上要好懂一些。后来我又接触到了慕课网,中国 MOOC 等网站,逐渐地把相关的技术课程都看完了。
那时候正好我们的项目实训还在进行,于是我就把趁热打铁把这些东西用在了项目当中,并且第一次用博客记录下我的实践经验。
现在回头想想,此时的我也只不过是刚刚入门了 Java 以及 web 开发。然而那时候不知道天高地厚的我,就开始 xjb 投各大公司的 Java 实习岗位了。结果可想而知,那叫一个惨啊。
我的 Java 进阶之路
上文说到我刚刚开始投递实习岗位,是在研一的下学期。当时整天躲在实验室,一边看书一边看视频,接到面试时赶紧刷面经,忙的不亦乐乎。那段时间感觉自己的复习状态和考研差不多。
然而,由于水平确实不咋地,当时我被各大公司的面试官吊打。比如我第一家面的就是百度,三个很简单的问题一个都不会,人家面试官都不好意思打击我了。后来我又面了一些大大小小的互联网公司,虽然情况有所好转,但是总的来说,我要学习的东西还很多。
在准备面试的过程中,我看了很多面经,也看了很多技术博客,发现自己的基础很薄弱,需要系统性的学习。并且这些东西是视频和入门书籍给不了我的。于是我又踏上了找书的道路。
那时候 Java 书单泛滥,有的书单质量低下,买来的书看两眼就看不下去了。直到我看到了“江南白衣的后端书架”这一文章,才发现 Java 后端书架原来应该是这样的。于是我照葫芦画瓢把相关书籍都买了,这个阶段,也算是刚刚踏上 Java 进阶之路吧。
这里面不得不提几本书,对学习 Java 的同学非常重要,一本是《深入理解 JVM 虚拟机》,一本是《深入分析 Java 技术内幕》,以及《Java 并发编程艺术》。
再后来,凭着一股不到黄河心不死的精神,终于拿到了网易游戏的实习 offer。于是,第一次在大厂实习的机会终于来了,我怀着即期待又忧虑的心情来到了杭州。
我的 Java 实习之路
在猪场实习的时间并不长,也就持续了三个月不到,当时我们部门在做数据仓库,于是我这边主要负责 Java Web 应用的开发,其实也就是写一些简单的后台接口。
在熟悉了工作流程以后,我很快就适应了工作的节奏,毕竟做的东西也不难,导师也会经常指导,就这样我完成了一个又一个需求,直到后来家里有事,我才临时选择辞职回家。
由于在网易实习的时间比较短,我也留下了一些遗憾,比如对整个项目的架构不够熟悉,并且很多相关技术栈也来不及学习。后来我去熊厂实习的时候,尽量避免了这些问题。
熊厂实习的时间长达半年,部门当时做的是私有云,emmm 完全是全新的技术栈啊,于是我基本上又是从零开始学习云计算,但是由于之前的操作系统和网络基础不扎实,在学习相关技术时,基本是两眼一抹黑,学啥啥不会。
这也导致我在上班期间看了很多计算机基础方面的书籍,包括《计算机网络:自顶向下》,《深入理解计算机系统》等等。当然,这也是因为我的工作内容很简单。CRUD 你懂的。
于是花时间自学成为了我那时候的主旋律,看书,看内网资源,参加技术分享,倒也非常充实。当然,有空我也会看看项目代码,了解一下技术架构,以便让自己对整个项目有一个更好的理解。
再后来,2018 年来了。
抉择时刻:实习转正还是秋招
我是 2018 年 1 月份离开北京的。当时面临几个问题,是否续租房子,是否继续实习。还有一个小插曲就是当时养的一只猫也得带回去。再三思考后我决定回学校准备秋招。
过年后我就回到学校了,当时我本不打算参加春招,想要潜心修炼准备秋招,但是架不住春招宣传力度大,并且几个大厂都标榜着“转正容易,hc 多多”等口号。于是我没忍住,上牛客投了几次简历,打算面几家大厂,心想万一过了就去吧。
简历都投出去了,那也只好复习了啊,当时我们宿舍跟打了鸡血一样,一整天都在刷题,从早到晚泡着刷 LeetCode,一个月后终于刷到 100 多题,也算是能应付一下笔试了吧。
春招我投的公司不多,也就 at,网易游戏和京东。最后阿里和京东都给了 offer。但是当时阿里的流程走得特别慢,直到内推截止前一天才给我发 offer,并且自己也感觉之前面试表现一般,心想我要是去了也是 B +,很有可能成为拥抱变化的牺牲品,于是我咬咬牙放弃了,大不了秋招再来。
塞翁失马,焉知非福,春招的颗粒无收反而让我可以安心准备秋招,于是我有大把的时间做我想做的事,制定自己的学习计划,安排自己的生活,不需要去考虑转正这种麻烦事了。
至此,四月终了,春招告一段落。
Java 修仙之路
平时经常逛牛客,我也经常发些面经啥的,于是很多牛油喜欢调侃说“看神仙”。这时候我只能尴尬又不失礼貌的微笑了 0。0
在下不才,成不了神仙,最多就是打游戏的时候能修修仙罢了。
不过你还别说,网上还真有“Java 成神之路”这样的文章,真的打扰了哈哈。
科普一下修仙梗:修仙梗的意思是喜欢熬夜的人不睡觉不猝死反而要修仙,然后就被广大的网友们互相调侃玩坏了,现在熬夜都不叫熬夜了,新潮的说法就是修仙,熬夜不会猝死啊,会增强法力。
不逗你们了,咱们还是进入正题吧。我在五月份的时候做了一个计划,打算在七月底之前完成复习工作,原因是七月底有阿里的提前批招聘,是我最最重视的一个招聘。这个计划简称三个月计划,我主要做了三个方面的学习规划。
一:首先,便是对 Java 后端技术栈的复习,这也是最重要的一部分,因为面试永远都是考基础考得最多。
这部分内容又可以细分为多个方面:
1 Java 知识体系:包括了 Java 基础,集合类,设计模式,Java 并发技术,Java 网络编程,JVM,JavaWeb,Spring 框架等等。
2 计算机基础:包括了操作系统,计算机网络,数据结构,数据库,缓存等内容。
3 后端进阶:包括了分布式理论,以及常见分布式技术比如负载均衡,zookeeper,消息队列,分布式缓存等等。当然,这里面也包括系统架构方面的知识,以及 RPC,微服务等内容。
4 额外内容:这部分内容因人而异,我主要是因为实习的时候项目涉及了 hadoop 以及私有云技术栈,所以自己看了很多这方面的东西,譬如 Hadoop 生态,OpenStack 生态,以及 docker 生态。
我在复习这部分内容的时候,一般先看优质博客,然后自己整理总结对应写一些博客,最后把能够实现的东西实现一下,这样一来一个知识点就搞定了。剩下的事情就是重复这个步骤。
二:其次,便是对算法的学习了。我也把算法的学习分为了几个部分。
1 基础数据结构与算法:主要是复习之前学过的数据结构和算法,额外再看一些算法书籍,譬如《图解算法》,以了解常见算法。
2 剑指 offer:剑指 offer 基本上是面试必考的,所以把它刷个两三遍是很有必要的。
3 LeetCode:搞定前面两项之后,刷 LeetCode 也会有些底气了,我当时就刷了 150 题左右,主要也是刷经典的题目。
4 笔试真题:这个就不用多说了,真题是一定要刷的。毕竟各个公司出题的路子都花里胡哨。
刷题多了,就会遇到很多原题和类似题目,所以,尽早开刷,做好准备吧。
三、最后一部分,则是做项目。大概说下我做项目的几个要点吧
1 为什么这时候我还要做项目呢:一来是我觉得实习过程自己接触的东西太细碎,没有对全局做把控,二来是因为想给 GitHub 加点东西,顺便学点新的技术。于是我选择了当时牛客网上的两个项目来自己做做看。
2 关于项目选择:叶神这两个项目还是讲的非常棒棒的,用的东西也很新,代码也有提供,避免了自己要写前端的尴尬,另外,这两个项目模仿了知乎和头条,更加接地气。
3 把项目做到 GitHub 上:之前对 git 也比较熟了,所以想把这个项目按照正常开发的流程走一遍,于是我每天都会做一个模块,然后发布几个版本,记录一下版本更新的细节,写这些东西的时候,自己其实就已经做了思考和总结,感觉还是不错的。
就这么过了三个月,提前批拉开序幕。
秋招流水账
从七月底第一次面试到 9 月基本佛系,中间经历了大大小小的面试,这里只进行简单的记录哈,要看面经的话请到我的公众号:程序员江湖。
具体的面经都比较长,这里大概介绍一下面试的情况,然后我会放上面经的链接供大家查阅。
1 阿里面经  
阿里中间件研发面经
蚂蚁金服研发面经
岗位是研发工程师,直接找蚂蚁金服的大佬进行内推。
我参与了阿里巴巴中间件部门的提前批面试,一共经历了四次面试,拿到了口头 offer。
然后我也参加了蚂蚁金服中间件部门的面试,经历了三次面试,但是没有走流程,所以面试中止了。
最后我走的是蚂蚁金服财富事业群的流程,经历了四次面试,包括一次交叉面,最终拿到了蚂蚁金服的意向书,评级为 A。
阿里的面试体验还是比较好的,至少不要求手写算法,但是非常注重 Java 基础,中间件部门还会特别安排 Java 基础笔试。
2 腾讯面经  
腾讯研发面经
岗位是后台开发工程师,我没有选择意向事业群。
SNG 的部门捞了我的简历,开始了面试,他们的技术栈主要是 Java,所以比较有的聊。
一共经历了四次技术面试和一次 HR 面试,目前正在等待结果。
腾讯的面试一如既往地注重考查网络和操作系统,并且喜欢问 Linux 底层的一些知识,在这方面我还是有很多不足的。
3 百度面经  
百度研发面经
百度研发面经整合版
岗位是研发工程师岗位,部门包括百度智能云的三个分部门以及大搜索部门。
百度的提前批面试不走流程,所以可以同时面试好多个部门,所以我参加百度面试的次数大概有 12 次左右,最终应该是拿了两个部门的 offer。
百度的面试风格非常统一,每次面试基本都要到电脑上写算法,所以那段时间写算法写的头皮发麻。
4 网易面经  
网易研发面经
面试部门是网易云音乐,岗位是 Java 开发工程师。
网易是唯一一家我去外地面试的公司,也是我最早去实习的老东家。
一共三轮面试,耗时一个下午。
网易的面试比我想象中的要难,面试官会问的问题都比较深,并且会让你写一些结合实践的代码。
5 头条面经  
今日头条研发面经
岗位是后台研发工程师,地点选择了上海。
我参加的是字节跳动的内推面试,当时找了一个牛友要到了白金码,再次感谢这位头条大佬。
然后就开始了一下午的视频面试,一共三轮技术面试,每一轮都要写代码,问问题的风格有点像腾讯,也喜欢问一些底层知识,让我有点懵逼。
如果想看更多公司的面经,也请移步微信公众号:程序员江湖。

另外,我上周还面试了一次亚马逊,因为很多知名外企到十月才开始招人,所以闲了很久之后我又重操旧业了,可能在面完大摩和微软之后,秋招才能正式结束吧
结束也是开始
中秋节刚过,国庆节又要到来了。正如每一年的秋招一样,年复一年,在时间面前我们也是渺小的尘埃。
秋招结束不代表着结局,而是新的旅程开始,马上,毕业论文,offer 选择,入职准备,毕业旅行等事项也要提上日程了。
不知道明年我们看待学弟学妹的秋招时,会是怎样的一种心境呢。

退出移动版