1.什么是Springboot?
Springboot是Spring开源组织的子项目,是Spring组件一站式解决方案;
主要是简化了Spring的开发难度,减少了繁杂的配置,提供了各种启动器,使开发者快速上手。
2.为什么要用Springboot?
快速开发、快速整合、配置简化、内嵌服务容器。
3.Springboot和Springcloud的区别?
Springboot是快速开发的Spring框架;
Springcloud是完整的微服务框架;
Springcloud是一系列框架的集合,将各个有效的、经过考验的框架集合起来,借助Springboot的开发风格再封装,屏蔽了复杂配置和实现原理,为开发者提供简单易懂的开发工具包。
4.Springboot有哪些优点?
编码简单、配置简单、部署简单、监控简单
快速开发、快速整合、简化配置、内嵌服务容器。
5.Springboot的核心注解?
@SpringbootApplication包含:@SpringbootConfiguration、@ComponentScan、@EnableAutoConfigurantion。
6.Springboot支持的日志框架?
Java util Logging、Log4j2、Logback(默认)。
7.Springboot Starter的工作原理?
(1)Springboot在启动时会去依赖的Starter包中读取/META-INF/spring.factories文件
(2)根据spring.factories配置加载AutoConfigure类
(3)根据@Conditional注解的条件,将符合条件的Bean注入IOC容器,进行自动装配。
8.Springboot2.x新特性?
(1)JDK版本升级:基于1.8,支持1.9
(2)支持HTTP/2
(3)响应式Spring编程支持:响应式编程是完全异步和非阻塞的,基于事件驱动模型而非传统的线程模型。
9.Springboot支持的前端框架
Thymeleaf、Freemarker
10.Springboot的缺点?
硬要说的话就是不用自己的配置,报错难以定位。
11.运行Springboot有几种方式?
(1)直接执行main()方法运行
(2)通过命令行 java -jar方式
(3)使用插件:Maven
12.Springboot需要独立容器运行么?
可以不用,内嵌了Tomcat和Jetty等容器
13.开启Springboot特性有几种方式?
(1)继承spring-boot-starter-parent项目
(2)导入spring-boot-dependencies项目依赖。
14.Springboot热部署的方式?
热部署就是不必重新运行Springboot项目,实现代码自动更新到正在运行的项目中
使用spring-boot-devtools,在pom文件中导入依赖。
15.Springboot事务的使用?
(1)在启动类上加@EnableTransactionManagement注解,开启事务支持(默认已加)
(2)在使用事务的public方法加@Transactional注解。
16.Async异步调用方法?
在Springboot中使用异步调用很简单,只需要在方法上添加@Async注解,在启动类上添加@EnableAsync注解即可。
17.如何在Springboot启动时运行特定的代码?
启动类可以实现接口ApplicationRunner或者CommandLineRunner,两个接口的实现方式一样,都只提供了一个run()方法。
18.Springboot有哪几种读取配置的方式?
(1)@Value
(2)@ConfigurationProperties
(3)@PropertySource
(4)Environment
(5)传统的Properties对象
19.什么是JavaConfig?
Spring 3.0引入,提供了配置Spring IOC容器的纯Java方法,避免使用xml配置。
20.Springboot自动装配原理?
21.Springboot配置的方式?
(1).properties文件
(2).yml文件
(3)系统环境变量
(4)命令行参数
22.什么是yaml?
是一种可读的数据序列化语言,通常用于配置文件,更加结构化、分层配置数据。
23.yaml的配置优势?
配置有序、简洁明了
缺点是不支持通过@PropertySource导入自定义的yml配置。
24.Springboot是否可用xml配置?
推荐使用注解配置而非xml
但也可以通过@ImportResource注解导入xml配置。
25.Springboot的核心配置文件是什么?
(1)application.properties:是应用级别的配置文件,是当前应用程序的配置文件
(2)bootstrap.properties:是系统级别的配置文件,加载外部配置,优先级高于application.properties。
26.什么是Spring Profiles?
在项目开发中,有些配置文件在开发、测试、生产等不同环境中可能是不同的,如数据库连接、redis配置等,Profiles提供了来回切换配置文件的功能
spring.profiles.active: dev
27.Springboot多数据源的拆分思路?
先在properties配置文件中配置好两个数据源,
创建分包mapper,
使用@ConfigurationProperties注解读取properties中的配置,
使用@MapperScan注解注册到对应的mapper包中。
28.Springboot多数据源事务如何处理?
(1)方法上添加@Transcational注解,进行事务管理,指定事务管理器
(2)使用jta-atomikos实现分布式事务管理,需在pom中添加依赖。
29.保护Springboot应用程序的方法?
(1)在生产中使用HTTPS
(2)使用snyk检查依赖关系
(3)升级到最新版本
(4)启用CSRF保护
CSRF攻击:是一种跨站点请求伪造攻击,它迫使用户在当前登录的应用程序中执行不需要的操作。
30.如何实现Springboot应用程序的安全性?
使用spring-boot-starter-security依赖项,并且必须添加安全配置
配置类必须扩展WebSecurityConfigurerAdapter,并覆盖其方法。
31.比较一下Spring Security和Shiro的区别?
如果是Springboot项目,一般使用SpringSecurity,提供了该Starter
(1)Spring Security属于重量级安全管理框架
(2)Spring Security概念复杂,配置繁琐
(3)Spring Security功能更强大
32.Springboot如何解决跨域问题?
CORS:跨域资源共享
实现WebMvcConfigurer接口,重写其中的addCorsMappings()方法
33.Springboot的监视器是什么?
Actuator:实现对应用程序运行情况的监控
Actuator的核心是端点,可实现健康状况、审计、统计、HTTP追踪、Bean加载、日志信息、线程信息的监控治理。
34.如何使用Springboot实现全局异常处理?
使用注解@ControllerAdvice + @ExceptionHandler
可以捕获Controller抛出的指定类型异常。
36.Springboot性能如何优化?
(1)优化注解@SpringbootApplication:==>@SpringbootConfiguration+@EnableAutoConfiguration+在需要的Bean上进行显式配置
(2)将Servlet容器由Tomcat替换为Undertow
(3)JVM调优:主要是减少GC回收次数,可以加大初始堆和最大堆内存。
37.热部署
使用devtools
38.Springboot微服务如何实现Session共享?
常见的方案是Spring Session+Redis,将各个服务的Session保存到Redis中。
39.使用过哪些Starter Maven依赖项?
(1)spring-boot-starter-web
(2)spring-boot-starter-test
(3)spring-boot-starter-data-redis
(4)mybatis-plus-boot-starter
40.Springboot中的Starter是什么?
- overstackflow上有人做过总结:Springboot starter就像是启动器,这个启动器会自动依赖其他组件,一站式获取项目需要的与Spring有关的组件,不需要到处找示例代码或是复制相关依赖。
- 如果在项目中使用Spring+SpringMVC开发时,需要引入Mybatis框架,传统的需要在xml中定义需要的Bean对象,这一过程十分麻烦,而在Springboot中直接添加mybatis-spring-boot-starter依赖即可。
- 我认为Starter就是一个jar包,写一个@Configuration配置类,在其中定义需要的Bean,再在Starter包的resources/META-INF/spring.factories文件中写入该配置类,那么Springboot启动时就会按照约定来加载该配置类;开发者只需要在项目中添加这一Starter的依赖,进行相关的属性配置,就可以开始程序开发。
- 官方维护的Starter以spring-boot-starter为前缀,第三方维护的Starter以spring-boot-starter为后缀。
41.Springboot中如何实现定时服务?
(1)使用@Scheduled注解
(2)使用第三方框架Quartz
42.spring-boot-starter-parent的作用?
(1)统一定义配置:UTF-8编码、Java1.8版本
(2)统一依赖及版本号:继承spring-boot-dependencies,添加依赖时不需要写版本号。
43.Springboot如何实现打包?
Maven -clean --> package
44.Springboot打成的jar包和普通jar包的区别?
Springboot打成的jar包可以直接运行,用java -jar命令,但其不可被其他项目依赖;
普通jar包解压后就是包名,包内就是需要的代码,Springboot打成的jar包解压后在/BOOT-INF/classes目录下才是需要的代码。