航旅纵横Java后端开发春招一面面经

航旅纵横 · Java后端开发 · 一面 · 2026-03

面试题目

  1. 线程池参数有哪些?如何根据任务类型来配置线程池参数?线程池的使用有什么规范吗?
  2. 线上线程池如何进行动态监控?如果线上线程池出现告警,你会怎么做,如何定位线程池告警的原因?线程池的拒绝策略如何去设计?
  3. 线上机器频繁出现内存溢出,你一般是如何处理的?如何基于MAT通过dump文件定位问题代码?如何及时止损?dump文件如何去看?有哪些东西是GC Root?
  4. 用mysql来设计一个分布式锁
  5. 多级缓存(3级及以上)如何确保数据的最终一致性?
  6. 线上出现慢查询你一般是如何去处理的?explain关键字如何使用?
  7. 请你设计一个能够高效给CSV中的10w条用户数据,发送SMS邮件的系统,整个后端你会怎么设计?
  8. CAS原理,G1垃圾回收器,CMS垃圾回收器,他们各自垃圾回收的过程,如何理解整个垃圾回收?
  9. AI coding的提示词怎么去写?skills在整个项目的开发周期当中如何去使用?你平时是怎么利用ai coding的?

参考解析

  1. 线程池配置:核心参数为核心/最大线程数、队列、拒绝策略等。CPU密集型设为N+1,IO密集型设为2N。规范包括严禁使用Executors创建、必须手动指定有界队列等。
  2. 内存溢出(OOM)处理:先通过jstat观察GC频率,dump堆内存后用MAT分析Leak Suspects。GC Roots包括虚拟机栈中引用、静态变量、常量引用、JNI引用等。止损通过重启扩容或隔离流量。
  3. MySQL分布式锁:利用SELECT ... FOR UPDATE排他锁或唯一索引实现。注意超时控制、可重入性(可用ThreadLocal或Redis逻辑实现)及死锁预防。
  4. 多级缓存一致性:核心是“更新数据库后,删除缓存”而非修改,并配合Canal监听binlog异步更新,或使用延迟双删策略,确保最终一致性。
  5. 慢查询处理:通过慢查询日志定位,利用EXPLAIN分析type、key、rows等字段。通过加索引、优化SQL写法(避免全表扫描、减少函数计算)解决。