【面小易-面经11】阿里巴巴Java研发工程师5面经验

【面小易-面经11】阿里巴巴Java研发工程师5面经验
点击图片或戳我查看详情和投简历
“我是面小易,机智又聪明。面试不眨眼,Offer不手软。”

我面小易又来啦,今天要和大家一起分享的是一位投递阿里巴巴Java研发工程师同学的经验,这位同学在大三才开始转向Java,但是能够从他对于面试问题的总结中看出他的基础知识很牢固和扎实,因此最终能够一路过关斩将,通过5轮面试最终斩获了Offer。

以下为正文

前言

在接触Java之前我接触的比较多的是硬件方面,用的比较多的语言就是C、C++。到了大三我才正式选择Java方向,到目前为止使用Java到现在大概有一年多的时间,所以Java算不上很好。刚开始投递的时候,实习刚辞职,也没准备笔试面试,很多东西都忘记了。

所以,刚开始我并没有直接就投递阿里,毕竟心里还是有一点点小害怕的。于是,我就先投递了几个不算大的公司来练手,就是想着刷刷经验而已或者说是练练手(PS:还是挺对不起那些公司的)。面了一个月其他公司后,我找了我实验室的学长内推我,后面就有了这5次面试。面试阿里之前我对自己的并发知识不太有信心,就花时间看了几本并发方面的书籍,网上也找了好多博客来看。

下面简单的说一下我的这5次面试:4次技术面+1次HR面,希望我的经历能对你有所帮助。

面小易说:这位同学非常谦虚,但是能够看出他属于“有心人”,一方面能够找一些面试“实战”来锻炼自己,在面试阿里巴巴之前,他已经经过了一个月的面试,可以说是身经百战了,这时候觉得面试状态不错的时候再找学长帮他内推,可以说规划非常周密。另外一方面他明确地知道自己哪里存在短板和不足,就会进行针对性学习和补充,比如对于并发这部分不够有信心,那么就找几本这方面的书来查漏补缺,这样的方法的确值得我们学习和借鉴。

一面(技术面)

  • 自我介绍(主要讲自己会的技术细节,项目经验,经历那些就一语带过,后面面试官会问你的)。
  • 聊聊项目(就是一个很普通的分布式商城,自己做了一些改进),让我画了整个项目的架构图,然后针对项目抛了一系列的提高性能的问题,还问了我做项目的过程中遇到了那些问题,如何解决的,差不读就这些吧。
  • 可能是我前面说了我会数据库优化,然后面试官就开始问索引、事务隔离级别、悲观锁和乐观锁、索引、ACID、MVVC这些问题。
  • 浏览器输入URL发生了什么? TCP和UDP区别? TCP如何保证传输可靠性?
  • 讲下跳表怎么实现的?哈夫曼编码是怎么回事?非递归且不用额外空间(不用栈),如何遍历二叉树。
  • 后面又问了很多JVM方面的问题,比如Java内存模型、常见的垃圾回收器、双亲委派模型这些。
  • 你有什么问题要问吗?

面小易说:按照以往的经验,一面更加侧重于Java的基础知识,广度比较大,审视不一定非常深入。但是这个同学的一面似乎有些不同,上来就针对于项目进行了提问,并且还问到了很多JVM相关的知识点,因此也能够看出,技术面试也是因人而异的,如果你技术的确比较强,那么问的问题也可能更加深入,这样给面试官留下的印象也会更加深刻。

二面(技术面)

  • 自我介绍(主要讲自己会的技术细节,项目经验,经历那些就一语带过,后面面试官会问你的)。
  • 操作系统的内存管理机制。
  • 进程和线程的区别。
  • 说下你对线程安全的理解。
  • 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树的一些问题。
  • 讲讲算法及数据结构在实习项目中的用处。
  • 自己的未来规划(就简单描述了一下自己未来的设想啊,说的还挺诚恳,面试官好像还挺满意的)
  • 你有什么问题要问吗?

面小易说:其实每轮的面试官都能够看到之前的面试中面试官问了什么问题以及面试者的回答情况的,并且还会记录每轮面试官对于面试者的评价。所以当谈到读过Java和Netty源码的时候,面试官直接跳过Java而问Netty了。能够看出,这位同学的三面在技术之外,更关注于他做了哪些实践以及是否有自己的思考。

四面(半个技术面)

三面面完当天,晚上9点接到面试电话,感觉像是部门或者项目主管。这个和之前的面试不大相同,感觉面试官主要考察的是你解决问题的能力、学习能力和团队协作能力。

  • 面试官让我讲一个自己觉得最不错的项目。然后就巴拉巴拉的聊,我记得主要是问了项目是如何进行协作的、遇到问题是如何解决的、与他人发生冲突是如何解决的这些。感觉聊了挺久。
  • 出现 OOM 后你会怎么排查问题?
  • 自己平时是如何学习新技术的?除了 Java 还回去了解其他技术吗?
  • 上一段实习经历的收获。
  • Nginx如何做负载均衡、常见的负载均衡算法有哪些、一致性哈希的一致性是什么意思、一致性哈希是如何做哈希的
  • 你有什么问题问我吗?
  • 还有一些其他的,想不起来了,感觉这一面不是偏向技术来问。

面小易说:正如这位同学说的他面对的这轮面试可能是部门主管的面试,其实相比于技术能力,部门主管更加看重面试者适不适合阿里巴巴以及自己的部门,学习能力和团队协作能力如何。因此,我们在平时项目实践的过程中也需要刻意去培养自己的自学能力和协作能力。

五面(HR面)

  • 自我介绍(主要讲能突出自己的经历,会的编程技术一语带过)。
  • 你觉得你有什么优点和缺点?如何克服这些缺点?
  • 说一件大学里你自己比较有成就感的一件事情,为此付出了那些努力。
  • 你前面跟其他面试官讲过一些你做的项目吧?可以给我讲讲吗?你要考虑到我不是一个做技术的人,怎么让我也听得懂。项目中有什么问题,你怎么解决的?你最大的收获是什么?
  • 你目前有面试过其他公司吗?如果让你选,这些公司和阿里,你选哪个?(送分题,回答不好可能送命)
  • 你期望的工作地点是哪里?
  • 你有什么问题吗?

面小易说:拿到Offer前的最后一轮面试就是HR面,这一面可谓是“临门一脚”,因此不能轻视,但是也不要过度紧张。还是要实事求是地说,不要太刻意地去表现自己,拿出自己最积极向上的一面就好。

总结

可以看出面试官问我的很多问题都是比较常见的问题,所以记得一定要提前准备,还要深入准备,不要回答的太皮毛。很多时候一个问题可能会牵扯出很多问题,遇到不会的问题不要慌,冷静分析,如果你真的回答不上来,也不要担心自己是不是就要挂了,很可能这个问题本身就比较难。

表达能力和沟通能力太重要了,一定要提前练一下,我自身就是一个不太会说话的人,所以,面试前我对于自我介绍、项目介绍和一些常见问题都在脑子里练了好久,确保面试的时候能够很清晰和简洁的说出来。

等待面试的过程和面试的过程真的好熬人,那段时间我压力也比较大,好在我私下找到学长聊了很多,心情也好了很多。

面试之后及时总结,面的好的话,不要得意,尽快准备下一场面试吧!我觉得我还算是比较幸运的,最后也祝大家都能获得心仪的Offer。

面小易说:通过这位同学总结的面试经验来看,它具有一个非常棒的优点,那就是善于总结。其实对于我们而言,也是一样的。我们要善于复盘和总结,并且在总结中完善和提升自己,只有这样才能不断从经历中汲取养分,不断成长。

上一篇:Python必知词汇:计算机


下一篇:使用新类型Nullable处理数据库表中null字段