覆盖率与变异测试与 JVM 调优基础

共 61 题
#

1. JDK 25 中 -XX:+UseCompactObjectHeaders 对内存占用与 GC 频率的影响在 Spring Boot 应用中

A 提高 CPU 主频
B 关闭 GC
C 增加线程数
D 压缩对象头,减少每个对象的内存开销 ✓ 正确答案
#

2. JDK 25 中 Parallel GC 与 G1 在 Spring Boot 4.0 + 容器化部署下的吞吐量与延迟对比

A G1 GC ✓ 正确答案
B Parallel GC
C Serial GC
D 无 GC
#

3. JDK 25 中 ZGC 的 SoftReference 回收策略对 Spring Boot 缓存命中率的影响

A 更保守,几乎不回收
B 更激进,内存压力下优先回收软引用 ✓ 正确答案
C 完全相同
D 从不回收软引用
#

4. JDK 25 中是否仍支持 -XX:+UseG1GC 之外的 CMS GC 选项,Spring Boot 4.0 升级时的迁移建议

A 仍受支持
B 默认开启
C 已被移除,无法再使用 ✓ 正确答案
D 仅支持 32 位
#

5. JVM DirectMemory 与 Netty PooledByteBufAllocator 在 Spring WebFlux 中的内存边界控制

A UnpooledByteBufAllocator
B NoopAllocator
C PooledByteBufAllocator ✓ 正确答案
D HeapAllocator
#

6. JVM Safepoint 在 Spring Boot 4.0 中通过 -XX:+UseCountedLoopSafepoints 关闭的边界与风险

A 完全无法 GC
B 线程数增加
C 长计数循环阻塞 safepoint,导致 GC 等操作长时间等待 ✓ 正确答案
D 内存泄漏
#

7. JVM 内存模型(JMM)的 happens-before 与可见性

A 保证可见性与有序性(禁止重排) ✓ 正确答案
B 保证原子性
C 与普通变量无异
D 只能用于基本类型
#

8. JVM 启动参数 -XX:+UseNUMA 在 Spring Boot 4.0 + 跨 NUMA 节点容器部署下的真实收益

A 任何场景都显著提升性能
B 与 GC 无关
C 必然降低性能
D 依赖内存访问模式与部署拓扑,通常需实测,多数场景收益有限 ✓ 正确答案
#

9. JVM 在 Spring Boot 4.0 启动时打印的 [info] 日志(-Xlog:safepoint)

A 业务日志
B SQL 查询
C JVM 安全点事件(到达/操作耗时) ✓ 正确答案
D HTTP 请求
#

10. JVM 容器感知(-XX:+UseContainerSupport)

A 默认关闭
B 让 JVM 感知容器 cgroup 的 CPU 与内存限制 ✓ 正确答案
C 只影响网络
D 与内存无关
#

11. JVM 的 -XX:+UseLargePages(大页)

A 使用 32 位 JVM
B 操作系统已配置大页(HugePages/THP) ✓ 正确答案
C 关闭 GC
D 增加线程数
#

12. JVM 的 -Xms/-Xmx/-XX:NewRatio/-XX:SurvivorRatio

A Eden:Survivor = 8:1 ✓ 正确答案
B 老年代:新生代 = 8:1
C 堆:非堆 = 8:1
D GC 线程 8 个
#

13. JVM 的 CodeCache 与分层编译

A 停止编译新方法,部分方法降级为解释执行,吞吐下降 ✓ 正确答案
B 立即崩溃
C 无影响
D 增大堆内存
#

14. JVM 的 CompilerThreshold 与 CompileThresholdScaling

A 统一缩放 JIT 编译阈值,调节编译激进程度 ✓ 正确答案
B 只影响 GC
C 与编译无关
D 只能设 1.0
#

15. JVM 的 StringTable(String.intern),异常信息脱敏与保留诊断价值之间如何平衡

A intern 过多会占用堆内存并增加 GC 扫描成本 ✓ 正确答案
B intern 字符串完全无代价
C intern 只在 GC 后生效
D intern 与异常日志无关
#

16. JVM 的 SymbolTable

A 类名、方法名、符号引用等符号 ✓ 正确答案
B intern 字符串实例
C 对象引用
D 字节码
#

17. JVM 的 UseNUMA(非一致内存访问)

A 单核 CPU
B 网络带宽
C 多 socket NUMA 硬件 + 内存密集场景 ✓ 正确答案
D 磁盘类型
#

18. JVM 的 safepoint 与 safe-region 机制

A 加速 GC
B 阻塞全局 safepoint,导致 GC 等待 ✓ 正确答案
C 无影响
D 内存泄漏
#

19. JVM 的运行时数据区(Heap/Method Area/Stack/PC/Native)

A 对象实例
B 线程栈帧
C 类元数据、常量池、静态变量 ✓ 正确答案
D 本地方法
#

20. JVM 软引用(SoftReference)与弱引用(WeakReference)

A 仅在内存不足时回收 ✓ 正确答案
B 每次 GC 都立即回收
C 永不回收
D 只能用于基本类型
#

21. MaxDirectMemorySize 如何约束直接缓冲区,堆使用正常时发生直接内存 OOM 应怎样诊断

A jstack
B NMT(Native Memory Tracking) ✓ 正确答案
C jps
D javap
#

22. MaxRAMPercentage 只决定堆上限比例时,为什么还必须为元空间、直接内存和线程栈预留空间

A 堆外(元空间/直接内存/线程栈)无足够空间,可能 OOMKill ✓ 正确答案
B 堆太小
C GC 太快
D 无风险
#

23. StringTable 大小、intern 命中与永久业务缓存有何关系,何时会增加 GC 扫描成本

A intern 字符串很少时
B 大量动态字符串被 intern,StringTable 膨胀时 ✓ 正确答案
C StringTable 为空时
D 禁用 GC 时
#

24. TLAB 如何减少线程间分配竞争,浪费比例过高时对象大小与线程数量说明了什么

A 减少 GC 次数
B 压缩对象头
C 增加堆大小
D 为每个线程预分配分配缓冲,减少线程间分配竞争 ✓ 正确答案
#

25. 动态类加载器无法回收时为何会增长元空间,堆转储中应怎样确认类加载器泄漏链

A 堆太小
B 动态类加载器无法回收,其类元数据无法释放 ✓ 正确答案
C 线程数太少
D 直接内存过大
#

26. 压缩普通对象指针的可用范围与堆布局有什么关系,跨越阈值为何可能突然增加对象引用宽度

A 8GB
B 128GB
C 64GB
D 32GB ✓ 正确答案
#

27. 在 Spring Boot 4.0 中使用 GraalVM Native Image 构建后 JVM 调优是否仍需关注堆与元空间

A 完全适用
B 必须加大
C 只影响堆
D 基本不适用,因为 Native Image 是 AOT 编译 ✓ 正确答案
#

28. 如何按线程、代码、GC、直接内存和本地库逐项归因

A jstack / JFR 线程事件 ✓ 正确答案
B NMT
C GC 日志
D pmap
#

29. 容器内 JVM 如何识别 cgroup 的 CPU 和内存限制,requests 与 limits 不同会怎样影响默认参数

A requests
B limits(上限) ✓ 正确答案
C 宿主机内存
D
#

30. 平台线程栈与虚拟线程栈的存储方式有何不同,大量深调用或 ThreadLocal 会造成什么压力

A 在堆中动态分配,栈小可回收,支持大量线程 ✓ 正确答案
B 创建时固定分配 1MB
C 与平台线程栈完全相同
D 无法深调用
#

31. 建立 JVM 调优基线时,为何需要固定流量、数据集、JDK、容器限额和预热状态再比较

A 预热会降低性能
B 预热只影响 GC
C 预热无关紧要
D JIT 未预热时性能不稳定,会导致对比结果误导 ✓ 正确答案
#

32. 类卸载依赖哪些可达性和 GC 条件,频繁生成代理类的应用应监控哪些类加载指标

A 线程结束
B 堆满
C 类加载器不可达且其类无实例、无引用 ✓ 正确答案
D 编译完成
#

33. CodeCache 满后为什么可能停止部分编译并降低吞吐,哪些 JFR 事件和日志可验证

A jdk.GCHeapSummary
B jdk.CodeCacheStatistics ✓ 正确答案
C jdk.ThreadStart
D jdk.FileWrite
#

34. G1 的 Humongous 对象为何跨多个 Region 分配,大数组峰值会怎样影响回收和碎片

A 超过 1MB
B 超过 Region 的 90%
C 超过堆的 1%
D 超过 Region 的 50% ✓ 正确答案
#

35. HeapDumpOnOutOfMemoryError、ExitOnOutOfMemoryError 与 CrashOnOutOfMemoryError 应如何选型

A HeapDumpOnOutOfMemoryError + ExitOnOutOfMemoryError ✓ 正确答案
B ExitOnOutOfMemoryError
C CrashOnOutOfMemoryError
D 都不设置
#

36. JDK 25 中 -XX:+UseLargePages 在 K8s + Spring Boot 部署下启用巨页的工程注意事项

A 仅设置 JVM 参数
B 无需任何配置
C 节点配置大页 + 容器申请 HugePages 资源 ✓ 正确答案
D 增大网络带宽
#

37. JDK 25 中 G1 GC 的 IHOP(Initiating Heap Occupancy Percent)

A 45% ✓ 正确答案
B 90%
C 10%
D 100%
#

38. JDK 25 引入的 ZGC 分代模式(Generational ZGC)

A 停顿更高
B 分代回收提升效率,降低开销与内存占用,同时保持低停顿 ✓ 正确答案
C 无法回收老年代
D 只能用于小堆
#

39. JDK 25 的 -XX:MaxRAMPercentage 与 -XX:MinRAMPercentage 在 Spring Boot 4.0 容器化部署的推荐值

A 25%
B 70-75% ✓ 正确答案
C 100%
D 10%
#

40. JVM 的 -XX:+UseCompressedOops(JDK 25 前)

A 8 字节
B 0 字节
C 1 字节
D 4 字节 ✓ 正确答案
#

41. JaCoCo 的 on-the-fly 与 offline 插桩模式在 Spring Boot 应用中的选择

A offline
B 两者都默认
C on-the-fly ✓ 正确答案
D 无插桩
#

42. Lombok/生成代码对覆盖率统计的干扰与排除策略(@Generated/过滤器配置)

A @Override
B @Deprecated
C @Generated ✓ 正确答案
D @Autowired
#

43. Native Memory Tracking 的 summary 与 detail 模式分别能定位什么,启用后应接受多少观测开销

A 开销更低
B 只统计堆
C 无需启用
D 提供更细的分配点/调用栈信息 ✓ 正确答案
#

44. Spring Boot 4.0 启动参数 -XX:+UseCompressedOops 与 JDK 25 中对象头压缩的兼容策略

A 互斥,只能二选一
B 紧凑对象头取代压缩引用
C 独立特性,可共存同时启用 ✓ 正确答案
D 都不可用
#

45. 使用 -XX:+HeapDumpOnOutOfMemoryError 在 K8s 中生成 hprof 文件的最佳实践与自动清理策略

A 转储到容器本地
B 不转储
C 指定 HeapDumpPath 指向持久化存储(PVC/卷) ✓ 正确答案
D 只转储到内存
#

46. 偏向锁已从现代 HotSpot 移除后,沿用旧调优参数和旧基准会造成哪些错误结论

A 已废弃/移除,默认关闭 ✓ 正确答案
B 默认开启
C 仍完全支持
D 只能用于多线程
#

47. 变异分数(Mutation Score)与质量门禁(Quality Gate)的设置与 CI 集成

A 代码行覆盖比例
B 分支数
C 被变异测试杀死的变异体比例 ✓ 正确答案
D 测试数量
#

48. 增量覆盖率在 CI 中的落地(diff coverage),只关注本次变更的测试覆盖

A 全量代码覆盖率
B 本次代码变更涉及行的覆盖 ✓ 正确答案
C 依赖库覆盖率
D 测试数量
#

49. 将 Xms 设置等于 Xmx 能减少哪些运行时调整,又会对容器弹性和内存承诺带来什么代价

A 启动即占满堆内存,容器弹性差、内存承诺高 ✓ 正确答案
B 提高性能
C 减少 GC
D 无代价
#

50. 总停顿时间包含到达安全点的等待时,JNI 临界区或超长无安全点循环如何造成延迟

A 加速 GC
B 阻塞 safepoint,拉长 GC 等待与延迟 ✓ 正确答案
C 无影响
D 内存释放
#

51. 测试覆盖率的反模式,为覆盖率而写测试(断言缺失/无意义断言)的识别与治理

A 只看行覆盖率数字
B 忽略覆盖率
C 增加测试数量
D 变异分数(低变异分数说明测试未真正验证行为)+ 断言审查 ✓ 正确答案
#

52. 紧凑对象头在 JDK 25 中如何改变对象布局和锁标记,启用前应验证哪些工具兼容性

A 网络工具
B 依赖对象布局的工具(堆转储分析、JOL、agent) ✓ 正确答案
C 数据库工具
D 构建工具
#

53. 覆盖率指标在 SonarQube 中的可视化与质量门禁配置(新代码/全量代码)

A 新代码覆盖率 ✓ 正确答案
B 全量覆盖率
C 依赖覆盖率
D 注释覆盖率
#

54. JDK 25 中 CDS(Class Data Sharing)

A 提高 GC 频率
B 减少类加载时间与内存占用,优化启动 ✓ 正确答案
C 增加堆大小
D 提高网络吞吐
#

55. JaCoCo 的 dump 文件分析与离线覆盖率报告生成(多模块聚合)

A jacoco:prepare-agent
B jacoco:check
C report-aggregate ✓ 正确答案
D jacoco:dump
#

56. JaCoCo 的行覆盖率(line)、分支覆盖率(branch)、指令覆盖率(instruction)指标差异与常见误区

A 行数
B 分支路径是否被覆盖(逻辑覆盖) ✓ 正确答案
C 指令数
D 注释量
#

57. PIT 变异测试的性能优化,变异体选择/并行执行/增量测试策略

A 全量重跑所有变异体
B 增量分析,只重跑受影响的变异体与测试 ✓ 正确答案
C 增加变异体
D 关闭测试
#

58. 从 JDK 21 升级到 JDK 25 时,如何清点失效参数、默认值变化和性能回归并设置回滚门槛

A -XX:+PrintFlagsFinal 对比参数 ✓ 正确答案
B jps
C javap
D jstack
#

59. 变异测试的等价变异体(equivalent mutant)问题与人工审查策略

A 变异分数虚低(无法被杀死,造成测试质量差的假象) ✓ 正确答案
B 变异分数虚高
C 无影响
D 增加测试数
#

60. 覆盖率与变异测试的互补关系,高行覆盖率 + 高变异分数的质量保障

A 无关质量
B 覆盖率虚高
C 测试全无效
D 代码被覆盖且测试能发现行为变化,质量保障更可靠 ✓ 正确答案
#

61. 高覆盖率为何仍可能漏检缺陷,变异测试(PIT)的原理与变异算子(mutator)

A 测试失败且能发现变异 ✓ 正确答案
B 测试通过
C 变异体被删除
D 覆盖率提高