首页 > 阿里六面面经
头像
钟期既遇
编辑于 2021-04-17 20:38
+ 关注

阿里六面面经

阿里CBU

楼主提前批海投了阿里 20 多个部门,基本都约了面试,系统开的那天收到了 16 封内推邮件,在系统开的前一个周,平均每天三场面试,极其的耗费心力,以至于春招除了阿里、腾讯、字节都没投过别的公司,我今天整理了一下这些面试中我认为有价值的部分面经,希望能给正在找实习的一些小伙伴一些帮助。

2021/2/21 15:00 50min

先让我讲一下实习的经历,大概问了下项目是做什么的,主要负责哪些模块,实习到什么时候,系统都哪些同学在用。还问了发布流程,说阿里这边有统一的发布平台,开发同学自己发布。项目用到的技术栈,这边用什么 RPC 框架。质疑工作量不大。Java 学了多久了,怎么学的?

  • 类加载机制叫什么?有什么好处?有没有了解过如何打破类加载机制?

  • Class 和 Object 类哪个先加载?什么时候加载的?

  • Object 类里面的方法?

  • 创建一个线程的方式,哪种方式可以获得返回值?

  • 线程有哪几种状态?

  • 线程池的核心参数有哪些?

  • 两个线程交替打印奇偶数?

  • @Resource 和 @Autowire 注解有什么区别?平常用哪个?

  • AOP 动态代理的原理?

  • BeanFactory 和 ApplicationContext 有什么区别?

  • Spring Bean 加载流程?

  • 当 MySQL 单表达到 1000 万的时候该如何优化?分表有实战过吗?

  • TCP UDP HTTP 这些协议都是哪些机构定义的,它每发布一个版本都会有一个编号,编号的前缀是什么?

  • UDP 是可靠的吗,如果实现可靠传输?

  • TCP 的粘包了解过吗?为什么会出现粘包的现象?

  • TCP 的拥塞控制?

  • 快排什么时候复杂度会变高?

  • JDK 里面哪里用到了工厂模式,其它模式呢?

  • JDK 哪里用到了责任链模式?我说 JDK 里不太清楚,但我知道 Spring Security 里用到了责任链模式,让我详细讲一下?

  • RPC 和 Spring Cloud 有什么区别?

  • 有了解过阿里的 Dubbo 吗?Dubbo 的服务发现流程?

  • 博客上线了吗?租的什么服务器?环境是自己配置的吗?

  • 哪里人、对 base 有什么要求?

建议:基础还要再加强一下,实习期间要多了解公司项目的架构,不要只局限于一部分,明白项目具体分为哪些模块,每个模块的技术难点,争取能画出类图,思考如果用户数增加,该如何去迭代。

总结:
这是人生中第一次面阿里,有一些紧张,有一些基础问题没答好,但不得不说阿里的面试体验真的棒,全程像聊天一样,面试官会引导你思考。

阿里淘系架构

一面 2021/2/23 7:50 1h03min

  1. 你先讲一下大学期间和实习的经历吧。
  2. 开始聊实习的项目:用的什么协议,上传的流程,本地服务器起了什么作用,如何查看上传的文档的?这里问的很细,仔细介绍了流程和遇到的问题。还问了上传过程中有遇到超时问题吗?有做断点续传吗?
  3. HTTP 的相应状态码了解吗?301 永久重定向的返回地址是存在哪里的,具体哪个字段里面?
  4. 在浏览器输入这个域名,是怎么找到这个页面的?主要是讲了 DNS 解析过程,以及 TCP 三次握手,然后就问项目如果是集群部署会有什么变化,引入了 Nginx,DNS 解析出 Nginx 服务器的地址,Nginx 转发到具体的服务器。
  5. 开始问博客项目,说我看你博客用到了 Nginx 啊,怎么刚才没有讲到,我尴尬地说,Nginx 和项目部署在一台服务器上,Nginx 只起了转发作用。
  6. 你的项目比较简单,下面问你基础知识吧,数组和链表都在什么情况下用到,如果我经常需要查询操作,偶尔还会进行增加和删除,那有没有更好的结构?
  7. 多线程环境下,如何保证操作集合的线程安全?我答了加锁和使用线程安全的集合,面试官说加锁的话,如果一个线程修改的同时,另一个线程进行读操作,那么读操作操作会阻塞,有没有好的解决方案?我答了写时复制 CopyOnWriteList,讲了讲具体是怎么实现的,然后面试官追问,写操作完成的时候,更新数组的时候也是线程不安全的呀,然后我说在写操作时候加锁吧,后面面试官说其实不用加锁,更新引用的操作本来就是原子的,我只是引导你一下。
  8. 用过哪些常用的集合类?答了 ArrayList、LinkedList、HashMap,面试官说这些都是线程不安全的、然后我又说了 SynchronizedMap、ConcurrentHashMap。追问这两个有什么区别,都讲了一下、顺便讲了 ConcurrentHashMap 1.7 和 1.8 的区别还有写操作的过程,又追问链表转换为红黑树损失了什么?
  9. JVM 的内存结构了解吗?什么东西存放在方法区?如何存储线程私有的数据?引入了 ThreadLocal、ThreadLocal 里的 ThreadLocalMap 存在哪里?ThreadLocalMap 存在线程安全问题吗?
  10. 为什么引入线程池?为什么创建一个线程比较“重”?线程池的核心参数?如果此时任务数量小于核心线程数,当有新任务到来的时候,线程池会怎么处理?讲完之后顺便讲了后面的运行流程。最后问了有哪几种拒绝策略?
  11. 开始聊 synchronized,一个线程获取锁,JVM 层面会做什么操作,怎么说明它获取到了锁?对象头存了存线程 id 以外,还存了什么数据?如果一个线程获取了锁,那它在这个方法里面调用另一个方***怎么样?为什么要这样设计,不设计成不可重入的?
  12. 平常怎么学习的?哪些书印象比较深刻?
  13. 平常刷题吗?刷哪个网站?如果判断链表是否成环?
  14. 有没有了解过一些开源项目?

聊了一个小时了,你还有什么想问我的吗?

面试官先介绍了团队的情况,主要是做网关和接入层以及淘系的一些前瞻性架构,我问了是偏向技术还是业务,主要是技术,客户是业务部门的开发同学。

我还有哪些可以提高的地方?

面试官说单问一个知识点的话答得还是不错,但是如果延申追问的话还是要思考一下。项目经验还是缺少一些,所以我让你多去了解一下开源项目,切入一个开源项目并且联系到你所学的知识,如何找开源项目很重要,这个需要你自己去找。面试官还问了有用过 RPC 吗,我说调用上游服务就是 RPC 调用,但是不了解原理,面试官说可以去了解一下原理,不然只会调服务。

我又问了像自己实现一个 RPC 框架有必要试一下吗?面试官说 RPC 框架不错,可以联系到你学的计算机网络的知识,你三次握手背的再熟,但是应用到 RPC 框架里面还是会有很多问题。做算法的同学,有的会参加很多比赛,发表很多论文,做工程的同学,最好就是参与一些项目。

最后问了一下有没有在面其它部门?

总结:

我感觉这是开始面试阿里以来表现最好的一次,面试官最后暗示过了,说我们会很快通知你结果,然后我等了两三天还是没有人约二面,后面我问了一下内推人说是过了,但是二面面试官比较忙,让我再等几天,这一等就等了十多天,系统突然开了,搞得我措手不及。系统开的那天,二面面试官加了我的微信和钉钉,约了周日面试。

二面 2021/3/7 13:55 1h05min

  1. 自我介绍?
  2. 先问问项目,参与完成的内容有多少?
  3. 项目中比较难的地方在哪里,或者是花时间比较多的地方,出问题比较多的地方?
  4. 年份是可以直接比较大小的吗?面试官说根据年份查找博客可以直接比较大小,因为 date_format 完是不可以利用索引的,虽然你的博客也不会超过 1000 篇。
  5. 你当时怎么考虑的,直接在网上查一个解决问题的方案吗,你考虑过哪些方面?面试官说我想听的是你认为难的地方也好,复杂的地方也好,你是怎么想的,你中间是怎么一步一步解决的,你思考了什么东西,这个是我问这个问题背后的原因,我不是过来问你个答案。
  6. 上个问题我引入了分表,又被质疑了,面试官问这样有什么好处,首页显示的博客,我不查正文这个字段就好了,为什么要分表存储呢?
  7. 如果现在有这两个方案,一个是不拆分表,只查询需要的字段,另一个是分表,你会选择哪个?为什么?
  8. InnoDB 引擎为什么要创建主键索引?
  9. MySQL 主键索引可以关掉吗?我答了可以关掉,但我没试过,面试官说你要回答可以关掉,那就表示官方文档里面写了,你得看过,否则你就有可能失败,我就会去查官方文档的,虽然我现在不知道,回答错误,就认为你是根据你的经验回答的,你刚才回答的是个肯定句,是可以关掉的,我现在不知道,等会我回去查一查。
  10. 这个个人博客有多少访问量啊,面试官说一般访问量不大的话,如果功能没有问题的话,一些性能问题一般暴露不了,所以还是自身推演分析的居多。面试官问你这个博客还在吗,他想访问一下。
  11. 问了大概 15min 后,开始问实习了,问项目定位,核心功能,面试官质疑说监控和文档这两个功能毫不相关,为什么会在一个系统里面?无语子,我怎么知道,他们就这么设计的,我就是个干杂活的。
  12. 在做这个项目的时候有遇到过什么难点吗?经过了那么多轮面试,我已经把可以优化的点烂熟于心了,什么分片上传、断点续传、分片导出、HTTP 请求头、响应头的字段,巴拉巴拉一顿扯。
  13. 面试官详细追问了一下分片策略?
  14. 又过了 10min,开始问基础知识了,你现在了解过的语言有哪些啊?Java 看的是什么资料?又质疑我怎么没看语言相关的书?推荐看一下《Thinking in java》
  15. 噩梦来了,我上面提到看过《深入理解 Java 虚拟机》和《Java 并发编程的艺术》,然后面试官问我,看了这两本书,你觉得哪些地方是对你实际开发有影响的?
  16. 我上面提到了看了《深入理解 Java 虚拟机》,我觉得在部署的时候应该配置一些 JVM 参数,然后面试官问你的注意点是什么,你有实测过吗?一定要实测,所有你认为的极有可能是错的,这是个大概率问题,因为 JVM 缺省就帮你弄的挺好的,它的缺省意味着它也是经过测过概率适用性的。面试官说我问你三个问题,第一个你配了哪些 JVM 参数,第二个你为什么认为是有效的,第三个你有实测过吗?
  17. 其他的有关注吗?这里我又提了一下类加载机制。面试官问有 Hack 过吗,有自己打破过双亲委派机制吗?如果要打破,你要做什么事情?如果让你明天在 GitHub 上提交一个工程,打破双亲委派机制,你能给我吗?
  18. 然后问一面没答出来的问题,ThreadLocalMap 是线程安全的吗?又追问了 ThreadLocal 是如何与线程绑定的?
  19. Java 内部类有什么注意的吗,平常在什么地方会用啊?
  20. 你刚才提到一个静态内部类,静态内部类和非静态内部类有什么区别?面试官说一般用静态内部类。
  21. AQS 你认为实现的比较好的地方在哪里?
  22. 上面提到了 AQS 的 ConditionObject 可以实现精准唤醒,继续追问如何实现精准唤醒?
  23. 上面拿循环打印 ABC 的例子,面试官说这是个好问题,既然你说你熟悉这个,那我就接着问,面试官说我实现的这个过程显然很复杂,有没有更简单的方式,做到更简单,更高效,不容易出错?面试官问你看过 Go 吗,Go 会怎么做,你了解 channel 吗?Java 对应的实现方式是什么?问题转换成了用阻塞队列实现交替打印 ABC。哪种方式更简单?为什么?这里没有想到如何用阻塞队列实现,面试官让下去实现一下,commit 到 GitHub 上。
  24. 最后问一下有看过经典的计算机相关的书吗?

反问:

  1. 如果有机会去实习的话,需要提高哪些地方才能适应的更快一些?

最后面试官问了下一面面试官有没有介绍部门,又补充了一些,还问了作业多久能做完,如果 OK 的话,把作业的完成情况也会作为下一个流程的输入。

阿里淘宝消息

2021/2/27 17:30 38min

  • 自我介绍,重点讲一下实习的经历?

  • HashMap 初始化容量,传入 19,会初始化多少,是马上分配内存吗?

  • NIO 和传统的 IO 有什么区别?

  • GC 算法有哪些?

  • 线程池的拒绝策略有哪些?

  • 堆排序的时间复杂度,排序过程,应用场景有哪些?

  • 分布式锁了解吗?

  • RBAC 模型介绍一下?

  • 单例模式了解吗?

  • 分库分表的原理了解吗,淘宝的订单如何分表?如何用一次查询根据用户 id,查询它的订单?

笔试题:四个线程(ABCD),写一个程序,按照以下要求输出字符串,4 个线程总共输出 1000 次即可。

反问

  • 详细介绍一下部门的业务?

  • 做 IM,Netty 用的多吗?

Rocket MQ ES Tair

  • 淘宝技术部和淘系技术部有什么区别?

  • 哪些地方需要提升一下

总结:

面试官说总体答的还行,有一些基础再去回顾一下,比如 NIO,分库分表也多了解了解,实习的话时间不是很长,可以理解,我本来以为挂了,但系统开的那天给我发了内推链接,内推人加了我的微信,让我录系统才能继续面试,我就放弃了。有趣的是,Boss 上有个师兄找我要简历,加了微信之后,说对我有印象,我之前再他们那里面过,说如果挂了的话可以找他捞,秋招也可以找他试试。

蚂蚁集团中台与业务技术部

2021/3/6 20:10 1h9min

  • 自我介绍,介绍实习的项目,然后我把优化也讲了,面试官说我刚刚还想问呢,你自己讲出来了,你等我问了再讲啊,双方都哈哈大笑。

  • 文件传输用的什么协议?

  • HTTP 请求头有哪些字段?HTTP 请求报文格式?

  • HTTPS 的握手流程?

  • 用 MyBatis 去连接数据库,是不是也需要一个协议,这个协议是一个应用层协议,那传输层协议用的什么?为什么不用 UDP?让你设计的话你会用长连接还是短连接?

  • 我们用连接池去维护 Connection,那当连接池中的 Connection 都被占用的时候,这时有线程过来的时候怎么办?

  • 事务隔离级别有哪些?

  • 当多个线程去修改账户余额的时候,在数据库层面如何保证线程安全?

  • 什么是分布式锁?

  • Redis 如何实现分布式锁?

  • MySQL 如何实现分布式锁?

  • Java 中所有类的基类是什么?Object 类有哪些方法?

  • 重写 equals 方法之后还需要重写 hashCode 方法吗?

  • 面向对象的三大特性?多态如何体现的?

  • 项目有部署过吗?Redis 是怎么安装的?

  • 如果有一个用户用你的系统返回失败,那你应该如何寻找问题?看日志

  • java -jar 后面可以跟哪些 VM 参数?

  • 进程和线程有哪些是共享的?哪些是私有的?

总结:

最后面试官先跟我阐明了情况,说后面二三面在看技术的前提下,还会考虑一些学历、奖项、论文等因素,我在这一方面上是吃亏的。还说他基本上没问八股文,因为他觉得我基础这方面没问题,问了一些比较贴合实际的一些场景,虽然我有些答的不对、思路也不正确、但这对于实习生来说是正常情况,还说他这一面是给我过了,但是不敢保证后面的流程比较顺利,让我好好考虑一下。还说了内推有一个简历回捞机制、哪怕我后面流程挂了、也可以让后面的面试官面评不写的太狠,能够把简历推给别的部门。还问了我在面哪些部门、到哪一步流程了。最后又详细讲解了部门做的业务,我感觉是比较核心的业务、DAU 和并发量都比较大。

蚂蚁集团技术风险部

2021/3/5 4:08 37min

  • 开发中常用的集合类?区别?

  • 这些集合类有遇到过线程安全问题吗?如何解决?

  • 线程池的核心参数,原理是什么?

  • 阻塞队列有哪些类型?

  • volatile 原理是什么?

  • 如何保证原子性?

  • AtomicInteger 原理是什么?

  • CAS 是什么,Java 8 对 CAS 的优化?

  • AQS 是什么?

  • 什么是数据库事务,特性,隔离级别,每个隔离级别能解决什么问题?

  • 项目数据量大概有多少,建过索引吗?索引什么情况下会失效?

  • 什么时候会触发 GC,如何判断一个对象需要被回收?

  • HTTPS 的握手流程?如果防止中间人攻击?大文本应该用对称加密还是非对称加密?对称加密和非对称加密的算法?

  • 假设你的用户量比较大,Redis 缓存的数据突然失效了,导致所有的请求都打到了 DB 上,如何解决?

  • 加入 Redis 不做缓存,用作数据存储,如何保证数据不丢失?

  • RDB 和 AOF 的原理?RDB 的 bgsave 是同步还是异步的?

  • 为什么 TCP 要三次握手?

反问:

  • 哪些地方需要提高?

然后面试官讲解了部门主要做的业务,数据平台下面的技术风险部。

总结:

开系统那天的下午接到了面试官的电话,问方不方便面试,然后聊了 37 min,面试官比较喜欢从实际的业务场景入手,来考察基础知识,很多时候我都是说实际中没遇到过,但我知道它的原理,面试官当场说过了,后面会有面试官联系我,大概一个小时后,内推人约了下二面的时间,但我在二面前点了别的部门的链接,二面就被鸽了,过了几天内推人说看我点了别的部门的链接了,还考不考虑他们部门了,我说先不面了,要是挂了的话再来面。

更多模拟面试

全部评论

(14) 回帖
加载中...
话题 回帖