1.什么是Spring?
宏观上来说,是Spring帮我们构建的整个生态圈。
微观上来说,就是我们平时所说的SSM中的Spring框架,在官网中就是Spring FrameWork框架
2.什么是Spring Boot?
Spring Boot是一个高层框架,它的底层就是我们的Spring Framework,帮我们整合整个地Spring开发技术栈,使我们免于写那么多繁重的配置,无需掌握怎么将这些技术配置整合到一起,总结起来就是一句话:约定大于配置。
3.Spring Boot的优点?
创建独立的Spring应用。内嵌web服务器(可以嵌入服务器,不需要打包为war包)。自动stater依赖,简化构建配置。自动配置Spring以及第三方功能。提供生产级别的监控,健康检测以及外部化配置。无代码生成,无需编写SML。
4.Spring Boot的缺点?
人称版本帝,迭代快,需要时刻关注变化。封装太深,内部原理复杂,不容易精通。
5.什么是微服务?
微服务是一种架构风格,一个应用拆分为一组小型服务,每个服务运行在自己的进程内,也就是可独立部署和升级。各个服务之间使用轻量级HTTP交互,服务围绕业务功能进行拆分,可以由全自动部署机制独立部署,服务自治。服务之间可以使用不同的语言、不同的存储技术。
6.Spring Boot两大特性?
依赖管理、自动配置
7.什么是场景启动器?
场景启动器Stater是一组依赖的集合描述,在我们的项目中,无需关注各种依赖,只需要导入一个场景启动器即可。Spring Boot官方提供的场景启动器命名为:spring-boot-stater-xxx。第三方提供的场景启动器命名为:xxx-spring-boot-stater。
8.Spring Boot 2.0基于Spring 5.2以后,@Configuration注解多了一个属性proxyBeanMethods,京简单介绍它的作用
Full(全配置):proxyBeanMethods = true
容器中会保存有一个配置类的代理对象,每次调用配置类方法,都会去容器中来获取具体的组件对象
Lite(轻量级配置):proxyBeanMethods = false
容器中不会保存配置类的代理对象,每次调用配置类方法,都会重新创建一个新的对象
9.Full模式和Lite模式各自的使用场景?
如果我们编写的容器中的组件,并没有依赖于别的组件,那就可以使用Lite模式进行配置,这样项目启动加载速度都会提高。
如果我们编写的容器中的组件,依赖于其他组件,我们就用Full模式进行配置,因为这样才能保证对象依赖的是容器中的组件,而不是每次调用方法,对象所以来的组件就由重新创建一个。
10.Lite轻量级模式的优点?
Spring Boot会跳过检查容器中有没有该组件对象,加快项目的运行速度。如果是全模式,外部每次调用方法,Spring Boot都回来检查容器中对象,消耗项目运行时间。
11.Spring Boot中bean的注册顺序?
在Spring Ioc的过程中,优先解析@Component,@Service,@Controller注解的类。
其次解析配置类,也就是@Configuration标注的类。
最后开始解析配置类中定义的bean。
12.我们使用SpringBoot开发某个场景,比如web场景,只需要使用web场景启动器即可。其他场景的组件并不会被添加到容器中,Spring Boot是如何做到的?
使用条件装配@Conditional注解,SpringBoot底层有大量的@Conditional的子类来进行各条件判断,比如通过判断项目中是否导入了场景启动器中的某些类,如果导入了,就让当前场景的所有组件生效,添加到IOC中,其他没有导入场景启动器的场景下的组件就不会生效。
13.是不是所有函数式接口,在new内部类时都可以使用lombda表达式?
不是。
lambda表达式虽然也是一种语法糖,但它和匿名内部类还是不同的,lambda编译后不会生成class文件,也就略过了类的加载,验证,解析等。相当于是在运行时再进行响应的操作,因此,在Spring注入过程中,注入含确定类型的入参和出参方法的实现类,会出现无法确定类型的bug,导致注入失败。从而SpringBoot启动失败。所以在Spring注入过程中是不能使用lambda表达式来代替内部类的。
14.简单说说什么是Rest?Resfful风格请求?
rest:(representational state transfer)表述性状态转移,是一种架构风格。
restful:遵守了rest原则的web服务,restful是由rest派生的。
之前编写请求路径是:/user/add,每次请求都需要做add等描述
使用restful风格的请求路径是:/user;指定get方法,为获取用户等,这样就没有必要做描述了。
15.Rest架构请求的优点?
1.前后端分离,减少流量
2.安全问题集中在接口上,由于接收json和格式,防止了注入型等安全问题
3.前后端无关化,后端只负责数据处理,前端表现方式可以是任何形式的语言
4.前端和后端人员更加专注各自的开发,只需要接口文档便可以完成交互,无需过多了解
5.服务器性能优化;由于前端是静态页面,通过nginx便可以获取,服务器主要压力放在了接口上
16.Thymeleaf模板引擎优缺点?
优点:面向后端开发人员,语法非常简单,非常贴近jsp,上手非常快
缺点:并不是一个高性能的模板引擎,如果要做一个高并发,最好还是前后端分离的项目,还是让前端人员去开发页面,或者要开发一个后端的能处理高并发的,那么最好还是选取其他的模板引擎。如果项目只是一个简单的单体应用,那么可以来使用它。
17.Filter,Interceptor几乎拥有相同的功能,它们各自有什么好处?
Filter是Servlet定义的原生组件,好处是:脱离Spring应用也可以使用
Interceptor是Spring定义的接口,可以使用Spring的自动装配等功能
18.Spring Boot在多环境下是如何加载多个配置文件中的配置?
SpringBoot默认加载application配置文件,如果application配置文件中激活了其他环境,那么application配置文件和激活的配置文件都会被加载,如果两者中有同名配置项,那么以激活的配置文件为主。