首页 > 其他分享 >10道SpringBoot面试题

10道SpringBoot面试题

时间:2023-07-22 22:02:07浏览次数:42  
标签:10 面试题 SpringBoot spring 配置 boot session Spring

SpringBoot

我是JavaPub,专注于面试、副业,技术人的成长记录。

以下是 SpringBoot 面试题,相信大家都会有种及眼熟又陌生的感觉、看过可能在短暂的面试后又马上忘记了。JavaPub在这里整理这些容易忘记的重点知识及解答建议收藏,经常温习查阅

评论区见

本系列《最少必要面试题》

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

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

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

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

低谷蓄力

《最少必要面试题》

GItHub|GitEE

标签:10,面试题,SpringBoot,spring,配置,boot,session,Spring
From: https://blog.51cto.com/wangshiyu/6819035

相关文章

  • 安装Python310和Git
    安装Python3101.下载2.安装安装Git1.下载安装2.汉化GitBash2.汉化GitGUI本文写文时间2023年7月22日,可能在未来会不适合实际情况但是在写文时,不管是跑AI模型还是编译V8引擎,Python310都是稳定可用的安装Python3101.下载访问Python的下载页https://www.python.......
  • c语言_练习实例100
     题1:1.有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?#include<stdio.h>intmain(){for(inti=1;i<5;i++){//取百位for(intj=1;j<5;j++){//取十位for(intk=1;k<5;k++){//取个位if(i!=j&&j!......
  • 2023年最新50道Vue全套vue2+vue3面试题带答案汇总
    此文章不断更新,欢迎大家在评论区补充1.什么是MVVM?M-Model数据:它是与应用程序的业务逻辑相关的数据的封装载体V-View视图:它专注于界面的显示和渲染VM-ViewModel视图-数据:它是View和Model的粘合体,负责View和Model的交互和协作vue双向数据绑定是通过数据劫持结合......
  • mysql8 mariadb10.4 性能
    如何优化MySQL8和MariaDB10.4的性能简介在本文中,我将向你介绍如何优化MySQL8和MariaDB10.4数据库的性能。我们将通过一系列步骤来实现这一目标。下面是整个过程的概要表格:步骤操作1定位瓶颈2优化查询语句3使用索引4调整系统参数5数据库分......
  • 设备驱动-10.中断子系统-4.2中断线程化处理-workqueue
    1工作队列workqueue引入定时器、tasklet,它们都是在中断上下文中执行,它们无法休眠。那么如果一旦中断要处理耗时复杂的操作,就会显得很卡。那么使用内核线程来处理这些耗时的工作,那就可以解决系统卡顿的问题。Linux内核中工作队列workqueue就是线程化处理的一种方式,“工作队列”(......
  • CSS2.1规范笔记——10 视觉格式化模型细节
    视觉格式化模型细节包含块的定义元素(生成的)盒的位置有时候是根据一个特定的矩形计算的,叫做元素的包含块(containingblock)。元素包含块的定义如下:元素包含块其为根元素。其包含块是一个被称为初始包含块的矩形。对连续媒体,尺寸取自视口的尺寸,并且被固定在画布开......
  • [解题报告][CF1007E]Mini Metro
    Statement传送门有\(n\)个车站,从\(1\)到\(n\)编号,车站\(i\)初始有\(a_i\)个人。在每个小时结束的前几分钟,车站\(i\)会新增\(b_i\)个人。玩家有无限辆容量为\(k\)的火车。玩家在每个小时的中间(也就是\(\mathrm{30min,1h30min,2h30min...}\))可以让任意......
  • SpringBoot整合Liquibase
    1、是什么?Liquibase官网Liquibase是一个开源的数据库管理工具,可以帮助开发人员管理和跟踪数据库变更。它可以与各种关系型数据库和NoSQL数据库一起使用,并提供多种数据库任务自动化功能,例如数据库迁移、版本控制和监控。Liquibase还提供了一个Web界面,可以方便地管理和跟踪数据库......
  • SpringBoot2.x—SpringCache的使用
    SpringCache(1)集成声明式与编程式说起SpringCache您可能不清楚。但您绝对清楚事务。一般使用事务分为编程式和声明式。编程式:事务操作与业务代码耦合,一般我们不会使用这种方式;声明式:AOP的运用,通过注解使得事务代码与业务代码解耦,目前项目中一般都是使用事务注解。而我们平时......
  • 2023上半年Android高频面试题汇总(大厂真题+答案解析)
    小伙伴们大家好哇,不知道你们在找工作的时候是不是在力扣、在牛客网狂刷真题!可是有时候刷题的数量连起来可以绕地球三圈,但是面试却过不了第三轮!有没有一种可能就是你没有把握住重点!想想我们之前考试是不是老师划了重点,给了往期真题你考得分数高?题海战术是保底策略,能保证你大概率不会......