面试题之SpringBoot
- 什么是SpringBoot?
SpringBoot是Spring开源阻止下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,简省了繁重的配置,提供了各种启动器,使开发者可以快速上手。
- 为什么要使用SpringBoot?
快速开发,快速整合,配置简单,内嵌服务容器
- SpringBoot有哪些有点?
- 容易上手,提成开发效率,简单开发。
- 开箱即用,简省繁琐配置
- 提供了一系列大型项目的非业务性功能。例如:内嵌服务器、运行数据监控、运行状况检查、和外部优化配置等
总结:编码简单、配置简单、部署简单、监控变简单
- SpringBoot核心注解是哪几个?
启动类上面的@SpringBootApplication,它也是SpringBoot的核心注解,包含了以下3个注解
- @SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能
- @EnableAutoConfiguration:打开自动配置的功能
- @ComponentScan:扫描组件
- SpringBoot Starter的工作原理
在SpringBoot启动时由@SpringBootApplication注解会自动去maven去读取每个starter中的spring.factories文件,该文件里面配置了所有需要被创建的bean,并且进行自动装配把bean注入Spring content中去
- SpringBoot2.x 与SpringBoot1.x有什么区别?
- 配置变更
- JDK版本升级
- 第三方类库升级
- 响应式Spring编程支持
- Http/2支持
- 配置属性绑定
- SprigBoot支持什么前端模板?
thymeleaf、freemarker、jsp
- 开启SpringBoot特性有哪几种方式?
- 集成Spring-boot-starter-parent项目
- 导入Spring-boot-dependencies项目依赖
- SpringBoot实现热部署有哪几种方式?
- Spring loaded
- Spring-boot-devtools
- SpringBoot事物怎么使用?
- 在SpringBoot启动类上面使用@EnableTransactionManagement 开启事物之后 在service方法上面使用@Transactional
- Aysnc 异步调用方法
在SpringBoot中使用异步调用是很简单,只需要在方法上使用@Async注解就可以实现方法的以部调用。需要开启@EnableAsync开启@Async才会生效。
- 如何在SpringBoot 启动的时候运行一些特定的代码?
可以实现接口ApplicationRunnher或者CommandLineRunner,然后在run方法执行特定操作,该类会在SpringBoot启动完成运行
- SpringBoot 有哪几种读取配置的方式?
SpringBoot可以通过@PropertySource,@Value,@Enviornment,@ConfigurationProperties注解来绑定变量。
- SpringBoot的自动配置原理是什么?
- 主要是SpringBoot的启动类上的核心注解@SpringBootApplication注解配置类,有了这个主配置类启动的时候就会为SpringBoot开启一个@EnableAutoConfiguration注解自动配置功能
有了这个@EnableAutoConfiguration 的话就会- 从配置文件META_INF/Spring.factories加载可能用到的自动配置类
- 去重,并将execulde和excludeName属性携带的类排除
- 过滤,将满足条件的自动配置类返回
- SpringBoot可以使用哪几种方式来加载配置?
- properties
- YAML文件
- 系统环境变量
- 命令行参数
还有更多方式
- 什么是YAML?
YAML是一种可读的序列化语言,通常用于配置文件,与属性文件相比,YAML更加结构化,更少混淆。
- YAML配置的优势有哪些?
- 配置有序
- 简单明了
- 相比properties配置文件,YAML还有一个缺点,不支持@PropertySource注解导入自定义的YAML配置
- SpringBoot是否可以使用XML配置?
是可以的,但是SpringBoot 推荐采用Java配置而且而非XML配置。
- Springboot 核心配置文件是什么?bootstrap.properties 和application.properties的区别
- bootstrap由父ApplicationContext加载的,比application优先加载,配置的应用程序上下文的引导阶段生效。一般来说在SpringCloud配置的时候会使用到这个文件
- application由ApplicationContext加载,用于SpringBoot项目的自动化配置
- SpringBoot多数据源拆分思路?
先在properties 配置文件中配置两个数据源,创建分包mapper,使用@ConfigurationProperties读取propeties中的配置,使用@MapperScan注册到对应的mapper中去
- SpringBoot多数据源事物如何管理?
- 第一种方式是在service层的@TransactionManager中使用transactionManager指定datasourceConfig配置的事物
- 第二种是使用ta-atomikos实现分布式事物管理
- 保护SpringBoot应用的方法有哪些?
- 生产种使用Https
- 使用snyk检查依赖关系
- 升级到最新版本
- 启动CRSF 保护
- 使用安全策略方式XSS攻击
- 如何实现SpringBoot应用程序的安全性?
使用spring-boot-starter-security依赖项,并且添加安全配置。配置类扩展WebSecurityConfigurerAdapter 并且覆盖
- 比较Spring security和Shiro的优缺点?
- security是一个重量级框架,shiro是个轻量级框架
- security 配置繁琐,shiro简单
- security功能强大 shiro功能简单
- SpringBoot种如何解决跨域问题?
跨域可以在前端通过JSONP来解决,但是只能解决GET请求。SpringBoot可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。
- SpringBoot中的监视器是什么?
SpringBoot actuator是spring启动框架中的重要功能之一,SpringBoot监视器可帮助访问生产环境的应用当前状态。
- 如何监听SpringBoot微服务?
SpringBoot提供监视器端点,以及监控各个微服务的度量,这些端点对于获取是否正常运行很有帮助。我们将使用SpringBoot Actuator之上,它提供了一个webui 使我们可监视多个应用程序的度量
- SpringBoot项目如何性能优化?
项目比较大就采用@Compoment指定扫描包范围
在项目启动时设置JVM初始化内存和最大内存相同
- SpringBoot 微服务中如何实现session共享?
使用Spring session+redis实现session共享
- SpringBoot中的starter到底是什么?
这份starter是基于spring来实现的,它提供一个自动化配置装配类。在这个配置中通过条件来决定一个配置是否生效。然后提供了一系列的默认配置,也可以开发者自定义配置