2025 年 Top 50 Spring Boot 面试题

16 Mar 2025 | 阅读 11 分钟

1) 什么是 Spring Boot?

Spring Boot 是 Spring 的一个模块,它为 Spring 框架提供了 RAD (快速应用程序开发) 功能。

它用于创建独立的 Spring 应用程序,您可以直接运行它们,因为它只需要很少的 Spring 配置。

更多信息,请点击此处


2) Spring Boot 有哪些优点?

  • 创建独立的 Spring 应用程序,可以使用 java -jar 启动。
  • 直接嵌入 Tomcat、Jetty 或 Undertow。您无需部署 WAR 文件。
  • 它提供了“starter”POMs,以简化您的 Maven 配置。
  • 它会在可能的情况下自动配置 Spring。

更多信息,请点击此处


3) Spring Boot 有哪些特性?

一些关键的 Spring Boot 特性包括:

  • 自动配置:它根据项目依赖自动配置应用程序组件。
  • 嵌入式 Web 服务器支持:Spring Boot 包括嵌入式服务器,如 Tomcat、Jetty 和 Undertow,这使得部署 Web 应用程序变得容易。
  • Spring Boot Starter:针对常见用例的预定义模板,简化了依赖管理。
  • 生产就绪的:指标、健康检查和外部化配置。
  • Spring Boot CLI:用于快速应用程序开发的命令行界面。

更多信息,请点击此处


4) 如何使用 Maven 创建 Spring Boot 应用程序?

有多种方法可以创建 Spring Boot 项目。我们可以使用以下任何一种方法来开发应用程序。

  • Spring Maven 项目
  • Spring Starter 项目向导
  • Spring Initializr
  • Spring Boot CLI

更多信息,请点击此处


5) 如何使用 Spring Initializer 创建 Spring Boot 项目?

这是 Spring 在官方网站上提供的 Web 工具。您可以通过提供项目详细信息来创建 Spring Boot 项目。

更多信息,请点击此处


6) 如何使用 Boot CLI 创建 Spring Boot 项目?

这是一个可以从 Spring Framework 官方网站下载的工具。这里我们解释一下步骤。

从官方网站下载 CLI 工具,更多信息,请点击此处


7) 如何创建一个简单的 Spring Boot 应用程序?

要创建应用程序,我们可以使用 STS (Spring Tool Suite) IDE。它包含了按步骤解释的各种步骤。

更多信息,请点击此处


8) 什么是 Spring Boot 注解?

Spring Boot 注解是元数据,它为 Spring 框架提供指令,简化了配置并减少了样板代码。

注解引起了编程风格的重大变化,并逐渐使基于 XML 的配置过时。Java 编程从 JDK 1.5 开始支持注解。然而,Spring 框架从 2.5 版本开始支持注解。

一些关键的注解是:

  • @SpringBootApplication
  • @RestController
  • @RequestMapping
  • @GetMapping 
  • @PostMapping
  • @PutMapping
  • @DeleteMapping

更多信息,请点击此处


9) 什么是 Spring Boot 依赖管理?

Spring Boot 自动管理依赖和配置。我们不需要为任何这些依赖指定版本。

当您升级 Spring Boot 时,Spring Boot 会自动升级所有依赖项。

更多信息,请点击此处


10) 什么是 Spring Boot 属性?

Spring Boot 提供了各种属性,可以在项目的 application.properties 文件中指定。这些属性有默认值,您可以在属性文件中设置它们。属性用于设置服务器端口号、数据库连接配置等值。

更多信息,请点击此处


11) 什么是 Spring Boot Starters?

Starters 是一组方便的描述符,我们可以将其包含在我们的应用程序中。

Spring Boot 提供了内置的 Starters,使开发更加轻松和快速。例如,如果我们想开始使用 Spring 和 JPA 进行数据库访问,只需在项目中包含 spring-boot-starter-data-jpa 依赖项。

更多信息,请点击此处


12) 什么是 Spring Boot Actuator?

Spring Boot 提供了一个 Actuator 来监控和管理我们的应用程序。Actuator 是一个具有 HTTP 端点的工具。当应用程序部署到生产环境时,您可以选择使用 HTTP 端点来管理和监控您的应用程序。

更多信息,请点击此处


13) 什么是 Thymeleaf?

它是一个用于 Web 应用程序的服务器端 Java 模板引擎。它的主要目标是为您的 Web 应用程序带来优雅的自然模板。

它可以与 Spring Framework 集成,非常适合 HTML5 Java Web 应用程序。

更多信息,请点击此处


14) 如何使用 Thymeleaf?

为了使用 Thymeleaf,我们必须像这样将其添加到 pom.xml 文件中:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  4. </dependency>

更多信息,请点击此处


15) 如何使用 JPA 将 Spring Boot 连接到数据库?

Spring Boot 提供 spring-boot-starter-data-jpa Starter,以有效地将 Spring 应用程序连接到关系数据库。您可以在项目 POM (Project Object Model) 文件中使用它。

更多信息,请点击此处


16) 如何使用 JDBC 将 Spring Boot 应用程序连接到数据库?

Spring Boot 提供 Starters 和库,用于将我们的应用程序与 JDBC 连接。这里,我们正在创建一个连接 MySql 数据库的应用程序。它包括创建和设置 JDBC 与 Spring Boot 的以下步骤。

更多信息,请点击此处


17) Spring Boot 中的 @RestController 注解是什么?

@RestController 是一个刻板印象注解。它将 @Controller 和 @ResponseBody 注解添加到类中。为了实现它,我们需要在文件中导入 org.springframework.web.bind.annotation 包。

更多信息,请点击此处


18) Spring Boot 中的 @RequestMapping 注解是什么?

@RequestMapping 注解用于提供路由信息。它告诉 Spring 任何 HTTP 请求都应该映射到相应的方法。我们需要在文件中导入 org.springframework.web.annotation 包。

更多信息,请点击此处


19) 如何使用 Spring Starter Project Wizard 创建 Spring Boot 应用程序?

在 STS (Spring Tool Suite) 中创建 Spring Boot 项目还有另一种方法。通过 IDE 创建项目总是一种便捷的方式。请按照以下步骤使用此向导创建 Spring Boot 应用程序。

更多信息,请点击此处


20) Spring 与 Spring Boot 的主要区别是什么?

Spring 是一个基于 Java 的 Web 应用程序框架。它提供了工具和库来创建完全定制的 Web 应用程序。

Spring Boot 是 Spring 的一个模块,用于创建可以直接运行的 Spring 应用程序项目。


21) Spring Boot 应用程序可以有几种部署打包方式?

Spring Boot 应用程序可以有以下几种部署打包方式:

部署工件由…生成目标环境
可执行 JARMaven、Gradle 或 Spring Boot CLI云环境,包括 Cloud Foundry 和 Heroku,以及容器部署,例如与 Docker。
WARMaven 或 GradleJava 应用程序服务器或云环境,例如 Cloud Foundry。

22) 什么是 Spring Boot 配置文件,它们有什么用?

Spring Boot 配置文件用于为不同的环境或场景定义一组配置属性。它允许开发人员通过提供不同的属性文件(例如,application-dev.properties、application-prod.properties)来定制开发、测试、生产等的应用程序行为。Spring Boot 将根据活动环境激活相应的配置文件。


23) 如何在生产环境中监控和管理 Spring Boot 应用程序?

在生产环境中,我们可以使用 Spring Boot Actuator 等工具来监控和管理 Spring Boot 应用程序。它提供了健康检查、指标日志的端点。为了进行深入的应用程序监控和管理,我们可以集成 PrometheusGrafana 等监控解决方案。


24) Spring Boot CLI 的作用是什么?

Spring Boot CLI (Command Line Interface) 是一个命令行工具。它允许开发人员快速创建、运行和管理 Spring Boot 应用程序。它提供了应用程序生成、嵌入式服务器支持简化的依赖管理等功能。CLI 对于快速原型设计开发尤其有用。最常用的CLI 命令是:

  • -run
  • -test
  • -jar
  • -war
  • –init
  • -help

25) 在类文件中使用 @ComponentScan 注解的作用是什么?

@ComponentScan 注解用于指定要扫描带注解组件的包。它帮助 Spring 自动检测和注册带有 @Component、@Service、@Repository 和 @Controller 等注解的 bean。


26) Spring Boot Actuator 端点通常用于监控和管理 Spring Boot 应用程序?


Spring Boot Actuator

提供了各种用于监控和管理应用程序的端点。一些常用的端点如下:

  • /actuator/health:提供应用程序健康状态。
  • /actuator/info:提供自定义应用程序信息。
  • /actuator/metrics:暴露应用程序指标(例如,内存使用量和请求计数)。
  • /actuator/env:显示环境属性。
  • /actuator/loggers:允许动态配置日志级别。

27) 如何在 Spring Boot 应用程序中启用 SSL 证书? 

  1. 从证书颁发机构 (CA) 获取证书。
  2. 在 application.properties 中设置 SSL 属性,包括密钥库路径、密码和密钥别名。
  3. 通过设置适当的属性,确保服务器配置为使用 HTTPS。

28) Spring Boot 缓存支持是什么,它有什么用?

Spring Boot 通过 @Cacheable、@CacheEvict 和 @CachePut 等注解提供缓存支持。它用于通过将频繁访问的数据存储在内存中来提高应用程序性能。Spring Boot 简化了 Ehcache、Caffeine 和 Redis 等缓存机制的设置和管理,使得实现缓存策略更加容易。


29) 如何在 Spring Boot 应用程序中安排任务?

我们可以使用 @Scheduled 注解结合 Spring 管理的 bean 中的方法来创建和安排 Spring Boot 中的任务。它允许我们定义执行间隔或 Cron 表达式来指定任务应何时运行。调度任务通常用于后台作业、批处理和定期任务。


30) 解释 Spring Boot 应用程序结构。

Spring Boot 项目遵循特定的目录结构:

  • src/main/java:包含 Java 源代码。
  • src/main/resources:包含配置文件、模板和其他非 Java 资源。
  • src/test/java:是测试用例和测试相关代码的集合。
  • src/test/resources:存储特定于测试的资源。
  • pom.xml:包含和管理依赖项以及构建设置。

31) Spring Boot DevTools 是什么,它如何帮助开发?


Spring Boot DevTools — 一个为开发人员提供一些开发时功能的模块,例如自动应用程序重启、更改的实时重新加载改进的错误报告。它也有助于提高开发人员的体验,并通过消除手动重启和重新编译应用程序所花费的时间来帮助加速开发。


32) 是否可以禁用 Spring Boot 应用程序中的默认 Web 服务器?

是的,可以在 Spring Boot 中禁用默认 Web 服务器。我们可以在 application.properties 文件中将属性 server.port 设置为“-1”来禁用它。


33) 我们可以用 Spring Boot 设计哪些类型的应用程序?

除了 Web 应用程序,我们还可以借助 Spring Boot 设计非 Web 应用程序、控制台应用程序、批处理应用程序微服务


34) RequestMapping 和 GetMapping 之间有什么区别?

特点@RequestMapping@GetMapping
注解@RequestMapping@GetMapping
目的它与各种类型的 HTTP 请求一起使用,如 GET、POST 等。专门处理 HTTP GET 请求。
示例@RequestMapping(value = “/example”, method = RequestMethod.GET)@GetMapping(“/example”)

35) @Controller 和 @RestController 之间有什么区别?

特点@Controller@RestController
用途它将一个类标识为控制器类。它是两个注解的组合,即 @Controller 和 @ResponseBody。
请求处理和映射我们可以在用 @RequestMapping 注解方法来映射 HTTP 请求时使用它。它处理 GET、PUT、POST 和 DELETE 等请求。
应用它用于 Web 应用程序。它用于 RESTful API。

36) 如何在 Spring Boot 应用程序中启用调试日志?

可以通过以下三种方式启用调试日志:

  • 使用 --debug 开关启动应用程序。
  • application.property 文件中设置 level.root=debug 属性。
  • 在提供的日志配置文件中将根记录器的日志级别设置为 debug。

37) 如何在 Spring Boot 应用程序中处理数据验证?

有多种机制可以在 Spring Boot 应用程序中处理数据验证。最常用的方法是利用 Bean Validation API 定义的验证注解。例如,@NotNull、@Size 和 @Pattern。它用于对象模型的字段。

通过实现这些验证注解,Spring Boot 应用程序会自动验证数据并生成验证错误。它还允许我们通过编写验证类和方法来拥有自己的验证逻辑。


38) Spring Boot 中的 Bean 作用域是什么意思?

Spring Boot 应用程序中的 Bean 作用域 Bean 作用域在 Spring Boot 应用程序中定义了 Spring 管理的 Bean 的生命周期和可见性。以下是最常用的 Bean 作用域:

  • Singleton:Bean 的单个实例将在整个应用程序上下文中创建和共享。
  • Prototype:每次请求 Bean 时,都会实例化一个新的 Bean 实例。
  • Request:每个 HTTP 请求都会创建一个新的 Bean 实例。但它仅在 Web 应用程序上下文中有效。
  • Session:每个用户会话都会创建一个新的 Bean 实例。它仅适用于 Web 应用程序。
  • Custom Scopes:我们可以通过实现 Scope 接口并在应用程序上下文中注册自定义作用域来定义我们自己的作用域。

39) 如何优化 Spring Boot 应用程序的启动时间?

  • 减少加载的 Bean 数量。
  • 使用延迟初始化。
  • 限制未使用的自动配置。
  • 分析启动日志以识别慢速组件。

40) 如何在 Spring Boot 应用程序中管理数据库事务?

在管理数据库事务时,Spring Boot 提供 @Transactional 注解。通过实现,Spring Boot 会自动处理事务边界。此外,Spring Boot 还集成了各种数据源和 JPA 提供程序,以实现统一的事务管理。


41) 如何处理 Spring Boot 内存管理?

我们可以按以下方式处理 Spring Boot 应用程序中的内存管理:

  • 使用 Actuator 端点监控内存使用情况。
  • 配置堆大小和垃圾回收设置。
  • 使用分析工具检测内存泄漏。
  • 优化代码以减小内存占用。

42) 哪些工具和库对 Spring Boot 开发有帮助? 

对于 Spring Boot 应用程序开发,有用的工具和库包括 Spring Tool Suite (STS)、IntelliJ IDEA、Lombok 和 MapStruct


43) 如何激活 Spring Boot 应用程序中的调试日志?

要启用调试日志,请在 application.properties 文件中添加以下属性:

logging.level.org.springframework=DEBUG

它将 Spring 框架的日志级别设置为 DEBUG。


44) Spring Boot 支持的外部化配置有什么好处?

Spring Boot 允许我们使用属性文件(例如,application.propertiesapplication.yml)将配置属性外部化。这些属性可以存储在应用程序代码之外,并在不重新编译应用程序的情况下进行更改。Spring Boot 还通过特定于配置文件的属性文件(例如,开发环境的application-dev.properties)支持特定于环境的配置


45) 构造函数注入与 Setter 注入有什么区别?

注入类型描述优点缺点
构造器注入在这种情况下,依赖项通过构造函数提供。它确保了不变性并促进了强制性依赖。处理可选依赖项更难
Setter 注入在这种情况下,依赖项通过 setter 方法提供。对于可选依赖项很有用,并且更灵活。如果处理不当,可能会导致不一致的状态。

46) 除了 Tomcat 服务器,请再说出另外两种 Spring Boot 支持的嵌入式服务器。

以下是两种最常用的嵌入式服务器:

  • Jetty
  • Undertow

47) 如何保护 Spring Boot 应用程序?

我们可以通过以下各种方法来保护 Spring Boot 应用程序:

  • Spring Security:利用 Spring Security 配置身份验证和授权。
  • OAuth2:实现 OAuth2 进行基于令牌的身份验证和授权。
  • JWT (JSON Web Tokens):使用 JWT 进行无状态身份验证。
  • HTTPS:启用 HTTPS 以进行安全通信。

48) 如何配置 Spring Boot 中的数据库?

在 Spring Boot 应用程序中配置数据库需要以下配置。必须在 application.properties 文件中指定此配置。


49) 与 application.properties 文件相比,YAML 文件有什么优势,加载它的不同方法是什么? 

YAML 文件为开发人员提供了更清晰、更友好的环境。它们还支持映射、列表和其他数据类型。其分层结构有助于避免重复和不必要的缩进。

考虑一个具有不同部署配置文件的场景,例如开发、测试或生产。在这种情况下,我们可能为每个环境都有不同的配置。我们无需为每个环境创建单独的文件,而是可以将它们合并到一个 YAML 文件中。但是,属性文件不能做到这一点。


50) 请举例说明使用 Spring Boot 的应用程序或服务。

以下是使用 Spring Boot 的排名前 10 的组织:

  1. Udemy
  2. Paytm
  3. Trivago
  4. Intuit
  5. Cred
  6. Rappi
  7. Quinto Andar
  8. MercadoLibre
  9. PedidosYa
  10. iFood