面灵AI

卓望,Java开发

时间
2026-08
来源
牛客网

《面试题目》

  1. 其实是去年的面经,面完整理的,但一直没发出来。
  2. 问了两句我的项目场景,然后就一直在问八股。整体体验不错,面试官人很好,有些问题没答全面并不会像一般面试官那样在心里默默扣分,不给你提醒,然后直接下一题,他会指出我的不足,然后教我,然后再问下一题。
  3. 项目中是如何实现数据一致性的?如果数据不一致,你是以哪个数据为准?Redis?MySQL?
  4. 看你项目中使用过Jmeter做过压测,怎么做的,性能如何?
  5. Rocketemq 和 Kafka 的使用场景有什么区别?
  6. String 在Java中为什么是不可变的?
  7. String 的不可变性体现在哪里?这种不可变性有什么潜在问题?
  8. 那怎么解决这个问题?(使用StringBuilder/StringBuffer 区别)那 StringBuilder / StringBuffer 区别?
  9. 内存泄漏 和 内存溢出 有什么区别和关系?
  10. Java中有哪些操作会导致内存泄漏和溢出?
  11. Threadlocal 导致内存泄漏的原因是什么?应该怎么做可以避免Threadlocal 内存溢出?
  12. 还有哪些场景会导致内存溢出?(我说了线程池的那个队列
  13. Java 的 JMM 是如何工作的?JMM 如何与线程交互?
  14. 使用 volatile 来修饰有什么作用?
  15. 线程池核心线程数 设置过大或者过小都有什么问题?
  16. 一般情况下,创建一个线程池 如何设置线程池的核心线程数?
  17. HashMap 存放大量数据会遇到哪些问题?又没什么办法优化?
  18. 还有没有什么优化思路?不一定是用 HashMap?

《参考解析》

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