转载声明:文章来源:https://www.nowcoder.com/discuss/522522514120056832
TimeLine:
8/19 - 16:00一面
8/19 - 17:00二面
集美厂带我走吧
一面(55min)
(1)八股:
InnoDB 对 MVCC的实现
读已提交和可重复读中 readView 有什么区别
有联合索引 (a, b, c) 查询条件为 (a, c) 会不会走索引
回表
为什么 InnoDB 会出现死锁(支持行锁)
乐观锁 / 悲观锁举例
drop / truncate / delete
什么是读扩散
分布式锁除了有哪些实现方式(Redis / ZooKeeper)
有一个业务非常慢,在执行的过程中分布式锁过期了怎么办
RedLock 的加锁机制
ConcurrentHashMap 的前身是什么
你所了解的设计模式(不敢说多 怕要求手写)
controller 之间如何相互调用
ReentrantLock 如何实现可重入
并发量特别高的时候用 Synchronized 还是 ReentrantLock
(2)算法:TOPK
分析时间复杂度从 O(N^2) 到 O(N*K) 到 O(N*logN) 最后到 O(N)
实现 partition + quickSelect
二面(80min)
(1)拷打项目
(2)场景设计
RabbitMQ 是如何提高吞吐量的(channel 的多路复用,发布确认的异步应答)
如何让 MySQL 抗住百万级并发查询(先引入 Redis 缓存,再使用负载均衡策略 将请求路由到集群上 让集群抗并发)
RabbitMQ 底层由什么语言编写(装过环境的应该都记得)
Redis 中如何确定一个 key 是热点 key(使用一个计数器统计访问频率)
设置热点 key 过期时遍历所有的热点 key 效率太低了如何优化(思路参考WatchDog机制,给热点 key 设置一个自动过期时间,如果一段时间内的访问频率达到阈值则给热点 key 续期)
RabbitMQ持久化的时候底层如何存储消息
Redis 中热点 key 的吞吐瓶颈100W,但请求 QPS 有200W怎么办(用 MQ 进行削峰)
你使用 MQ 只是保证了可用性,但还是没有提高性能(使用负载均衡策略 将请求路由到集群上 让集群抗并发)
数据库中有千万级数据,该如何筛选(首先要分表,然后用线程池进行异步查询)
线程池核心参数说一下
请求的平均延迟为 3ms,最大延迟为 5ms,则 keepAliveTime 设置为多少合适
MQ 中如何实现死信队列
实习的时候分库分表是怎么做的,分库分表后如何查询
sharding-jdbc 的原理
(3)算法:生命游戏
引入新的状态 (-1) 濒死表示 [1 -> 0] 和 (-2) 复活表示 [0 - > 1] 防止状态被覆盖
总结:
两面相隔5分钟,而且二面面试官还提前进场了,强度太高了
面完睡了一觉,有的场景题忘记了,后面记起来再更新
面试体验非常棒,二面场景题的时候面试官一直有反馈,还一路教我优化
一面二面面评都挺不错,面试官说进池子了,后面有结果 HR 会通知
帖子还没人回复快来抢沙发