SpringBoot 面试题总结 (JavaGuide)
SpringBoot 面试题总结 (JavaGuide)
- SpringBoot 面试题总结 (JavaGuide)
-
-
- 1. 简单介绍一下 Spring啥缺点/li>
-
- (一)重量级框架
- (二)集成复杂
- (三)配置复杂
- (四)构建和部署复杂
- 2.为什么要有 SpringBoot/li>
- 3. 说出使用 Spring Boot 的主要优点
-
- ①良好的基因
- ②简化依赖
- ③简化配置
- ④简化部署
- ⑤简化监控
- 4. 什么是 Spring Boot Starters/li>
- 5. Spring Boot 支持哪些内嵌 Servlet 容器/li>
-
- 三种嵌入式servlet容器:tomcat(默认), jetty, undertow
- 6. 如何在 Spring Boot 应用程序中使用 Jetty 而不是 Tomcat/li>
- 7. 介绍?下@SpringBootApplication 注解
-
- 【1】@SpringBootConfiguration
- 【2】@EnableAutoConfiguration
- 【3】@ComponentScan
- 8. Spring Boot 的自动配置是如何实现的/li>
- 9. 开发 RESTful Web 服务常用的注解有哪些/li>
- 10. Spirng Boot 常用的两种配置文件
- 11. 什么是 YAMLAML 配置的优势在哪里/li>
- 12. Spring Boot 常用的读取配置文件的方法有哪些/li>
-
- 1、@Value方式获取
- 2、@ConfigurationProperties方式获取(强烈推荐)
- 3、Environment对象获取
- 4、@PropertySource方式获取
- 5、原生方式获取:加载配置文件,getProperty( )
- 13. Spring Boot 加载配置文件的优先级了解么/li>
-
- 1. 项目内部配置文件
- 2. 外部配置加载顺序
- 14. 常用的 Bean 映射工具有哪些/li>
- 15. Spring Boot 如何监控系统实际运行状况/li>
-
- Actuator( HTTP 端点 )
- JMX
- 16. Spring Boot 如何做请求参数校验/li>
-
- 第一步,引入依赖
- 第二步,定义要参数校验的实体类
- 还可以自定义参数校验
- 17. 如何使用Spring Boot 实现全局异常处理/li>
-
- @ControllerAdvice 注解和 @ExceptionHandler 注解
- 18. Spring Boot 中如何实现定时任务 /li>
-
- @Scheduled
- Quartz
-
1. 简单介绍一下 Spring啥缺点/h3>
(一)重量级框架
我们看到 Spring 架构图时会发现 Spring 里面包含有很多其他组件,比如数据访问、MVC、事务管理、面向切点、WebSocket 功能等,因此这么复杂的组件集中到一起就会提高初学者的学习成本。还有一方面随着你的服务越多,那么 Spring 的启动就会变得越慢。
(二)集成复杂
比如我们想要使用 MyBatis 或者 MongoDB的时候,我们要做很多工作不管使用配置方式也好还是使用注解方式。
(三)配置复杂
在使用 Spring 的时候,我们更多可能是选择 XML 进行配置,但目前这种配置方式已不在流行。
(四)构建和部署复杂
启动 Spring 的 IOC 容器,是完全要依赖于第三方的 web 服务器。自身不能启动的。
2.为什么要有 SpringBoot/h3>
? 分开来看Spring Boot 是由 Spring 和 Boot 构成,Spring 即 Spring 框架,换句话而言,Spring Boot 是基于 Spring框架进行构建,Boot 就是 BootStrap(牵引),就是以 Spring作为基础的牵引程序。
? Spring Boot 就是一个快速创建单个的、生产级别的基于Spring 的应用。而且是尽量使用少的依赖和少的配置完成。
? 从本质上来说,Spring Boot就是Spring,它做了哪些没有它你也会去做的Spring Bean的配置。
3. 说出使用 Spring Boot 的主要优点
①良好的基因
因为SpringBoot是伴随着Spring 4.0而生的,boot是引导的意思,也就是它的作用其实就是在于帮助开发者快速的搭建Spring框架,因此SpringBoot继承了Spring优秀的基因,在Spring中开发更为方便快捷。
②简化依赖
比如我们要创建一个 web 项目,使用 Spring 的朋友都知道,在使用 Spring 的时候,需要在 pom 文件中添加多个依赖,而 Spring Boot 则会帮助开发着快速启动一个 web 容器,在 Spring Boot 中,我们只需要在 pom 文件中添加如下一个 starter-web 依赖即可。
③简化配置
Spring 虽然使Java EE轻量级框架,但由于其繁琐的配置,一度被人认为是“配置地狱”。各种XML、Annotation配置会让人眼花缭乱,而且配置多的话,如果出错了也很难找出原因。Spring Boot更多的是采用 Java Config 的方式,对 Spring 进行配置。
部署配置方面,原来 Spring 有多个 xml 和 properties配置,在 Spring Boot 中只需要个 application.yml即可。
④简化部署
在使用 Spring 时,项目部署时需要我们在服务器上部署 tomcat,然后把项目打成 war 包扔到 tomcat里,在使用 Spring Boot 后,我们不需要在服务器上去部署 tomcat,因为 Spring Boot 内嵌了 tomcat,我们只需要将项目打成 jar 包,使用 java -jar xxx.jar一键式启动项目。
另外,也降低对运行环境的基本要求,环境变量中有JDK即可
⑤简化监控
我们可以引入 spring-boot-start-actuator 依赖,直接使用 REST 方式来获取进程的运行期性能参数,从而达到监控的目的,比较方便。但是 Spring Boot 只是个微框架,没有提供相应的服务发现与注册的配套功能,没有外围监控集成方案,没有外围安全管理方案,所以在微服务架构中,还需要 Spring Cloud 来配合一起使用。
4. 什么是 Spring Boot Starters/h3>
? starter是SpringBoot中的一个新发明,它有效的降低了项目开发过程的复杂程度,对于简化开发操作有着非常好的效果。 starter是一种对依赖的synthesize(合成)
-
starter的理念:starter会把所有用到的依赖都给包含进来,避免了开发者自己去引入依赖所带来的麻烦。需要注意的是不同的starter是为了解决不同的依赖,所以它们内部的实现可能会有很大的差异,
-
starter的实现:虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfiguration。因为Spring Boot坚信“约定大于配置”这一理念,所以我们使用ConfigurationProperties来保存我们的配置,并且这些配置都可以有一个默认值,即在我们没有主动覆写原始配置的情况下,默认值就会生效,这在很多情况下是非常有用的。除此之外,starter的ConfigurationProperties还使得所有的配置属性被聚集到一个文件中(一般在resources目录下的application.properties),这样我们就告别了Spring项目中XML地狱。
starter的整体逻辑:
以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容。 同一目录下,文件优先于文件加载
SpringBoot会从这四个位置全部加载主配置文件,如果高优先级中配置文件属性与低优先级配置文件不冲突的属性,则会共同存在—互补配置。
2. 外部配置加载顺序
SpringBoot也可以从以下位置加载配置:优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置。
1.命令行参数
- 所有的配置都可以在命令行上进行指定;
- 多个配置用空格分开; –配置项=值
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar –server.port=8087 –server.context-path=/abc
2.来自java:comp/env的JNDI属性
3.Java系统属性(System.getProperties())
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值
6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件
9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件
10.@Configuration注解类上的@PropertySource
11.通过SpringApplication.setDefaultProperties指定的默认属性
14. 常用的 Bean 映射工具有哪些/h3>
1. Dozer
Dozer 是一个映射框架,它使用递归将数据从一个对象复制到另一个对象。框架不仅能够在 bean 之间复制属性,还能够在不同类型之间自动转换。
2. Orika
Orika 是一个 bean 到 bean 的映射框架,它递归地将数据从一个对象复制到另一个对象。
Orika 的工作原理与 Dozer 相似。两者之间的主要区别是 Orika 使用字节码生成。这允许以最小的开销生成更快的映射器。
3. MapStruct
MapStruct 是一个自动生成 bean mapper 类的代码生成器。MapStruct 还能够在不同的数据类型之间进行转换。
4. ModelMapper
ModelMapper 是一个旨在简化对象映射的框架,它根据约定确定对象之间的映射方式。它提供了类型安全的和重构安全的 API。
5. JMapper
JMapper 是一个映射框架,旨在提供易于使用的、高性能的 Java bean 之间的映射。该框架旨在使用注释和关系映射应用 DRY 原则。该框架允许不同的配置方式:基于注释、XML 或基于 api。
参考链接: 5种常见Bean映射工具的性能比对
15. Spring Boot 如何监控系统实际运行状况/h3>
Actuator( HTTP 端点 )
-
Spring Boot的Actuator提供了运行状态的监控的功能,Actuator的监控数据可以通过REST、远程shell(1.5之后的版本弃用)和方式获得。 Actuator模块提供了众多HTTP接口端点(Endpoint),来提供应用程序运行时的内部状态信息。
-
只需要在pom.xml文件中加入依赖。
-
Spring Boot Actuator提供了非常丰富的监控接口,可以通过这些接口了解应用程序运行时的内部状况。Actuator也支持用户自定义添加端点,可以根据实际应用,定义一些比较关心的指标,在运行期进行监控。
JMX
-
JMX 全称为 Java Management Extensions,即 Java 管理扩展。它提供了对 Java 应用程序和 JVM 的监控管理。
-
通过 JMX 我们可以监控服务器中各种资源的使用情况以及线程,内存和 CPU 等使用情况。
打开 jdk 下提供的工具 jConsole
16. Spring Boot 如何做请求参数校验/h3>
Spring Boot的Actuator提供了运行状态的监控的功能,Actuator的监控数据可以通过REST、远程shell(1.5之后的版本弃用)和方式获得。 Actuator模块提供了众多HTTP接口端点(Endpoint),来提供应用程序运行时的内部状态信息。
只需要在pom.xml文件中加入依赖。
Spring Boot Actuator提供了非常丰富的监控接口,可以通过这些接口了解应用程序运行时的内部状况。Actuator也支持用户自定义添加端点,可以根据实际应用,定义一些比较关心的指标,在运行期进行监控。
JMX 全称为 Java Management Extensions,即 Java 管理扩展。它提供了对 Java 应用程序和 JVM 的监控管理。
通过 JMX 我们可以监控服务器中各种资源的使用情况以及线程,内存和 CPU 等使用情况。
打开 jdk 下提供的工具 jConsole
? 接口开发中,为了防止非法参数对业务造成影响,经常需要对接口的参数做校验,例如登录的时候需要校验用户名密码是否为空,创建用户的时候需要校验邮件、手机 码格式是否准确 。
Validator 专门用来进行接口参数校验,例如常见的必填校验,email格式校验,用户名必须位于6到12之间 等等…
第一步,引入依赖
dependency声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!