Spring Boot面试题

1.什么是 Spring Boot?

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

2.Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

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

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,
    例如:java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

  • @ComponentScan:Spring组件扫描。

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

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架,但是不管是那种日志框架他都支持将配置文件输出到控制台或者文件中。

4.SpringBoot Starter的工作原理

在sprinBoot启动时由@SpringBootApplication注解会自动去maven中读取每个starter中的spring.factories文件,该文件里配置了所有需要被创建spring容器中的bean,并且进行自动配置把bean注入SpringContext中 //(SpringContext是Spring的配置文件)

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

可以实现接口 ApplicationRunner 或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法

6.Spring Boot 有哪几种读取配置的方式?

Spring Boot 可以通过@PropertySource,@Value,@Environment, @ConfigurationPropertie注解来绑定变量

7.你如何理解 Spring Boot 配置加载顺序?

在 Spring Boot 里面,可以使用以下几种方式来加载配置。

1.properties文件;

2.YAML文件;

3.系统环境变量;

4.命令行参数;

等等……

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

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

9.spring boot 核心配置文件是什么?bootstrap.properties 和application.properties 有何区别 ?

单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。

spring boot 核心的两个配置文件:

  • bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud 配置就会使用这个文件。且 boostrap 里面的属性不能被覆盖;
  • application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。

10.SpringBoot多数据源拆分的思路

先在properties配置文件中配置两个数据源,创建分包mapper,使用@ConfigurationProperties读取properties中的配置,使用@MapperScan注册到对应的mapper包中
参考链接

11.SpringBoot多数据源事务如何管理

  • 第一种方式是在service层的@TransactionManager中使用transactionManager指定DataSourceConfig中配置的事务

  • 第二种是使用jta-atomikos实现分布式事务管理

12.比较一下 Spring Security 和 Shiro 各自的优缺点 ?

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

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

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

  • Spring Security 功能强大;Shiro 功能简单

13.Spring Boot 中如何解决跨域问题 ?

跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。

 @Configuration
  public class CorsConfig implements WebMvcConfigurer {

      @Override
      public void addCorsMappings(CorsRegistry registry) {
          registry.addMapping("/**")
                  .allowedOrigins("*")
                  .allowCredentials(true)
                  .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                  .maxAge(3600);
      }

  }

14.Spring Boot 中的监视器是什么?

Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的REST 端点来检查状态。

15.如何使用 Spring Boot 实现全局异常处理?

Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。 我们通过实现一个 ControlerAdvice 类,来处理控制器类抛出的所有异常。

16.SpringBoot性能如何优化

  • 如果项目比较大,类比较多,不使用@SpringBootApplication,采用@Compoment指定扫包范围

  • 在项目启动时设置JVM初始内存和最大内存相同

  • 将springboot内置服务器由tomcat设置为undertow

17.您使用了哪些 starter maven 依赖项?

  • spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持
  • spring-boot-starter-data-jpa 数据库支持
  • spring-boot-starter-data-redis redis数据库支持
  • spring-boot-starter-data-solr solr支持
  • mybatis-spring-boot-starter 第三方的mybatis集成starter

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

首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性(spring.factories)注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter

19.Spring Boot、Spring MVC 和 Spring 有什么区别?

Spring

  • Spring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。

  • 当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。

Spring MVC

  • Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。

SpringBoot

  • Spring 和 SpringMVC 的问题在于需要配置大量的参数。
  • Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。

20.RequestMapping 和 GetMapping 的不同之处在哪里?

  • RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。
  • GetMapping 是 GET 请求方法中的一个特例。它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。

21.什么是 WebSockets?

WebSocket 是一种计算机通信协议,通过单个 TCP 连接提供全双工通信信道。
在这里插入图片描述

  • 1、WebSocket 是双向的 -使用 WebSocket 客户端或服务器可以发起消息发送。

  • 2、WebSocket 是全双工的 -客户端和服务器通信是相互独立的。

  • 3、单个 TCP 连接 -初始连接使用 HTTP,然后将此连接升级到基于套接字的连接。然后这个单一连接用于所有未来的通信

  • 4、Light -与 http 相比,WebSocket 消息数据交换要轻得多。

22.什么是JavaConfig?

Spring JavaConfig是Spring社区的产品,它提供了配置Spring IoC容器的纯Java方法。因此它有助于避免使用XML配置。使用JavaConfig的优点在于:

  • 面向对象的配置。由于配置被定义为JavaConfig中的类,因此用户可以充分利用Java中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean方法等。

  • 减少或消除XML配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在XML和Java之间来回切换。

  • JavaConfig为开发人员提供了一种纯Java方法来配置与XML配置概念相似的Spring容器。

  • 从技术角度来讲,只使用JavaConfig配置类来配置容器是可行的,但实际上很多人认为将JavaConfig与XML混合匹配是理想的。

  • 类型安全和重构友好。JavaConfig提供了一种类型安全的方法来配置Spring容器。由于Java 5.0对泛型的支持,现在可以按类型而不是按名称检索bean,不需要任何强制转换或基于字符串的查找。

23.什么是 SpringBoot 自动装配?

参考链接

在这里插入图片描述

24.如何实现一个 Starter

现在就来撸一个 starter,实现自定义线程池

  • 第一步,创建threadpool-spring-boot-starter工程

  • 第二步,引入 Spring Boot 相关依赖
    在这里插入图片描述

  • 第三步,创建ThreadPoolAutoConfiguration
    在这里插入图片描述

  • 第四步,在threadpool-spring-boot-starter工程的 resources 包下创建META-INF/spring.factories文件
    在这里插入图片描述

  • 最后新建工程引入threadpool-spring-boot-starter
    在这里插入图片描述
    测试通过!!!
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您介绍一些常见的Spring Boot面试题。以下是一些常见的问题和答案: 1. 什么是Spring BootSpring Boot是一个用于创建独立的、基于Spring的应用程序的框架。它简化了Spring应用程序的配置和部署过程,并提供了一套开箱即用的功能,如自动配置、嵌入式服务器等。 2. Spring Boot的主要特点有哪些? - 简化配置:Spring Boot通过自动配置和约定大于配置的原则,减少了繁琐的配置。 - 内嵌服务器:Spring Boot可以使用内嵌的Tomcat、Jetty或Undertow服务器,无需外部容器。 - 自动配置:Spring Boot根据项目的依赖自动配置应用程序。 - 简化依赖管理:Spring Boot使用起步依赖(Starter)来管理依赖关系,简化了依赖管理。 - Actuator:Spring Boot提供了Actuator模块,可以监控和管理应用程序。 3. Spring Boot如何实现自动配置? Spring Boot通过条件注解和自动配置类实现自动配置。条件注解根据条件判断是否需要进行自动配置,自动配置类提供了默认的配置。 4. 如何在Spring Boot配置数据源? 在Spring Boot,可以通过在application.properties或application.yml文件配置数据源相关属性来配置数据源。例如,可以配置数据库的URL、用户名、密码等。 5. 如何启用Spring Boot的日志输出? Spring Boot使用了Commons Logging作为日志抽象层,默认使用Logback作为日志实现。可以通过在application.properties或application.yml文件配置相关属性来控制日志输出。 6. 如何在Spring Boot实现跨域请求? 可以通过在控制器类或方法上添加@CrossOrigin注解来实现跨域请求。也可以通过配置WebMvcConfigurer来全局配置跨域请求。 7. 如何在Spring Boot实现缓存? Spring Boot提供了对多种缓存技术的支持,如Ehcache、Redis等。可以通过在pom.xml文件添加相应的依赖,并在配置文件配置相关属性来启用缓存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值