花 2 个月面过阿里 Java 岗,拿个 25K 不过分吧?
背景
在接触 Java 之前我接触的⽐多的是硬件⽅⾯,⽤的比较多的语⾔就是 C 和 C++。到了⼤三我才正式选择 Java ⽅向,到⽬前为⽌使⽤Java 到现在⼤概有⼀年多的时间,所以 Java 算不上很好。刚开始投递的时候,实习刚辞职,也没准备笔试⾯试,很多东⻄都忘记了。
所以,刚开始我并没有直接就投递阿⾥,毕竟⼼⾥还是有⼀点点⼩害怕的。于是,我就先投递了⼏个不算⼤的公司来练⼿,就是想着刷刷经验⽽已或者说是练练⼿(ps:还是挺对不起那些公司的)。⾯了⼀个⽉其他公司后,我找了我实验室的学⻓内推我,后⾯就有了这 5 次⾯试。
下⾯简单的说⼀下我的这 5 次⾯试:4 次技术⾯+1 次 HR⾯,希望我的经历能对你有所帮助。
⼀⾯(技术⾯)
1. ⾃我介绍(主要讲⾃⼰会的技术细节,项⽬经验,经历那些就⼀语带过,后⾯⾯试官会问你
的)。
2. 聊聊项⽬(就是⼀个很普通的分布式商城,⾃⼰做了⼀些改进),让我画了整个项⽬的架构图,
然后针对项⽬抛了⼀系列的提⾼性能的问题,还问了我做项⽬的过程中遇到了那些问题,如何解
决的,差不读就这些吧。
3. 可能是我前⾯说了我会数据库优化,然后⾯试官就开始问索引、事务隔离级别、悲观锁和乐观
锁、索引、ACID、MVVC 这些问题。
4. 浏览器输⼊URL 发⽣了什么? TCP 和 UDP 区别? TCP 如何保证传输可靠性?
5. 讲下跳表怎么实现的?哈夫曼编码是怎么回事?⾮递归且不⽤额外空间(不⽤栈),如何遍历⼆
叉树
6. 后⾯⼜问了很多 JVM⽅⾯的问题,⽐如 Java 内存模型、常⻅的垃圾回收器、双亲委派模型这些
7. 你有什么问题要问吗?
⼆⾯(技术⾯)
1. ⾃我介绍(主要讲⾃⼰会的技术细节,项⽬经验,经历那些就⼀语带过,后⾯⾯试官会问你
的)。
2. 操作系统的内存管理机制
3. 进程和线程的区别
4. 说下你对线程安全的理解
5. volatile 有什么作⽤ ,sychronized 和 lock 有什么区别
6. ReentrantLock 实现原理
7. ⽤过 CountDownLatch 么?什么场景下⽤的?
8. AQS 底层原理。
9. 造成死锁的原因有哪些,如何预防?
10. 加锁会带来哪些性能问题。如何解决?
11. HashMap、ConcurrentHashMap 源码。HashMap 是线程安全的吗?Hashtable 呢?
ConcurrentHashMap 有了解吗?
12. 是否可以实习?
13. 你有什么问题要问吗?
三⾯(技术⾯)
1. 有没有参加过 ACM 或者他竞赛,有没有拿过什么奖?( 我说我没参加过 ACM,本科参加过数学
建模竞赛,名次并不好,没拿过什么奖。⾯试官好像有点失望,然后我⼜赶紧补充说我和⽼师⼀
起做过⼀个项⽬,⽬前已经投⼊使⽤。⾯试官还⽐感兴趣,后⾯⼜和他聊了⼀下这个项⽬。)
2. 研究⽣期间,做过什么项⽬,发过论⽂吗?有什么成果吗?
3. 你觉得你有什么优点和缺点?你觉得你相⽐于那些⽐你更优秀的⼈⽋缺什么?
4. 有读过什么源码吗?(我说我读过 Java 集合框架和 Netty 的,⾯试官说 Java 集合前⼏⾯⼀
定问的差不多,就不问了,然后就问我 Netty 的,我当时很慌啊!)
5. 介绍⼀下⾃⼰对 Netty 的认识,为什么要⽤。说说业务中,Netty 的使⽤场景。什么是 TCP 粘
包/拆包,解决办法。Netty 线程模型。Dubbo 在使⽤ Netty 作为⽹络通讯时候是如何避免粘包与
半包问题?讲讲 Netty 的零拷⻉?巴拉巴拉问了好多,我记得有好⼏个我都没回答上来,⼼⾥想
着凉凉了啊。
6. ⽤到了那些开源技术、在开源领域做过贡献吗?
7. 常⻅的排序算法及其复杂度,现场写了快排。
8. 红⿊树,B 树的⼀些问题。
9. 讲讲算法及数据结构在实习项⽬中的⽤处。
10. ⾃⼰的未来规划(就简单描述了⼀下⾃⼰未来的设想啊,说的还挺诚恳,⾯试官好像还挺满意
的)
11. 你有什么问题要问吗?
四⾯(半个技术⾯)
三⾯⾯完当天,晚上 9 点接到⾯试电话,感觉像是部⻔或者项⽬主管。这个和之前的⾯试不⼤相同,感觉⾯试官主要考察的是你解决问题的能⼒、学习能⼒和团队协作能⼒。
1. 让我讲⼀个⾃⼰觉得最不错的项⽬。然后就巴拉巴拉的聊,我记得主要是问了项⽬是如何进⾏协
作的、遇到问题是如何解决的、与他⼈发⽣冲突是如何解决的这些。感觉聊了挺久。
2. 出现 OOM 后你会怎么排查问题?
3. ⾃⼰平时是如何学习新技术的?除了 Java 还回去了解其他技术吗?
4. 上⼀段实习经历的收获。
5. NginX 如何做负载均衡、常⻅的负载均衡算法有哪些、⼀致性哈希的⼀致性是什么意思、⼀致性
哈希是如何做哈希的
6. 你有什么问题问我吗?
7. 还有⼀些其他的,想不起来了,感觉这⼀⾯不是偏向技术来问。
五⾯(HR⾯)
1. ⾃我介绍(主要讲能突出⾃⼰的经历,会的编程技术⼀语带过)。
2. 你觉得你有什么优点和缺点?如何克服这些缺点?
3. 你前⾯跟其他⾯试官讲过⼀些你做的项⽬吧?可以给我讲讲吗?你要考虑到我不是⼀个做技术的
⼈,怎么让我也听得懂。项⽬中有什么问题,你怎么解决的?你最⼤的收获是什么?
4. 你⽬前有⾯试过其他公司吗?如果让你选,这些公司和阿⾥,你选哪个?(送分题,回答不好可
能送命)
5. 你期望的⼯作地点是哪⾥?
6. 你有什么问题吗?
总结
可以看出⾯试官问我的很多问题都是比较常⻅的问题,所以记得⼀定要提前准备,还要深⼊准
备,不要回答的太⽪⽑。很多时候⼀个问题可能会牵扯出很多问题,遇到不会的问题不要慌,冷
静分析,如果你真的回答不上来,也不要担⼼⾃⼰是不是就要挂了,很可能这个问题本身就比较难。
表达能⼒和沟通能⼒太重要了,⼀定要提前练⼀下,我⾃身就是⼀个不太会说话的⼈,所以,⾯
试前我对于⾃我介绍、项⽬介绍和⼀些常⻅问题都在脑⼦⾥练了好久,确保⾯试的时候能够很清
晰和简洁的说出来。
Java 面试八股文有必要背吗?
我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。现如今,Java 面试的本质就是八股文,把八股文面试题背好,面试才有可能表现好,在这里我也贡献一下我备战面试刷的一些八股文和整理的电子档笔记【有需要的可以-->点击这里即可获取我的资料笔记<--- 即可】
朋友们可以先了解一下目录(篇幅有限详细内容见笔记原文档):
基础篇
JVM 篇
多线程 &并发篇
Spring 篇
SpringBoot 篇
MyBatis 篇
MySQL 面试题
SpringCloud 面试题
Dubbo 面试题
Nginx 面试题
MQ 面试题
Linux 面试题
Zookeeper 面试题
Redis 面试题
分布式面试题
网络面试题
设计模式面试题
maven 面试题
ElasticSearch 面试题
tomcat 面试题
Git 面试题
大厂面试总结
面试技巧
评论