这一次面经的分享来自很早和我一起打王者的兄弟,为啥印象这么深刻呢,因为他鲁班贼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了,我们和有赞你会如何选择?
你认为哪些问题我没有问到?
- 没有问技术。(因为我能看到前面的面试记录,所以都知道他们问了哪些了)
有什么想问我的?
- 对我的建议?
五面
- 为什么加入菜鸟?
- 你平常除了工作会做一些什么事情?
好了,看完了你知道了吧,那些荣耀王者的我邀请你的时候不要爱答不理的了啊。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。