🤟致敬读者
- 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉
📘博主相关
文章目录
- [Spring Boot面试题精选汇总](#Spring Boot面试题精选汇总)
-
-
- [⚙️ **一、核心概念与优势**](#⚙️ 一、核心概念与优势)
- [🔧 **二、自动配置与启动机制**](#🔧 二、自动配置与启动机制)
- [📦 **三、依赖管理与Starter**](#📦 三、依赖管理与Starter)
- [⚙️ **四、配置管理**](#⚙️ 四、配置管理)
- [🖥️ **五、嵌入式容器与运行**](#🖥️ 五、嵌入式容器与运行)
- [🛡️ **六、生产就绪特性**](#🛡️ 六、生产就绪特性)
- [⚡ **七、高级特性与问题排查**](#⚡ 七、高级特性与问题排查)
- [💎 **附:高频进阶问题**](#💎 附:高频进阶问题)
-
📃文章前言
- 🔷文章均为学习工作中整理的笔记。
- 🔶如有错误请指正,共同学习进步。
Spring Boot面试题精选汇总
以下是Java Spring Boot面试题的精选汇总,涵盖核心概念、工作机制及生产实践,结合最新技术动态(截至2025年)整理而成,适用于中高级开发者面试准备。问题分类如下:
⚙️ 一、核心概念与优势
-
Spring Boot的定义与目标
Spring Boot是Spring生态的一站式解决方案,通过自动配置、起步依赖和内嵌服务器,大幅简化Spring应用的初始搭建和开发流程。其核心目标是提升开发效率,实现"开箱即用"。
-
Spring Boot vs Spring/Spring MVC
- Spring:提供IoC容器和依赖注入(DI)支持,解决组件耦合问题。
- Spring MVC:专注于Web层开发,处理HTTP请求和视图解析。
- Spring Boot :整合并简化二者配置,通过自动装配消除XML配置,内嵌Tomcat/Jetty服务器实现独立运行。
-
核心优势
- 自动配置 :根据类路径依赖自动配置Bean(如添加
spring-boot-starter-data-jpa
自动配置数据源)。 - 独立运行 :内置Servlet容器,可打包为可执行JAR文件(
java -jar
启动)。 - 生产就绪:集成Actuator提供健康检查、监控端点。
- 自动配置 :根据类路径依赖自动配置Bean(如添加
🔧 二、自动配置与启动机制
-
@SpringBootApplication
注解的组成该注解是复合注解,包含:
@SpringBootConfiguration
:标记当前类为配置类(继承@Configuration
)。@EnableAutoConfiguration
:启用自动配置,扫描META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
加载配置类。@ComponentScan
:自动扫描当前包及子包的组件(如@Service
,@Controller
)。
-
自动配置原理
- 启动时加载所有
AutoConfiguration.imports
中声明的配置类。 - 通过条件注解 (如
@ConditionalOnClass
)按需生效配置(例:存在HikariCP
类时才配置数据源)。 - 从
XXXProperties
类绑定配置文件(如application.yml
)中的属性。
- 启动时加载所有
-
覆盖自动配置
- 显式定义
@Bean
替代自动配置的Bean(利用@ConditionalOnMissingBean
优先级)。 - 使用
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
排除特定配置。
- 显式定义
📦 三、依赖管理与Starter
-
Spring Boot Starter的作用
Starter是一组预置依赖描述符 (如
spring-boot-starter-web
),解决传统Spring中手动添加依赖的版本冲突问题。其本质是Maven POM文件,聚合相关库(如Web Starter包含Spring MVC、Tomcat、JSON绑定)。 -
spring-boot-starter-parent
的功能- 统一JDK版本(默认JDK 17)和编码(UTF-8)。
- 管理依赖版本,子项目无需指定版本号。
-
自定义Starter步骤
- 创建
autoconfigure
模块,编写@Configuration
配置类。 - 在
META-INF/spring.factories
中注册配置类。 - 其他项目引入该Starter依赖即可生效。
- 创建
⚙️ 四、配置管理
-
配置文件类型与优先级
- 格式 :支持
application.properties
和application.yml
(YAML支持层级结构,更易读)。 - 优先级:命令行参数 > 系统环境变量 > YAML > Properties[citation:21]。
- 格式 :支持
-
多环境配置
使用
spring.profiles.active=dev
指定环境,对应加载application-dev.yml
文件。 -
读取配置的方式
@Value("${property}")
:注入单个属性。@ConfigurationProperties
:绑定一组属性到对象。
🖥️ 五、嵌入式容器与运行
-
默认嵌入式服务器
Tomcat(可通过替换依赖为
spring-boot-starter-jetty
切换至Jetty)。 -
运行方式
- 命令行:
java -jar app.jar
。 - Maven插件:
mvn spring-boot:run
[citation:14]。
- 命令行:
-
自定义端口
在
application.properties
中设置:server.port=8181
。
🛡️ 六、生产就绪特性
-
Spring Boot Actuator
提供监控端点(如
/health
、/metrics
),支持应用运行时管理。需通过HTTP或JMX暴露端点。 -
安全管理
- 默认启用安全配置,访问Actuator端点需认证。
- 关闭安全:
management.security.enabled=false
(仅限开发环境)。
⚡ 七、高级特性与问题排查
-
热部署方案
- DevTools:自动重启应用(修改类文件后),默认排除静态资源[citation:14]。
- JRebel:商业工具,支持类重载(无需重启)。
-
循环依赖解决
Spring通过三级缓存处理单例Bean循环依赖:
- singletonObjects(一级):完整Bean。
- earlySingletonObjects(二级):提前暴露的未初始化Bean。
- singletonFactories (三级):Bean工厂(生成早期引用)。
限制:构造器注入无法解决循环依赖,需改用Setter/字段注入。
-
事务与异步
- 事务:
@EnableTransactionManagement
+@Transactional
。 - 异步:
@EnableAsync
+@Async
[citation:16]。
- 事务:
💎 附:高频进阶问题
-
如何自定义Starter?
答:创建
autoconfigure
模块,结合@Conditional
条件注解和META-INF/spring.factories
注册。 -
Spring Boot 2.x新特性?
- 默认HTTP/2支持、响应式编程(WebFlux)、JDK 17基线。
-
Bean作用域与线程安全
- 默认
singleton
作用域,无状态Bean可保证线程安全(如纯Service类)。 - 有状态Bean需用
ThreadLocal
或改为prototype
作用域。
- 默认
此汇总基于最新Spring Boot 3.x技术栈整理,完整题目及详解可参考:Spring Boot面试题全集(2025版) 。
📜文末寄语
- 🟠关注我,获取更多内容。
- 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
- 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
- 🔵加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
- 🟣点击下方名片获取更多内容🍭🍭🍭👇