那个陪我打王者的兄弟进了阿里
这一次面经的分享来自很早和我一起打王者的兄弟,为啥印象这么深刻呢,因为他鲁班贼 6,以至于我单独给他存了个备注。
这一次历时两个月,他拿到了一大堆的 Offer,恭喜他拿到了心仪的阿里 Offer。
按照惯例,当然是邀请分享一波面经了。
不过这一次是我看见面经里整理的最完善的了,几乎不需要我做什么修改就可以发出来了,再次感谢他的分享。
百世物流专场
一面
线上 SQL 调优经验。调优的惯用思路。
索引为什么采用 B+树,而不用 B 树,红黑树。
项目中 MQ 应用场景,如何防止消费丢失,重复消费如何解决?
JVM 类加载机制(双亲委派)。CMS 垃圾回收过程。
项目中的设计模式的使用。
如何提升接口的响应时间?
MyBatis 框架缓存说一下。
如何自己实现一个锁。(回答时候 基于 AQS)
Redis 挂了怎么解决?(增加本地缓存)
网络的七层模型。每层的作用?(回答时候,我直接说了我是基于五层模型的。)
三次握手的过程,为什么三次?
为什么出现 ip?
HTTPS 发送请求的过程。
Eureka 调优如何调的?自我保护模式。
分布式事务的流程?(LCN)
限流的使用,原理是什么?常见限流的算法有哪些?限流之后的拒绝策略。
二面
手撕实现一个多叉树,遍历打印。
手撕单例。
死锁的产生。
如何预防死锁,OS 如何做的?MySQL 如何做的?
如何在代码编写时候避免死锁?
hashmap。
什么是高内聚低耦合。
项目中的开放封闭原则如何实现的,如何自定义 Bean。
bean 的循环依赖如何解决?
MySQL 索引实现原理。为啥快?
三面
为什么离职?
现在薪资?期望薪资?
介绍业务,你认为的核心是什么?
有什么想问我的。
光云科技
一面(30 分钟)
项目中解决过什么问题?
数据库事务 ACID 是如何实现的?
mysql 如何解决死锁的?
分布式锁的使用
为什么使用 Redisson?
Redisson 挂了一台怎么办?
redis 为什么可以实现锁?
分布式锁还有其他的方式吗?
redis 持久化
分库分表
为什么分库分表?
遇到过什么问题吗?
讲一下你理解的 CAP
让你设计一个系统,按照 CAP 理论你会怎么设计?
MQ 用过吗?
技术选型,为什么选择 RocketMQ?
线上有没有遇到过 向 MQ 写入消息失败的情况?
RocketMQ 消费者 发送消息失败怎么办?(放 redis,如果 redis 挂了怎么办?)
RocketMQ 消息堆积怎么办?
dubbo + zk
dubbo 为什么用 zk 不用 nameservice?
zk 挂了 dubbo 还能调用吗?重启之后还能调用吗?
有什么要问我的?
二面(40 分钟)
两个面试官
说一下项目中秒单模块的优化。
带宽大是什么概念?
考虑使用同一机房的机器局域网吗?如果走局域网的话,网络如何走的?
聊一下 MQ
MQ 写入消息失败的情况如何处理?(和一面的问题一样,我直接说出了解决方案,redis,本地内存)
生产者发送消息的几种方式,还有其中的差别。
Nginx 聊一下
Nginx 为什么那么快?(没看过,但是我猜测用的 epoll)
说一下 linux 常见的 IO 模型。(5 种)
epoll 的边缘触发 和 水平触发了解吗?
epoll 的缺点说一下。
MySQL
画一下 MySQL 的架构图。
线上 MySQL CPU 报警了,如何快速锁定问题并且解决?
同样一条查询语句,有时候快有时候慢,什么原因导致的?(刷脏页 ) 还有什么?(不会了)
设计一个商品类目的数据库存储,查询的时间复杂读说一下。如何做优化?(这里说到自己能想到的最优解决方案)
线上 SQL 调优一般怎么调优?
说一下 File Sort。
讲一下 MySQL 如何排序的?
磁盘+内存排序
什么情况会触发这个?
如果采用磁盘+ buffer 的排序方式 最根本用的什么排序算法?(归并排序)
DDD 了解吗?
有什么想问我的?
三面(30 分钟)
介绍事业部的业务和产品线。
问我加入的原因(并发量高,能够锻炼我自己)
当你遇到工期不够的时候,你自己认为的优化还没有做完怎么办?
我们部门的并发量很大,但是你刚来还是 CRUD,你心里怎么想的?
你来了之后你自己想着如何快速的使用新的公司?
拿了几个 offer 了?
有什么问我的?
四面 (10 分钟)
HRBP
介绍一下个人情况。
你自己平常自己生活状态是什么?
你做过的项目中你最有成就感的一个是哪个?为什么?
介绍了团队的情况。
五面(10 分钟)
招聘的 HR。
期望薪资。
为什么加入我们。
离职原因
入职时间。
来未来科技
一面(40 分钟)
介绍项目,项目中遇到的问题。
秒单的优化。Redis 挂了怎么办?
MQ 如何防止丢失的?
为什么 RocketMQ 采用 NameServer
线上 OOM 如何触发的?如何快速找到问题的?
线上遇到的 SQL 慢查询问题?
如何快速锁定问题的?
如何做的优化?
如果让你设计一个类似于 Dubbo 这种 RPC 远程调用框架你如何设计?
说一下你理解的线程安全~
线程安全的方式?
除了加锁还有什么方式?(单线程的线程安全 ,我回答的 redis ,这里应该回答到 ThreadLocal)
ThreadLocal 用过吗?用来做什么?他的本质思想?有什么注意事项?他保证线程安全的方式是什么原因?
项目中设计模式的使用
策略模式
模版方法模式
Redis 为什么那么快?
讲一下常见的 IO 模型。
用主从 redis 做锁可以吗?有什么问题?
都学习过什么知识,阅读哪些源码?你刚才说的你源码读了就忘 你是怎么解决的?(画流程图,多读几遍)
有什么想问我的?
二面(30 分钟)
画一下项目的业务架构图。
在项目中遇到过什么问题?
你在项目中解决过什么问题?
平常如何学习的?
大搜车
一面(60min)
你认为的技术成长是什么样子的?
介绍最拿手的项目
介绍项目的架构。
你觉得你项目中比较优秀的点在哪里?
你们项目的架构是什么?
多少个节点?
讲一下你们数据流的流向。
讲一下你 Eureka 线上如何做的优化?
注册中心还了解其他的吗?
讲一下 Eureka 和 ZK 的区别是什么?
Nacos 的原理说一下
MySQL
线上语句的优化?
讲一下优化的流程。
索引为什么快?
讲一下 B+树。
红黑树为什么不能用?
红黑树和 AVL 树的区别?
红黑树最多经过多少次旋转?(忘记了)
自定义 Bean 容器 如何做的设计?
如果让你优化这种设计 你如何优化?
自定义注解可以实现吗?(这里不会,不知道咋实现)
JVM
线上的 OOM 如何排查的?
如果线上没有 OOM,但是我的应用吞吐量突然下降,这个时候你猜测一下什么原因?(Full GC)
讲一下 CMS 和 G1
G1 的最大优点是什么?
Redis
介绍一下线上 redis 的使用。
redis 挂了怎么办?
如何保证 本地缓存 和 redis 还有 mysql 的数据一致性
延迟双删的策略。
redis 的缓存穿透如何解决?
布隆过滤器 如何实现的?
10W 数据 和 1W 数据 布隆过滤器的长度是否是变化的?不变的话是多大?(这个要结合误差率来回答)
ConcurrentHashMap 如何能保证线程安全的?
什么是线程安全?
HashMap 线程不安全表现在哪里?(扩容时候,多线程是不安全的)
HashMap 数组的长度为什么是 2 的次方?
说一下扩容的操作。
计算数据落在 hash 槽的时候不用取模用的位运算是如何计算的?(忘记了 ,这里是 (数组长度 - 1 & 哈希值)))
有什么要问我的?
婚礼纪
一面(60 分钟)
介绍一下你项目中遇到的问题,你是如何解决的?
线上 SQL 调优,问题的解决。
常见的 SQL 优化方案
Eureka 的参数调优怎么调的?
Ribbon 远程调用的时候 用的缓存 是和 Eureka Client 是同一份吗?
如果保证上线新的服务时,老得服务被及时的下线?(手动下线)
熔断如何做的?
讲一下他熔断的原理
callback 同步还是异步?
SpringBoot
说一下自动装配的机制
多个 Bean 例如配置多个 DataSource Springboot 会优先装载那个?
一个余额的模块,更新余额和插入流水的顺序如何做?(都可以啊,只要在一个事务就行)
如何保证余额模块,查询出来去做修改这个操作的数据安全。(代码中加锁,数据库 for update 或者一个 update 语句或者使用乐观锁机制在数据库中增加版本号)
如何提高接口的响应速度?
MQ
RocketMQ 为什么那么快?(零拷贝是关键)
MQ 持久化机制说一下。
MySQL
一条 SQL between and ,和 in 的区别。
唯一索引和普通索引如何选择?
讲一下索引下推的过程。
银泰
一面(60 分钟)
介绍一下你做过最复杂的项目和线上解决过的问题。
SQL 调优,OOM,秒单优化。
你对这个项目做过的最大贡献是什么?
这个项目带给你哪些挑战和成长了?
如何保证系统的稳定性?
限流,降级熔断,多节点,报警信息。
限流算法有那些?
令牌桶设置为 10 代表 QPS 最大是 10 吗?
如何选择集群限流和单体限流?(都用上)
熔断降级区别是什么?
除了这些你还有什么想要补充的吗?
分布式事务
你们项目中的解决方案
说一种你认为 QPS 最高的分布式事务的解决方案。
redis
项目中 redis 用来做什么了?
redis 还能干嘛。(说了一下五种数据结构的用途,还有分布式锁。)
redis 单线程为啥快?多线程会有哪些问题?
分布式锁聊一下。
redis 如何实现 可重入锁?
MQ
MQ 在项目中的用途。
消息写不进去怎么办?
消息消费不了怎么办?
消息什么情况下消息会出现丢失的情况?
什么时候消息会出现重新投递的情况。
顺序消息如何保证? 如果不写入同一个 queue 如何保证消息顺序消费?
RocketMQ 为什么快?(mmap 和 sendfile 区别,DMA getter 机制的引入)
分库分表了解过吗?如何分库分表?
DDD 了解过吗?
有什么想问我的?
有赞
一面(80 分钟)
这次面试主要分为 3 部分,时间约 1 个小时。
HashMap
讲一下你理解的 HashMap。
HashMap 查询的复杂度为 O(1) 是如何实现的。(因为数组在内存中存储是连续的内存空间)
线程安全吗?线程不安全表现在那里?
线程安全的的 map
说一下 JDK 的线程安全的 Map?
分别如何实现的线程安全的?
你理解的线程安全是什么样子的?如何实现线程安全?(锁,变量线程私有化)
线程池
讲一下线程池的原理。
你们线上线程池的配置,为什么这么配置?
计算密集型如何配置线程池的参数,为什么这么配置?
如何实现动态配置线程池?
MySQL
讲一下 MySQl 的架构
事务的 ACID 分别是如何实现的?
讲一下你理解的 MVCC(高低水位和当前读的理解)
SQL 调优
我们一般 SQL 调优在调什么?让优化器选择正确的索引。
你简历项目中线上调优的经历 分享一下。什么原因导致的线上事故,如何快速发现和解决的?
从这次线上事故,你得到了什么经验了嘛?(需要提前储备我们的知识,当发生了问题的时候,我们才可以快速的锁定和解决问题)
redis
缓存异常情况如何处理?
热 key 的问题处理。
你在线上会做兜底方案吗?
开发周期不够怎么办?(周末加班也要完成该问题)
分布式事务
你们线上分布式事务的解决方案是什么?
你有没有思考过你们的 解决方案存在一定的问题?如何优化?
线上的补偿机制如何做的?
RocketMQ
说一下 RocketMQ 的事务消息。
RocketMQ 你们线上如何保证消息不丢失的。
分库分表。
你们业务分库分表了吗?(没有,但是我知道解决方案)
DDD
讲一下你理解的 DDD。(刚开始学,说了一些大概的概念和一些名词)
介绍一下你的项目(说了一堆之后,面试官不问了)
如何学习的?
有什么想问我的?
二面 (60 分钟)
现场面,面试官很热情。这一面完完全全是业务。项目的细节扣的很细。
画一下你们项目的架构图。
NGINX 负载均衡策略有哪些?
说一下你项目中如何优化 Eureka 的参数的?各个注册中心的比较?
你如何理解 CAP 的?
MQ
Kafka 和 RocketMQ 的比较?
RocketMQ 的事务消息。
RocketMQ 如何实现顺序消费?你们项目有这种需求吗?
画一下你负责模块主要的时序调用图。
项目中数据库表的设计。
你们项目线上遇到过什么问题?
你在项目中解决过什么问题?
你项目中遇到过最大的挑战是什么?
ES 有没有使用过?(没有)
画出你认为的电商交易链路。
讲一下你认为的 DDD。
你有什么想问我的?
三面(30 分钟)
你项目中解决过什么问题?给你带来了哪些思考?
除了被动的解决一些问题,你主动解决过什么问题?
平常如何学习的?
为什么选择有赞?
HR(20 分钟)
为什么会选择内推有赞?
是什么让你在上家公司呆了三年的?
你工作之后最大的挑战是什么?
你如何理解你面试的部门做的业务的?
平常有在学习吗?如何学习的?
拿了哪些 offer 了?
菜鸟
一面(40 分钟)
先开始聊项目,项目中每个点都扣的特别特别细。
介绍项目。
第一个项目
讲一下你项目中架构。(单体)
项目的 QPS 和数据量。
你项目中做了什么?拿到了什么结果?
解决项目中的问题带给你的思考。
如果流量扩大 100 倍如何解决?
有了解决方案了为什么不去做?
你们如何保证你项目的稳定性的?
第二个项目
说一下你们项目的业务架构和应用架构。
当时架构为什么做?
项目的 QPS 和数据量。
还是那个问题流量激增 100 倍,你认为你们这个系统哪里最先出现瓶颈?如何解决?
你们这个业务是行业 Top3,发展的很好,为什么不按照你的优化思路去优化来提升他的稳定性?
说一下你们项目中分布式事务和分布式锁的解决方案。
线程安全
syn 的锁升级。
常用的线程安全的容器有哪些?
Spring IOC 和 AOP
RocketMQ
架构。
消息防止丢失如何做的?
事务消息说一下。
让你设计一个 MQ 你如何设计?
有什么想问我的吗?
拿了哪些 offer 了?有赞和我们这边你如何选择?
二面(笔试)
阿里的伯乐平台(相当于白板),面试官出题,需要和面试官通话的状态下写代码,你写的面试官可以实时看到。语法不用正确,只要逻辑没有太大的问题就行。
实现一个双向链表的 insert,find,delete 的方法。
分别的复杂度是多少?(这里注意,插入头尾和按照 index 插入的时间复杂度不一样)
优化一下 find 方法的查询时间复杂度。跳表 O(logN),哈希表 O(1)。
三面(30 分钟)
项目相关
解决过什么问题?
如何做到快速锁定问题的?
如何保证项目的稳定性?
说一下项目的应用架构?
Spring ICO 和 AOP
注解式事务和编程式事务有什么差别?
工作上遇到过的最大挑战是什么?
到现在为止你生活中遇到过的最大的挑战是什么?
一面面试官说你拿了有赞的 offer 了?我们和有赞你会选择哪一个?
有什么想问我的?
四面(20 分钟)
大老板面试,晚上十点多。
你在项目中的角色是什么样子的?
你认为计算机相关的 基础课程重要吗?你除了通过 B 站看视频还有哪些学习路径?
你想来阿里想从这里获得什么?
前面面试官说你拿了有赞的 offer 了,我们和有赞你会如何选择?
你认为哪些问题我没有问到?
没有问技术。(因为我能看到前面的面试记录,所以都知道他们问了哪些了)
有什么想问我的?
对我的建议?
五面
为什么加入菜鸟?
你平常除了工作会做一些什么事情?
好了,看完了你知道了吧,那些荣耀王者的我邀请你的时候不要爱答不理的了啊。
版权声明: 本文为 InfoQ 作者【艾小仙】的原创文章。
原文链接:【http://xie.infoq.cn/article/4c8b28ceebf938f4c3f636f69】。文章转载请联系作者。
评论