10道不得不会的 SpringBoot 面试题

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: SpringBoot1. 为什么要用 spring boot?2. spring boot 有哪些优点?3. spring boot 核心配置文件是什么?4. spring boot的核心注解是什么?由那些注解组成?5. 说一下springboot的自动装配原理6. SpringBoot、Spring MVC和Spring有什么区别?7. SpringBoot启动时都做了什么?8. SpringBoot 中的监视器是什么?9. SpringBoot 中的starter到底是什么 ?

博主介绍: 🚀自媒体 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 有哪些优点?

  1. 独立运行。
    内嵌了 servlet,tomat 等,不需要打成 war 包部署到容器中,只需要将 SpringBoot 项目打成jar包就能独立运行。
  2. 简化配置。
    启动器自动依赖其他组件,简少了 maven 的配置。各种常用组件及配置已经默认配置完成,无需过多干预。
  3. 避免大量的 Maven 导入和各种版本冲突。
  4. 应用监控。
    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的自动装配原理

  1. SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration。
  2. 查看@EnableAutoConfiguration,其作用是利用AutoConfigurationImportSelector给容器中导入一些组件。
  3. 查看AutoConfigurationImportSelector,其中public String[] selectImports(AnnotationMetadata annotationMetadata)方法内 最终调用getCandidateConfigurations()方法
  4. 查看 getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes),获取候选的配置,这个是扫描所有jar包类路径下"META-INF/spring.factories"
  5. 然后把扫描到的这些文件包装成Properties对象。
  6. 从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?

  1. 创建项目,创建两个模块分别为 spring-boot-starter-*spring-boot-starter-*-autoconfiguration
  2. spring-boot-starter-* pom 引入 spring-boot-starter-*-autoconfiguration
  3. spring-boot-starter-*-autoconfiguration 创建功能方法,创建 *properties类,创建一个配置类将功能方法类添加到 spring 容器,在 resouces 下创建 META-INF/spring.factories 配置

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration

  1. 打包安装这两个模块到本地 maven 仓库,即可在其他项目引入 spring-boot-starter-* 注入功能类进行方法调用

10. 微服务中如何实现 session 共享?

在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。
这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。

低谷蓄力

最少必要面试题

10道不得不会的Java基础面试题

10道不得不会的Java并发基础面试题

10道不得不会的JVM面试题

10道不得不会的MySQL基础面试题

10道不得不会的MyBatis面试题

10道不得不会的ElasticSearch面试题

10道不得不会的Spring面试题

10道不得不会的Redis面试题

10道不得不会的Kafka面试题

10道不得不会的Docker面试题

10道不得不会的Zookeeper面试题

10道不得不会的JavaEE面试题

10道不得不会的SpringBoot面试题

关注公众号,回复1024,获取Java学习路线思维导图、加入源码计划学习交流群

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
5月前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
129 0
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
485 37
|
2月前
|
架构师 Java 开发者
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
|
6月前
|
消息中间件 缓存 Java
Spring Boot最经典的20道面试题,你都会了吗?
Spring Boot最经典的20道面试题,你都会了吗?
232 0
|
3月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
180 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
6月前
|
前端开发 Dubbo Java
spring面试题_spring mvc面试题_springboot面试题库
spring面试题_spring mvc面试题_springboot面试题库
|
6月前
|
设计模式 NoSQL Java
网易面试:SpringBoot如何开启虚拟线程?
虚拟线程(Virtual Thread)也称协程或纤程,是一种轻量级的线程实现,与传统的线程以及操作系统级别的线程(也称为平台线程)相比,它的创建开销更小、资源利用率更高,是 Java 并发编程领域的一项重要创新。 > PS:虚拟线程正式发布于 Java 长期支持版(Long Term Suort,LTS)Java 21(也就是 JDK 21)。 虚拟线程是一种在 Java 虚拟机(JVM)层面实现的逻辑线程,不直接和操作系统的物理线程一一对应,因此它可以减少上下文切换所带来的性能开销。 操作系统线程、普通线程(Java 线程)和虚拟线程的关系如下: ![image.png](https:
83 0
网易面试:SpringBoot如何开启虚拟线程?
|
6月前
|
监控 NoSQL Java
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
45 0
|
6月前
|
安全 前端开发 Java
杨校老师课堂之Spring Boot框架面试题【开发工程师面试前必看】
杨校老师课堂之Spring Boot框架面试题【开发工程师面试前必看】
49 0

热门文章

最新文章