谈一个普通211计算机研究生学渣的Java后端开发的面试之路
为什么写这篇博客?
2020年是特殊的一年,新冠肺炎肆虐全球,疫情造成的影响远比人们想象的严重,所产生的蝴蝶效应让很多不可能变成可能,奥运会推迟举行,NBA长期停摆,想都不敢想的加长寒假包。在如此特别背景的一个午后,窗外阳光明媚,促使我萌生了写一篇博客的想法,记录一下去年秋招的点点滴滴,想着给实验室的师弟师妹们留下点什么。因此这篇文章是记录我秋招面试过程(校招时拿到百度、美团、搜狗等Offer)的一些心得,主要是关于Java后端开发的面试准备以及优秀的复习资料等,希望看到的人少走点弯路,少踩点坑。
面试的那些事儿~
关于面试的那些事儿我准备分两部分介绍,首先叙述自己准备面试以及笔试面试的过程,想给读者一种代入感,通过我的体会提前感觉一下面试的整体感觉,然后对每个关键节点给出自己的复习建议。
我的面试经历
什么时间开始准备面试?
非洲经济学家Dambisa Moyo编写的《dead aid》一书中,其结束语有这样一段话“种一棵树最好的时间是十年前,其次是现在”,所以我觉得当你看到这篇文章的时候就可以准备了。我是在19年开学后开始准备的,3月份匆匆复习了一个月,在4月初的时候鼓足了勇气投了阿里的实习,由于准备的不充分,结果可想而知。面试失败后,决心总结经验好好复习,就没有再投别的公司,现在看来也不是个好的选择,其实是可以再多尝试尝试,熟悉熟悉面试感觉也是好的。就这样时间很快到了7月份,从面试阿里到现在过了3个月,每天都在恶补知识点:Java基础、JVM原理、多线程、Mysql、Redis,当然还有算法,剑指Offer刷了一遍,Leetcode经典100道也刷了一点,一点就是一点,真的不多,由于前期没有方法,效率很低。突然有一天牛客网上更新了各企业提前批笔试面试时间,然后节奏就开始加快了。
笔试面试蜂拥而至
当你在网上投了第一份简历,那么你的秋招笔试面试就开始了,这之后你很难心无旁骛的只是抱着书本啃了,牛客上第一家开放的公司是一家游戏公司-多益网络。记得当时是和实验室小伙伴一起答题,大家都是第一次网上笔试答题,都是有点紧张和兴奋的,所以每次答辩前都要上个厕所,前几次答题大家状态都不好,知识点掌握的不全面,编程笔试的编译器也与平时开发时不同,甚至程序输入输出都不会写,但是凡事都有第一次,慢慢就好了。由于我多益网络填报岗位问题,没有体验到面试环节,只能从身边小伙伴那里获取经验和信息,听着他描述电话面试过程,还是有些憧憬和期待的。
这时候就进入了秋招的第一个阶段-提前批,提前批顾名思义就是比正式批次提前的那一批,现在来看这阶段是一些大厂在招那些有实力的大佬,印象里这时候牛客上的发帖都是阿里巴巴、菜鸟、腾讯、美团、网易这些大厂,通过在牛客上找到内推码,就开始投递了。提前批的好处是免笔试的,由于投的人相对来说并不多,hr或者面试官会很快和你联系,预约面试时间,然后就开始复习+远程面试了。虽然提前批不用笔试,但是一面和二面的面试官还是会利用平台让你写算法代码,其实和笔试的效果是一样的,都是检验你的代码能力。
慢慢的正式批也就到来了,由于我前期投的比较多,所以这个阶段还是很充实的,基本上每天都有笔试或者面试,这个状态会一直持续到你拿到心仪的Offer,否则就会一直持续下去。由于过程时间跨度很大,再加上复习强度很大,所以需要有个健康能打的身体才行。在9月初的时候我去北京参加京东、小红书和美团的提前批现场面,京东hr面挂了,小红书和美团走完了全部流程,回学校等消息。这里想说的一点是,要是觉得自己准备的还可以,投递简历的时候可以早一点,第一个好处是让提前批的面试和正式批的笔试串开,第二个好处是越早面试就可以越早发现问题。回到学校后又陆续进行了正式批的笔试和面试,直到九月底大厂基本就结束了。
Offer选择竟然比面试还累心
由于九月底大厂基本都面试结束,而银行和国企不是我的选择,因此我就停止了简历投递,每天刷着牛客等消息。和hr谈offer是一个很重要的部分,大厂还好,公积金和福利待遇基本都差不多,要是准备签约小公司需要多留心,问清楚问明白。Offer选择其实也是个头疼的问题,公司地点、开发方向、部门好坏还有薪资福利都是要考虑的问题,我的offer里面没有能满足所有心里预期的,这个时候就需要衡量抉择了,于是我咨询身边同学和朋友,综合考量后跟着心走。
以上就是我秋招时候的经历,回忆起来还能记起当时的兴奋和紧张,对这部分介绍做个总结,秋招能尽早准备还是尽早准备,调整好心态,过程中会有紧张、疲惫甚至是崩溃的时候,用自己的方式解压就好。其实凡事走过来再回头看,也就是那样,只要自己尽全力不遗憾就好。
复习方法和建议
1.明确自己的未来方向
先确定自己对于未来的规划是什么,对于互联网公司、银行和央企国企的复习准备是不同的。时间上来讲,互联网公司招聘会比后两种来的早,集中在8、9两个月份,银行和央企国企一般在10月份,也有个别好的研究所招聘时间很早,因此确定自己的未来规划好,做出最合理复习策略,否则两手抓会很累,效果也不见得好。要求方面,互联网公司对于技术要求高(代码能力、大赛获奖等),而银行和央企国企考察的是综合能力(自身条件、校园活动、家庭地址或者未来规划),由于我没有参与过银行和国企的面试,所以就不过多介绍了。
2.算法-开发-测试-产品
在确定了什么类型的公司后,就是对具体从事的领域的选择,这里我划分为四类:算法、开发、测试和产品。由于我参与开发类的招聘,对其他领域不是很了解,只是通过和同学朋友聊天了解到一些信息,分享出来仅供大家参考。算法类这几年发展的很快,无论是学术界还是工程上,推荐、规划等优秀算法可以给企业提供更大的利润,相比于开发和测试显得高端一些,薪资水平也更加诱人,因此算法岗位近几年特别火爆。但是通过去年的招聘情况看,很多算法岗位的同学最后转到应聘开发岗,从这一点能够看到算法岗位的竞争压力很大,需要有很好的数学基础和逻辑分析能力,同时顶会论文以及高水平的比赛会成为你的加分项,因此选择算法岗位的同学要更加努力。开发岗位又分为前端开发、后端开发和数据开发,可以根据自己的情况自行选择。测试和产品我了解的不是很多,感兴趣的可以自己了解。
3.简历-重点中的重点
简历是你的明信片,它会先于你见到面试官,或者因为它你甚至见不到面试官,可见它的重要性。这里要说的有四点:
- 1.样式简明且大方
首先简历的样式要简单、明亮,详略得当,给人第一印象要干净,颜色方面推荐蓝色、天蓝色等明亮颜色,不推荐红色和黄色,红色的意思是重点或者警告,容易给面试官紧张气氛的感觉,黄色又不够显眼,也不建议使用。写明自己的有用信息(电话、出生年月、邮箱、地址)就可以了,要是有Github或者高质量的博客当然是加分项。 - 2.内容丰富吸引人
在样式基本没问题基础上,就是内容了,也是简历展示部分的关键点,要做到把自己掌握的知识点展示出来吸引面试官,同时还可以通过设计,引导面试官问之前有所准备的问题,从而掌握面试节奏,取得好的面试效果。
专业技能的介绍部分,有的同学这部分知识描述的更细,比如Java并发基础部分,具体到多线程或者锁机制,这样有利有弊吧,面试官也是身经百战的,如果写的过细,你回答的不够深入,效果就大大折扣了,同时要理解掌握、熟悉和了解的关系,结合自己的掌握程度正确填写。
项目部分的介绍要详略得当,简要描述项目背景和应用的技术,重点突出自己在项目中解决了具体问题,可以用数字表示问题解决后系统的提升,例如通过增加索引后查询速度提高30%等。大部分同学的研究生阶段可能接触不到很多很好的项目,这个时候大都通过网上的培训班视频学习,但是有个很大的问题是最后大家都选择了最火热的秒杀电商项目,面试官在面试了大量同学后会比你更了解这个项目,这就加大了面试难度。因此,在选择项目上要慎重,从项目用到的技术栈、并发量等多个角度选型,确定具体项目后就踏实的学习,动手实践发现问题并尝试解决,可以把解决过程记录下来,面试前回看一遍,面试时会起到很好的效果。 - 3.展示内容全掌握
对于简历上写的专业技能和项目模块,一定要吃透,这一点尤为重要。面试官在选人的时候,在判断基础知识的掌握和编写代码能力基础上寻找你的闪光点,如果对于简历上所展示内容都不能很好掌握,那么面试效果会大打折扣,影响到面试气氛。因此,对于Java集合源码,mysql索引、多线程问题等简历出现的核心知识点一定要深入研究,对于项目要有自己的思考,比如为什么使用redis,如何对数据库进行分库分表等细节问题。 - 4.支持多版本适应
可能你对大数据开发和Java开发都比较感兴趣,那么你需要针对不同公司不同岗位对简历进行微调,这里Java开发和大数据开发算是比较接近的,Java基础过关的情况下还掌握Hadoop,Spark,Flink的知识的同学可以根据情况填报,个人经验掌握大数据技术情况下在面试Java会有加分。
4.专业技能
从Java开发的角度,所应该具备的专业技能分为基础部分(数据结构与算法、操作系统、网络、数据库、Java知识点、设计模式、Spring)和进阶部分(分布式、微服务)。我将复习过程以及后续学习中发现的优秀网站和资料分享给大家,你会发现资料和要学习的东西越来越多,需要自己甄别适合自己的。
- 复习全家桶
- 1.CS-Notes
- 2.JCSprout
- 3.Java应届生突击
- 4.互联网Java工程师面试突击第一季注:这个系列都是经典,我也在继续学习
- 5.后端架构师技术图谱
- 6.互联网 Java 工程师进阶知识完全扫盲
- 7.Java书单
- JVM
- 1.深入理解Java虚拟机第3版
- 2.从零开始带你成为JVM实战高手口碑好到炸裂,我是在面试后结束才发现的
- Java并发
- 1.Java多线程编程核心技术
- 2.Java并发编程的艺术
- 3.Java并发编程之美
- 4.并发编程网
- 5.cuzz's blog
- Mysql&Redis
- 1.MySQL实战45讲
- 2.从零开始带你成为MySQL实战优化高手
- 3.Redis深度历险
- 各种源码解读
- 算法
- 海量数据
- 1.海量数据处理
以上就是我积累的优秀资料,包括网站、视频和书籍,有很多是我在面试过程或者面试之后看到的,也没有全部看,但是我感觉都是很不错的资源,以后我还会慢慢复习,大家根据自己的需要学习。最后,我简单列举我面试过程中的高频问题,实现LRU(被问到很多次),排序算法及其时间复杂度分析,哈夫曼树,滑动窗口最大值、二叉树最大子路径和(一系列问题),网络方面三次握手、四次挥手过程,JVM全部,Hashmap源码扩容一系列问题,多线程一系列,mysql索引及底层实现,数据库分库分表,Redis,还有海量数据处理等等,这些问题在牛客上搜索会有很多面经,大家根据自己想去的公司复习最近两年的就好。
5.项目
项目这块不过多介绍了,大家根据自己情况来选择,简历中一般要写2-3个项目,可以把自己掌握最好的发放在最前面,也可以按照时间顺逆序,项目难度和技术栈最好有一些变化,最后还是那句话,项目要深入研究掌握,要体现自己的项目经验和成长,要有自己的思考。
在专业技能和项目介绍结束后,我想额外补充一点心得,如果时间来的及,我建议大家在算法上多花费些时间和多用点心。第一个原因是笔试中算法代码的分数比重很大,如果你的算法代码能力不过关,就谈不到面试及后续。第二个原因是大厂在考核时,主要是基础知识和算法的考量,因为大家所经历的项目大都差不多水平,毕竟大家在学生期间不会经历淘宝双十一的海量并发项目,因此手撕算法能体现一个人的编码能力和逻辑思维。第三个原因是基础知识只要肯花时间研究,大家都掌握的水平都差不多,如果你编码能力强,你会发现面试时很有自信,会很容易征服面试官,而且你就会越学越轻松,最终形成一个良性循环。所以我建议前期复习一定要把算法学好,还有一点不要背算法,要理解思路举一反三,这样最后才能轻装上阵,达到张无忌全忘了的境界。复习过程中,知识点早上记住了晚上有点印象,等过了一周就忘了,你不要怀疑自己,这是正常的,因为你没有实践。解决的办法是你要么写个程序跑几遍,要么多看几遍,我推荐大家可以晚上睡前拿出半小时将白天学的知识看一遍,时间不充分只看大纲或者关键点就行,慢慢你就知道蜂蜜是甜的。
6.技巧
面试过程你会投递很多公司,甚至一个公司你会投多个岗位,如果不记录会造成很大困扰,而且你可能会发现投简历比笔试面试还头疼,我的建议是做一个excel,记录你投递公司、岗位、投递时间、笔试时间、一面面试时间、二面面试时间等等,也可以把面试的问题和回答记录下来,因为面试到最后你会发现,各公司问的也不会差很多,多积累复习会越来越有感觉,慢慢会轻松很多,面试说到底就是查缺补漏,提升自信和面试技巧的过程。
7.团队
在校学生组队复习会提高效率,复习过程中可以相互学习,总比自己遇到问题想了一天还没想出来快一些,但是单独思考也是一种优秀的品质;面试笔试中也可以分享企业笔试面试时间,面试忙的时候甚至会记错时间,正式批面试集中在9月份,最高时候我一天面试了三家公司,每个公司2-3面,到最后脑子真的不转了。当然不是每个人都适合团队学习,尤其是受别人的状态对自己影响大的人,我这里的建议是可以寻找平时在一起志向相投的老铁,人数在5人左右,这样经历过秋招战火洗礼后的友谊更加美好,好基友一辈子:joy:。
8.处理与论文写作的关系
处理好找工作复习和论文写作的安排也是秋招中关键部分,我的建议是复习前期可以两手抓,8月份和9月份两个关键月全力冲击面试,如果顺利的话十一前完成秋招,再用七天假期调整心态,回来踏踏实实的写论文节奏是最好的。但是要在全力冲击面试前确定好题目和创新点方法,这样笔试面试时候心也是有底的。
9.心态&节奏
前面说到秋招是一个漫长的过程,因此无论是前期复习、中期发力还是后期冲刺都要保持一个良好的心态,带着开心和兴奋地心态去接受新知识会让你身体很疲惫但是精神很快乐,相反就会很累。每个人调整心态的方式都不相同,可以通过听音乐、跑步、和朋友唱歌、跟家人煲电话等等来释放心里的压力。面试时候良好的心态会让你最大程度发挥自己的实力,大部分面试官和hr面试态度都是很不错的,如果你运气欠佳,遇到面试官不友好,这时你也要调整自己,因为改变不了别人你只能改变自己。而且这也是面试的一部分,压力面试下看你调整自己的能力,这种面试处理得当反而通过的几率更高。最后,我想说的是秋招只是人生的一站而已,不要因为别人找的快或是找的好,就给自己带来压力,慢慢来花总会开,保持好自己的节奏,在面试中提高自己就好。
10.学习方法
最后来说说我积累的学习方法,在学习新知识时候,可以先通过视频课程做个入门,从宏观上了解大概,再通过书籍深入仔细研究,过程中配合动手实践来加深理解,然后用笔记做个总结,最后反复回看和思考,并和同类型知识进行横向扩展,每次都会有不同的发现。(道理我都懂,但我做的也不好,慢慢培养好习惯)。特别感谢明明如月学长在我面试时传授复习方法,他的另一个慕课专栏推荐给大家解锁大厂思维:剖析《阿里巴巴Java开发手册》。另外推荐大家使用知乎和B站来拓宽学习方法,可以通过知乎找到好的资源和网站,B站上除了鬼畜、二次元和淡黄的长裙外还有很多很好的学习资源,比如我最近发现的三太子敖丙大场面试,我是程序汪的大厂面试,深度学习优秀up主,漂亮小姐姐将算法,Java源码,很遗憾没有早点看到这些,你看的多了,系统就会给你推荐更多更好资源。还有很多优秀的软件比如整理思路的脑图软件XMind,MindNode P,还有整理笔记的OneNote,有道云笔记,GoodNotes等等,这类软件的优点和使用,知乎上都有详细的文章,我就不介绍了。最后的最后,有些大厂喜欢在面试最后问一些逻辑题来决定是否给你SpecialOffer,例如:5枚大小一样的硬币,如何摆放两两接触?水桶倒水?正则表达式匹配IP?4个0如何添加运算符得到24?这些问题大家不用刻意准备,需要的是天赋以及平时遇到多思考,你可以带着这几个问题着手准备秋招了_
到这里我想说的话就说完了,没想到自己能写这么长的博客,以后多凝练语言减少废话,祝愿看到这篇博客的师弟师妹和优秀的陌生人能在秋招中走的顺一些,拿到理想的Offer。原创文章,手写不易,转载注名,受益三连。
网友评论