博主介绍: 🚀自媒体 JavaPub 独立维护人,全网粉丝15w+,csdn博客专家、java领域优质创作者,51ctoTOP10博主,知乎/掘金/华为云/阿里云/InfoQ等平台优质作者、专注于 Java、Go 技术领域和副业。🚀
最少必要面试题 ,获取《10万字301道Java经典面试题总结(附答案)》pdf,背题更方便,一文在手,面试我有
我是JavaPub,专注于面试、副业,技术人的成长记录。
以下是 Spring Boot 面试题,相信大家都会有种及眼熟又陌生的感觉、看过可能在短暂的面试后又马上忘记了。JavaPub在这里整理这些容易忘记的重点知识及解答,建议收藏,经常温习查阅
。
评论区见
@[toc]
SpringBoot
1. 为什么要用 spring boot?
通过自动配置方式简化 Spring 应用的开发,弱化配置,遵循 约定大于配置的原则 ,使开发者专注于业务开发而无需过多考虑配置相关操作,通过启动类的 main 方法一键启动应用。
2. spring boot 有哪些优点?
- 独立运行。
内嵌了 servlet,tomat 等,不需要打成 war 包部署到容器中,只需要将 SpringBoot 项目打成jar包就能独立运行。 - 简化配置。
启动器自动依赖其他组件,简少了 maven 的配置。各种常用组件及配置已经默认配置完成,无需过多干预。 - 避免大量的 Maven 导入和各种版本冲突。
- 应用监控。
Spring Boot 提供一系列端点可以监控服务及应用。
3. spring boot 核心配置文件是什么?
springboot 核心的两个配置文件:
- bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,
比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效,且 bootstrap 里面的属性不能被覆盖;一般来说我们在 SpringCloud Config 或者 Nacos 中会用到它。
- application (. yml 或者 . properties):用于 springboot 项目的自动化配置
4. spring boot的核心注解是什么?由那些注解组成?
核心注解为:@SpringBootApplication
该注解主要由三个注解组成:
@SpringBootConfiguration()
:代表当前是一个配置类
@EnableAutoConfiguration()
: 启动自动配置
@ComponentScan()
:指定扫描哪些 Spring 注解
5. 说一下springboot的自动装配原理
- SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration。
- 查看@EnableAutoConfiguration,其作用是利用AutoConfigurationImportSelector给容器中导入一些组件。
- 查看AutoConfigurationImportSelector,其中public String[] selectImports(AnnotationMetadata annotationMetadata)方法内 最终调用getCandidateConfigurations()方法
- 查看 getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes),获取候选的配置,这个是扫描所有jar包类路径下"META-INF/spring.factories"
- 然后把扫描到的这些文件包装成Properties对象。
- 从properties中获取到EnableAutoConfiguration.class类名对应的值,然后把他们添加在容器中。
简而言之,整个过程就是将类路径下 "META-INF/spring.factories" 里面配置的所有 EnableAutoConfiguration 的值加入到容器中。
6. SpringBoot、Spring MVC和Spring有什么区别?
Spring:主要用来创建IOC容器,依赖注入,实现程序间的松耦合
SpringMVC: 主要是用来做WEB开发,通过各种组件的协调配合,简化Web应用的开发
SpringBoot: SpringBoot更像是一个管家,当使用到对应功能时,只需要导入指定应用启动器,SpringBoot就能够在底层默认其配置,大大简化了开发所需的繁杂配置
7. SpringBoot启动时都做了什么?
Springboot 的启动,主要创建了配置环境 (environment)、事件监听 (listeners)、应用上下文(applicationContext),并基于以上条件,在容器中开始实例化我们需要的 Bean,至此,通过 SpringBoot 启动的程序已经构造完成。
8. SpringBoot 中的监视器是什么?
SpringBoot Actuator 是 SpringBoot 一项重要功能,其可以帮助我们查看应用的运行状态,对运行时指标进行检查和监控,监视器提供了一组可以直接作为 httpurl 访问的 rest 端点来访问查看指定功能状态。
9. SpringBoot 中的starter到底是什么 ?
首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。
正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter
拓展:如何自定义starter?
- 创建项目,创建两个模块分别为
spring-boot-starter-*
,spring-boot-starter-*-autoconfiguration
spring-boot-starter-*
pom 引入spring-boot-starter-*-autoconfiguration
spring-boot-starter-*-autoconfiguration
创建功能方法,创建 *properties类,创建一个配置类将功能方法类添加到 spring 容器,在 resouces 下创建META-INF/spring.factories
配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration
- 打包安装这两个模块到本地 maven 仓库,即可在其他项目引入
spring-boot-starter-*
注入功能类进行方法调用
10. 微服务中如何实现 session 共享?
在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。
这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。
低谷蓄力
最少必要面试题
关注公众号,回复1024,获取Java学习路线思维导图、加入源码计划学习交流群