蚂蚁智能体与大模型暑期实习一面面经

《面试题目》

  1. 英文自我介绍
  2. JVM内存区域
  3. Redis在你项目中的作用
  4. 垃圾回收策略,为什么分新生代、老年代?你所用的Java版本垃圾回收算法是什么?有什么缺点?有碎片问题吗?
  5. MySQL数据库索引的原理
  6. ThreadLocal原理、内存泄漏原理与排查
  7. 数据库与ES数据一致性怎么保证
  8. RocketMQ的事务消息是怎么回事?
  9. 你的AI审核怎么保证准确性?

《参考解析》

  • JVM内存区域:分为堆、栈(虚拟机栈、本地方法栈)、方法区、程序计数器。堆是垃圾回收的主要区域,栈存储局部变量,方法区存储类信息与常量。
  • GC分代与算法:分代是为了根据对象存活周期采用不同算法(如新生代用复制算法,老年代用标记-整理/清除)。Java 8默认Parallel,Java 9+默认G1,G1通过Region化减少碎片,但在某些场景仍有整理成本。
  • ThreadLocal内存泄漏:ThreadLocalMap的key是弱引用,但value是强引用。当ThreadLocal变量被回收后,key变null,若线程池不销毁,value无法释放。排查需手动调用remove()。
  • DB与ES一致性:常用方案包括:1. 同步双写(加锁);2. 异步监听Binlog(利用Canal同步);3. 定时任务全量同步。工业界多采用方案2以保证解耦与最终一致性。
  • RocketMQ事务消息:通过“半消息”机制实现。先发送预处理消息,执行本地事务,根据结果发送提交或回滚指令。若超时未收到指令,MQ会反查生产者事务状态以确保一致性。