面灵AI

xTransfer Java后端社招一面面经

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. 注解式事务和编程式事务有什么区别?分别要注意什么?
  2. 数据库的四个事务隔离级别是什么?
  3. MySQL 中读已提交和可重复读在 MVCC 实现上有什么区别?
  4. MySQL 有哪些类型的锁?
  5. 读已提交和可重复读分别会加什么锁?
  6. MySQL 的索引结构是什么?
  7. 慢 SQL 如何分析和优化?
  8. CPU 飙升问题如何排查?
  9. 服务注册与发现的原理是什么?
  10. 如何保证消息发送成功和消费成功?
  11. 消息队列堆积如何排查?
  12. 消费者越多,消费能力一定越强吗?
  13. 设置线程池核心线程数要考虑哪些因素?
  14. StringStringBuilder 有什么区别?
  15. synchronized 的锁膨胀过程是什么?
  16. volatile 如何保证多线程下的可见性?
  17. 了解 Java 内存模型(JMM)吗?
  18. 如何实现无重复字符的最长子串?

《参考解析》

读已提交每次读取新快照,可减少不可重复读以外的问题;可重复读在事务内复用一致性视图,并结合锁处理当前读。索引优化应从执行计划、扫描行数、排序临时表和慢日志入手。CPU 飙升要结合线程栈、GC 和系统指标定位,不能只重启实例。

消息可靠性通常采用生产确认、本地事务或消息表、消费幂等和失败重试。消费者数量受分区/分片数、下游处理能力和协调开销限制,超过并行度不会继续提升吞吐。线程池核心数需结合任务性质、阻塞比例、延迟和资源上限压测确定。

String 不可变,StringBuilder 适合单线程拼接。volatile 借助内存屏障保证读写可见性;JMM 通过 happens-before 约束线程间可见的执行顺序。最长无重复子串可用滑动窗口和字符位置表在线性时间求解。