Skip to content

前言

在接触 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。

文章来源于自己总结和网络转载,内容如有任何问题,请大佬斧正!联系我