Spring Boot经典面试题及答案

一、Spring Boot基础知识

  1. 什么是Spring Boot?

    答案

    Spring Boot是Spring开源组织下的子项目,是Spring组件一站式解决方案。它简化了Spring应用程序的初始化和开发过程,通过"约定大于配置"的原则,减少了手动配置的繁琐工作,使开发者能够更快速地构建独立、可运行的、生产级别的Spring应用程序。

  2. Spring Boot有哪些特点?

    答案

    • 独立运行:Spring Boot应用程序可以作为一个独立的JAR包运行,无需部署到外部容器中。
    • 自动配置:Spring Boot根据项目中的依赖关系自动配置Bean,减少了手动配置的繁琐工作。
    • 简化开发:Spring Boot提供了大量内置的Starter模块,简化了第三方库的引入和管理。
    • 嵌入式Web服务器:Spring Boot支持内嵌的Tomcat、Jetty等Web服务器,方便开发和调试。
    • 丰富的插件支持:Spring Boot可以与各种第三方库和框架集成,满足各种业务需求。
    • 监控和度量:Spring Boot提供了内置的监控和度量功能,方便对应用程序的性能进行实时监控。
  3. Spring Boot的核心注解是什么?它主要由哪几个注解组成?

    答案

    Spring Boot的核心注解是@SpringBootApplication,它主要由以下三个注解组成:

    • @SpringBootConfiguration :组合了@Configuration注解,表明该类是一个配置类。
    • @EnableAutoConfiguration:打开自动配置的功能,Spring Boot会根据项目中的依赖关系自动配置Bean。
    • @ComponentScan:指定Spring组件扫描的包,默认扫描配置类所在的包及其子包。

二、Spring Boot开发与实践

  1. 如何在Spring Boot中创建和运行一个项目?

    答案

    • 创建项目 :可以使用Spring Initializr(https://start.spring.io/)在线生成Spring Boot项目,选择所需的依赖项、项目类型和打包方式,然后生成并下载项目。
    • 运行项目 :在项目根目录下,执行./mvnw spring-boot:run命令,或者在IDE中运行包含main方法的类。
  2. Spring Boot如何读取配置文件?

    答案

    Spring Boot支持通过多种方式读取配置文件:

    • application.properties/application.yml :这是Spring Boot默认的配置文件,位于src/main/resources目录下。
    • @PropertySource:通过注解方式指定自定义配置文件的位置。
    • @Value:直接读取配置文件中的属性值,注入到Bean中。
    • @Environment :注入Environment对象,通过该对象获取配置文件中的属性值。
    • @ConfigurationProperties:将配置文件中的属性绑定到一个Java Bean上,实现类型安全的配置。
  3. Spring Boot如何实现自动配置?

    答案

    Spring Boot的自动配置是通过注解@EnableAutoConfiguration实现的。在启动类上添加该注解后,Spring Boot会在启动时自动扫描项目中的依赖,并根据这些依赖自动配置相应的Bean。

    自动配置的核心原理是:

    • 读取spring.factories文件 :Spring Boot在启动时,会扫描所有依赖的JAR包,查找其中的META-INF/spring.factories文件。
    • 加载自动配置类spring.factories文件中配置了自动配置类的全限定名,Spring Boot会加载这些自动配置类。
    • 条件化配置 :自动配置类中使用@Conditional系列注解(如@ConditionalOnClass@ConditionalOnBean等)来判断当前环境是否满足自动配置的条件。
    • 注册Bean:如果条件满足,自动配置类会将Bean注册到Spring容器中。
  4. Spring Boot如何实现热部署?

    答案

    Spring Boot实现热部署主要有两种方式:

    • Spring Loaded:一个JVM代理,能够在运行时修改Java类的字节码,从而实现热部署。但这种方式已经较少使用。
    • Spring Boot DevTools :Spring Boot提供的一个开发工具,能够在代码修改后自动重启应用程序,从而实现热部署。使用方式是在项目的pom.xml文件中添加Spring Boot DevTools的依赖。

三、Spring Boot高级应用

  1. 什么是Spring Boot Actuator?它有哪些功能?

    答案

    Spring Boot Actuator是Spring Boot提供的一个用于监控和管理应用程序的模块。它提供了一系列端点(Endpoint),可以通过HTTP或JMX等方式访问,用于获取应用程序的运行状态、健康检查、度量信息等。

    主要功能包括:

    • 应用健康检查 :通过/health端点检查应用程序的健康状态。
    • 度量信息 :通过/metrics端点获取应用程序的各种度量信息,如内存使用情况、线程池信息等。
    • 环境信息 :通过/env端点获取应用程序的环境配置信息。
    • 日志级别管理 :通过/logfile端点查看日志文件,通过/loggers端点动态调整日志级别。
  2. Spring Boot如何实现单点登录(SSO)?

    答案

    Spring Boot实现单点登录(SSO)通常使用Spring Security和Spring Session等组件。具体步骤如下:

    • 引入依赖 :在pom.xml文件中添加Spring Security和Spring Session的依赖。
    • 配置数据源:配置数据库连接信息,用于存储用户登录信息和会话信息。
    • 创建认证服务器:使用Spring Security创建一个认证服务器,处理用户的登录请求和验证用户信息。
    • 创建授权服务器:使用Spring Security创建一个授权服务器,根据用户的角色和权限进行访问控制。
    • 集成认证和授权服务器:将认证服务器和授权服务器集成在一起,实现单点登录的功能。
  3. Spring Boot如何处理跨域问题?

    答案

    Spring Boot处理跨域问题通常使用Spring MVC提供的@CrossOrigin注解,或者在配置类中实现WebMvcConfigurer接口,并重写addCorsMappings方法。

    具体步骤如下:

    • 使用@CrossOrigin注解 :在控制器类或者控制器方法上使用@CrossOrigin注解,指定允许访问的域、请求方法等。

    • 实现WebMvcConfigurer接口

      java 复制代码
      @Configuration
      public class WebConfig implements WebMvcConfigurer {
      
          @Override
          public void addCorsMappings(CorsRegistry registry) {
              registry.addMapping("/**")
                      .allowedOrigins("http://example.com")
                      .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                      .allowedHeaders("*")
                      .allowCredentials(true);
          }
      }

四、Spring Boot与其他技术

  1. Spring Boot与Spring Cloud的关系是什么?

    答案

    Spring Boot是Spring的快速开发框架,主要用于简化Spring应用的开发和部署过程。而Spring Cloud是Spring提供的微服务解决方案,它基于Spring Boot,提供了一整套实现微服务的工具,如服务发现、配置管理、服务网关、熔断器等。

    简单来说,Spring Boot是Spring Cloud的基础,Spring Cloud依赖于Spring Boot。

  2. Spring Boot如何与Docker集成?

    答案

    Spring Boot与Docker的集成可以极大地简化应用的部署和管理。具体步骤如下:

    • 编写Dockerfile :在项目根目录下编写一个Dockerfile,用于描述如何构建Docker镜像。

      dockerfile 复制代码
      FROM openjdk:17-jdk-alpine
      
      WORKDIR /app
      
      COPY target/myapp.jar app.jar
      
      ENTRYPOINT ["java", "-jar", "app.jar"]
    • 构建Docker镜像 :在项目根目录下执行docker build -t myapp:latest .命令,构建Docker镜像。

    • 运行Docker容器 :执行docker run -p 8080:8080 myapp:latest命令,运行Docker容器。

  3. Spring Boot如何与数据库集成?

    答案

    Spring Boot与数据库集成通常使用Spring Data JPA或MyBatis等持久层框架。以Spring Data JPA为例,具体步骤如下:

    • 引入依赖 :在pom.xml文件中添加Spring Data JPA和数据库驱动的依赖。
    • 配置数据源 :在application.propertiesapplication.yml文件中配置数据库连接信息。
    • 创建实体类:使用JPA注解定义实体类,映射到数据库表。
    • 创建Repository接口 :继承JpaRepository接口,定义数据访问方法。
    • 使用Service层:在Service层中调用Repository接口的方法,实现业务逻辑。

五、常见问题与解决方案

  1. Spring Boot项目启动时报错"Failed to configure a DataSource"怎么办?

    答案

    这个错误通常是因为Spring Boot在自动配置时未能找到数据源的配置

相关推荐
RainbowSea1 小时前
问题:后端由于字符内容过长,前端展示精度丢失修复
java·spring boot·后端
风象南1 小时前
SpringBoot 控制器的动态注册与卸载
java·spring boot·后端
我是一只代码狗2 小时前
springboot中使用线程池
java·spring boot·后端
hello早上好2 小时前
JDK 代理原理
java·spring boot·spring
PanZonghui2 小时前
Centos项目部署之运行SpringBoot打包后的jar文件
linux·spring boot
沉着的码农3 小时前
【设计模式】基于责任链模式的参数校验
java·spring boot·分布式
zyxzyx6663 小时前
Flyway 介绍以及与 Spring Boot 集成指南
spring boot·笔记
一头生产的驴4 小时前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf
程序员张37 小时前
SpringBoot计时一次请求耗时
java·spring boot·后端
麦兜*13 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构