---
url: /doc/Java面试指北/c4y2gnhb/index.md
---
# 五面阿里，终获 offer!

## 前言

在接触 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. 你期望的工作地点是哪里？
7. 你有什么问题吗？

## 总结

1. 可以看出面试官问我的很多问题都是比较常见的问题，所以记得一定要提前准备，还要深入准备，不要回答的太皮毛。很多时候一个问题可能会牵扯出很多问题，遇到不会的问题不要慌，冷静分析，如果你真的回答不上来，也不要担心自己是不是就要挂了，很可能这个问题本身就比较难。
2. 表达能力和沟通能力太重要了，一定要提前练一下，我自身就是一个不太会说话的人，所以，面试前我对于自我介绍、项目介绍和一些常见问题都在脑子里练了好久，确保面试的时候能够很清晰和简洁的说出来。
3. 等待面试的过程和面试的过程真的好熬人，那段时间我压力也比较大，好在我私下找到学长聊了很多，心情也好了很多。
4. 面试之后及时总结，面的好的话，不要得意，尽快准备下一场面试吧！

我觉得我还算是比较幸运的，最后也祝大家都能获得心仪的 Offer。

> 更新: 2022-05-29 15:24:26\
> 原文: <https://www.yuque.com/snailclimb/mf2z3k/ksg7al>
