蚂蚁一面
蚂蚁二进宫
50分钟,上来面试官说有三部分,自我介绍,项目和八股,反问,没有手撕,面完就发了二面
项目
- 介绍实验室项目的背景?难点?技术选型的考虑?
- 项目并发量目标是多少?怎么确定的技术选型?
- 分布式锁怎么实现的?Redisson 中的 RLock 底层怎么实现的?Redis 为什么是原子性的(有uu知道答案么?我回答的是 Redis 是单线程的)?ZK 怎么实现分布式锁的?ZK 的操作是怎么保证原子性的(答不上来)?如果让你去实现 zookeeper 的原子性,你会怎么实现(瞎扯)?Zookeeper 心跳的协议是什么?
- RocketMQ 怎么保证消息不丢失的?
- Netty 内部的实现?IO 多路复用的几种方式?Netty 使用的哪种方式(不同操作系统不一样,Linux 使用 epoll(),Windows 使用 select()、poll())?
- 了解什么序列化机制?优缺点对比讲一下?
- JMM?怎么保证线程安全?volatile 底层怎么保障可见性的(内存屏障,每个读操作前都加上 Load 屏障,强制从主内存中读取数据,每次赋值操作之后都加上 Store 屏障,强制将数据写到主内存中)?垃圾回收机制?垃圾回收算法?标记复制算法怎么做的?死亡对象怎么判断?可达性分析和引用计数器哪个常用(引用计数法很难解决循环引用的问题)?哪些对象可以用作 GC Roots?
- 常见的保证并发安全的方法?各自的适用场景?轻量级锁和重量级锁的使用考虑(根据竞争情况、线程安全性)?什么时候选择轻量级锁什么时候用重量级锁?