首页 > 其他分享 >12.面试题——Spring Boot

12.面试题——Spring Boot

时间:2024-08-10 15:27:00浏览次数:14  
标签:面试题 12 Spring boot Boot spring 注解 starter

1.Spring Boot是什么?

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

2.为什么要用 Spring Boot?

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

3.优点?

  • 容易上手,提升开发效率,为 Spring 开发提供一个更快、更简单的开发框架
  • 远离繁琐的配置
  • 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等
  • SpringBoot总结就是使编码变简单、配置变简单、部署变简单、监控变简单等等

4.缺点?

  • Spring Boot 仅适用于全新 Spring 项目。将一个传统 Spring Framework 项目转换为 Spring Boot
    应用程序是一个非常困难和耗时的过程
  • 集成度较高,使用过程中不太容易了解底层(新人面试的时候都不会偏向于底层的东西,比如说 Spring MVC。建议在学习 Spring Boot 的时候,先去学习一下 Spring MVC)

5.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 请求统计等

6.SpringBootApplication 引入了哪 3 个重要的注解?

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

  • @SpringBootConfiguration 里面就只有一个 @Configuration
    主要注解,也就是把该类变成一个配置类所以@SpringBootConfiguration 就相当于 @Configuration
  • @EnableAutoConfiguration 是由 @AutoConfigurationPackage和@Import(EnableAutoConfigurationImportSelector.class) 这两个组成的@AutoConfigurationPackage 是自动配置包,包括了一个 @Import注解,给容器导入了自动配置包的注册器,AutoConfigurationPackages.Registrar.class:将主启动类的所在包及包下面所有子包里面的所有组件扫描到Spring 容器
  • @ComponentScan:扫描包,该注解默认会扫描该类所在的包下所有的配置类

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

主要有.properties 和 .yml
.yml 格式不支持 @PropertySource 注解导入配置

8.你如何理解 Spring Boot 中的 Starters

个人理解 Spring Boot 就是由各种 Starter 组合起来的,我们自己也可以开发Starter。

当一个项目变得相当复杂,管理依赖会成为一个噩梦,因为当中涉及太多 artifacts 了。

这时候 SpringBoot starter 就派上用处了。其他所需的依赖以一致的方式注入并且被管理。

所有的 starter 都归于 org.springframework.boot 组中,并且它们都以由 spring-boot-starter- 开头取名。这种命名方式使得我们更容易找到 starter 依赖,特别是当我们使用那些支持通过名字查找依赖的 IDE 当中。

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

9.Spring Boot 可以兼容老 Spring 项目吗,如何做?

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

10.Spring Boot 中读取配置的方式有哪些?

注入Environment对象:通过Environment 的 getProperty() 方法读取指定配置 Key 的内容
使用@Value注解,实现单个配置的注入
使用@ConfigurationProperties注解,实现一组配置的注入

11.SpringBoot 实现热部署有哪几种方式?

主要有两种方式:

  • Spring Loaded
  • Spring-boot-devtools

12.Spring Boot 是否可以使用 XML 配置 ?

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

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

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

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

  • 打包用命令或者放到容器中运行
  • 用 Maven/ Gradle 插件运行
  • 直接执行 main 方法运行

15.开启 Spring Boot 特性有哪几种方式

  • 继承spring-boot-starter-parent项目

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.6.2</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
  • 导入spring-boot-dependencies项目依赖

      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.6.2</version>
      </parent>
    

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

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

17、Spring Initializr 是创建 Spring Boot 的唯一方法?

Spring Initiatlizr 让创建 Spring Boot 项目变的很容易,但是,也可以通过设置一个 maven 项目并添加正确的依赖项来开始一个项目

创建方式有两种:

  • 第一种::start.spring.io 方式创建
  • 第二种:在项目的标题为 “Basic Web Application” 处进行手动设置

18.Spring Boot 约定优于配置的体现是什么?

Maven的目录结构:

  • 默认有 resources 文件夹存放配置文件
  • 默认打包方式为jar
  • 默认的配置文件:application.properties 或 application.yml 文件
  • 默认通过 spring.profiles.active 属性来决定运行环境时的配置文件
  • EnableAutoConfiguration 默认对于依赖的 starter 进行自动装载
  • spring-boot-start-web 中默认包含 spring-mvc 相关依赖以及内置的 tomcat 容器,使得构建一个 web应用更加简单

19、内置容器的启动流程是什么

启动一个 Spring Boot项目,首先运行 Application 启动类的 main 方法,main 方法中调用了 SpringApplication.run 方法,run 方法中又调用了最核心的 refreshContext 方法,这里面又调用了我们最熟悉了 spring 容器启动模板方法refresh 方法,默认 Spring Boot 会启动 Tomcat,在 refresh 中的 onRefresh() 中执行;onRefresh 调用了 createWebServer() 方法,通过TomcatServletWebServerFactory 开始创建 Tomcat 实例;最后在 refresh 方法中的 finishRefresh() 中调用 Tomcat 实例的 start 逻辑,并将应用上下文发布的 webServer 中,至此完成 Tomcat 的启动

20、你如何理解 Spring Boot 配置加载顺序?

Spring Boot 配置加载顺序优先级是:propertiese文件、YAML文件、系统环境变量、命令行参数。

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

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

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

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

23、如何使用 Spring Boot 实现异常处理?

Spring 通过使用 @ControllerAdvice 注解处理异常,实现一个ControllerAdvice 类来处理控制器类抛出的所有异常

24、YAML在springboot中的作用

使得 Spring Boot 配置文件更加有层次感,结构也比较清晰,不容易混淆,目前也是人类可读的数据序列化语言

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

在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一个则是使用第三方框架 Quartz。

使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。

使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可

26.Spring Boot 自动配置的原理

  • SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration
  • 查看@EnableAutoConfiguration,其作用是利用AutoConfigurationImportSelector给容器中导入一些组件
  • 查看AutoConfigurationImportSelector,其中public String[] selectImports(AnnotationMetadata annotationMetadata)方法内最终调用getCandidateConfigurations()方法
  • 查看 getCandidateConfigurations(AnnotationMetadata metadata,AnnotationAttributes attributes),获取候选的配置,这个是扫描所有jar包类路径下"META-INF/spring.factories"
  • 然后把扫描到的这些文件包装成Properties对象
  • 从properties中获取到EnableAutoConfiguration.class类名对应的值,然后把他们添加在容器中

整个过程就是将类路径下 “META-INF/spring.factories” 里面配置的所有 EnableAutoConfiguration 的值加入到容器中

27.SpringBoot核心配置文件是什么?

bootstrap.properties 和 application.properties

28.Spring Boot 打成的 jar 和普通的 jar 有什么区别

Spring Boot 打成jar包可以直接通过 java -jar *.jar 启动项目,但是不能够像普通 jar 包一样被其他项目引用。普通 jar 解压后就是包名,可以直接引用内部的类,而 Spring Boot 解压后 BOOT/classes 目录下才是真正的代码,因此不能被直接引用,如果需要被引用可以配置 pom,将 SpringBoot 打包成两个 jar 包,一个可执行,一个可引用

29.SpringBoot 常用注解

  • @SpringBootApplication: 它 封 装 了 核 心
    的@SpringBootConfiguration+@EnableAutoConfiguration +@ComponentScan
    这三个类,大大节省了程序员配置时间,这就是 SpringBoot 的核心设计思想.

  • @EnableScheduling 是通过@Import 将 Spring 调度框架相关的bean 定义都加载到IoC 容器

  • @MapperScan:spring-boot支持mybatis组件的一个注解,通过此注解指定mybatis接口类的路径,即可完成对 mybatis 接口的扫描

  • @RestController 是 @Controller 和 @ResponseBody 的 结合, 一个类被加上@RestController 注解,数据接口中就不再需要添加@ResponseBody,更加简洁。

  • @RequestMapping,我们都需要明确请求的路径.

  • @GetMappping,@PostMapping, @PutMapping, @DeleteMapping 结合@RequestMapping 使用, 是 Rest 风格的, 指定更明确的子路径.

  • @PathVariable:路径变量注解,用{}来定义 url 部分的变量名.

  • @Service 这个注解用来标记业务层的组件,我们会将业务逻辑处理的类都会加上这个注解交给 spring 容器。事务的切面也会配置在这一层。当让 这个注解不是一定要用。有个泛指组件的注解,当我们不能确定具体作用的时候 可以用泛指组件的注解托付给spring 容器

  • @Component 和 spring 的注解功能一样, 注入到 IOC 容器中

  • @ControllerAdvice 和 @ExceptionHandler 配合完成统一异常拦截处理.

标签:面试题,12,Spring,boot,Boot,spring,注解,starter
From: https://blog.csdn.net/qq_54698124/article/details/141091281

相关文章

  • 免费【2024】springboot 高校竞赛管理系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】springboot 高校教务管理系统设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】springboot 高校奖助学金系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】springboot 高校会议室预订管理系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • Java SpringBoot实现PDF转图片
    不是单页图片,是多页PDF转成一张图片的逻辑。我这里的场景是PDF转成图片之后返回给前端,前端再在图片上实现签字,并且可拖拽的逻辑,就是签订合同的场景。但是这里只写后端多页PDF转图片的逻辑。先说逻辑,后面直接上代码,大致分为以下几步:读取PDF文件(我的代码里是将在线的URL转成Inp......
  • spring启动流程
    ` publicvoidrefresh()throwsBeansException,IllegalStateException{this.startupShutdownLock.lock();try{//启动关闭线程,这个线程用来表示启动当前容器使用的线程//该成员变量在之前的版本中并不存在,也是为了支持后续的并发实例化bean的情况this.startupShutdown......
  • springboot 博客交流平台-计算机毕业设计源码56406
    摘要博客交流平台作为一种重要的网络平台,为用户提供了展示自我、分享经验和与他人互动的空间。在国内外,研究者们关注博客交流平台的各个方面,并取得了显著的进展。研究内容主要包括用户体验和界面设计、社交化和互动性、多媒体内容支持、移动设备适配和跨平台体验、数据分析......
  • 初识Spring
    文章目录一.Spring是什么?1.为什么要学?2.学什么?3.怎么学?二.Spring相关概念1.初识Spring1.1.Spring家族1.2.了解Spring发展史2.Spring系统架构2.1.系统架构图2.2.课程学习路线3.Spring核心概念3.1.目前项目中的问题3.2.IOC、IOC容器、Bean、DI3.3.核心......
  • 树莓派刷debian12系统
     本博主使用的板子是树莓派3系列的2017年生产的型号准备材料:1、树莓派板子2、一个很快很大的tf卡3、一个树莓派电源下载树莓派官方是烧录镜像的软件去官网下载这个软件,电脑安装上RaspberryPiOS–RaspberryPi点击DoenloadforWindows​然后安装后,打开软件将......
  • Spring全家桶(四):Spring 事务
    Spring声明式事务1. 声明式事务概念什么是事务事务作用:在数据层保障一系列的数据库操作同成功同失败Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败1.1编程式事务编程式事务是指手动编写程序来管理事务,即通过编写代码的方式直接控制事务的提交和回......