面试记录-Springboot

203 阅读10分钟

1、什么是Spring Boot

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

2、为什么要用SpringBoot

快速开发、快速整合、配置简化、内嵌服务容器

3、SpringBoot与SpringCloud区别

SpringBoot是快速开发的Spring框架,SpringCloud是完整的微服务框架,SpringCloud依赖于SpringBoot。

4、SpringBoot有哪些优点

(1)容易上手,提升开发效率,为Spring开发提供了一个更快,更简单的开发框架。

(2)开箱即用,远离繁琐的配置。

(3)提供了一系列大型项目通用的非业务性功能;如:内嵌服务器,安全管理,运行数据监控,运行状况检查和外部化配置

(4)SpringBoot总结就是使编码、配置、部署、监控变的简单等

5、SpringBoot的核心注解是哪个?主要由那几个注解组成

启动类上面的注解是@SpringBootApplication,他也是SpringBoot的核心注解。

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

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

@ComponentScan:Spring组件扫描。

6、SpringBoot支持哪些日志框架,推荐和默认的日志框架是哪个

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

7、Springboot Starter工作工作原理

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

8、Springboot 2.X有什么新特性,与1.X有什么区别

Springboot2 基于Spring5和Jdk8

配置变更,参数名等

Springboot2相关的插件最低版本很多都比原来搞

2.X配置中的中文可以直接读取,不用转码

CacheManage变化

9、Springboot支持什么前端模板

thymeleaf,freemarker,jsp,官方不推荐jsp

10、Springboot缺点

难为人,由于不用自己做的配置,报错难定位

11、运行SpringBoot有哪几种方式

打包用命令或者放到容器中运行

用Maven/Gradle插件运行

直接执行main方法运行

12、Springboot需要独立的容器运行?

可以不需要,内置了Tomcat/Jetty

13、开启Springboot特性有哪几种方式

集成spring-boot-starter-parent项目

导入spring-boot-dependencies项目依赖

14、Springboot实现热部署有哪几种方式

热部署就是可以不用重新运行Springboot项目,可以实现操作后台代码自动更新到已运行的项目中。

Spring Loaded。Spring-boot-devtools。

15、Springboot事务的使用

Springboot的事务很简单,首先使用注解@EnableTransactionManagement开启事务之后,然后在Service方法上注解@Transactional即可。

16、Async异步调用方法

异步调用主需要在方法上使用@Async注解即可实现异步调用。注意:需要在类加入@EnableAsync使用异步调用@Async注解生效

17、如何在Springboot启动时运行特定代码

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

18、SpringBoot有哪几种读取配置文件的方式

可以通过@PropertySeource,@Value,@Environment,@ConfiguraitonProperties注解来绑定变量

19、什么是JavaConfig

Spring JavaConfig是Spring社区产品,Spring3.0引入,它提供了配置SpringIOC容器的纯java方法。因此它有助于避免使用XML配置。优点在于:

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

减少或消除XML配置:基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在XML和java之间来回切换。JavaConfig为开发人员提供了一种纯java方法来配置与XML配置概念相似的Spring容器。

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

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

常见的JavaConfig:

@Configuration:类上打上此标记,表示类是配置类。

@ComponentScan:在配置 类上了添加@ComponentScan注解。该注解默认会扫描该类所在包下所有的配置列,相当于context:component-scan

@Bean:bean的注入,相当于以前的

@EnableWebMvc:相当于xml的mvc:annotation-driven

@ImportResource:相当于xml的

20、SpringBoot的自动装配是什么原理

主要是SpringBoot的启动类上的核心注解SpringBootApplication注解主配置类,有了这个主配置类启动时就会为SpringBoot开启一个@EnableAutoConfiguration注解自动配置功能。

有了这个@EnableAutoConfiguration的话就会:

(1)从配置文件META_INF/Spring.factories加载可能用到的自动装配类。

(2)去重,并将exclude和excludeName属性携带的类去除。

(3)过滤,将满足条件(@Conditional)的自动配置类返回。

21、如何理解SpringBoot配置加载顺序

在Springboot里面可以使用以下几种方式加载配置;properties文件,YAML文件,系统环境变量,命令行参数,等等

22、什么是YAML文件

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

23、YAML配置的优势在哪里

YAML现在可以算是一种非常流行的配置文件格式了,无论前端,后端都可以见到。优势点如下:

配置有序,在一些特殊场景中,配置有序很关键

简洁明了,他还支持数组,数组中的元素可以是基本数据类型也可以是对象

相比properties配置文件,YAML还有个缺点,就是不支持@PropertyResource注解导入自定义的YAML配置。

24、SpringBoot是否可以用xml配置

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

25、Springboot核心配置文件是什么?bootstrap.properties和application.properties有何区别

单纯做Springboot开发,可能不太容易遇到bootstrap.properties配置文件,但是在结合Spring cloud时会经常出现,特别是加载一些远程配置文件的时候。

springboot核心的两个配置文件:

bootstrap(.yml或者.properties):bootstrap由父接口ApplicationContext加载的,比application优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在SpringCloud配置就会使用这个文件。且BootStrap

中的文件不能被覆盖。

application(.yml或者.properties):由ApplicationContext记载,用于Springboot项目的自动配置。

26、什么是Spring Profiles

在项目开发中,有些配置文件在开发,测试,或者生产环境可能各不相同,如数据库链接,redis配置等等。Spring给我们提供了Profiles机制给我们提供的就是来回切换配置文件的功能。

Spring Profiles允许用户根据配置文件(dev,test,prod等等)来注册bean。Springboot使得使用配置文件非常简单。

27、SpringBoot多数据源拆分的思路

现在properties文件中配置两个数据源,创建分包Mapper,使用@ConfigurationPropertis读取properties中的配置,使用@MapperScan注册到对应的mapper包中。

28、SpringBoot多数据源事务如何管理

(1)在Service层的@TransactionManager中使用transactionManager指定DatasourceCOnfig中配置的事务。

(2)使用jta-atomikos实现分布式事务管理

29、如何实现SpringBoot的应用程序安全性

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

30、比较一下Spring Security和Shiro各自优缺点

由于Springboot提供了大量的开箱即用的starter,包括Security的Starter,使得使用Spring Security更加容易,甚至只需要添加一个依赖就可以保护所有的接口。所以如果是Springboot项目一般选择Spring Security。

Shiro和SpringSecurity相比,有如下特点:

SpringSecurity是一个重量级的安全管理框架;Shrio则是一个轻量级安全管理的框架。

SpringSecurity概念复杂,配置繁琐;Shiro概念简单,配置简单。

SpringSecurity功能强大,Shiro功能简单。

31、SpringBoot如何解决跨域

跨域在前端可以通过JSONNP来解决,但是JSONNP只可以发送get请求。因此后端推荐通过(CORS:Cross-origin resource sharing)来解决跨域问题。并非SPringBoot特有的,传统的SSH框架中,就可以通过CORS来解决跨域。

只不过之前在XML中配置,现在可以@Configuration注解,通过重写WebMvcConfigurer接口中的addCorsMappings方法来解决。、

32、SpringBoot中的监视器是什么

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

33、如何使用SpringBoot实现全局异常处理

SpringBoot提供了一种ControllerAdvice处理异常的非常有用的方法,通过实现一个ControllerAdvice类,处理控制器抛出的异常。

34、如何监视所有SpringBoot微服务

Springboot提供了监视端点已监控各个微服务的质量。这些端点对于获取应用程序的信息(如是否已启动)以及他们的组件(如数据库等)是否正常运行很有帮助。但是一个缺点是,必须单独打开应用程序的端点以了解其状态

或者健康状况。为了处理这种情况使用衣蛾写外部应用监控系统,如Promethesu,Graphite,datadog等。有webui

35、SpringBoot性能如何

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

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

将Springboot内置服务器由tomcat设置为undeertow.

36、如何重新加载Springboot更改,而无需重新启动服务器,如何热部署

Springboot有个开发工具(DevTools)模块,有助于提高开发人员的生产力。

37、Springboot微服务中如何实现session共享

在微服务中,一个完整的项目被拆分成多个不相同的独立服务,各个服务部署在独立的服务器上,各自的Session物理空间隔离。常见的方案就是SpringSession+redis来实现Session共享。将所有Session统一保存在redis中,所有读写操作

都基于redis操作。SpringSession基于Spring中的代理过滤器实现,使得Session的同步操作对开发人员而言是透明的,非常简便