多益网络软件工程师一面
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 简单介绍简历上的项目。
- MySQL 中 MVCC 是怎么实现的?快照读为什么通常不会阻塞写操作?
- 线程池大小如何确定?
- 缓存一致性如何解决?
- Spring AOP 的底层原理是什么?
- Redis 热 Key 和大 Key 会带来什么问题?线上怎么排查和治理?
- 幂等如何设计?
- MySQL 的隔离性如何实现?
- Kafka 为什么吞吐量高?消息积压时怎么排查?
- Web 开发中需要注意哪些安全问题?
- Java 中 synchronized 和 ReentrantLock 的底层实现有什么差异?
《参考解析》
MVCC 的核心是隐藏事务字段、undo log 版本链和 Read View。快照读读取的是符合可见性规则的历史版本,所以通常不需要给目标记录加共享锁;当前读如 select for update、update、delete 才需要读最新版本并加锁。回答时要区分 RC 每条语句生成 Read View、RR 复用第一次快照读的 Read View。
线程池大小不能只套公式。CPU 密集型任务接近核数,I/O 密集型可以按等待时间与计算时间之比放大,但最终受数据库连接池、下游承载和队列长度约束。线上要看 activeCount、queueSize、rejectCount、P99 和 CPU,而不是只看线程数。
缓存一致性推荐 Cache Aside:读未命中回填,写先更新数据库再删除缓存。删除失败要重试或用 binlog 补偿,延迟双删只能缩小窗口,不能承诺强一致。AOP 要讲 BeanPostProcessor 创建代理、JDK 动态代理与 CGLIB 的选择,以及 this 调用绕过代理的经典问题。