【㊫SpringBoot】SpringBoot面试题
什么是 Spring Boot?
Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用Spring 的难度,简省了繁重的配置,提供了各种启动器,使开发者能快速上手。
为什么要用SpringBoot?
快速开发,快速整合,配置简化、内嵌服务容器。
SpringBoot与SpringCloud 区别?
SpringBoot是快速开发的Spring框架,SpringCloud是完整的微服务框架,SpringCloud依赖于SpringBoot。
Spring Boot 有哪些优点?
Spring Boot 主要有如下优点:
-
容易上手,提升开发效率,为 Spring 开发提供一个更快、更简单的开发框架。 -
开箱即用,远离繁琐的配置。 -
提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是Spring Boot 的核心注解,主要包含了以下 3 个注解:
-
@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能。 -
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项
例如:java 如关闭数据源自动配置功能
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
- @ComponentScan:Spring组件扫描。
Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
Spring Boot 支持Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架,但是不管是哪一种日志框架,它都支持将日志输出到控制台或者文件中。
Spring Boot 需要独立的容器运行吗?
可以不需要,内置了 Tomcat/ Jetty 等容器。
Spring Boot支持哪些嵌入式Web容器?
Spring Boot支持的嵌入式servlet容器有:Tomcat、Jetty、Undertow。
开启 Spring Boot 特性有哪几种方式?
- 继承spring-boot-starter-parent项目
- 导入spring-boot-dependencies项目依赖
SpringBoot事务的使用?
- 启动类加上@EnableTransactionManagement注解,开启事务支持(其实默认是开启的)。
- 在使用事务的public(只有public支持事务)方法(或者类-相当于该类的所有public方法都使用)加上@Transactional注解。
Async异步调用方法?
在SpringBoot中使用异步调用是很简单的,只需要在方法上使用@Async注解即可实现方法的异步调用。
@Configuration
//主要是为了扫描范围包下的所有 @Async注解
@EnableAsync
public class AsyncConfiguration {
}
如何在 Spring Boot 启动的时候运行一些特定的代码?
可以实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法。
Spring Boot中如何解决跨域问题?
通过实现 WebMvcConfigurer接口然后从addCorsMappings方法解决跨域问题。
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").maxAge(3600);
}
}
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
SpringBoot的自动配置原理是什么?
主要是Spring Boot的启动类上的核心注解SpringBootApplication注解主配置类,有了这个主配置类启动时就会为SpringBoot开启一个@EnableAutoConfiguration注解自动配置功能。
有了这个EnableAutoConfiguration的话就会:
- 从配置文件META_INF/Spring.factories加载可能用到的自动配置类
- 去重,并将exclude和excludeName属性携带的类排除
- 过滤,将满足条件(@Conditional)的自动配置类返回
你如何理解 Spring Boot 配置加载顺序?
在 Spring Boot 里面,可以使用以下几种方式来加载配置:
- properties文件;
- YAML文件;
- 系统环境变量;
- 命令行参数;
Spring Boot 是否可以使用 XML 配置 ?
Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过@ImportResource注解可以引入一个 XML 配置。
Spring boot 核心配置文件是什么?bootstrap.properties 和application.properties 有何区别 ?
纯做 Spring Boot 开发,可能不太容易遇到bootstrap.properties配置文件,但是在结合Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。
一般来说我们在 Spring Cloud 配置就会使用这个文件,且 boostrap 里面的属性不能被覆盖;application (. yml 或者 . properties):由ApplicatonContext 加载,用于spring boot项目的自动化配置。
Spring Boot 中的监视器是什么?
Spring boot actuator 是 spring 启动框架中的重要功能之一,Spring boot 监视器可以访问生产环境中正在运行的应用程序的当前状态。监视器模块公开了一组可直接作为 HTTP URL 访问的 REST 端点来检查状态。
SpringBoot多数据源拆分的思路?
先在properties配置文件中配置两个数据源,创建分包mapper,使用@ConfigurationProperties
SpringBoot微服务中如何实现 session 共享 ?
在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。
将所有微服务的session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。
Spring Boot 中的 starter 到底是什么 ?
首先它提供了一个自动化配置类,一般命名为XXXAutoConfiguration,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。
spring-boot-starter-parent 有什么用 ?
我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是spring-boot-starter-parent,spring-boot-starter-parent主要有如下作用:
-
定义了 Java 编译版本为 1.8 。 -
使用 UTF-8 格式编码。 -
继承自spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。 -
执行打包操作的配置。 -
自动化的资源过滤。 -
自动化的插件配置。 -
针对application.properties和application.yml的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如application-dev.properties和application-dev.yml。
Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?
Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过java -jar xxx.jar命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。
Spring Boot 的 jar 无法被其他项目依赖,主要还是它和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在\BOOT-INF\classes目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。
SpringBoot 中静态资源直接映射的优先级是怎样的?
SpringBoot 静态资源直接映射为/**,可以通过根目录来访问。/META-INF/resources/webjars/映射为/webjars/,通过访问 /webjar 访问。优先级顺序为:META-INF/resources > resources > static > public。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南