前序
从我高考成绩出来那一刻开始,从我在高考志愿上填上“计算机科学与技术”这几个当时在心中堪称“神圣”的几个字开始,我就已经把进入中国互联网最高殿堂“BAT”作为我整个大学奋斗的目标,哪怕我就读的是一所位于内陆的双非一本大学我也认为我能达成目标。但是当我踏入大学校门开始,发现一切都与自己想象的不一样。进入学生会希望能够锻炼自己的脸皮与组织能力,却发现我的任务只不过是去查查别人班级的出勤,迎新晚会时站站岗;踌躇满志地参加学校八大团队中的ACM团队的面试,寝室里5个人去笔试却只有我一人没有通过,去找团队负责人霸面,却被戏弄嘲笑(这件事对我打击特别大,现在都还有点耿耿于怀);希望大学教授能够绘声绘色地传授知识,却发现毕业自清华大学的博士教授居然连话都说不清。还好我才大一,充满着干劲和对计算机的兴趣,我开始了自学之路。在老师还在讲计算机概论时,我就自学完了C语言,然后凭借着自己的兴趣给自己选定了Android开发这条路,从此便一发不可收拾,喜欢上了自己当自己老师的感觉。在大二这一年,做了几个APP,其中几个还上架了酷安,有个千把的下载量,与用户交流的感觉让我成就感大增。虽然喜欢Android开发,但是在大二下期我针对Android开发进行了一次调研,发现同一家公司Android招聘的人数远远小于Java开发的人数,这次调研就让我萌发了转向Java后台开发想法,但是又担心大二下期才转方向担心时间不够导致大三没有足够的积累。等到去年九月份我才真正确定了今后走Java后台的方向,然而此时距离2018春招只有一个学期的时间了,所以我给自己列了一份计划和书单,让自己能够做好2018春招的准备。由于准备充分,最后拿到了包括阿里京东网易在内的5个offer,谨以此文分享给大家我的面试经验。
准备
笔试
很早就了解了互联网公司面试必考,也是一个程序员必备的内功,我的算法水平也就是刚及格的水平,肯定是不能达到面试所需的水平的,于是我在去年暑假7、8月份(大二下期暑假)便开始有计划的在LeetCode上刷题,一开始是计划每天刷8道Easy难度的题,后来越刷越熟练后便每天刷4道Medium和4道Easy,然后转变为每天刷4~6道Medium。一个暑假下来刷了200多道题,成果还是很不错的。
此环节我的总结为在Leetcode上先易后难,然后将题目分类突破(leetcode上自带体型分类)。
手写代码
因为在面试过程中,面试官可能会要求你手写代码(根据我自己的经历来看,这个概率差不多是50%,要看不同的公司和面试官的喜好)。根据我的总结,认为手写代码有这么几个特点:
- 难度相比笔试难度较为简单。
- 由于是手写,与在键盘上敲代码有非常大的不同,有可能你在键盘上敲得飞起,但是你在纸上却一行都写不出来。
- 形式较为灵活,在没有思路时可以与面试官交流,就算最终没有写出来,你的思路得到面试官认可也是可以通过面试的。
针对这个环节,我准备了一本书,就是大名鼎鼎的《剑指offer》(必读!!!)。
这本书可以说是为我后面拿到满意的offer立了大功,可以说这本书让我在面试中不再惧怕手写代码。这本书是C++写的,但是并不妨碍阅读,你正好可以将它翻译成Java检验自己是否掌握。这本书我读了两遍,第一遍在电脑上敲了一遍,第二遍手写了一遍。建议将此神书完全掌握。
面试问题准备
后台方面,由于在之前只为了做项目学过一点Flask,而且还只是囫囵吞枣式的学习,没有深究其原理,在这方面我几乎经验为0。为了能在我计划的12月份之前学习完所有JavaWeb方向的知识,我在网上搜寻资料后给自己列了一份书单。
- Head First Servlets & JSP(中文版) 九月读完
- 精通 Spring 4.x 十月十一月读完
- 深入理解 Java 虚拟机(第 2 版) 一月读完
- 图解 TCP/IP : 第 5 版 二月读完
- 计算机网络 三月读完
在读完了《Head First Servlets & JSP》和《精通 Spring 4.x》后,意识到自己缺少Java Web的项目经验,于是十二月份在慕课网上完整跟玩了一个实战项目。在跟完了这个项目后我就认为我的JavaWeb基础已经打好了,然后就开始夯实基础了,我认识到由于学习后台时间短,我只有依靠牢靠的基础才能打动面试官。于是一月份我读完了《深入理解 Java 虚拟机》,这本书写得非常好,可以说这本书涵盖了99%面试中会问到的Java虚拟机问题。
在接下来的一二月份便是我给自己规划的夯实基础的时间,在这两月我需要完成jdk源码的阅读,包括HashMap、ConcurrentHashMap、ArrayList、LinkedList、HashSet、ReentrantLock、AQS等,还有Spring部分重要源码的阅读,我要求自己反复看了很多遍,确保自己理解了这些经典类的设计并且自己实现了一部分jdk类。除源码之外,还有一些知识点需要牢记,比如SpringMVC原理、TCP/IP的一些经典问题、数据库原理等,这部分我觉得就有点应试的成分在里面了,因为很多都是需要背的知识点,后面我会介绍如何记住繁杂琐碎的知识点。
记忆神器--幕布
一开始我也觉得这么多繁杂的知识点,就算当时记住了,面试时也会忘,如何记住这么多的知识点呢?我后来在网上找到了解决办法——利用幕布含有层级的笔记来记录重要的知识点。我是这样利用幕布这个工具的:
- 按模块分类
- 模块细分
-
按层次记录知识点
还可以一键生成思维导图
由于幕布有Android和iOS的客户端,所以随身携带很方便,随时可以掏出手机来背一下。在排队面试时也可以套出来看看,说不定一会儿面试就问着了呢。。。
简历
制作简历肯定也是重中之中,你之前准备得怎样,在简历上就要体现出。在这里我总结了几个简历制作的要点:
- 不会的不熟悉的千万别写上去,写上去就是送人头,面试官会把你问到cry。
- 简历上绩点、项目、获奖经历、开源作品在校期间至少有一项吧,一定写在简历上称为亮点。
- 程序员的简历不要太过花哨,我是使用超级简历的模板,比较简洁。
面经
因为我完全没有面试经验,从来没有经历过面试,于是想着在去BAT这类大公司面试之前先找成都的小公司练练手,积累点面试经验。于是三月份开始就有成都的小公司开始约我面试。前前后后一共大概投了30多家公司吧,通过笔试约面试的大概十家左右。面试的问题没有记录,所以记得不是很全,但是大部分考的很基础,基本都是按着你的简历来问的。
云帆数联(已挂)
这家公司是我面试的第一家公司,公司规模很小而且面试体验极差,我去的时候HR让我先坐一下,一会儿面试官就领我到会议室面试:
- 自我介绍
- 在学校做过什么项目
- 说一下数据库的四个隔离级别
- 讲一讲HashMap吧
- 说一下什么是JavaEE
然后就没了,我穿越大半个成都来这儿面试就问了我几个问题,耗时才10分钟,我还没来得及紧张就结束了?然后他说面试就先到这儿了,如果有通知再联系我......
知道创宇(已挂)
知道创宇是我在成都面试的第二家公司,做Web安全的,好像拿了腾讯的投资所以公司地址在成都天府三街的腾讯大厦里。这家公司与上家公司形成鲜明对比,整个面试过程持续了一个半小时还多,由于面试官是做C++的不会Java,所以几乎没有问Java。
- 问项目
- volatile的作用
- HashMap的工作原理
- 数据库的隔离级别
- 什么是幻读,不可重复读,脏读
- 一道算法题,给出一个数组,找出唯一不两两重复的数
- TCP/IP三次握手四次挥手
- Spring的事务隔离级别
- ..........
面试官非常好,聊得很愉快,可惜得是我因为面试经验不足加上本身也没有准备充分,感觉答得不好。面试官找来HR问了下实习时间就让我回去等通知了。第二天后我就收到了人生中第一封拒信........
CVTE(已拿offer)
CVTE是我面试的第一家大公司,通过了笔试后就通知第二天到春熙路一家酒店面试。第二天我早早地就到了酒店大堂等待面试,结果没想到刚一扫二维码排队就轮到我了。服务人员领我到一间很大的会议室,里面有很多面试官,每个面试官前有编号,我一下就看到了面试我的面试我的面试官,也是我第一次看到面试官西装革履。
- 又是问项目
- Java的内存模型
- 讲一讲Java的垃圾回收机制
- 细讲一下新生代如何进行垃圾回收
- SpringMVC的工作流程
- 你认为MyBatis带来了什么改进
- Spring ioc 概念,创建,初始化,底层实现
- .....
还出了道算法题,具体不太记得了,但是我到了时间没有写完,我原本是想用O(n)的复杂度来做,后来发现O(n)的复杂度是不可能实现的,就浪费了点时间,于是我就和面试官讲了我的想法,并且讲了一种O(n^2)的做法。面试官结束面试后让我回去晚上等通知,晚上果然收到通知让我参加终面(HR面)。
HR面还是那家酒店,我和一个前端一起面(特别扯的是后来我在牛客网上问一个CVTE的问题还和这位前端兄弟在网上偶遇了),问了我有没有女朋友啊,父母是做什么的,如果阿里和CVTE都给你发了offer你回去哪家这类问题,持续了大概20多分钟。晚上回去查看状态发现终面已经通过了,这意味着我将收到人生第一份offer。大概一周多后收到口头offer,两周过后收到正式offer。收到第一份offer后心里一块石头才真正落了地。
阿里影业(已拿offer)
一面(半个小时)
三月底的时候居然收到了阿里一面的电话,我是十分吃惊,因为距离我投阿里简历已经过去了一个月了,而且我没想到阿里居然能在几万份简历中挑中我的简历进行面试,收到电话我是十分受宠若惊的。电话信号一直不好,对方说话声音一直若有若无的,我不得不一直说”不好意思,能再说一遍吗“,面试中大部分问题都和其他面试差不多,有几个问题比较印象深刻:
- 如果让你来设计SpingMVC你会如何设计。
- 你能几种Session的管理方法,详细讲一种。
二面(45分钟)
一面后一周才收到二面的电话,要进行视频面试,由于是阿里我不敢怠慢,在外面专门找了家网速不错且安静的酒店专门等待阿里的视频面试。阿里的二面就是按照你的简历上的每个点都深问下去,但是都是挺基础的,没有问到我不会的分布式和集群方面的问题(可能是因为我简历上没有写),感觉大部分答得还不错,但是有几个问题如Spring的Bean的生命周期这样的该回答起来的问题没有回答起来,让我隐隐有些担心。
三面(半个小时)
二面第二天收到HR电话让我准备三面,让我挺吃惊的,因为我投阿里本来也只是想感受下顶级互联网公司的面试流程,压根儿没想到还能走这么远。三面面试官听HR说好像是个部门老大,也就意味着这应该是最后一轮技术面了。部门老大看起来大概35岁左右,挺面善的,一开始问我为什么要学计算机,问我高考怎么填的志愿(我当时还有点奇怪怎么问这些问题),然后后面就像聊天一样,聊我在大学怎么学的。果然还是我太年轻了,面试官悄悄给我挖了个坑,问我为什么从Android转到后台,我说我比较喜欢应用层的纯逻辑,不是很喜欢编写界面,Android里需要使用xml写界面我不是很喜欢,然后他问我是不是觉得前端很简单,我赶忙说不是,他又问我做了这么多app有没有研究过Android的Framework层,我一时语塞说没有(没有了解Andorid底层确实是我的错),他又追问我喜欢应用层是不是就不喜欢底层的东西,我又赶忙说不是,但是我找不到证据说我喜欢底层,于是我只有说看过Spring和jdk源码。。。然后就聊到了项目,我有一个Android项目牵扯到上传照片功能,就问我图片有没有经过压缩,我说有使用第三方库压缩,面试官又问有没有了解过图片的压缩算法,我当时记得好像之前上课的时候学过图片处理就稀里糊涂地说了有了解过一点,然后又稀里糊涂地给面试官讲了一个算法,面试官笑着对我说你这好像是马赛克的算法啊,马赛克的算法和压缩算法一样吗?我就不敢说话了。然后面试官换了一个话题我才松一口气。后面聊的还行,面试官还给我讲了他当初大学是怎么学的,然后给我强调底层真的很重要
HR面(十分钟)
HR面打来已经是一周后了,我要不是看到状态还一直处于面试中,凭我三面的表现我都觉得我挂了。HR说实习生薪资比社招工资低问我知不知道,问我了解阿里影业哪些东西,愿不愿意来北京。最后说实习时间就比较纠结了,HR说最好能马上入职实习对转正比较有利,但是我这儿学校一堆课啊根本走不开。最后HR说回去问他们的leader看能不能七月份再实习。挂了电话我就觉得比较忐忑了,都走到这步了不会因为实习时间的问题把我给挂了吧。
最后一周过后我还是收到了阿里的offer,但是不是很兴奋还有点纠结(因为那时我已经收到了网易云音乐的offer)
网易(云音乐,已拿offer)
说实话这些公司我早就听说很难进,所以我笔试完后压根儿没想过能进入他们的面试流程,没想到大网易还是给我笔试通过了,给我发短信要我4月14日到杭州网易大厦面试,报销路费600元,我算了下出去报销的600元,我去趟杭州还要自掏腰包1000多块才够。不禁十分纠结了,因为当时阿里面试都走到三面了有可能拿offer,如果拿了offer就没必要再去面网易了,但是我又不想错过这次宝贵的机会,于是决定还是去1000KM外的杭州走一遭。
一面
提前一天到了杭州踩了点,第二天顺利地按时到达了网易大厦,签到后就在一边等候,二十分钟后就叫我去一面。一面面试官看起来25岁左右,很年轻,问得问题也比较常规。问了个HashMap问题,我心里很高兴,之前面试问过无数次这个问题了,于是我就详细地将HashMap源码讲了一遍,还顺便将ConcurrentHashMap也讲了。然后还问了些数据库索引以及Spring的问题。
二面
一面面完后面试官叫我五分钟后去前台问结果,通知我准备二面,这时候差不多十二点了,HR小姐姐领着我们去大名鼎鼎的猪场食堂吃饭,午餐如图:一个素菜也没有,三道荤菜:虾,羊肉,牛肉
这个应该是外部食堂,真正的员工餐可能还要好点。
差不多下午两点半左右,通知去二面。二面面试官看起来很年轻,感觉和我差不多大,二面和阿里三面差不多,问了一些开放性问题和一点点技术问题,面试过程面试官一直叫我不要紧张,就是聊天就行了,我其实并不紧张啊...面试官很好和我交流了不少学习方面的事情,问了我平时如何学习新技术和如何debug的。差不多愉快的聊了40多分钟就叫我五分钟去查看结果。
HR面
HR面真的是非常愉快了,特别巧的是我刚坐下HR小姐姐就问我是不是宜宾人,我心里一惊赶忙说是,结果HR说她也是宜宾人(听到此时我心里朝天呐喊天助我也!!!),接下来的聊天就更愉快了,老乡见老乡,聊了学校的项目经历,学生会经历,在听到我的自学经历后她居然说很励志(我个人没有觉得很励志啊),半个小时后HR说七天后会有最终结果出来。
回成都后大概等了6天后就收到了offer。网易的面试体验是最愉快的,我可能暑假就回去网易了。
今日头条(已挂)
一面
今日头条的面试体验是最差的(没有黑的意思),面试全部是使用牛客网的视频面试工具,不知怎么的,视频一直断线,面试官很不耐烦地说要不你找个网络条件好点的重新给你找个时间面试,我心里想我花了百多块出来租酒店就为了面试,怎么能重新面试呢,于是就苦苦”哀求“继续面试,尴尬的是问了几个操作系统的问题我都没怎么答好,最后甩给我一道算法题,当时我已经无心面试了觉得铁定挂了,花了10多分钟才做完,面试官看也没看就说一会HR打电话就匆匆下线了........
二面
一面完后我心想绝对挂了,没想到HR打电话来说我通过了让我马上准备二面。我心里真是........二面面试官看起来也三十好几了就,一直问我当时还没复习好的操作系统和计算机网络,答得很差。然后又给我一道算法题,花了几分钟做完。然后HR打电话说我的面试结束了,希望以后有机会一起合作,想来也是,答得这么差能过才有鬼了。
去哪儿(口头offer)
一面
去哪儿的面试安排在成都的一家酒店里。一面面试官看起来很严肃,认认真真地对着简历挨个挨个地问,问了四十多分钟,然后让手写个二分查找,我两分钟写出来后又让写个LRU算法,我只是了解过这个算法,花了十分钟左右才写出来。面试官看起来很满意让我去二面。
二面、HR面
二面面试官很坑,一直给我出系统设计的题,我回答了后又怼我说我的方法不好让重新想个好的,后来我都被怼烦了,都想说要不让我挂了吧我想走了,最让我吃惊的是面试官问我一个Redis相关的问题,我回答后他自己还要上网百度答案。。。真的是“大开眼界”。结果我还过了让我去HR面,HR讲了讲工作地点和薪资就给口头offer了。
京东(已拿offer)
一面,二面,HR面
京东这么大的一家公司面试却是最水的,一面是电话面试,几乎没有问技术问题,就问了个虚拟机,然后就问在团队里起矛盾如何处理,一面只有10分钟。二面是在和之前CVTE的同一家酒店,二面更水,感觉面试官已经脱离一线程序员很久了,估计问我的问题他自己也不知道答案,又问在团队里起矛盾如何处理(京东很看重这个?),大概20分钟就完了。HR面就问了问奖学金和项目的团队合作,只问了5分钟就发offer了...
总结
总的来说我总结我的面试经验如下:
- 面试尽量提前到,能早点面试,面试官也更愿意给你通过(就像中国好声音一样,一开始都是疯狂转身)。
- 面试时调动你的幽默细胞,尽量把面试气氛调得愉快一点,这样面试官能更深的记住你。
- 说自己优点的时候一定辅以证据,不然面试官只会当作耳边风
- 不会的问题不要强答,小心有坑,可以这样说:“不好意思这个问题我不会,但是如果让我来设计我会.......”
- 面试其实是一个双向选择,面试官在评估你的表现,同时由于面试官也代表公司,他的素质及提的问题也是你应该评估的方面,所以不要紧张。
- 使用幕布,在每次面试前将自己总结的知识过一遍。我幕布上写了几万字的笔记,每次面试都拿出来看一遍,所以面试问到的基础我基本都能应答入流。
目前拿了阿里影业、网易云音乐、京东成都研究院、去哪儿、CVTE的Java后台研发实习的offer。
这个结果是我两个月前万万没有想到的(我原本想的是能去家二线互联网就不错了),我也知道拿这么多的offer是有一点运气的成分在里面的,我接下来也会继续努力,争取转正就不用再秋招了(找工作是真的痛苦磨人)。
真心感谢大学这三年来帮助过我的无数博客博主,从你们优秀的博文我知道了真正的“优秀”是怎么样的。谨以此文希望能帮助大家一点点,祝大家最后都有满意的offer!!