xTransfer Java后端社招一面面经
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 注解式事务和编程式事务有什么区别?分别要注意什么?
- 数据库的四个事务隔离级别是什么?
- MySQL 中读已提交和可重复读在 MVCC 实现上有什么区别?
- MySQL 有哪些类型的锁?
- 读已提交和可重复读分别会加什么锁?
- MySQL 的索引结构是什么?
- 慢 SQL 如何分析和优化?
- CPU 飙升问题如何排查?
- 服务注册与发现的原理是什么?
- 如何保证消息发送成功和消费成功?
- 消息队列堆积如何排查?
- 消费者越多,消费能力一定越强吗?
- 设置线程池核心线程数要考虑哪些因素?
String和StringBuilder有什么区别?synchronized的锁膨胀过程是什么?volatile如何保证多线程下的可见性?- 了解 Java 内存模型(JMM)吗?
- 如何实现无重复字符的最长子串?
《参考解析》
读已提交每次读取新快照,可减少不可重复读以外的问题;可重复读在事务内复用一致性视图,并结合锁处理当前读。索引优化应从执行计划、扫描行数、排序临时表和慢日志入手。CPU 飙升要结合线程栈、GC 和系统指标定位,不能只重启实例。
消息可靠性通常采用生产确认、本地事务或消息表、消费幂等和失败重试。消费者数量受分区/分片数、下游处理能力和协调开销限制,超过并行度不会继续提升吞吐。线程池核心数需结合任务性质、阻塞比例、延迟和资源上限压测确定。
String 不可变,StringBuilder 适合单线程拼接。volatile 借助内存屏障保证读写可见性;JMM 通过 happens-before 约束线程间可见的执行顺序。最长无重复子串可用滑动窗口和字符位置表在线性时间求解。