最新SpringBoot面试题【附答案解析】SpringBoot面试题及答案,SpringBoot最新面试题及答案,SpringBoot面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。如果发现错误还望大家多多包涵,不吝赐教,谢谢~
如果不背 SpringBoot面试题的答案,肯定面试会挂!
SpringBoot 在启动的时候会干这几件事情:
**1、**SpringBoot 在启动时会去依赖的 Starter 包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包。
**2、**根据 spring.factories 配置加载 AutoConfigure 类
**3、**根据@Conditional?注解的条件,进行自动配置并将 Bean 注入 Spring Context
总结一下,其实就是 SpringBoot 在启动的时候,按照约定去读取 SpringBoot Starter 的配置信息,再根据配置信息对资源进行初始化,并注入到 Spring 容器中。这样 SpringBoot 启动完毕后,就已经准备好了一切资源,使用过程中直接注入对应 Bean 资源即可。
这只是简单的三连环问答,不知道有多少同学能够完整的回答出来。
其实 SpringBoot 中有很多的技术点可以挖掘,今天给大家整理了十个高频 SpringBoot 面试题,希望可以在后期的面试中帮助到大家。
SpringBoot 的核心配置文件是 application 和 bootstrap 配置文件。
application 配置文件这个容易理解,主要用于 SpringBoot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景。
使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
一些固定的不能被覆盖的属性;
一些加密/解密的场景;
**1、**Spring框架就像一个家族,有众多衍生产品,例如boot、mvc、jpa等等。但他们的基础都是Spring的ioc、aop。ioc提供了依赖注入的容器,aop解决了面向横切面编程,然后在此两者的基础上实现了其它延伸产品的高级功能;
**2、**springMVC是基于Servlet的一个MVC框架主要解决WEB开发的问题;
**3、**为了简化开发的使用,从而创造性地推出了SpringBoot框架,默认优于配置
启动类上面的注解是@SpringBootApplication,它也是SpringBoot的核心注解,主要组合包含了以下3个注解:
1、@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能。
2、@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
3、@ComponentScan:Spring组件扫描
由jar包外向jar包内进行寻找;
优先加载带profile
jar包外部的application-{profile}.properties或application.yml(带spring.profile配置文件
jar包内部的application-{profile}.properties或application.yml(带spring.profile配置文件
再来加载不带profile
jar包外部的application.properties或application.yml(不带spring.profile配置文件
jar包内部的application.properties或application.yml(不带spring.profile配置文件
在源文件夹下,创建一个名为 static 的文件夹。然后,你可以把你的静态的内容放在这里面。
例如,myapp.js 的路径是 resourcesstaticjsmyapp.js
你可以参考它在 jsp 中的使用方法:
错误:HAL browser gives me unauthorized error - Full authenticaition is required to access this resource.
该如何来修复这个错误呢?
两种方法:
方法 1:关闭安全验证
application.properties
management.security.enabled:FALSE
方法二:在日志中搜索密码并传递至请求标头中
在 SpringBoot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的@Scheduled?注解,另一-个则是使用第三方框架 Quartz。
使用 Spring 中的@Scheduled?的方式主要通过@Scheduled?注解来实现。
默认情况下,所有敏感的HTTP端点都是安全的,只有具有ACTUATOR角色的用户才能访问它们。
安全性是使用标准的HttpServletRequest.isUserInRole方法实施的。 我们可以使用management.security.enabled = false 来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。
如何在自定义端口上运行SpringBoot应用程序? 为了在自定义端口上运行SpringBoot应用程序,您可以在application.properties中指定端口。 server.port = 8090
在SpringBoot中使用异步调用是很简单的,只需要在方法上使用@Async注解即可实现方法的异步调用。 注意:需要在启动类加入@EnableAsync使异步调用@Async注解生效。
Spring 和 SpringMVC 的问题在于需要配置大量的参数。
我们能否带来更多的智能?当一个 MVC JAR 添加到应用程序中的时候,我们能否自动配置一些 beans?
Spring 查看(CLASSPATH 上可用的框架)已存在的应用程序的配置。在此基础上,SpringBoot 提供了配置应用程序和框架所需要的基本配置。这就是自动配置。
因为 SpringBoot 是自动配置的。
下面是我们添加的依赖项:
spring-boot-stater-data-jpa 对于 Hibernate 和 JPA 有过渡依赖性。
当 SpringBoot 在类路径中检测到 Hibernate 中,将会自动配置它为默认的 JPA 实现。
启动类上面的注解是@SpringBootApplication,它也是 SpringBoot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了@Configuration?注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:
@SpringBootApplication(exclude?= { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
WebSocket 是一种计算机通信协议,通过单个 TCP 连接提供全双工通信信道。
**1、**WebSocket 是双向的 -使用 WebSocket 客户端或服务器可以发起消息发送。
**2、**WebSocket 是全双工的 -客户端和服务器通信是相互独立的。
**3、**单个 TCP 连接 -初始连接使用 HTTP,然后将此连接升级到基于套接字的连接。然后这个单一连接用于所有未来的通信
**4、**Light -与 http 相比,WebSocket 消息数据交换要轻得多。
打包用命令或者放到容器中运行
用 Maven/ Gradle 插件运行
直接执行 main 方法运行
关机是允许应用程序正常关机的端点。默认情况下,此功能不启用。你可以在应用程序属性文件中使用management . endpoint . shut down . enabled = true来启用此选项。但是该方法请谨慎使用。
SpringBoot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及 50 个应用程序的微服务,管理员将不得不击中所有 50 个应用程序的执行终端。为了帮助我们处理这种情况,我们将使用位于的开源项目。它建立在 SpringBoot Actuator 之上,它提供了一个 Web UI,使我们能够可视化多个应用程序的度量。
使用SpringBoot实现分页非常简单。使用Spring Data-JPA可以实现将可分页的
传递给存储库方法。
1、面向对象的配置
。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean?方法等。
2、减少或消除 XML 配置
。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。
3、类型安全和重构友好
。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。
为了实现SpringBoot的安全性,我们使用 spring-boot-starter-security依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。
由于 SpringBoot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 SpringBoot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 SpringBoot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:
Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
Spring Security 功能强大;Shiro 功能简单
跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 SpringBoot 特有的,在传统的 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); } }
对于集成 SpringBoot 和 ActiveMQ,我们使用依赖关系。它只需要很少的配置,并且不需要样板代码。
Apache Kafka 是一个分布式发布 - 订阅消息系统。它是一个可扩展的,容错的发布 - 订阅消息系统,它使我们能够构建分布式应用程序。这是一个 Apache 顶级项目。Kafka 适合离线和在线消息消费。
我们都知道,新创建一个 SpringBoot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:
**1、**定义了 Java 编译版本为 1、8 。
**2、**使用 UTF-8 格式编码。
**3、**继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
**4、**执行打包操作的配置。
**5、**自动化的资源过滤。
**6、**自动化的插件配置。
**7、**针对 application、properties 和 application、yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev、properties 和 application-dev、yml。
总结就是打包用的
SpringBoot是快速开发的Spring框架,SpringCloud是完整的微服务框架,SpringCloud依赖于SpringBoot。
首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter
**1、**通过app.addListeners
注册进入 2、初始化一个SpringApplicationRunListeners
进行处理
**3、**从spring.factories
中读取监听器处理类EventPublishingRunListener
**4、**通过createSpringFactoriesInstances
创建监听器处理类实例
**5、**调用监听器listeners.starting()
的方法来启动。
**6、**底层把事件处理交给线程池
去处理
SpringBoot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,SpringBoot 将使用 Logback 作为默认日志框架
多年来,随着新功能的增加,spring变得越来越复杂。只需访问https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同功能。如果必须启动一个新的Spring项目,我们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加spring配置。因此,开始一个新的spring项目需要很多努力,因为我们现在必须从头开始做所有事情。
SpringBoot是解决这个问题的方法。SpringBoot已经建立在现有spring框架之上。使用spring启动,我们避免了之前我们必须做的所有样板代码和配置。因此,SpringBoot可以帮助我们以最少的工作量,更加健壮地使用现有的Spring功能。
**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
03、SpringBoot 2.X 有什么新特性?与 1.X 有什么区别?
05、RequestMapping 和 GetMapping 的不同之处在哪里?
11、如何不通过任何配置来选择 Hibernate 作为 JPA 的默认实现?
12、SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?
15、什么是执行器停机?
20、比较一下 Spring Security 和 Shiro 各自的优缺点 ?
21、SpringBoot Starter 的工作原理是什么?
22、SpringBoot 的核心配置文件有哪几个?它们的区别是什么?
23、Spring、SpringBoot、SpringMVC的区别?
24、SpringBoot的核心注解是哪个?它主要由哪几个注解组成的?
26、如何在 SpringBoot 中添加通用的 JS 代码?
08、如何在SpringBoot中禁用Actuator端点安全性?
29、Async异步调用方法
30、什么是自动配置?
31、如何不通过任何配置来选择 Hibernate 作为 JPA 的默认实现?
32、SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?
35、什么是执行器停机?
40、比较一下 Spring Security 和 Shiro 各自的优缺点 ?
43、SpringBoot 支持哪些日志框架?推荐和默认的日志框架是哪个?
45、为什么我们需要 spring-boot-maven-plugin?
46、比较一下 Spring Security 和 Shiro 各自的优缺点 ?
48、SpringBoot 2.X 有什么新特性?与 1.X 有什么区别?
51、使用 SpringBoot 启动连接到内存数据库 H2 的 JPA 应用程序需要哪些依赖项?
52、SpringBoot 中的 starter 到底是什么 ?
53、SpringBoot 可以兼容老 Spring 项目吗,如何做?
54、SpringBoot 的核心配置文件有哪几个?它们的区别是什么?
55、spring boot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何区别 ?
58、如何在 SpringBoot 启动的时候运行一些特定的代码?
如果不背 SpringBoot面试题的答案,肯定面试会挂!