SpringBoot 面试题总结 (JavaGuide)

SpringBoot 面试题总结 (JavaGuide)

用 JavaGuide 复习 SpringBoot 时,找到一些面试题,没有答案,自己花了一天时间在网上找资料总结了一些,有些答案的来源比较杂忘了没有标注,望见谅。

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 面试题总结 (JavaGuide) img

以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容。 同一目录下,文件优先于文件加载

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>

? 接口开发中,为了防止非法参数对业务造成影响,经常需要对接口的参数做校验,例如登录的时候需要校验用户名密码是否为空,创建用户的时候需要校验邮件、手机号码格式是否准确 。

Validator 专门用来进行接口参数校验,例如常见的必填校验email格式校验用户名必须位于6到12之间 等等…

第一步,引入依赖

dependency来源:蓝布棉
                                                        

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月26日
下一篇 2022年9月26日

相关推荐