SpringBoot面试题

SpringBoot面试题

1.什么是 Spring Boot?

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

2.Spring Boot 有哪些优点?

Spring Boot 主要有如下优点:

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

3.SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含
了以下 3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项, 例

如: java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

  • @ComponentScan:Spring组件扫描。

4.SpringBoot自动配置原理

SpringBoot核心就是几个注解:SpringBootConfiguration、EnableAutoConfiguration、ComponentScan,依赖这几个注解完成了所谓自动装配的功能,这个自动装配说简单点就是把你需要的Bean注入到Spring容器里面

SpringBoot程序在启动过程中会解析SpringBootConfiguration、EnableAutoConfiguration、ComponentScan三个注解:

SpringBootConfiguration:包含了Configuration注解,实现配置文件
ComponentScan:指定扫描范围
EnableAutoConfiguration:通过源码可以知道,该注解使用Import引入了AutoConfigurationImportSelector类,而AutoConfigurationImportSelector类通过SpringFactortisLoader加载了所有jar包的MATE-INF文件夹下面的spring.factories文件,spring.factories包含了所有需要装配的XXXConfiguration类的全限定名。然后过滤出书友AutoConfigurationClass类型的类,最后通过@Condition排除无效的自动配置类

5.什么是 YAML?

  • YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分

层配置数据。

6.SpringBoot微服务中如何实现 session 共享 ?

  在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,

但是经常,我们需要在不同微服务之间共享session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的session 统一保存在 Redis 上
,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,

使得 session 的同步操作对开发人员而言是透明的,非常简便。

7.Spring Boot 中的 starter 到底是什么 ?

  • starter组件是SpringBoot的四大核心特性之一,其他的还包括自动装配,Actuator监控,命令行界面。SpringBoot里的这些特性都是为了让开发者在开发Spring生态的企业级应用的时候,

只需要去关心业务逻辑,减少对配置和外部环境的依赖。

  • 其中starter的作用,主要有几个 

  1.starter组件是以功能为纬度 来维护对应jar包的版本依赖的,那么开发者就不需要去关心版本冲突这种容易出错的细节

  2.starter会把对应功能组件的所有jar包依赖 全部导进来,避免开发者自己去引入依赖带来的一些问题。

  3.starer内部集成了自动装配的机制, 也就是说,程序依赖了对应的starter之后,那么这个组件会自动集成到Spring生态里面,并且完成对应相关Bean的管理 ,这也是基于自动装配机制完成的 

  4.依赖starter之后,这些组件对应的功能所需要维护的外部化配置会自动集成到SpringBoot里面, 我们只需要在application.properties去进行维护配置就行了,比如我们引入了redis的starter,我们只需要在application.properties里面去维护redis链接的相关信息就可以直接使用了。

 

8.spring-boot-starter-parent 有什么用 ?

我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 springboot-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。

9.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 ,一个可执行,一个可引用。

 

posted @ 2023-03-17 00:29  杨阳洋^_^!  阅读(119)  评论(0编辑  收藏  举报