6月阿里四面,已获offer!分享我的经验总结和面试问题(Java岗)

本文提供者:星の航

面试过程

最近去阿里的菜鸟国际做了一次面试交流,发现大公司对于面试者的知识结构考核非常严谨,可以作为我们日常工作学习的指导。虽然很多人说面试问到的东西在实际工作中很少用到,甚至有「面试造火箭,工作拧螺丝」的说法。

但从面试中,其实可以看得出来现在的公司对于面试者的知识体系要求。如果我们能在工作中就按着这样的要求去不断提升,那么在面试的时候必然也能游刃有余。

一般来说,阿里的面试会有两轮的技术电面,分别交叉检验你的技术基础。后面还有两轮的现场技术面试,主要检验你的项目经验。但从知识体系的角度来看,阿里面试对于知识的考核可以分为三个层次:对于基础知识的考核、对于项目经验的考核、对于项目深度的考核。

一、基础知识考核

在这个层次上,主要考核你对 Java 语言本身原理的理解以及各种框架的原理理解。对于 Java 开发岗位上来说,这些知识点包括但不限于:

  • 集合 HashMap 的原理,与 Hashtable、ConcurrentHashMap 的区别?
  • Java 线程池的核心属性以及处理流程
  • Java 并发包原理、Synchronized关键字、锁
  • 线程的生命周期
  • JVM类加载机制
  • JVM内存模型
  • JVM分代以及垃圾回收机制
  • Spring Bean 容器生命周期
  • Spring AOP 原理
  • Dubbo 请求流程以及原理
  • 数据库 SQL 优化、数据库索引、索引原理
  • ……

上面只是说了很少的一部分而已,多的就不在这里总结了。这里有一份在一个交流Q群里免费获取的复习面经(由于篇幅,在这就展示下缩放目录和解析截图),想要这份资料的可以加群:708701457 免费获取!

看到这么多的知识点,我一下子就懵逼了,这么多得看到什么时候才看得完啊?但后面我想明白了,其实你不需要全部都懂,但需要了解大部分知识点,并且在这大部分知识点中,还需要有部分是了解得非常深入的。如果达到这个水平,基本上都能通过考核。

对于基础知识的考核多出现在阿里的前两轮电话面试上。对于这块,你事前把常见的面试题目看一遍,多面试几次基本上都没有问题。

二、项目经验的考核

当你成功通过基础知识的考核之后,你会进入下一关的考验:项目的理解程度。

面试官首先会让你选择一个你最拿手的项目,画出架构图,之后的一切问题都从这个架构图触发。当你画出架构图之后,你肯定需要解释清楚每个模块的作用,每个框架的原理以及与其他框架的区别。

例如我就用我做过的一个搜索项目作为经典项目,与面试官探讨。

项目中用到了 Kafka 这个框架,那么面试官就会问 Kafka 和 RocketMQ 之间的区别是什么,它们两个有什么不同?
项目中还用到了 Canal 这个阿里巴巴开源的框架,那么面试官自然会问这个东西是干嘛的,原理是怎样的?
项目中还用到了 Zookeeper 作为协调者,那么 Zookeeper 在这个项目中的作用是什么,扮演了什么角色?

对于「项目理解程度」的考核会发生在技术面试的三四轮。在这个层次上,你必须要有一个拿得出手的项目,并且对其中的所有框架以及原理都了如指掌,否则你会被虐惨。

三、项目深度的考核

通过上一轮对于「项目理解程度」的考核后,基本上你对整个项目都会有一个全面的认识,应用层面上的问题基本上不会难倒你了。但在「项目思考深度」的考核上,就不仅仅只是考核应用层面上的问题了。

还是用我做过的一个搜索项目作为例子,其中 Canal 这个开源框架暂时是没有实现集群这个功能的,那么面试官就问了:

你如何去改造这个项目,从而实现 Canal 的集群功能?
这个时候,你会发现你懵逼了,因为你从来没有去思考过这个问题。你所有的工作内容都是在想如何使用开源框架,而没有进一步思考这些开源框架好不好,有什么可以改进的地方。
所以,在这一个层次上考核的是你对开源框架的思考深度,这些框架到底好不好,好在哪里,不好在哪里,有什么可以改进的地方。

对于「项目思考深度」的考核同样发生在技术面试的三四轮。在这个层次上,你不仅要对项目本身理解足够深刻,还要跳出项目本身,去思考开源框架本身的问题。

四、总结

当我们回过头来总结,你会发现这三个层次都是层层递进的,而且逐步深入。虽然这是面试中总结出来的经验,但是这却是一个很好的学习指引。读者可以自己自查,看看自己现在是处于哪个层次,这样在工作中也可以不断地向更高层次迈进。

对于我来说,我缺乏的是对于项目的思考深度,很多时候都是业界觉得好,那我就用了。但是作为一个高级开发,甚至是一个即将成为架构师的高级开发来说,你必须知道为什么要用这些框架?它有什么问题,我们能不能做得更好?只有这样,我们才能有所成长。

阿里面试真题:(文末还有推荐阅读)

一面(主要是jvm,并发,锁,数据结构等基础)

  1. 自我介绍(说说自己的擅长及拿手的技术)
  2. 说说treemap和HashMap的区别?HashMap和ConcurrentHashMap的区别?
  3. HashMap底层如何实现(JDK1.8有所改动)?
  4. 说说Hash的一致算法?
  5. 你知道的GC算法和回收策略有哪些?GC的机制是什么?
  6. 垃圾回收器的基本原理?是否可以立即回收内存?怎么样主动的通知JVM进行垃圾回收?
  7. 双亲委派模型机制线程池创建的几个核心构造参数是什么?
  8. 乐观锁和悲观锁?可重入锁和Synchronized?他们都是可重入锁吗?哪个效率更高?
  9. CountDownLaunch和Cylicbarrior的区别以及分别是在哪样场景下使用的?
  10. Http和Https的区别以及Https加密的方式?
  11. 以后的职业规划和想法

二面(主要是数据库,协议 , Spring等 )

  1. 自我介绍,聊下自己认为做得很好的项目!
  2. InnoDB支持的四种事务隔离级别名称是什么?之间的区别是什么? MySQL隔离级别是什么?
  3. 说说事务的特性?讲讲对慢查询的分析?
  4. 你理解的BTree机制?
  5. 有哪些MySQL常用的优化方法?6. Http请求过程, DNS解析的过程?7.三次握手和四次握手的过程?
  6. B+树索引和Hash索引之间的区别?
  7. Spring IOC如何管理Bean之间的依赖关系,怎么样避免循环依赖?
  8. SpringBean创建过程中的设计模式?11.说说AOP的实现原理?
  9. Tomcat的基本架构是什么?

三面(主要是缓存,并发,分布式)

  1. 自己项目中的总结的并发经验
  2. 说说MySQL的锁并发?加锁的机制是什么?
  3. 高并发场景下如何防止死锁,保证数据的一致性?
  4. 集群和负载均衡的算法与实现?
  5. 说说分库与分表设计?
  6. 分库分表带来的分布式困境与对应之策有哪些?
  7. Redis和Setnx命令使如何实现分布式锁的?
  8. 使用Redis怎么进行异步队列?会有什么缺点?
  9. 缓存击穿的概念和解决方案?
  10. Redis的数据结构?线程模型? Redis的数据淘汰机制?
  11. Redis的数据一致性问题12. MQ底层原理的实现?
  12. 阻塞队列不用Java提供的该怎么实现?
  13. 讲讲负载均衡的原理?
  14. 如何实现高并发环境下的削峰、限流?

推荐阅读

这篇是一份面经复习资源分享,值得观看收藏,觉得不错的朋友可以转发分享下今天的这份面经分享,同时可以关注我下,以后会有更多精选分享给大家!

Java面试高频题精选300道,一份通往阿里的必备指南

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();