微服务高频热点面试题汇总

 1.SpringBoot面试题

1.1.简单聊聊SpringBoot的作用是什么?

知识背景:

SpringBoot采用默认配置,帮助我们快速的构建和运行Spring项目:

- 简化spring初始搭建和开发过程
- 提供了大量的starter,集成了spring及大量第三方应用的自动配置
- 允许使用配置文件(properties或者yml文件)覆盖默认配置
- 创建独立的spring应用程序,使用main方法运行
- 内嵌Tomcat无需部署war包,直接打成jar包,用nohup java -jar – & 启动就好

面试话术:

SpringBoot是一个快速构建项目并简化项目配置的工具,内部集成了Tomcat及大多数第三方应用和Spring框架的默认配置。与我们学习的SpringMVC和SpringCloud并无冲突,SpringBoot提供的这些默认配置,大大简化了SpringMVC、SpringCloud等基于Spring的Web应用的开发。

 1.2.SpringBoot的自动配置原理?

问题1:那你说说SpringBoot的自动配置是如何实现的?

面试话术:

一般我们的SpringBoot项目启动类都会添加`@SpringBootApplication`注解,而这个注解的其中一个二级注解是`@EnableAutoConfiguration`注解。而`@EnableAutoConfiguration`注解通过`@Import`注解,以`ImportSelector`接口的方法来导入classpath下的`META-INF/spring.factories`文件,这些文件中会指定需要加载的一些类名称。

这些类一般都加了`@Configuration`注解,并且完成了对某框架(例如Redis、SpringMVC)的默认配置,当这些类符合条件时,就会被实例化,其中的配置生效,那么自动配置自然生效了。

问题2:满足怎样的条件配置才会生效?

面试话术:

一般提供默认配置的类都会添加`@ConditionalOnXxx`这样的注解,例如:`@ConditionalOnClass`,`@ConditionalOnProperties`等。`@ConditionalOnClass`表示只有classpath中存在某些指定的类时,条件满足,此时该配置类才会生效。例如Redis的默认配置其实早就有了,但是只有你引入redis的starter依赖,才满足了条件,触发自动配置。

问题3:那如果我需要覆盖这些默认配置呢?

有两种方式可以覆盖默认配置:

- SpringBoot提供默认配置时,会在提供的Bean上加注解@ConditionalOnMissingBean,意思是如果这个Bean不存在时条件满足,那么我们只要配置了相同的Bean,那么SpringBoot提供的默认配置就会失效
- SpringBoot提供默认配置时,一些关键属性会通过读取application.yml或者application.properties文件来获取,因此我们可以通过覆盖任意一个文件中的属性来覆盖默认配置。

1.3.有没有自定义过SpringBoot的stater?

面试话术:

有,项目中某些中间件的客户端(如Redis、ElasticSearch)会进行二次封装,并通过starter方式提供jar包,供大家使用。

一般定义starter包括下面几个子工程:

- xxx-spring-boot-starter:pom格式,管理当前starter中需要的各种依赖
- xxx-spring-boot-autoconfigure:jar格式,自动配置的核心代码

我以elasticsearch为例来说说autoconfigure中包含哪些

- elasticsearch的工具类
- 属性加载的类,一般通过@ConfigurationProperties注解读取yaml文件中的es地址
- 添加了@Configuration的配置类,作用是初始化elasticsearch工具类,初始化elasticsearch客户端,初始化一些其它必备的实例。
- resource下定义META-INF文件夹,并且文件夹下定义spring.factories文件,文件中是key-value形式
  - key是EnableAutoConfiguration这个注解的全路径名
  - value是我们自定义自动配置类(加了@Configuration的类),如果有多个以","隔开

1.4.SpringBoot项目的启动流程

面试话术:

SpringBoot项目启动第一步就是创建SpringApplication的实例,并且调用SpringApplication.run()这个方法。

创建SpringApplication实例主要完成三件事情:<

你可能感兴趣的:(微服务,Java,面试,微服务,java,spring,spring,boot,spring,cloud)