阿里巴巴面经、面试流程、面试题

从去年年中一直到今年年初,我面阿里总共面了5-6次,经历了三次完整的4轮技术面 + 1轮HR面,目前将面试过程和常见题目记录一下,供参考。

面试流程

面试轮次

阿里社招一般都是P6级别以上,技术面4轮以上 + 1轮HR面。

阿里校招一般都是P4、P5级别,技术面3轮 + 1轮HR面。

面试侧重点

以社招P6为例,来看看每轮考察的侧重点。

一面

一面面试官一般是你组内师兄或组长,主要考察Java基础、中间件原理以及项目经历;面试时长30-60分钟。
Java基础和中间件考察范围会在文末附上。

项目经历这块,选择一个具有代表性的讲解即可,这里指的代表性,建议选择和应聘岗位相关度稍高,难度稍大的项目,保证讲解时长处于10-15分钟左右为宜。若项目讲解时长较短,其他考察点(Java基础和中间件原理等)会涉及的非常深入,加大面试难度。

二面

二面面试官一般是团队负责招聘的技术或其他组组长,有时甚至就是一面面试官,主要考察算法,算法这块的背考就刷LeetCode或牛客网即可,保证刷完300题较为保险,至少要刷完100道。

LeetCode:https://leetcode-cn.com/problemset/all/ (中文版)
牛客网:https://www.nowcoder.com/ta/coding-interviews?page=1 (剑指offer)

算法这块的考察一般是面试官发送面试链接,面试者进入链接然后写代码即可,一般题量在1-3道,面试时长30-60分钟。偶尔需要开视频哦。

笔试代码一般不强制要求100%可运行,但是尽可能保证自己的代码可顺利运行,包括main方法的测试用例。这里切记,不会写的地方,宁可写思路,也不要写存在重大bug的代码。

三面

三面面试官一般为你所在部门的主管,侧重考查项目难点、中间件底层实现以及场景题。从三面开始,考题就比较宽泛了,一般45分钟左右。

这里一定要准备好项目中遇到的难点问题,如果准备的不好,面试官会diss你,甚至面试评价中会写上几笔,影响你最终的录取。

有的同学可能会问,我们参与的很多项目都是偏业务,基本没什么难点。如果业务量比较大,如QPS达到万级别及以上,你可以往高可用等保障策略上讲解。如果业务量确实较小,可以往复杂的功能实现上讲解,这里可"发挥"的空间就比较大了,实在目前没有复杂的功能,可以往后期可以优化或即将要做的功能上讲解。

四面

四面面试官一般是你部门主管的上级或其他部门的主管,侧重中间件底层、场景题以及个人发展规划等,开放性较大,一般30分钟左右。

比较有意思的是,某一次四面面试官问,你最近在看什么书,最想推荐给我的是哪一本,为什么?这里就需要各位平时在日常开发之余,还是需要不断充电啊。

HR面

HR一般是你所在部门的HRG,考察一般侧重你个人发展,常见问题:

  • 最近几次离职的原因;
  • 当前的职级、薪资情况以及期望薪资;
  • 你认为在当前公司中遇到的最大的挑战是什么;
  • 你在当前公司得到了哪些提升;
  • 你对未来的职业规划是怎样的;
  • 你认为你和其他求职者相比有哪些优点;
  • 项目讲解(这里不要偏向技术,偏业务的讲解就行,偶尔会diss你,要抗住);
  • 你到公司最大的期望是什么;

经过四轮技术 + 一轮HR大概率稳了,但是偶尔可能会有一些小插曲,比如HC被锁、大老板针对你的面试评价保持怀疑态度等都有可能导致你的offer审批不下来。

HR面之后一周左右HR会通知你的offer方案,这个时候你经过前面的面试,对你的岗位工作也有了一定的了解,然后可以参考自己的offer方案再决定是否接下offer。

当你接下口头offer后,后续会安排体检(一周)和背调(一周),完成之后会发放书面offer,这个时候就妥了,等着入职吧。

面试宝典

Java基础、中间件基础

以下是面试期间整理的面试题目录,具体内容就不贴了,建议大家自己动手整理,加深印象。

  • 为什么重写equals()方法就必须重写hashCode()方法?
  • Object有哪些方法?
  • 接口和抽象类的区别,什么情况下用接口或抽象类?
  • 为什么String设计成不可变?String 和 StringBuilder、StringBuffer 的区别?
  • String s = new String(“abc”) 和 String s = “abc” 的区别?
  • Arraylist、HashMap的初始容量、加载因子、扩容增量?
  • 有序的Map有哪些?为什么TreeMap是有序的?哪些集合是线程安全的?
  • HashMap的底层数据结构,是如何插入的?哈希冲突解决方案?为什么是非线程安全的?
  • HashMap为什么初始容量总是2的n次方?
  • ConcurrentHashMap 和 Hashtable 的区别?
  • synchronized的使用方式、底层实现以及JDK1.6的优化?
  • 谈谈 synchronized和ReentrantLock 的区别?
  • Java内存模型及volatile实现原理?
  • volatile和synchronized的区别,volatile一定能替代synchronized吗?
  • CountDownLatch、CyclicBarrier、Semaphore、LockSupport和Exchanger?
  • ThreadLocal实现原理强引用、软引用、弱引用、虚引用?
  • JDK提供的并发容器CopyOnWrite、ArrayListBlockingQueue(阻塞队列FIFO)ConcurrentLinkedQueue(非阻塞队列)等实现方式?
  • CAS
  • ReentrantLock的实现?
  • 多线程的实现方式,start()是立刻启动吗?
  • ThreadPoolExecutor的重要参数?执行顺序?如何设置参数?
  • 什么是死锁,死锁的四个必要条件?
  • Java内存区域?
  • 对象的访问定位有哪两种方式?
  • 如何判断对象是否死亡?(两种方法)
  • 垃圾收集算法?常见的垃圾回收器?
  • JVM参数?JVM调优?Full GC的触发条件?
  • 一个线程OOM后,其他线程还能正常运行吗?
  • 类加载过程?类加载器?Java字节码文件结构?
  • BIO(Blocking I/O)、伪异步IO、NIO(New I/O)、AIO?
  • 数据库查询缓慢是什么原因,如何优化?
  • 索引实现?
  • 大表优化?
  • 如何实现MySQL的读写分离?
  • 数据库的乐观锁和悲观锁?
  • MySQL的锁机制?
  • 数据库事务的特性(ACID)和隔离级别?
  • MVCC实现可重复读?
  • RC隔离级别下,读A行数据,updateA 行数据,读B行数据,updateB行数据,再updateA行数据,请问加了几次锁?对A加锁是在什么时候加了几次锁?
  • MySQL的事务实现?何时加行锁?
  • Redis数据结构及各结构的内部实现?
  • Redis为什么快?
  • Redis通信协议?
  • Redis事务?
  • Redis 的过期策略以及内存淘汰机制?
  • Redis持久化方式?
  • Redis主从复制机制redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?
  • Redis 和 DB 一致性?缓存穿透?缓存击穿?缓存雪崩?缓存清洗?并发竞争Key?
  • Spring的优点,用到了哪些设计模式,IOC和AOP的理解?
  • Bean的生命周期?
  • 解释Spring支持的几种bean的作用域?
  • BeanFactory、FactoryBean的区别?
  • Spring如何处理单例Bean的循环依赖?
  • SpringMVC、Mybatis 执行过程?
  • Spring事务?
  • SpringBoot最大的优势(三连问)?
  • Spring Cloud Eureka 服务发现?
  • Ribbon负载均衡?
  • 为什么使用Dubbo?
  • Dubbo服务注册原理?
  • Dubbo提供的负载均衡策略?
  • 如何基于 dubbo 进行服务治理、服务降级、失败重试以及超时重试?
  • RabbitMQ Exchange 类型?
  • 如何保证消息顺序性?
  • 为什么使用消息队列?消息队列的缺点?常见的消息队列组件比较?
  • MQ如何保证高可用?
  • MQ如何处理重复消费?
  • RabbitMQ消息堆积?
  • MQ如何保证可靠传输?
  • ES的分布式架构原理?
  • ES写入数据的工作原理是什么啊?
  • 底层的 lucene 介绍一下呗?倒排索引了解吗?
  • ES在数据量很大的情况下(数十亿级别)如何提高查询效率?
  • ES 生产集群的部署架构是什么?
  • 分布式事务?
  • 使用哪些组件或者方法可以提升网站性能、可用性以及并发量?
  • 设计高可用(系统7×24小时不间断服务)系统的常用手段?
  • 如何设计高并发系统?
  • CAP和BASE理论?
  • 分布式 ID 生成器?
  • 基于 Redis 的分布式锁?
  • Redis分布式锁过期了但业务没执行完?
  • 内存溢出排查方法?CPU高负载排查方法?
  • 如何保障双11狂欢下的99.99%高可用?
  • 秒杀系统设计?

以上目录能覆盖一大部分考题,更加深入的底层原理、场景题等需要平时工作的沉淀思考以及框架源码的阅读总结。

建议平时工作之余,坚持阅读优秀的框架源码,这对面试答题以及日后编码具有极大的效应。以下列出部分推荐的源码:

  • Java基础:集合、JUC
  • DB:Redis、MongoDB、MySQL(任选其一,推荐Redis,相对简单)
  • ORM:Mybatis、Spring Data Jpa、Hibernate (任选其一,选平时工作中使用频率来选即可)
  • MQ:RabbitMQ、Kafka、RocketMQ、ActiveMQ(任选其一,选平时工作中使用频率来选即可,但还是推荐Kafka)
  • J2EE:Spring、Spring Boot
  • Web框架:Spring MVC、Spring Security、Spring Webflux(一般了解mvc即可,其他看兴趣)
  • 注册中心:Eureka、Zookeeper(任选其一,推荐Eureka)
  • 分布式事务:TCC Transaction、Seata、Fesar(任选其一,主要了解实现思路)
  • 其他:Zuul、Hystrix、Redisson、Netty、Dubbo、Ribbon、ES、HBase

常考的已加粗,重点阅读总结。

具体的阿里内推机会可关注公众号进行了解和交流。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hehuanchun0311/article/details/106211601