Spring Boot面试题

目录

[1、什么是 Spring Boot?](#1、什么是 Spring Boot?)

[2、为什么要用 Spring Boot?](#2、为什么要用 Spring Boot?)

[3、Spring Boot 的优点?](#3、Spring Boot 的优点?)

[4、Spring Boot 的缺点](#4、Spring Boot 的缺点)

[5、Spring Boot 与 Spring Cloud 区别](#5、Spring Boot 与 Spring Cloud 区别)

[6、Spring 和 Spring Boot 有何不同?](#6、Spring 和 Spring Boot 有何不同?)

[7、SpringBootApplication 引入了哪 3 个重要的注解?](#7、SpringBootApplication 引入了哪 3 个重要的注解?)

[8,什么是 JavaConfig](#8,什么是 JavaConfig)

[10 、你如何理解 Spring Boot 中的 Starters](#10 、你如何理解 Spring Boot 中的 Starters)

[11、Spring Boot 可以兼容老 Spring 项目吗,如何做?](#11、Spring Boot 可以兼容老 Spring 项目吗,如何做?)

[12、Spring Boot 中读取配置的方式有哪些?](#12、Spring Boot 中读取配置的方式有哪些?)

13.什么是热部署?springBoot怎么实现热部署

[14、Spring Boot 是否可以使用 XML 配置 ?](#14、Spring Boot 是否可以使用 XML 配置 ?)

[15、如何实现 Spring Boot 应用程序的安全性?](#15、如何实现 Spring Boot 应用程序的安全性?)

[16、运行 Spring Boot 有哪几种方式?](#16、运行 Spring Boot 有哪几种方式?)

[17、Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪一个?](#17、Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪一个?)

[18.如何在 Spring Boot 启动的时候运行一些特定的代码?](#18.如何在 Spring Boot 启动的时候运行一些特定的代码?)

19.springBoot的全局异常处理

[20,spring boot自动装配原理](#20,spring boot自动装配原理)

[21,比较一下 Spring Security 和 Shiro 各自的优缺点](#21,比较一下 Spring Security 和 Shiro 各自的优缺点)

[22、application.properties 和 bootstrap.properties 有何区别 ?](#22、application.properties 和 bootstrap.properties 有何区别 ?)

[23、Spring Boot 中的监视器是什么?](#23、Spring Boot 中的监视器是什么?)

[24、如何使用 SpringBoot 实现分页和排序?](#24、如何使用 SpringBoot 实现分页和排序?)

[25、Spring Boot 中如何实现定时任务 ?](#25、Spring Boot 中如何实现定时任务 ?)

[详情请往 springboot-异步、定时、邮件任务](#详情请往 springboot-异步、定时、邮件任务)

[26、Spring Boot 打成的 jar 和普通的 jar 有什么区别](#26、Spring Boot 打成的 jar 和普通的 jar 有什么区别)

[27、 前后端分离,如何维护接口文档](#27、 前后端分离,如何维护接口文档)


1、什么是 Spring Boot?

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

2、为什么要用 Spring Boot?

  • 快速开发
  • 快速整合第三方框架(Maven依赖关系,Maven继承)
  • 简化XML的配置
  • 内置嵌入HTTP服务器(Tomcat(默认)、Jetty),降低了对环境的要求

3、Spring Boot 的优点?

1、容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。

2、开箱即用,远离繁琐的配置。

3、提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。

4、没有代码生成,也不需要XML配置。

5、避免大量的 Maven 导入和各种版本冲突。

4、Spring Boot 的缺点

Spring Boot 仅适用于全新 Spring 项目。将一个传统 Spring Framework 项目转换为 Spring Boot 应用程序是一个非常困难和耗时的过程

集成度较高,使用过程中不太容易了解底层(新人面试的时候都不会偏向于底层的东西,比如说 Spring MVC。建议在学习 Spring Boot 的时候,先去学习一下 Spring MVC)

5、Spring Boot 与 Spring Cloud 区别

Spring Boot 是快速开发的 Spring 框架,而 Spring Cloud 是完整的微服务框架,Spring Cloud 依赖于 SpringBoot进行开发。

6、Spring 和 Spring Boot 有何不同?

Spring Boot 本质上是 Spring 框架的延伸和扩展,它的诞生是为了简化 Spring 框架初始搭建以及开发的过程,使用它可以不再依赖 Spring 应用程序中的 XML 配置,为更快、更高效的开发 Spring 提供更加有力的支持。

更快速的构建能力:Spring Boot 提供了更多的 Starters 用于快速构建业务框架,Starters 可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找依赖包

起步依赖:在创建 Spring Boot 时可以直接勾选依赖模块,这样在项目初始化时就会把相关依赖直接添加到项目中,大大缩短了查询并添加依赖的时间

内嵌容器支持:Spring Boot 内嵌了 Tomcat、Jetty、Undertow 三种容器,其默认嵌入的容器是 Tomcat

Actuator 监控:可以监控应用程序的运行状况,或者内存、线程池、Http 请求统计等

7、SpringBootApplication 引入了哪 3 个重要的注解?

核心注解是 @SpringBootApplication,它主要由@SpringBootConfiguration,@EnableAutoConfiguration和@ComponentScan这三个构成:

@SpringBootConfiguration 里面就只有一个 @Configuration 主要注解,也就是把该类变成一个配置类所以@SpringBootConfiguration 就相当于 @Configuration

@EnableAutoConfiguration 是由 @AutoConfigurationPackage 和@Import(EnableAutoConfigurationImportSelector.class) 这两个组成的 @AutoConfigurationPackage 是自动配置包,包括了一个 @Import 注解,给容器导入了自动配置包的注册器,AutoConfigurationPackages.Registrar.class:将主启动类的所在包及包下面所有子包里面的所有组件扫描到 Spring 容器

@ComponentScan:扫描包,该注解默认会扫描该类所在的包下所有的配置类

8、Spring Boot 的配置文件有哪几种格式?它们有什么区别?

主要有.properties 和 .yml,它们的区别主要是写的格式不同:

.properties:user:

java 复制代码
user.name = jason

.yml:

XML 复制代码
user:
    name: javastack

这里需要注意:.yml 格式不支持 @PropertySource 注解导入配置、

8,什么是 JavaConfig

JavaConfig 是指使用 Java 代码来配置应用程序的方式,通常用于替代传统的基于 XML 的配置。在 Spring 框架中,JavaConfig 允许开发人员通过编写 Java 类来配置应用程序的各种组件、依赖关系和行为,而不必依赖于 XML 配置文件。

通过 JavaConfig,开发人员可以使用纯粹的 Java 代码来定义 Spring Bean、组件扫描、依赖注入等配置,这样可以提高代码的可读性和维护性。相比于 XML 配置,JavaConfig 更加类型安全,能够在编译时检测到错误,避免了一些运行时错误。

在 Spring 中,JavaConfig 通常使用 @Configuration 注解标记一个类,然后在这个类中使用 @Bean 注解定义 Bean,使用 @ComponentScan 注解启用组件扫描等。通过 JavaConfig,开发人员可以更加灵活地配置应用程序,并且更好地利用面向对象的特性来管理应用的各种组件和依赖关系。

java 复制代码
@Configuration
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }

    @Bean
    public DataSource dataSource() {
        // 创建数据源
    }

    @Bean
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource());
    }
}

10 、你如何理解 Spring Boot 中的 Starters

在 Spring Boot 中,Starters 是一种依赖管理的机制,用于简化 Spring 应用程序的构建和配置。Starters 实际上是预先定义的一组 Maven 或 Gradle 依赖项集合,它们包含了常见场景下所需的依赖项,例如数据库访问、Web 开发、安全性等

SpringBoot 提供了非常多的 starter ,其中最常用的是:

spring-boot-starter:核心 starter,包括自动化配置支持,日志以及 YAML

spring-boot-starter-aop:Spring AOP 和 AspectJ 相关的切面编程 starter

spring-boot-starter-data-jpa:使用 Hibernate Spring Data JPA 的 starter

spring-boot-starter-jdbc:使用 HikariCP 连接池 JDBC 的 starter

spring-boot-starter-security:使用 Spring Security 的 starter

spring-boot-starter-test:SpringBoot 测试相关的 starter

spring-boot-starter-web:构建 restful、springMVC 的 web应用程序的 starter

11、Spring Boot 可以兼容老 Spring 项目吗,如何做?

使用 @ImportResource 注解导入老 Spring 项目配置文件

12、Spring Boot 中读取配置的方式有哪些?

注入Environment对象:通过Environment 的 getProperty() 方法读取指定配置 Key 的内容

使用@Value注解,实现单个配置的注入

使用@ConfigurationProperties注解,实现一组配置的注入

13.什么是热部署?springBoot怎么实现热部署

热部署: 修改代码不需要重启,就可以实现编译并部署到服务器上。(1)在开发时修改代码不需要重启服务,节省了时间。(2)部署在服务器上的程序,可以在不停止的情况下进行升级。

①使用devtools。在配置文件中把devtools.restart.enabled 设置为 true。每次都需要build一下才行。

②idea设置实现热部署。

14、Spring Boot 是否可以使用 XML 配置 ?

Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过@ImportResource 注解可以引入一个 XML 配置

15、如何实现 Spring Boot 应用程序的安全性?

为了实现Spring Boot的安全性,我们使用 spring-boot-starter-security依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法

16、运行 Spring Boot 有哪几种方式?

打包用命令或者放到容器中运行

用 Maven/ Gradle 插件运行

直接执行 main 方法运行

17、Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪一个?

Spring Boot 支持 Logging、Log4j2、Lockback 做为日志框架,若是你使用 Starters 启动器,Spring Boot 将使用 Logback 做为默认日志框架

18.如何在 Spring Boot 启动的时候运行一些特定的代码?

可以实现接口 ApplicationRunner或者 CommandLineRunner,这两个接口实现方式一样(项目启动完成后执行) ,它们

都只提供了一个 run 方法,在run方法写你的业务逻辑。

19.springBoot的全局异常处理

@ControllerAdvice:开启了全局异常的捕获。然后自定义一个方法使用@ExceptionHandler注解然后定义捕获异常的类型即可对这些捕获的异常进行统一的处理。

java 复制代码
@ControllerAdvice
public class ExceptionUtil{

    @ExceptionHandler(value =Exception.class)
    @ResponseBody
    public String exceptionHandler(Exception e){
        System.out.println("全局异常捕获:"+e);
        return "全局异常捕获,错误原因:"+e.getMessage();
    }
}

20,spring boot自动装配原理

  1. Spring Boot 在启动过程中会扫描 classpath 下的 META-INF/spring.factories 文件,该文件列出了所有自动配置类的全限定名。
  2. 根据启动时的条件判断,Spring Boot 会选择合适的自动配置类进行加载。
  3. 自动配置类中通过 @Configuration@Bean 注解定义了一系列的配置和组件,这些配置和组件会被自动应用到应用程序中。
  4. 自动配置类可以通过条件注解对配置进行细粒度的控制,只有满足条件的情况下才会被应用。

21,比较一下 Spring Security 和 Shiro 各自的优缺点

由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:

1、Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架

2、Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单

3、Spring Security 功能强大;Shiro 功能简单

22、application.properties 和 bootstrap.properties 有何区别 ?

bootstrap 比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效, 而且 boostrap 里面的属性不能被覆盖;

application 用于 Spring Boot 项目的自动化配置

23、Spring Boot 中的监视器是什么?

Spring boot actuator 是 spring 启动框架中的重要功能之一,Spring boot 监视器可以访问生产环境中正在运行的应用程序的当前状态。监视器模块公开了一组可直接作为 HTTP URL 访问的 REST 端点来检查状态

24、如何使用 SpringBoot 实现分页和排序?

XML 复制代码
  1、pom
  <!--分页插件-->
              <dependency>
                  <groupId>com.github.pagehelper</groupId>
                  <artifactId>pagehelper-spring-boot-starter</artifactId>
                  <version>${pagehelper-version}</version>
              </dependency>
  
  2、配置文件
 pagehelper:
   helper-dialect: mysql
   reasonable: true
   support-methods-arguments: true
   params: count=countSql
 
 3、service层
         //用插件进行分页
         PageHelper.startPage(pageNum, pageSize);
         return articleMapper.findByPage();    
 
 4、controller层
      通过service调用方法后获取数据。
      // 需要把Page包装成PageInfo对象才能序列化。该插件也默认实现了一个PageInfo
         PageInfo<Article> pageInfo = new PageInfo<>(articles);

25、Spring Boot 中如何实现定时任务 ?

创建定时任务方法: 在任何一个 Spring 管理的 Bean 中,您可以创建一个定时执行的方法,并使用 注解标记该方法。@Scheduled

java 复制代码
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {

    @Scheduled(fixedRate = 5000) // 每隔5秒执行一次
    public void doTask() {
        System.out.println("定时任务执行中...");
    }
}

启用定时任务: 在 Spring Boot 主类中添加 注解,以启用 Spring 的定时任务功能。@EnableScheduling

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

详情请往 springboot-异步、定时、邮件任务

26、Spring Boot 打成的 jar 和普通的 jar 有什么区别

Spring Boot 打成jar包可以直接通过 java -jar *.jar 启动项目,但是不能够像普通 jar 包一样被其他项目引用。

普通 jar 解压后就是包名,可以直接引用内部的类,而 Spring Boot 解压后 BOOT/classes 目录下才是真正的代码,因此不能被直接引用,如果需要被引用可以配置 pom,将 SpringBoot 打包成两个 jar 包,一个可执行,一个可引用

27、 前后端分离,如何维护接口文档

前后端分离开发日益流行,大部分情况下,我们都是通过 Spring Boot 做前后端分离开发,前后端分离一定会有接口文档,不然会前后端会深深陷入到扯皮中。一个比较笨的方法就是使用 word 或者 md 来维护接口文档,但是效率太低,接口一变,所有人手上的文档都得变。在 Spring Boot 中,这个问题常见的解决方案是 Swagger ,使用 Swagger 我们可以快速生成一个接口文档网站,接口一旦发生变化,文档就会自动更新,所有开发工程师访问这一个在线网站就可以获取到最新的接口文档,非常方便

相关推荐
小爬虫程序猿几秒前
利用Java爬虫获取速卖通(AliExpress)商品详情的详细指南
java·开发语言·爬虫
Java编程乐园3 分钟前
Java中以某字符串开头且忽略大小写字母如何实现【正则表达式(Regex)】
java·正则表达式
阿七想学习3 分钟前
数据结构《排序》
java·数据结构·学习·算法·排序算法
xlsw_9 分钟前
java全栈day21--Web后端实战之利用Mybaits查询数据
java·开发语言
什么想法都无23 分钟前
stream
java·java stream
m0_7482336424 分钟前
WebService简介
java
love静思冥想24 分钟前
Stream `Collectors.toList()` 和 `Stream.toList()` 的区别(Java)
java·stream
编码浪子42 分钟前
构建一个rust生产应用读书笔记7-确认邮件2
开发语言·后端·rust
Ch.yang43 分钟前
【Spring】 Bean 注入 HttpServletRequest 能保证线程安全的原理
java·spring·代理模式
web150850966411 小时前
基于Mysql、JavaScript、PHP、ajax开发的MBTI性格测试网站(前端+后端)
java