2020年最新面试官常问的SpringBoot面试题
今天写的这篇主要总结了SpringBoot相关的问题。还有更多面试专题及java资料、笔记等可以添加微信:YDT939免费获取
Q:什么是SpringBoot?
用来简化spring应用的初始搭建以及开发过程,使用特定的方式来进行配置(properties
或yml
文件)创建独立的spring引用程序 main方法运行,嵌入的Tomcat 无需部署war文件,简化maven配置,自动配置spring添加对应功能starter自动化配置。
Q: Spring Boot、Spring MVC 和 Spring 有什么区别?
1、SpringSpring最重要的特征是依赖注入。所有 SpringModules
不是依赖注入就是 IOC 控制反转。当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。
2、Spring MVC提供了一种分离式的方法来开发 Web 应用。通过运用像DispatcherServelet
,MoudlAndView
和ViewResolver
等一些简单的概念,开发 Web 应用将会变的非常简单。
3、Spring 和 SpringMVC 的问题在于需要配置大量的参数。
4、Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。
Q:Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
1、@SpringBootConfiguration
:组合了 @Configuration 注解,实现配置文件的功能。
2、@EnableAutoConfiguration
:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能。
3、@ComponentScan
:Spring组件扫描。
Q:什么是 JavaConfig?
1、面向对象的配置
。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。
2、减少或消除 XML 配置
。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。
3、类型安全和重构友好
。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。
Q:什么是YAML?
YAML是一种人类可读的数据序列化语言。它通常用于配置文件
。
与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置
数据
。
Q:bootstrap.yml和application.yml有什么区别?
1、Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap,另外一种是 application。
2、application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置
。
3、bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton
。
4、bootstrap 主要用于从额外的资源来加载配置信息
,还可以在本地外部配置文件中解密属性。
5、这两个上下文共用一个环境
,它是任何Spring应用程序的外部属性的来源。
6、bootstrap 里面的属性会优先加载
,它们默认也不能被本地相同配置覆盖。
7、boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载
8、boostrap 里面的属性不能被覆盖
Q:springboot常用的starter有哪些?
1、spring-boot-starter-web
(嵌入tomcat和web开发需要servlet与jsp支持)
2、spring-boot-starter-data-jpa
(数据库支持)
3、spring-boot-starter-data-redis
(redis数据库支持)
4、spring-boot-starter-data-solr
(solr搜索应用框架支持)
5、mybatis-spring-boot-starter
(第三方的mybatis集成starter)
Q:Spring Boot 配置加载顺序?
1、properties文件
2、YAML文件
3、系统环境变量
4、命令行参数
还有更多面试专题及java资料、笔记等可以添加微信:YDT939免费获取
Q:如何使用Spring Boot实现异常处理?
SpringControllerAdvice
提供了一种使用处理异常的非常有用的方法。通过实现一个 ControllerAdvice
类,来处理控制器类抛出的所有异常。
Q: 如何重新加载 Spring Boot上的更改,而无需重新启动服务器?
使用DEV工具来实现。
通过这种依赖关系,可以节省任何更改,嵌入式 tomcat将重新启动。
使用Spring Boot有一个开发工具Dev Tools
模块,可以重新加载 Spring Boot上的更改,而无需重新启动服务器。消除每次手动部署更改的需要。Spring Boot在发布它的第一个版本时没有这个功能。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。
Q:Spring Boot中的监视器是什么?
Spring boot actuatorspring
是启动框架中的重要功能之一。Spring boot监视器可访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 http url rest
访问的REST端点来检查状态。
Q:如何在自定义端口上运行 Spring Boot应用程序?
在 application.properties
中指定端口serverport=8090
。
Q:Spring Boot监听器流程?
1、通过app.addListeners
注册进入
2、初始化一个SpringApplicationRunListeners
进行处理
3、从spring.factories
中读取监听器处理类EventPublishingRunListener
4、通过createSpringFactoriesInstances
创建监听器处理类实例
5、调用监听器listeners.starting()
的方法来启动。
6、底层把事件处理交给线程池
去处理
Q:Spring Boot初始化环境变量流程?
1、调用prepareEnvironment
方法去设置环境变量
2、接下来有三个方法getOrCreateEnvironment
,configureEnvironment
,environmentPrepared
3、getOrCreateEnvironment
去初始化系统环境变量
4、configureEnvironment
去初始化命令行参数
5、environmentPrepared
当广播到来的时候调用onApplicationEnvironmentPreparedEvent
方法去使用postProcessEnvironment
方法load yml
和properties变量
Q:Spring Boot扫描流程?
1、调用run方法中的refreshContext
方法
2、用AbstractApplicationContext中的refresh
方法
3、委托给invokeBeanFactoryPostProcessors
去处理调用链
4、其中一个方法postProcessBeanDefinitionRegistry会
去调用processConfigBeanDefinitions
解析beandefinitions
5、在processConfigBeanDefinitions
中有一个parse
方法,其中有componentScanParser.parse
的方法,这个方法会扫描当前路径下所有Component
组件
Q:如何在 Spring Boot中禁用 Actuator端点安全性?
默认情况下,所有敏感的HTTP端点都是安全的,只有具有 http ACTUATOR
角色的用户才能访问它们。安全性是使用标准的 httpservletrequest. isuserinrole..isusernrole
方法实施的。可以使用 management. security. enabled= false
来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。
Q:如何实现 Spring Boot应用程序的安全性?
使用 spring--startersecurityboot
--依赖项,并且必须添加安全配置。配置类将必须扩展 WebSecurityConfigurerAdapter
并覆盖其方法。
Q:什么是 Spring Batch?
Spring Boot Batch
提供可重用的函数,这些函数在处理大量记录时非常重要;包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩展的方式利用框架处理重要大量的信息。
Q:Spring Boot 有哪几种读取配置的方式?
-
@PropertySource
-
@Value
-
@Environment
-
@ConfigurationPropertie
今天写的这篇主要总结了SpringBoot相关的问题。还有更多面试专题及java资料、笔记等可以添加微信:YDT676免费获取
Q:什么是SpringBoot?
用来简化spring应用的初始搭建以及开发过程,使用特定的方式来进行配置(properties
或yml
文件)创建独立的spring引用程序 main方法运行,嵌入的Tomcat 无需部署war文件,简化maven配置,自动配置spring添加对应功能starter自动化配置。
Q: Spring Boot、Spring MVC 和 Spring 有什么区别?
1、SpringSpring最重要的特征是依赖注入。所有 SpringModules
不是依赖注入就是 IOC 控制反转。当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。
2、Spring MVC提供了一种分离式的方法来开发 Web 应用。通过运用像DispatcherServelet
,MoudlAndView
和ViewResolver
等一些简单的概念,开发 Web 应用将会变的非常简单。
3、Spring 和 SpringMVC 的问题在于需要配置大量的参数。
4、Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。
Q:Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
1、@SpringBootConfiguration
:组合了 @Configuration 注解,实现配置文件的功能。
2、@EnableAutoConfiguration
:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能。
3、@ComponentScan
:Spring组件扫描。
Q:什么是 JavaConfig?
1、面向对象的配置
。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。
2、减少或消除 XML 配置
。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在
XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring
容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML
混合匹配是理想的。
3、类型安全和重构友好
。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。
Q:什么是YAML?
YAML是一种人类可读的数据序列化语言。它通常用于配置文件
。
与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置
数据
。
Q:bootstrap.yml和application.yml有什么区别?
1、Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap,另外一种是 application。
2、application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置
。
3、bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton
。
4、bootstrap 主要用于从额外的资源来加载配置信息
,还可以在本地外部配置文件中解密属性。
5、这两个上下文共用一个环境
,它是任何Spring应用程序的外部属性的来源。
6、bootstrap 里面的属性会优先加载
,它们默认也不能被本地相同配置覆盖。
7、boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载
8、boostrap 里面的属性不能被覆盖
Q:springboot常用的starter有哪些?
1、spring-boot-starter-web
(嵌入tomcat和web开发需要servlet与jsp支持)
2、spring-boot-starter-data-jpa
(数据库支持)
3、spring-boot-starter-data-redis
(redis数据库支持)
4、spring-boot-starter-data-solr
(solr搜索应用框架支持)
5、mybatis-spring-boot-starter
(第三方的mybatis集成starter)
Q:Spring Boot 配置加载顺序?
1、properties文件
2、YAML文件
3、系统环境变量
4、命令行参数
还有更多面试专题及java资料、笔记等可以添加微信:YDT676免费获取
Q:如何使用Spring Boot实现异常处理?
SpringControllerAdvice
提供了一种使用处理异常的非常有用的方法。通过实现一个 ControllerAdvice
类,来处理控制器类抛出的所有异常。
Q: 如何重新加载 Spring Boot上的更改,而无需重新启动服务器?
使用DEV工具来实现。
通过这种依赖关系,可以节省任何更改,嵌入式 tomcat将重新启动。
使用Spring Boot有一个开发工具Dev Tools
模块,可以重新加载 Spring Boot上的更改,而无需重新启动服务器。消除每次手动部署更改的需要。Spring Boot在发布它的第一个版本时没有这个功能。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。
Q:Spring Boot中的监视器是什么?
Spring boot actuatorspring
是启动框架中的重要功能之一。Spring boot监视器可访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 http url rest
访问的REST端点来检查状态。
Q:如何在自定义端口上运行 Spring Boot应用程序?
在 application.properties
中指定端口serverport=8090
。
Q:Spring Boot监听器流程?
1、通过app.addListeners
注册进入
2、初始化一个SpringApplicationRunListeners
进行处理
3、从spring.factories
中读取监听器处理类EventPublishingRunListener
4、通过createSpringFactoriesInstances
创建监听器处理类实例
5、调用监听器listeners.starting()
的方法来启动。
6、底层把事件处理交给线程池
去处理
Q:Spring Boot初始化环境变量流程?
1、调用prepareEnvironment
方法去设置环境变量
2、接下来有三个方法getOrCreateEnvironment
,configureEnvironment
,environmentPrepared
3、getOrCreateEnvironment
去初始化系统环境变量
4、configureEnvironment
去初始化命令行参数
5、environmentPrepared
当广播到来的时候调用onApplicationEnvironmentPreparedEvent
方法去使用postProcessEnvironment
方法load yml
和properties变量
Q:Spring Boot扫描流程?
1、调用run方法中的refreshContext
方法
2、用AbstractApplicationContext中的refresh
方法
3、委托给invokeBeanFactoryPostProcessors
去处理调用链
4、其中一个方法postProcessBeanDefinitionRegistry会
去调用processConfigBeanDefinitions
解析beandefinitions
5、在processConfigBeanDefinitions
中有一个parse
方法,其中有componentScanParser.parse
的方法,这个方法会扫描当前路径下所有Component
组件
Q:如何在 Spring Boot中禁用 Actuator端点安全性?
默认情况下,所有敏感的HTTP端点都是安全的,只有具有 http ACTUATOR
角色的用户才能访问它们。安全性是使用标准的 httpservletrequest. isuserinrole..isusernrole
方法实施的。可以使用 management. security. enabled= false
来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。
Q:如何实现 Spring Boot应用程序的安全性?
使用 spring--startersecurityboot
--依赖项,并且必须添加安全配置。配置类将必须扩展 WebSecurityConfigurerAdapter
并覆盖其方法。
Q:什么是 Spring Batch?
Spring Boot Batch
提供可重用的函数,这些函数在处理大量记录时非常重要;包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩展的方式利用框架处理重要大量的信息。
Q:Spring Boot 有哪几种读取配置的方式?
-
@PropertySource
-
@Value
-
@Environment
-
@ConfigurationPropertie