4.13 字节跳动国际支付一面面经
面试题目
1. 项目拷打
- 微服务注册中心及注册原理、微服务通信机制。
- DDD领域驱动设计:各层概念、领域边界划分依据、领域与数据库表映射关系。
- 跨领域分布式事务的解决方案。
- MQ消息队列:生产者如何保证消息可靠发送。
- 高并发超卖场景下:Redis与DB的一致性问题。
2. 八股文
- JUC:ReentrantLock的使用,AQS底层原理及源码。
- JVM:垃圾回收器分类,G1收集器的GC过程。
- MySQL:索引分类与原理;事务特性;RR(可重复读)的实现原理。
3. 算法题
- LeetCode 567:字符串的排列(滑动窗口)。
4. 交流
- 询问新技术储备。
- 反问:AI在企业中的应用及其对岗位的影响。
参考解析
1. Redis与DB一致性: 常见方案为“先更新DB,再删除缓存”。若需强一致性,可使用分布式锁(Redisson);若允许短暂不一致,可采用延时双删或订阅Binlog(如Canal)进行异步更新。
2. AQS原理: AQS通过一个volatile int state变量表示同步状态,内部维护一个FIFO的双向队列。当线程获取资源失败时,将其封装为Node节点放入等待队列并挂起,直到前驱节点释放状态并唤醒后继节点。
3. MySQL RR实现: RR通过MVCC(多版本并发控制)实现。事务开启后,通过生成ReadView,利用undo log记录的版本链,确保查询只能看到事务开始前已提交的数据,从而避免不可重复读。
4. G1 GC过程: G1将堆划分为多个大小相等的Region。过程包括:初始标记、并发标记、最终标记、筛选回收。其特点是将堆内存碎片化管理,并根据设定的停顿时间目标,优先选择回收收益最大的Region。