做者:ppxyn。本文来自读者投稿。该文已加入笔主的开源项目——JavaGuide(一份涵盖大部分Java程序员所须要掌握的核心知识的文档类项目),地址:
https://github.com/Snailclimb... 。以为不错的话,记得点个Star。

在接触 Java 以前我接触的比较多的是硬件方面,用的比较多的语言就是C和C++。到了大三我才正式选择 Java 方向,到目前为止使用Java到如今大概有一年多的时间,因此Java算不上很好。刚开始投递的时候,实习刚辞职,也没准备笔试面试,不少东西都忘记了。因此,刚开始我并无直接就投递阿里,毕竟内心仍是有一点点小惧怕的。因而,我就先投递了几个不算大的公司来练手,就是想着刷刷经验而已或者说是练练手(ps:仍是挺对不起那些公司的)。面了一个月其余公司后,我找了我实验室的学长内推我,后面就有了这5次面试。git
下面简单的说一下个人这5次面试:4次技术面+1次HR面,但愿个人经历能对你有所帮助。程序员
一面(技术面)
- 自我介绍(主要讲本身会的技术细节,项目经验,经历那些就一语带过,后面面试官会问你的)。
- 聊聊项目(就是一个很普通的分布式商城,本身作了一些改进),让我画了整个项目的架构图,而后针对项目抛了一系列的提升性能的问题,还问了我作项目的过程当中遇到了那些问题,如何解决的,差不读就这些吧。
- 多是我前面说了我会数据库优化,而后面试官就开始问索引、事务隔离级别、悲观锁和乐观锁、索引、ACID、MVVC这些问题。
- 浏览器输入URL发生了什么? TCP和UDP区别? TCP如何保证传输可靠性?
- 讲下跳表怎么实现的?哈夫曼编码是怎么回事?非递归且不用额外空间(不用栈),如何遍历二叉树
- 后面又问了不少JVM方面的问题,好比Java内存模型、常见的垃圾回收器、双亲委派模型这些
- 你有什么问题要问吗?
二面(技术面)
- 自我介绍(主要讲本身会的技术细节,项目经验,经历那些就一语带过,后面面试官会问你的)。
- 操做系统的内存管理机制
- 进程和线程的区别
- 说下你对线程安全的理解
- volatile 有什么做用 ,sychronized和lock有什么区别
- ReentrantLock实现原理
- 用过CountDownLatch么?什么场景下用的?
- AQS底层原理。
- 形成死锁的缘由有哪些,如何预防?
- 加锁会带来哪些性能问题。如何解决?
- HashMap、ConcurrentHashMap源码。HashMap是线程安全的吗?Hashtable呢?ConcurrentHashMap有了解吗?
- 是否能够实习?
- 你有什么问题要问吗?
三面(技术面)
- 有没有参加过 ACM 或者他竞赛,有没有拿过什么奖?( 我说我没参加过ACM,本科参加过数学建模竞赛,名次并很差,没拿过什么奖。面试官好像有点失望,而后我又赶忙补充说我和老师一块儿作过一个项目,目前已经投入使用。面试官还比较感兴趣,后面又和他聊了一下这个项目。)
- 研究生期间,作过什么项目,发过论文吗?有什么成果吗?
- 你以为你有什么优势和缺点?你以为你相比于那些比你更优秀的人欠缺什么?
- 有读过什么源码吗?(我说我读过 Java 集合框架和 Netty 的,面试官说 Java 集合前几面必定问的差很少,就不问了,而后就问我 Netty的,我当时很慌啊!)
- 介绍一下本身对 Netty 的认识,为何要用。说说业务中,Netty 的使用场景。什么是TCP 粘包/拆包,解决办法。Netty线程模型。Dubbo 在使用 Netty 做为网络通信时候是如何避免粘包与半包问题?讲讲Netty的零拷贝?巴拉巴拉问了好多,我记得有好几个我都没回答上来,内心想着凉凉了啊。
- 用到了那些开源技术、在开源领域作过贡献吗?
- 常见的排序算法及其复杂度,现场写了快排。
- 红黑树,B树的一些问题。
- 讲讲算法及数据结构在实习项目中的用处。
- 本身的将来规划(就简单描述了一下本身将来的设想啊,说的还挺诚恳,面试官好像还挺满意的)
- 你有什么问题要问吗?
四面(半个技术面)
三面面完当天,晚上9点接到面试电话,感受像是部门或者项目主管。 这个和以前的面试不大相同,感受面试官主要考察的是你解决问题的能力、学习能力和团队协做能力。github
- 让我讲一个本身以为最不错的项目。而后就巴拉巴拉的聊,我记得主要是问了项目是如何进行协做的、遇到问题是如何解决的、与他人发生冲突是如何解决的这些。感受聊了挺久。
- 出现 OOM 后你会怎么排查问题?
- 本身平时是如何学习新技术的?除了 Java 还回去了解其余技术吗?
- 上一段实习经历的收获。
- NginX如何作负载均衡、常见的负载均衡算法有哪些、一致性哈希的一致性是什么意思、一致性哈希是如何作哈希的
- 你有什么问题问我吗?
- 还有一些其余的,想不起来了,感受这一面不是偏向技术来问。
五面(HR面)
- 自我介绍(主要讲能突出本身的经历,会的编程技术一语带过)。
- 你以为你有什么优势和缺点?如何克服这些缺点?
- 说一件大学里你本身比较有成就感的一件事情,为此付出了那些努力。
- 你前面跟其余面试官讲过一些你作的项目吧?能够给我讲讲吗?你要考虑到我不是一个作技术的人,怎么让我也听得懂。项目中有什么问题,你怎么解决的?你最大的收获是什么?
- 你目前有面试过其余公司吗?若是让你选,这些公司和阿里,你选哪一个?(送分题,回答很差可能送命)
- 你指望的工做地点是哪里?
- 你有什么问题吗?
总结
- 能够看出面试官问个人不少问题都是比较常见的问题,因此记得必定要提早准备,还要深刻准备,不要回答的太皮毛。不少时候一个问题可能会牵扯出不少问题,遇到不会的问题不要慌,冷静分析,若是你真的回答不上来,也不要担忧本身是否是就要挂了,极可能这个问题自己就比较难。
- 表达能力和沟通能力过重要了,必定要提早练一下,我自身就是一个不太会说话的人,因此,面试前我对于自我介绍、项目介绍和一些常见问题都在脑子里练了很久,确保面试的时候可以很清晰和简洁的说出来。
- 等待面试的过程和面试的过程真的好熬人,那段时间我压力也比较大,好在我私下找到学长聊了不少,心情也好了不少。
- 面试以后及时总结,面的好的话,不要得意,尽快准备下一场面试吧!
我以为我还算是比较幸运的,最后也祝你们都能得到心仪的Offer。面试
专一Java知识和面试技能分享!我已经整理好了一份Java 学习必备的书籍+视频+文档汇总,内容比较多,你能够在公众号后台回复关键“1”,我会免费无套路把这些都给你。
