Spring Boot 核心与自动配置

共 40 题
#

1. /actuator/conditions 与自动配置诊断

A 它只能查询 Bean 数量
B 它只显示健康状态
C 它与自动配置无关
D 它展示自动配置类的条件评估结果(匹配/未匹配及原因),用于诊断自动配置 ✓ 正确答案
#

2. @Conditional 与 Spring Boot 自动配置的协作

A 自动配置类无条件注解,始终生效
B 自动配置类基于 @Conditional 系列条件注解评估,满足条件才加载 ✓ 正确答案
C @Conditional 与自动配置无关
D 条件注解只能用于手动配置
#

3. @ConditionalOnWebApplication 在 Web 与非 Web 环境下的自动配置差异化

A 它只能判断是否 Servlet 应用
B 非 Web 应用也会加载全部 Web 自动配置
C 它与 Web 环境无关
D 它通过 type=ANY/SERVLET/REACTIVE 区分 Web 环境,实现按环境差异化加载自动配置 ✓ 正确答案
#

4. Actuator 与 Spring Security 的安全协作

A Actuator 端点无需安全保护
B 只要配置了 Actuator 就自动安全
C Actuator 与 Security 不兼容
D 应在 SecurityFilterChain 中为 /actuator/** 配置认证授权,并结合 exposure 控制暴露范围 ✓ 正确答案
#

5. Actuator 端点的核心概念(/actuator/health、/metrics 等)

A Actuator 只有健康检查一个端点
B /actuator/health 暴露健康状态,/actuator/metrics 暴露指标,结合 Micrometer 实现监控 ✓ 正确答案
C 所有端点默认全部暴露
D Actuator 与监控无关
#

6. Actuator 自定义端点(@Endpoint/@WebEndpoint)

A @Endpoint 只能用于 JMX,不能用于 Web
B 自定义端点无法注册为 Bean
C @Endpoint 定义端点,@ReadOperation/@WriteOperation 标注操作,需在 exposure 中暴露 ✓ 正确答案
D 自定义端点无需暴露即可访问
#

7. JDK 25 中 Spring Boot 对 sun.misc.Unsafe 替换的 VarHandle 自动配置适配

A VarHandle 与 Unsafe 无关
B JDK 25 仍强制使用 Unsafe,无替代
C 开发者必须手动替换所有 Unsafe 调用
D JDK 用 VarHandle 等标准 API 逐步替代 sun.misc.Unsafe,Spring 框架随版本自动适配 ✓ 正确答案
#

8. Spring Boot 3.5+ 的 AOT(Ahead-of-Time)

A AOT 只在运行时动态分析
B AOT 在构建期生成代码与元数据,减少运行时反射,支持 GraalVM Native Image ✓ 正确答案
C AOT 与 Native Image 无关
D AOT 会显著增加运行时开销
#

9. Spring Boot 4.1.0 的系统要求(Java 17+、Spring Framework 7.0.8+、Maven 3.6.3+、Gradle 8.14+(含 9.x))

A 构建工具必须使用 Maven 单一一种
B 只要求 Java 8,无其他要求
C 要求 Java 17+、Spring Framework 7.0.8+、Maven 3.6.3+ 或 Gradle 8.14+ ✓ 正确答案
D 与 Spring Framework 版本无关
#

10. Spring Boot 4.x 中 @AutoConfiguration 注解的注册顺序

A 通过 @AutoConfigureBefore/@AutoConfigureAfter/@AutoConfigureOrder 控制加载顺序,保证依赖正确 ✓ 正确答案
B 自动配置类无序加载,顺序无关
C 自动配置类只能串行加载,无法排序
D @AutoConfiguration 与 @Configuration 完全等价,无顺序控制
#

11. Spring Boot Profile 的使用与环境隔离

A 通过 spring.profiles.active 激活环境,配合多配置与 @Profile 实现环境隔离 ✓ 正确答案
B Profile 只能通过命令行激活,无法配置在文件中
C Profile 与配置加载无关
D 一个应用只能有一个 Profile
#

12. Spring Boot Test 的 @SpringBootTest 与切片注解

A @SpringBootTest 加载完整上下文,切片注解只加载特定层,切片更快更隔离 ✓ 正确答案
B 两者等价,都是完整加载
C 切片注解比 @SpringBootTest 加载更全
D 切片注解不能模拟依赖
#

13. Spring Boot 启动流程与 SpringApplication 的关键回调

A ApplicationListener 只能监听一次事件
B ApplicationContextInitializer 在 refresh 之后执行
C ApplicationRunner 在容器启动完成、应用就绪后执行,用于启动后任务 ✓ 正确答案
D 回调只能通过框架内部使用,开发者无法注册
#

14. Spring Boot 的 CommandLineRunner 与 ApplicationRunner

A 两者参数形式完全相同
B 只有 CommandLineRunner 能执行启动任务
C 都在启动完成后执行,ApplicationRunner 通过 ApplicationArguments 提供结构化参数解析 ✓ 正确答案
D 两个 Runner 都只有一种无序执行
#

15. Spring Boot 的 Environment 后处理器(EnvironmentPostProcessor)

A 它在环境准备阶段修改 Environment,可添加自定义配置源,通过 spring.factories 注册 ✓ 正确答案
B 它在 Bean 创建之后执行
C 它只能读取配置,不能修改
D 它无法自定义配置源
#

16. Spring Boot 4.x 的 Tomcat 11.0.x / Jetty 12.1.x / GraalVM 25+ 基线

A 支持 Tomcat 11.0.x(Servlet 6.1)、Jetty 12.1.x、GraalVM 25+ Native Image ✓ 正确答案
B 只支持 Tomcat 9/Servlet 4
C 容器版本可任意选择,无基线
D GraalVM 与 Native Image 无关
#

17. Spring Boot 的事件机制(ApplicationReadyEvent 等)

A ApplicationReadyEvent 在启动最开始发布
B ApplicationReadyEvent 在容器就绪、可接收请求时发布,监听器可据此响应 ✓ 正确答案
C 事件只能内置,无法自定义监听
D 事件机制与启动流程无关
#

18. Spring Boot 的优雅停机(server.shutdown=graceful)

A server.shutdown=graceful 停止接收新请求并等待存量请求完成后再关闭 ✓ 正确答案
B 优雅停机立即中断所有请求
C 优雅停机与超时无关,无限等待
D 优雅停机只对非 Web 应用生效
#

19. Spring Boot 的可执行 Jar(spring-boot:repackage)

A spring-boot:repackage 将应用与依赖封装为可执行 Jar,启动时由 JarLauncher 加载嵌套依赖 ✓ 正确答案
B 可执行 Jar 不包含依赖,需外部 classpath
C 可执行 Jar 只能用于 war 部署
D repackage 与打包无关
#

20. Spring Boot 的失败分析器(FailureAnalyzer)

A 它只处理运行期异常
B 它只负责记录日志,不分析
C 无法自定义 FailureAnalyzer
D 它在启动失败时将异常转换为可读的失败原因与修复建议 ✓ 正确答案
#

21. Spring Boot 的指标(Micrometer)集成

A 指标系统与监控告警无关
B Micrometer 只能手动埋点,无法自动暴露
C Micrometer 通过 MeterRegistry 抽象指标,Spring Boot 自动配置并暴露给 Prometheus 等 ✓ 正确答案
D Micrometer 只支持 JVM 指标
#

22. Spring Boot 的核心特性(自动配置、起步依赖、Actuator、嵌入式服务器)

A Starter 只是文档,不管理依赖
B 只有自动配置是核心特性
C 嵌入式服务器需要外部容器
D 自动配置、起步依赖、Actuator、嵌入式服务器构成其快速开发与生产就绪能力 ✓ 正确答案
#

23. Spring Boot 自定义 Banner 与启动信息

A 生产环境必须开启 Banner
B Banner 只能显示默认内容
C 通过 banner.txt 自定义 ASCII 图,spring.main.banner-mode 控制显示模式 ✓ 正确答案
D Banner 无法关闭
#

24. Spring Boot 起步依赖(Starter)的设计与自定义 Starter

A 自动配置类无需注册即可生效
B Starter 只需声明依赖,无需自动配置
C Starter 命名没有规范
D 自定义 Starter 需自动配置类、条件注解、AutoConfiguration.imports 注册及配置属性元数据 ✓ 正确答案
#

25. Spring Framework 7.0.8+ 在 Spring Boot 4.x 的语义变化

A 与 Spring Framework 6 完全一致
B 基线提升到 Jakarta EE 11、增强虚拟线程支持、强化 AOT 与 Native,并清理旧 API ✓ 正确答案
C 仍基于 javax.* 命名空间
D 不支持虚拟线程
#

26. 虚拟线程在 Spring Boot 中的边界,@Async/@Scheduled/@Transactional 的线程上下文传播

A 虚拟线程下 ThreadLocal 绑定的事务/安全上下文不自动跨线程传播,@Transactional 需在同一线程内完成 ✓ 正确答案
B 虚拟线程下 ThreadLocal 自动跨线程传播
C @Transactional 在虚拟线程下自动跨线程生效
D 虚拟线程与线程上下文无关
#

27. Spring Boot 3/4 的自动配置原理,@EnableAutoConfiguration 与条件装配如何工作?

A 自动配置类无条件,全部生效
B @EnableAutoConfiguration 通过 AutoConfigurationImportSelector 收集并评估自动配置类,条件满足才生效 ✓ 正确答案
C 自动配置类在注解中硬编码,无需收集
D 条件装配与自动配置无关
#

28. 自动配置的 debug(--debug)与 conditions evaluation report

A 条件评估报告无法查看
B --debug 只输出日志,与自动配置无关
C --debug 输出 CONDITIONS EVALUATION REPORT,展示各自动配置的匹配与未匹配原因 ✓ 正确答案
D 报告只能通过 /actuator/health 查看
#

29. 自动配置类的并发加载与 @AutoConfigureBefore 陷阱

A before/after 可任意使用,无副作用
B @AutoConfigureBefore/After 若形成循环依赖会导致顺序无法确定,应尽量用条件注解替代硬性排序 ✓ 正确答案
C 自动配置类并发无序加载
D 条件注解与顺序无关
#

30. 自定义自动配置的工程实践(编码、测试、文档)

A 配置属性无需文档化
B 自动配置类无需条件注解
C 自动配置无法测试
D 用 @AutoConfiguration 与条件注解控制生效,用 ApplicationContextRunner 测试,并生成配置元数据 ✓ 正确答案
#

31. @ConditionalOnProperty 的 matchIfMissing 与 havingValue

A matchIfMissing 指定匹配值,havingValue 指定缺失行为
B havingValue 指定匹配值,matchIfMissing 指定属性缺失时是否匹配 ✓ 正确答案
C 两个属性等价
D 属性缺失时条件永远成立
#

32. @ConditionalOnResource/@ConditionalOnWebApplication 的边界

A 两者等价
B 两者都判断资源存在
C 两者都判断 Web 环境
D 前者判断类路径资源是否存在,后者判断是否 Web 环境 ✓ 正确答案
#

33. @SpringBootApplication 的复合注解(@EnableAutoConfiguration/@ComponentScan)

A 它不包含组件扫描
B 它只包含自动配置
C 它包含 @EnableTransactionManagement
D 它由 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 组合而成 ✓ 正确答案
#

34. @SpringBootApplication(exclude = ...) 的边界

A exclude 排除后自动会用默认配置替代
B exclude 只排除 @ComponentScan 的类
C exclude 排除指定自动配置类,但需注意排除后可能导致的依赖缺失 ✓ 正确答案
D exclude 无法排除自动配置
#

35. Spring Boot 3.2+/4 的虚拟线程支持如何开启,对性能与兼容性的影响?

A 开启后任何代码都自动获得最大性能
B 开启虚拟线程会降低性能
C 虚拟线程与同步代码无关
D spring.threads.virtual.enabled=true 开启虚拟线程,提升并发但需留意 synchronized 钉住与 ThreadLocal 传播 ✓ 正确答案
#

36. Spring Boot 的启动性能优化手段(懒加载/分层 jar/CDS/AOT)?

A AOT 只能用于 Native Image
B 懒加载能提升首次访问速度
C CDS 与启动速度无关
D 懒加载、分层 Jar、CDS、AOT 分别从延后创建、构建分层、共享类、提前生成元数据角度优化启动 ✓ 正确答案
#

37. @Async 与 @Scheduled 使用默认执行器时分别有哪些坑(SimpleAsyncTaskExecutor 每次新建线程且并发无上限、@Scheduled 单线程调度器使任务互相阻塞),如何用 ThreadPoolTaskExecutor/ThreadPoolTaskScheduler 显式配置核心线程数、有界队列与拒绝策略

A @Scheduled 默认多线程并行
B 默认执行器并发有界且安全
C @Async 默认 SimpleAsyncTaskExecutor 无界新建线程,@Scheduled 默认单线程串行,应显式配置线程池 ✓ 正确答案
D 无需配置线程池即可高并发安全
#

38. Spring Boot Actuator 的 /actuator/health 探针在 Kubernetes liveness/readiness 探针中的应用

A 探针只能用于 liveness
B liveness 与 readiness 无区别
C /actuator/health 可配置为 liveness/readiness 探针,区分"是否存活"与"是否就绪" ✓ 正确答案
D health 端点无法配置为探针
#

39. Spring Boot 4.x(按官方生成时文档)对 GraalVM Native Image 与虚拟线程的协同支持

A Native 不支持 AOT
B Native 与虚拟线程互斥
C 虚拟线程在 Native 下不可用
D AOT 支持 Native 原生编译,虚拟线程默认启用,二者可协同提供快启动与高并发 ✓ 正确答案
#

40. 自定义 Starter 的工程实践,自动配置类、条件注解与元数据如何组织?

A Starter 无需注册文件
B 自动配置类无需条件注解,直接生效
C 自动配置类用 @AutoConfiguration 与条件注解,注册到 AutoConfiguration.imports,并生成配置元数据 ✓ 正确答案
D 配置属性无需元数据