面灵AI

CVTE,应用软件开发

时间
2026-08
来源
牛客网

《面试题目》

  1. 继续发一下之前整理的面经
  2. HashMap扩容的时候,如果两个线程同时触发resize,会发生什么问题?你说的这个链表成环的场景,具体是怎么产生的,画一下。
  3. ConcurrentHashMap在JDK8里为什么放弃了分段锁,改用CAS+synchronized,这样设计的好处是什么?
  4. 讲一下JVM里对象的内存布局,对象头里具体存了什么东西,为什么synchronized锁状态信息能存在对象头里?
  5. CMS垃圾回收器为什么会有”浮动垃圾”这个问题,G1是怎么规避这个问题的?
  6. 你说项目里遇到过一次线上OOM,能不能详细讲一下当时dump下来的堆内存快照里看到了什么,最后定位到是哪里的问题?
  7. 双亲委派模型如果被打破会有什么后果,你知道哪些场景是主动打破这个模型的(比如Tomcat的类加载器设计)?
  8. AQS里的state变量在ReentrantLock和CountDownLatch里分别代表什么含义,这个设计思路你怎么理解?
  9. synchronized锁升级到重量级锁之后,还能降级回轻量级锁吗,为什么?
  10. Spring解决循环依赖用的三级缓存,你能讲清楚每一级缓存分别存的是什么、为什么必须要三级而不是两级吗?
  11. @Transactional在什么情况下会失效,你在项目里有没有真的踩过这个坑?
  12. MySQL的B+树索引,如果我在一个字段上建了索引,为什么执行的时候优化器可能选择不走索引,全表扫描反而更快?
  13. 讲一下MVCC里的ReadView是怎么工作的,可重复读隔离级别下为什么还是有可能出现幻读,用了什么机制去解决?
  14. 你项目里说做过一次慢SQL优化,具体是怎么通过explain定位问题的,最后加索引还是改写SQL解决的?
  15. 你简历上写了一个基于大模型做智能客服/文档问答的项目,这个里面用到RAG的话,你是怎么处理检索出来的文档和用户问题相关性不高的情况的?
  16. 你在这个AI相关项目里有没有涉及到调用大模型API的成本控制,比如上下文长度太长导致token消耗过大,你是怎么处理的?
  17. 既然你项目里用到了向量数据库做检索,能讲讲你用的是什么方案,为什么选它而不是直接上ES做关键词检索?
  18. 消息队列这块,你说用RabbitMQ做异步解耦,如果消费者处理失败了,你是怎么保证消息不丢的,重试机制是怎么设计的?

《参考解析》

  1. Redis常用于缓存、分布式锁和计数。缓存与数据库更新通常采用“先写数据库、再删除缓存”,并通过重试、延时双删或消息补偿处理删除失败。
  2. MySQL索引通常使用B+树,叶子节点按顺序连接,适合范围查询;设计索引时结合选择性、最左匹配原则和执行计划,避免无效索引与回表开销。
  3. 并发问题应先明确共享状态和一致性边界,再选择锁、CAS或队列。线程池需要根据任务是CPU密集还是IO密集设置核心线程数、队列容量和拒绝策略,并监控活跃数与队列长度。