本人是双非院校科班研究生,Java 开发 3 年工作经验,以下是最近的面试总结:

先说下我的面试准备经历,为了保证自己简历有较大一定的概率通过筛选,我在 2018 毕业后面试了多家公司,去了一家上海一家小公司一直工作到今年 5 月。

和往年相比,今年的金三银四看上去不是那么顺利,可能和我的准备不足有关,但是令我惊讶的是第一家给我面试机会的公司竟然是阿里巴巴。一开始接到面试通知时,心情特别复杂,紧张又兴奋,阿里巴巴是出了名的深挖项目实战,实际上我项目部分是相对薄弱的。这次面试,一共三轮,共计四个小时左右,这三轮面试对我来说,简直是灵魂拷问,至于结局,往下看吧!


蚂蚁基本是电话面。第一面 leader 面,第二面总监面,第三面交叉面。

第一轮面试:1 小时 28 分钟

面试官问的面试题:

  • 最近做的项目介绍一下

  • 做的过程中遇到了什么问题,如何解决的

  • redis 集群高可用原理,一台挂了,怎么切换到另一台

  • 如何保证 redis 和 mysql 数据一致

  • 数据库事务

  • 很大的表如何优化

  • limit 的局限性,limit 值很大的时候有什么问题

  • mysql 锁介绍一下,有哪些应用场景

  • 索引失效的场景

  • 线程的生命周期

  • 线程池很高怎么处理

  • 在分布式任务中,一个微服务的很多线程报错,如何处理和定位

  • JVM 内存分为哪几块

  • 介绍一下垃圾回收机制

  • 有没有阅读 JDK 源码的习惯

第二轮面试:1 小时 11 分钟

  1. ThreadLocal 原理,放在堆还是栈。用过吗?

  2. Sync 可以作用在哪里? 有什么区别?Sync 的底层原理?

  3. 轻量级锁升级成重量级锁会有开销?有没有什么办法让锁不升级?上来就用重量级锁?

  4. aop 原理,实际使用过吗?

  5. Springboot 的使用过程中,有哪些觉得比较方便的地方?

  6. 对 spring 的核心原理有哪些了解?会根据所答来进行深入的问。

  7. Spring 实例化 bean 的时候会实例化所有的 bean 吗?

  8. Spring 实例化的时候需要先构建一个实例吗?

  9. Bean 的循环依赖是怎么解决的?

  10. 项目中为什么使用 Redis?

  11. Redis 的性能优化你如何实现?

  12. 从底层实现角度讲讲 Redis 为什么快?

  13. 线上 Redis 有哪些事项需要注意?

  14. 线上如何让 Redis 6.x 性能发挥到最大?

  15. 线上 Redis 持久化方案如何选型?为什么?

  16. 谈谈 Redis 底层多路复用实现细节

  17. 有没有使用 Redis 做过设计呢?

  18. JVM 的调优大致步骤?

  19. Jvm 的收集器有哪些?各自的优点和缺点?以及各自的回收算法?

  20. Sql 的优化?sql 语句本身的优化?sql 所用到索引的优化?

  21. 哪些情况会导致 sql 的索引失效?

  22. 索引的底层结构以及优缺点?

第三轮面试交叉面:1 小时 15 分钟

  1. 项目相关的问题

  2. 秒杀项目需要考虑的问题

  3. 秒杀场景用到分布式锁的情况,

  4. 服务隔离是如何做的,假设没有分库分表的情况下,服务如何做隔离

  5. 数据库 CPU 占用率高的原因

  6. 磁盘总空间 50G,统计出来的空间有 30G,剩余 20G 可能去哪里了

  7. 限流如何去做,不用 redis,还可以怎么实现(令牌桶,滑动窗口)

  8. 项目转变成微服务后遇到的问题,如何解决,

  9. 分布式事物的实现原理(我自己引上来的 TCC 的分布式事物)

  10. RocketMQ 问得较多(呜..没有答好)

  11. 在 RocketMQ 的群组消费中,每个消费组都会消费主题的一份全量消息吗?为什么?

  12. 假设一个 RocketMQ 集群部署在两个机房,每个机房都有一些 NameServer、Broker 和客户端节点,当两个机房间的链路中断时,NameServer、Broker 能不能正常提供服务?为什么?

  13. 如果不需要严格顺序,为了提升消费性能,可以不可以将 Consumer 设置为自动确认消费位置,然后批量拉取消息放到内存队列中,然后异步多线程并行执行消费业务逻辑?为什么?

  14. RocketMQ 能不能保证在“从消息生产直到消费完成”这个过程中,消息不重不丢(Exactly once) ?

  15. 在 RocketMQ 的一个 Broker 上,使用一个消息序号消费某个队列的消息。其中,消息文件(commitlog)的数量是 m 个,所有消息文件中的消息条数是 k 条,目标队列对应的索引文件(consumerQueue)的数量是 n 个,队列***有 j 条消息。查找消息的最快时间复杂度是多少?O(n)还是 O(1),为什么?

  16. RocketMQ 使用了哪种零拷贝技术?

  17. RocketMQ 中如何解决重复消费?

  18. Dubbo 有哪些核心组件?底层原理?Spi 是什么?spi 的好处是什么

  19. 最近在学什么?讲讲 SpringCloud alibaba 的一些东西

小结

项目相关的问题

蚂蚁没有考算法,基础知识也有考一些,感觉更看重眼缘和讲项目的能力。

大厂的面试,就是挂和被捞的过程。去年下半年没面上几个钟意的公司之后,已经下决心继续打磨一下自己。在今年上半年开始了新的面试。但我目前的简历技能模块上重点强调自己对 redis、多线程、jvm、MySQL 这些知识点有比较熟练的掌握(后面二面后我被挖底层挖怕了,以至于我现在简历改成了熟悉掌握)

另外一个原因就是 RocketMQ 没有深入研究过, 答得吞吞吐吐,聊完 RockerMQ 后, 我把话题转移到 Kafka 时,听面试官的语气停顿了一下,估计有些小失望吧!但这次经历给我的感受还是很不一样的

而程序员在应聘时更是需要经历层层面试。俗话说,磨刀不误砍柴工,做好面试前的准备工作可以帮助大家更好地应对面试官的问题以及面试中的突发情况。

总的来说,自己如果有想要去的大公司,一定要提升好自己,让自己的能力和素质与公司匹配的上,我也一直相信,机会永远是留给有准备的人。下面这份我经常刷的面试手册,大家可以看看~

点击此处获取完整版