美团AI后端开发实习面经

《面试题目》

  1. 平时怎么使用ai
  2. java中线程池有用过吗?主要是解决什么问题?
  3. java中实现线程同步都有哪些方法。
  4. 悲观锁和乐观锁是在什么场景下使用的?
  5. 看过源代码吗?
  6. 那项目里有用过什么设计模式吗?
  7. 责任链了解吗?
  8. 之前有了解过JVM相关的内容吗
  9. 了解哪些垃圾回收器,以及垃圾回收算法?
  10. 什么情况下会发生Full GC?
  11. 频繁发生Full GC该怎么排查?
  12. 怎么定位到代码?
  13. 怎么看一个SQL的执行计划?
  14. 深分页慢查询问题?
  15. mysql的InnoDB引擎数据结构是什么样?
  16. mysql 怎么解决幻读问题?
  17. 用redis主要是解决什么问题?
  18. redission看门狗
  19. 怎么保证缓存数据和DB里的数据的一致性?

《参考解析》

  • 线程池解决的问题:核心是降低资源消耗,通过复用线程减少创建/销毁带来的开销;控制并发线程数量,防止内存溢出(OOM)。
  • Full GC 排查:通过 jstat 查看堆内存占用,使用 jmap 导出堆内存快照(Dump),配合 MAT 工具分析对象引用链,找出大对象或内存泄漏点。
  • 深分页优化:使用“延迟关联”技术(先通过索引查出ID,再根据ID回表查询)或基于上次分页的 ID 进行范围查询(seek method),避免扫描过大偏移量。
  • MySQL幻读解决:通过 Next-Key Lock(行锁+间隙锁)机制,在 RR 隔离级别下锁定索引间的间隙,防止其他事务插入新数据。
  • Redis一致性保证:常用方案是“删除缓存”而非“更新缓存”。为了保证最终一致性,可采用延时双删或消费数据库 Binlog(使用 Canal)进行异步删除缓存。