JVM调优与多线程面试常见问题解析 📅 发布时间:2026/8/21 1:44:13 👁 浏览次数: 1. 面试场景还原当技术面试变成段子现场那天下午三点会议室里的空调呼呼地吹着冷风。我作为面试官已经面了六个候选人谢飞机是第七个。他推门进来时衬衫领口歪着头发像是刚被台风吹过手里还攥着半瓶喝剩的矿泉水。您好我是谢飞机五年Java开发经验。他坐下时椅子发出刺耳的声响。我翻开他的简历看到精通JVM调优几个字时挑了挑眉那我们先从JVM开始吧。能说说对象在堆内存中的分配过程吗谢飞机突然坐直了身体这个简单new对象时JVM会先检查Eden区空间不够就触发Minor GC...等等我打断他你确定是直接检查Eden区他额头开始冒汗呃...应该是先检查TLAB吧面试官内心OS连TLAB都知道看来不是完全的水货。但接下来才是真正的考验...2. JVM内存管理的死亡连环问2.1 堆内存分配机制剖析既然提到TLAB我喝了口水能详细解释下为什么需要TLAB吗谢飞机的手指在膝盖上敲打这个...是为了解决多线程分配内存时的同步问题接近了。我点点头但你知道指针碰撞和空闲列表的区别吗在什么场景下会用哪种方式会议室突然安静得可怕。我能听到谢飞机咽口水的声音。指针碰撞...是不是像停车场找车位他试探着说而空闲列表像是...像是...像是二手市场我忍不住接话这个比喻倒是新颖。不过更准确地说——2.2 GC调优实战陷阱我决定换个方向你们线上系统遇到过OOM吗怎么排查的谢飞机眼睛一亮遇到过我们用jmap导堆转储然后用MAT分析...等等我再次打断你知道在什么情况下jmap可能使进程卡死吗他愣住了会...会卡死当堆很大时我解释道jmap的dump操作会STW。更安全的做法是配置-XX:HeapDumpOnOutOfMemoryError让JVM自己dump。谢飞机的表情像是第一次听说这个参数。我注意到他在偷偷用手机搜索。3. 多线程面试的翻车现场3.1 synchronized的底层实现说说synchronized的锁升级过程吧。我抛出了经典问题。谢飞机开始背书从无锁到偏向锁再到轻量级锁最后重量级锁...那你知道为什么要有偏向锁吗我追问。为了...提升性能具体是怎么提升的我继续施压在什么场景下反而会降低性能他的手指在桌面上画圈这个...可能是竞争激烈的时候3.2 volatile的可见性本质我决定给他个简单点的volatile怎么保证可见性的加了内存屏障这次他回答得很快。具体是什么屏障LoadLoad还是StoreStore在x86架构下真的需要这些屏障吗谢飞机的表情凝固了。我仿佛能听到他CPU过载的声音。4. Spring Cloud的八股文现形记4.1 Feign的工作原理用过Feign吗说说它的实现原理。谢飞机像是抓住了救命稻草基于动态代理接口方法会被转换成HTTP请求...动态代理用JDK还是CGLIB我冷不丁问道。呃...应该是JDK那如果接口里有default方法呢他的眼神开始飘忽这个...没遇到过...4.2 Hystrix的线程隔离Hystrix的线程隔离是怎么实现的有线程池谢飞机突然兴奋每个服务单独线程池那你知道为什么现在不推荐用Hystrix了吗他眨眨眼因为...Spring Cloud不维护了更深层次的原因是我叹了口气线程池隔离的资源消耗太大。现在更推荐用信号量或熔断器模式。5. 设计模式的花式翻车5.1 单例模式的DCL问题写个双重检查锁的单例吧。我推过去一张白纸。谢飞机写了几行突然停住要不要加volatile来着...你说呢我微笑。他犹豫着加了volatile又擦掉又加上。我在心里默默扣分。5.2 动态代理的应用场景Spring AOP用的是什么代理JDK动态代理这次他很确定。那如果目标类没有接口呢谢飞机张了张嘴没发出声音。6. 算法题的降维打击6.1 冒泡排序的优化写个冒泡排序吧。谢飞机很快写完了基础版。能优化吗他加了个flag判断是否发生交换。还能再优化吗他开始冒汗。考虑下记录最后交换的位置我提示道。6.2 实际工程中的排序选择你们项目中排序用Arrays.sort()吗知道它的实现原理吗谢飞机摇头就直接用了...它是TimSort算法我解释道结合了归并和插入排序。在真实业务中选择排序算法要考虑数据特征...7. 面试后的反思与建议面试结束时谢飞机的衬衫后背已经湿了一片。我合上笔记本最后给你些建议吧。第一不要写精通你不会的东西。第二理解比背诵重要。第三...他抬起头眼神难得认真。第三回去好好看JVM参数。下次别再说-XX:HeapDumpOnOutOfMemoryError会卡死进程了。谢飞机红着脸走了。我看了眼表——这场面试持续了75分钟创下了今日最长记录。