一个跨专业选手的后端java实习面经 已拿阿里美团字节offer

2,444 阅读14分钟

说在前面

先说下自己基本情况,我是本科土木, 保研本校计算机, 保研的时候因为跨专业所以被调成了专硕, 总共两年, 所以只读了半年就要准备找工作. [跨保相关的经验, 我最后有链接] 我们实验室基本都是做的纵向课题, 并且专硕学硕的培养计划是一致的, 接触横向的机会并不多. 考虑到做算法两年时间(实际上只有一年)很难有竞争力, 并且这两年算法的内卷比较严重的情况, 我开始了自己的自学研发的道路.

在整个学习和准备找实习的过程中, 掘金和牛客真的给了我很大帮助, 所以在我上岸之后, 在学长的建议下对我自己的经历进行一个总结, 回馈大家, 大家如果有什么问题欢迎留言和小窗.

4月8号收到阿里钉钉实习的口头offer,我的春招实习基本进入尾声,面的岗位都是后端java(字节要转go),以美团字节阿里的oc收官。总体结果挺出乎我的意料的,因为我的简历上没有别人那么漂亮的java项目(两个项目一个是我毕设的车辆路径算法设计cpp,一个是做的横向课题web开发python), 也没有大厂的实习经历, 我觉得简历能看的主要就是加权和数模一等奖这些. 我自己从一月底开始琢磨实习的事情,过完大年初三开始复习准备,总体时间甚至有些仓促,而且作为一个开始准备的时候,用java写leetcode都要偶尔翻doc查api的菜鸡,我都有点意外我可以走到现在. 回顾整个过程, 我觉得一定是我做对了什么事,所以把自己的经验梳理一下,给大家作为参考。

要不要投实习

实习招聘战场上,通常有两类人,一类是已经准备的差不多的大佬,在我都不敢投大厂的时候,oc已经拿到手软。一类是啥都没准备,突然意识到秋招前我是不是该先试试水的菜鸡,比如我。

所以这里第一个问题, 要不要投实习? 实验室不放的话投实习有什么意义? 实习面试太菜会不会影响秋招?

首先是要去投, 就算没有准备好, 也要边准备边投. 实习面试的经历非常重要, 甚至对于没有准备好的同学更重要, 没有准备好通常的状态, 比如我手上没有实习经历, 没有见过大厂的真题, 没有感受过大厂面试的过程. 这种情况, 春天的实习招聘就是你的复活甲, 投不了吃亏投不了上当, 血赚不亏. 如果这个时候不投, 秋招的时候就真的裸奔上战场了, 实习0offer可怕还是秋招0offer可怕, 应该大家都有衡量.

比如我们学校很多实验室是不放实习的, 我和朋友聊的过程也经常遇到这种情况, 我们实验室也是理论上不放实习, 但我觉得实习固然重要, 对于没有实习经历的同学, 实习面试的经历也很重要, 像阿里这种来不了实习也可以直通终面的情况,真的非常友好. 因此, 即使实验室不放, 我也强烈建议要去投一投, 把面试经验沉淀一下. 如果过了, 接到oc去不了拒掉的话,好好和hr沟通,据说人家秋招还会来问你意向(不是鸽offer,鸽offer可能被拉黑)

然后面试被刷影不影响秋招, 我面过的大厂, 都是回复的有通过记录的秋招有优势, 没有通过也不会影响. 我甚至之前看到过大佬的分享, 说进阿里的童鞋有很多是有不止一次面试记录, 是否能过与能力, 部门情况, 运气, 临场表现息息相关, 过了不代表强, 不过也不能代表一无是处.

总结就是, 实习阶段的面试是很低成本的试错机会, 大家要抓住这样的稳赚不赔的机会.

面试准备

接下来说下我的面试的准备,两个月的时间边准备边面,比较仓促, 但也很适合目前还没有准备好的同学。

计算机基础,操作系统,计网和数据结构。我在面试前都把教材过了一遍,并且要总结,有的我用了我以前的笔记,有的搬了些博客和github的内容. 这部分复习花了大概15天, 期间也每天在刷算法题. 有了自己的知识点总结, 之后是一个查漏补缺的过程,把牛客上见到的题不会的,找到答案补充进去,高频的问题,拎出来答案准备好,每次面试前过一遍。参考我的github,note_md高频部分, 另外, 推荐大家可以借鉴github上cyc2018的这种总结方式, 对知识点进行梳理. 上面提到了我自己的项目, 但是做的的确不如cyc好, 链接在文末会给出.

计算机基础是大厂面试的重中之重,并且千万不要背答案, 背不完也没有用. 阿里的面试为例, 操作系统和算法的部分, 有的地方我记不住的,面试官提示一下,我给面试官展示了把完整的知识点推出来的思路, 我觉得这个过程其实比直接给答案更加分。

算法题要刷,我的顺序是两遍剑指,挑出还不会的最优解的, 再过一遍. 然后cyc2018的leetcode题库,先刷完数据结构部分,再刷算法部分。面试手撕原题命中率很高。刷题时,遇到不太熟的,比如我是dp和trie字典树不熟的,系统性的翻教材学一遍做好笔记,针对性的做点算法题巩固。算法题啊,没必要死磕,刚开始刷的时候20分钟完全没头绪很正常,看一遍答案,明天回头自己写一遍。 我剑指上都有三刷记不住最优解的,记不住的別强求。每天一个半小时起步吧,开始的时候每天花半天时间。

再是java基础,这个部分比较杂,我建议找个比较全的java知识点思维导图,掌握的勾掉,不熟的先从高频到低频准备,然后对导图上的知识一个个补洞, 准备的过程并不是找到高频题答案就行了, 最好能读一读源码(时间不够可以看源码分析的博客, 然后和自己学的操作系统/计网的知识点串一串)。学习资料和顺序,JavaSE我推荐《core java 第一卷》, 比较厚, 前六章一定要看, 后面的按需跳着看, 最好能和《java编程思想》比较着看,我觉得后者讲的更清楚。 jvm只要看最经典的《深入java虚拟机》那本,我自己对java基础的复习主要是看博客+源码,并发这部分有看《java concurrency in practice》 的中文版,但是直接看博客+源码也还行。时间不够的话不要太留恋难点,我到现在AQS都没完整读透,准备的过程要写demo,跑通过的东西记忆会深刻很多, 同时要写博客或做笔记, 以后这就是你知识体系的外存 。

然后再回到计算机基本功,问的高频题和简历延伸到东西都是比较容易准备的。 难的是开放题,没法准备只能靠自己的计算机基础去尝试给答案,不过也可能是我自己基础不扎实或者见识有限积累不够。但我的总体建议是, 联系你学过的操作系统,计网中学过的解决问题的方法进行迁移。这部分真的靠日常积累。

怎么准备简历

首先是策略和态度, 你要对自己简历的每个字负责。如果认真准备它们就是你的亮点, 否则就是面试官抓到你的漏洞。简历是你最能控住全场的部分,别的问题没法准备, 但是简历上的东西是可以提前准备的。每个字都要想面试官会拿着这个怎么问,自己按照背景,亮点,不足,可能可以改进的方向准备好回答,然后积累不同面试过程中面试官对你项目问的问题,简历相关的东西面几次就脱口而出了。

简历没有java项目怎么办,我觉得面试Java用java相关当然最好,但是我真的没有完整的好看的Java项目,这是我的短板,被阿里hr吊着打,差点挂我。但是没有的话临时凑的不如一个不是Java但是非常完整的,完整到你复盘过,和更好的比较过,最好比较完回头改进过,如果做到最后一步这个项目就比较完整了,我只做到找优秀的相似项目比较,但是也因此得到过好评。 Java项目可以反映你对这门语言和其生态的熟悉程度, 但是一个不完整的项目也会让你在面试时漏洞百出。

自己的项目,用过的框架相关的高频面试题一定要熟,源码有余力最好能读一读,读不完没关系, 从来没看过就是态度问题。 问到源码没有看过的部分, 可以说那部分没看过,但是正在看这个部分,就扯回你熟悉的领域了。我自己会暗搓搓搜一些Spring面试高频知识点,但是主要是为了应急啦,我现在不急了还是每天啃一点spring源码。

面试套路

首先说一下我最近面了这么多的一个感想,实习不一定要有好看的项目,但是基础一定要扎实,同时要带着面试官往你擅长的地方走,自己的战线不要打得太开。举个反例,一下说自己熟悉mysql,一下说自己Spring用的6,再往zk,dubbo一扯,面试官对你的期望很高,一问都没看过源码,然后很容易凉凉。

相反,开始不要给面试官太高期待,比如我,我知道我菜, 所以自我介绍的时候就说熟悉javaSE,用过mysql,redis,Spring还在学,源码这些可能不太熟。 然后面试官在你圈的范围开始问了之后,一旦问到了你精心准备的部分可以给他设个连环套,面试官可能会对你刮目相看。比如hashmap套concurrentHashMap套volatile, 他如果顺着准备的这条问,就这三条我聊源码可以说40分钟不止,类似的在mysql,redis,以及其他的JavaEE框架这些技术上也有对常问的点准备到侃侃而谈,不常问的点不至于一句都说不上来,一个面试的基本盘就搭起来了。面试官他有可能会跳出你画的圈,对我来说比如问到javaEE相关的,如果正好你也有准备,同样是回答一个知识点,面试官在不同期待值下的感受应该是有区别的。

另外,遇到不会的知识点,但是你有自己的推测的,可以说,这部分我不太熟,如果我来做可能会xxx,因为我觉得(推测原因),我下去会了解下这一部分。在我有限的尝试中,这里面试官点头的情况还蛮多的,主要是我瞎猜的准? 对于那种要么是要么不是或者你就算猜都编不出理由的,坦诚地说不好意思这部分有点糊。一方面,你需要展示出你遇到问题时,是比较主动的想解决方案的姿态,另一方面也要坦诚,但是如果你这不会那不会说的太多,估计要凉。比如我的蘑菇街,我说最近自己写demo做了一个比较简陋的web服务器,多嘴说了句参考了tomcat源码,然后被抓住问了一堆tomcat我不太熟的,就没了。

策略和心态

我是从牛客的贴意识到去面实习的重要性,也是在牛客和掘金上找的大部分实习,以及面经。看大家都有offer,我那时每天过的都非常难受,不敢刷牛客掘金,感觉人和人的差别真的太大了,又对自己没有什么信心,面了的都要么凉要么没有消息,每天晚上一两点不敢停下学习,不敢睡觉,躺床上也会怀疑人生。

我自己准备过程的心态的确不够好,非常焦虑,但是我觉得策略上还是有可取之处。面试准备上点面结合, 高频题是点, 计算机基础是面; 选择公司时, 没有面试经验的时候,适当多投一些,自己想去的公司往后排一点。再重复一遍, 过了不管一面还是两面都是有积极作用的,没过的话,不会影响秋招, 白嫖一个心仪厂的试错机会。像我这种面着面着就进去了的也是可能的,我是真的菜鸡。

btw。 选择计算机行业, 意味着在一定程度上以技术安身立命, 投机取巧一定是不牢靠的,要做好长期规划和持续集成,比如我缺的分布式相关的知识和项目练习,我也会在近期尽快补上,努力成为一个真大佬。

然后打个广告,阿里钉钉急缺简历,其他bu挂了有机会捞,java后端和前端,base杭州/北京, 球球了,我也有找简历kpi,目前还有三十多个hc, 大家走过路过,投个简历,我还可以在线卖艺帮忙改简历,还有阿里学长帮忙改和提建议,及时跟进我每轮面完最多一天就知道结果,一周走完流程,人超级好。

我上岸真的有很大一部分的运气和学长的帮助, 以及各轮面试的面试官都非常平等的和我交流技术探讨问题, 没有因为我没有好看的Java项目放弃我, 很多问题考得很活有难度但也很过瘾.

对我们感兴趣的或者求捞的, 可以私信把『姓名+电话+邮箱+院校+投递岗位』发给我,后续会给这些同学们发内推邮件,然后填邮件完成投递。也可以扫二维码投递, 记得和我私信说一下, 我这边帮你对接.

以上是我暂时想到的东西,然后摆一波资源

书单(也是我从别的大佬找来的通过我自己验证的优先看的章节, 其他章节也要慢慢看完)

  • 剑指offer
  • 深入理解Java虚拟机 第二章 第三章 第七章 第十二章 第十三章
  • mysql必知必会 + leetcode-database题目
  • 高性能mysql 第一章 第五章和第六章
  • redis设计与实现 字典 跳跃表 过期机制 持久化 事件 复制 Sentinel 集群 发布与订阅 事务

项目资源

java练手项目 -秒杀系统 -购物系统集合 -购物系统

这些练手项目, 如果是自己如果想不到做什么可以模仿的项目, 但是我依然建议大家自己去想一想项目, 比如模仿spring写个IoC容器, 模仿tomcat实现个小web服务器, 这些都是我这样的菜鸡的选择, 大佬绕道.

另外,我挺推荐java的一个付费课(我真的没收钱, 人家讲的不错)

  • 极客时间 - Java核心技术面试精讲

我自己博客, 我最近欠了好多草稿写了一半, dbq我太菜了 blog.csdn.net/m0_37407587…

以前写的跨保的经历 不同学校的保研政策可能有差异, 供参考 www.zhihu.com/question/65…