楼主8月3号投递阿里Java开发岗,9月4号收到意向通知,中间经历6次面试。过的时间久了不会描述很具体,简单说说吧。
背景
使用Java到现在大概有一年多的时间,之前一直做硬件,所以Java算不上很好。投递的时候,实习刚辞职,也没准备笔试面试,很多东西都忘记了。了解到内推挂了不影响秋招才敢投的,就是想着刷刷经验而已,从没敢奢望什么。在投递前的半个月,刚刚用10天左右通读了《Java并发编程实战》,认真做了笔记,算是有点心得,面试的时候帮了很大忙。
6次面试分别是:
4次技术面+1次HR面+一次了解情况的唠嗑(勉强算一次面试吧)
一面
8月5号
自我介绍
聊聊项目,我主要说了实习时候的项目,顺带聊起了数据库、缓存相关的问题。
ACID
事务隔离级别
MVCC
数据库分表
索引
缓存一致性
在自我介绍的时候,我有说自己多线程方面掌握的还可以。面试官后面问有没有读过什么源码,很自然的就回答读过Spring、JDK、以及java concurrent包下面的相关类等。于是顺带就问了些常见的并发问题:
volatile 有什么作用
sychronized和lock有什么区别
线程安全性问题有哪些?
造成死锁的原因
加锁会带来哪些性能问题。如何解决?
HashMap是线程安全的吗?Hashtable呢?ConcurrentHashMap有了解吗?
关于JVM
java内存模型
垃圾收集器
双亲委派模型。
你有什么问题要问吗?
二面
自我介绍
有没有参加过ACM,有没有参加过其他竞赛,有没有拿过什么奖?研究生期间,做过什么项目,发过论文吗?有什么成果?
我的回答是,没参加过ACM,本科参加过数学建模竞赛,名次并不好,没拿过什么奖。(面试官开始有点失望的样子了)但是,我说研一做了一个军工项目已经投入使用,项目数据是保密的,但是内容不保密,可以讲讲,面试官比较有兴趣了。
你觉得你有什么优点、缺点?你觉得你身边比你优秀的人,他们有什么特质是你没有的?
做java有几年了?实习期间做过什么项目,你能挑一个给我讲一讲吗?
做过很多项目,但是这次想说个复杂点的,也是第一次讲这个项目,描述有点乱,方向带偏了,导致后来面试官没听明白我说的是什么,我也没听明白他问的是什么,导致气氛十分尴尬。
可能是为了缓解尴尬气氛,面试官问了个简单的问题,冒泡排序和快速排序有什么区别。
你有什么问题要问吗?
应该还有其他问题吧,答得还可以,但是具体问的啥我忘记了。
总结:之前一直以为,我投的是软件开发岗,面试官对硬件项目不感兴趣,就一句话带过,很少提。但是经过二面,意识到,其实面试官更多关注的是应试者的学习能力、态度、经历、思考等,就算没有太多软件开发相关的项目经验、成果,把你的体现在其他方面综合实力展现给面试官就好。所以后面给面试官自我介绍的时候,不单聊实习项目,还会说说研一做的硬件项目,并强调已经投入生产环境使用。
感觉这次面崩了,觉得没戏了,就没再准备。后来四五天的样子,内推人说,你竟然面到交叉面了,好厉害。基本上没收到拒信或者进度表上不是显示“已回绝”就表示还有戏
三面
8月12号,应该就是交叉面
从三面开始,感觉就差不多清楚套路了,自我介绍怎么说,怎么引导面试官去问我想让他问的问题等等,都有自己的想法了。面试官提出一个问题,是想考察什么,我也基本清楚,有时候不确定面试官的意思的时候,我会反问一句,您是想考察XXX方面的知识吗?我有一些理解,可以给您讲讲。
按套路来,还是自我介绍。
由于我强调了自己做的硬件项目,不出意外的,面试官问的比较详细,由于都是自己做的,理解的很清楚。但是这里有个重要一点是,你是清楚这个项目,你也研究过这个领域,你怎么把你做的项目,讲的通俗易懂,其实不容易。我通常会用面试官可能熟悉的知识去对比着讲硬件项目的东西,所以就很容易讲明白。不过阿里的程序员,说完全不懂硬件,不可能。
依托于项目问了TCP和UDP的区别。
在实习的时候,做过什么项目没有,哪些是技术性比较强的?可以讲一讲吗?
讲了一下项目、说了说消息订阅发布,提了K8S、docker等。
Redis有了解吗?有什么特点?分布式有了解吗?(了解都不多,但是可以聊聊想法)
有读过什么源码吗?
考察一些java基础知识
HashMap、ConcurrentHashMap、volatile 、sychronized
Java内存模型、垃圾收集器、类加载机制、双亲委派模型
Spring相关 IoC、AOP
数据库相关:ACID、事务隔离级别、MVCC等
最后一题:一个3升的桶和一个5升的桶,怎么得到4升的水。
上面的问题基本都答出来了,多数聊的比较细致,面试官挺满意的,直接就给我说:好,可以,后面等通知吧!
四面
三面面完当天,晚上9点接到四面电话。感觉像是总监面。
这次面试和前面感觉明显不一样,问题不拘小节,注重思路,重点聊了实验室的硬件项目,还有在网易实习的时候的一个简单的任务,然后聊了实习那个项目的一些问题。
后面又问了一些简单的问题:
HashMap、ConcurrentHashMap、volatile 、sychronized
出现死锁怎么排查?
如果查看堆内存信息?
出现OOM怎么排查问题?
还问了其他一些问题,我就记不太清了,不是很难,但是自认为回答的都比较具体,讲的比较清楚。
HR面
8月17号
HR面就比较常规了,但是阿里的HR面也要让我给她讲项目,也是很神奇。
你觉得你有什么优点?有什么缺点?分别举例讲一讲。你怎么克服缺点?
你觉得最有成就感的一件事是什么,你遇到了什么问题,怎么解决的?
你前面跟其他面试官讲过一些你做的项目吧?可以给我讲讲吗?你要考虑到我不是一个做技术的人,怎么让我也听得懂。项目中有什么问题,你怎么解决的?你最大的收获是什么?
你在实习工作中,有什么收获?有什么贡献?
你目前有面试过其他公司吗?如果让你选,这些公司和阿里,你选哪个?(送分题,回答不好可能送命)
你期望的工作地点是哪里?
你有什么问题吗?
面试完,HR说8月25号之前,实习转正会答辩结束,把所有面试情况盘点,后面一到两周会给出结果,发出意向书,如果下次我再给你打电话,会讨论薪资。
六面
8月24号,中午在午休,突然接到阿里的电话,一听声音比较像二面的面试官,二面面崩了,于是心里也是很紧张。跟面试官说我等我5分钟,整理一下衣服,找个安静的地方面试。期间调整了一下情绪。
5分钟后面试官打来电话
你面了几面了?我回答您这算第6面了。面试官说严格说我这不算是面试,就是想了解一下情况,时间比较紧,咱们简单聊。
1分钟的自我介绍。
做项目的时候,你有什么收获,遇到问题你是怎么解决的?
有参加过什么竞赛吗?有发过论文吗?有什么成果吗?
参加过什么学生活动吗?担任过什么职务?
读过什么源码吗?关注过什么开源项目吗?
分布式有了解吗?
并发编程怎么样?线程池有了解吗?
在实习期间有什么收获吗?
实习期间你对公司有什么贡献吗?
你有什么问题吗?
这里,我问了面试官,要胜任阿里的工作,我有哪些方面是比较欠缺的,是要努力补足的?
面试官,想了想,说基础知识、态度都挺不错,做事情很积极,也有自己的思考,比如你提到解决问题要总结更深层次的问题原因,这很好!以后可以在Java和分布式方面进行更深入的学习……你可以加我钉钉,说后面方便联系。
后面咨询了一下内推我的朋友,如果我能进去,6面面试官应该就是我的直接主管了,6面面试官说你没问题,那就没问题了,可以放心了。
总结
可以看到,其实面试官问我的问题都是比较常规的,没有特别难。而且有些问题面试官几乎每次都问。常见的问题,不管是哪个公司的哪个面试官,暂时没想好问你啥的时候,脱口出来的就是最常问的问题,一定要深入的去准备,别回答的太皮毛。在网上刷刷面试题,就想应付这些常见问题是不行的。你要去看源码,去抠细节,回答的比别人详细具体,这样才能突出你的认真和努力。
比如说:TCP和UDP的差别,个人认为如果只答出来:
TCP面向连接,是可靠的,UDP不可靠。这样的回答完全不够。
回答应该全面、详细,我的回答中还包括:
对比了TCP、UDP的内部数据结构。
TCP基于数据流传输,UDP基于包传输。
TCP建立连接需要三次握手,讲了一下三次握手具体过程,有什么作用。
提到了TCP拥塞控制,以及相关问题。
......
面试官看我回答很详细,还没回答完,就很满意的切换问题了。
前面有提到,如果你投的互联网,做软件开发,你的项目经验少,可以用硬件项目来补。向面试官强调解决问题的思路,你的收获,以及延伸出来的一些思考,这样可以向面试官展现的的综合能力。也许你现在你项目经验少,基础不够好,但是你要有优秀的特质充分展现给面试官。
语言表达和沟通能力很重要,很重要,很重要!如果这方面不是很强, 面试一定要多演练、准备。引导面试官去问你熟悉的内容。
最后
1.技术基础必须扎实:算法、数据结构、操作系统等,阿里面试对技术的基础非常重视,基础扎实的同学有利于在前两轮突出重围。
2.技术宽度:主要集中在高并发、多线程、分布式架构,大以及常用中间件(缓存等)的选型和比较。
3.技术原理深入:重点还是提前准备好JVM、多线程高并发这块。
4.参与的项目总结:你需要清楚你所做项目的关键细节、优化、特点、原理。
5.很多所用第三方库&中间件等的原理,即使你不知道,也要有自己的想法能够说出如何代替实现,比如单点登录的替代方案。
6.最好,提前准备一个大数据访问,比如pv扩大1000倍,你的架构或者技术方案应对措施。
7.最后,千万不要倒在HR面试环节,避重就轻是重点,特别是优点和缺点,如果问到你的规划是什么,请记得一定告诉HR你想成为一名优秀的技术专家!
以上就是我的6总结,这些都是不断面试积累来的经验,分享出来避免更多同学少走弯路,早日进入BAT等一线互联网公司!
更多阿里高级java必考题与答案加群:795632998,进群即可获取。
![image.png](https://static.studygolang.com/181107/27fe3b02aef616016c9fc2f93ad3925f.png)
![image.png](https://static.studygolang.com/181107/39720c6da604caa9aade649059a110b2.png)
加群:795632998,进群即可获取。
有疑问加站长微信联系(非本文作者)