【面试题】SpringBoot面试题

目录

  • Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
  • 如何理解 Spring Boot 中的 Starters?
  • Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
  • Spring Boot、Spring MVC 和 Spring 有什么区别?
  • SpringBoot自动配置原理是什么?
  • 什么是JavaConfig?
  • SpringBoot启动时都做了什么?
  • bootstrap.properties和application.properties 有何区别?
  • SpringBoot中如何解决跨域问题?
  • SpringBoot多数据源拆分的思路?
  • SpringBoot 多数据源事务如何管理?
  • 什么是Spring Profiles?
  • spring-boot-starter-parent 有什么用 ?
  • SpringBoot 实现热部署有哪几种方式 ?
  • 如何实现 Spring Boot 应用程序的安全性?
  • Spring Boot中的监视器是什么?
  • 前后端分离,如何维护接口文档?
  • 如何使用 Spring Boot 实现异常处理?
  • Spring Boot 中如何实现定时任务?
  • 微服务中如何实现 session 共享?

Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
  • @ComponentScan:Spring组件扫描。

如何理解 Spring Boot 中的 Starters?

  • Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。
  • 如你想使用Spring JPA访问数据库,只要加入springboot-starter-data-jpa启动器依赖就能使用了。Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖

Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

  • Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。
  • application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。

bootstrap 配置文件有以下几个应用场景。

  1. 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
  2. 一些固定的不能被覆盖的属性;
  3. 一些加密/解密的场景;

Spring Boot、Spring MVC 和 Spring 有什么区别?

Spring

  • Spring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。

Spring MVC

  • Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。

SpringBoot

  • Spring 和 SpringMVC 的问题在于需要配置大量的参数。Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。

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的值加入到容器中。

什么是JavaConfig?

Spring JavaConfig是Spring社区的产品,它提供了一种纯Java方法来配置Spring IoC容器。因此,它有助于避免使用XML配置。使用JavaConfig 的优点是:

  1. 面向对象的配置。由于配置在JavaConfig中定义为类,因此用户可以充分利用Java中面向对象的功能。一个配置类可以子类化另一个,覆盖其@Bean方法等。
  2. 减少或消除XML配置。已经证明了基于依赖注入原理的外部化配置的好处。但是,许多开发人员不希望在XML和Java之间来回切换。JavaConfig为开发人员提供了一种纯Java方法来配置Spring容器,该容器在概念上类似于XML配置。在技​​术上可以仅使用JavaConfig配置类来配置容器,但是在实践中,许多人发现将JavaConfig与XML混合匹配是理想的。
  3. 类型安全和重构友好。JavaConfig提供了一种类型安全的方法来配置Spring容器。由于Java 5.0支持泛型,现在可以按类型而不是按名称检索bean,而不需要任何强制转换或基于字符串的查找

SpringBoot启动时都做了什么?

  1. SpringBoot启动的时候,会构造一个SpringApplication的实例,然后调用这个实例的run方法,在run方法调用之前,也就是构造SpringApplication的时候会进行初始化的工作,初始化的时候会做以下几件事:
    • a.把参数sources设置到SpringApplication属性中,这个sources可以是任何类型的参数.
    • b.判断是否是web程序,并设置到webEnvironment的boolean属性中.
    • c.创建并初始化ApplicationInitializer,设置到initializers属性中 。
    • d.创建并初始化ApplicationListener,设置到listeners属性中 。
    • e.初始化主类mainApplicatioClass
  2. SpringApplication构造完成之后调用run方法,启动SpringApplication,run方法执行的时候会做以下几件事:
    • a.构造一个StopWatch计时器,用来记录SpringBoot的启动时间 。
    • b.获取SpringApplicationRunListeners并封装到SpringApplicationRunListeners中启动,用于监听run方法的执行。
    • c.创建并初始化ApplicationArguments,获取run方法传递的args参数。
    • d.创建并初始化ConfigurableEnvironment(环境配置)。
    • e.打印banner和版本。
    • f.构造Spring容器(ApplicationContext)上下文。
    • g.SpringApplicationRunListeners发布finish事件。
    • h.StopWatch计时器停止计时,日志打印总共启动的时间。
    • j.发布SpringBoot程序已启动事件(started())
    • k.调用ApplicationRunner和CommandLineRunner
    • l.最后发布就绪事件ApplicationReadyEvent,标志着SpringBoot可以处理就收的请求了(running())

bootstrap.properties和application.properties 有何区别?

  1. bootstrap(.yml或者.properties):

    • bootstrap由父ApplicationContext加载的, 比application优先加载,配置在应用程序上下文的引导阶段生效。
    • bootstrap里面的属性不能被覆盖
    • 一般来说我们在Spring Cloud Config或者Nacos中会用到它。
  2. application(.yml或者.properties):

    • 由ApplicationContext加载,
    • 用于Springboot项目的自动化配置

SpringBoot中如何解决跨域问题?

  1. 方法或者类上标注@CrossOrigin注解
  2. 定义全局CORS配置,自定义放行哪些原始域、放行哪些请求方式、放行哪些原始请求头部信息、暴露哪些头部信息等等
  3. 拦截器的方式CorsFilter

SpringBoot多数据源拆分的思路?

先在properties配置文件中配置两个数据源,创建分包mapper,使用@ConfifigurationProperties读取properties中的配置,使用@MapperScan注册到对应的mapper包中

SpringBoot 多数据源事务如何管理?

  • 第一种方式是在 service 层的@TransactionManager 中使用transactionManager 指定 DataSourceConfig 中配置的事务
  • 第二种是使用 jta-atomikos 实现分布式事务管理保护

什么是Spring Profiles?

  • Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册bean。
  • 因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些其他 bean可以加载。
  • 假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot使得使用配置文件非常简单。

spring-boot-starter-parent 有什么用 ?

  • 提供了springboot统一的依赖管理和插件管理;主要的依赖其实是继承了spring-boot-dependencies(通过标签dependencyManagement管理依赖声明),本质是继承了它然后扩展了插件配置;

spring-boot-starter-parent具体作用:

  1. 引入父pom里面的依赖时无须指定版本;
  2. java版本,项目编码格式,资源引用描述符已经设置好
  3. 插件管理
  4. 封装了配置文件的过滤规则
  5. 封装了打可执行jar、war的配置
  6. 封装了插件的版本信息
  7. 封装了日期格式
  8. 引入了eclipse和IDEA相关依赖简化了配置,达到开箱即用等

SpringBoot 实现热部署有哪几种方式 ?

  • Spring Loaded
  • Spring-boot-devtools

如何实现 Spring Boot 应用程序的安全性?

  • 为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。
  • 它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其方法

Spring Boot中的监视器是什么?

  • Spring boot actuator是spring启动框架中的重要功能之一。
  • Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。
  • 有几个指标必须在生产环境中进行检查和监控。
  • 即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。
  • 监视器模块公开了一组可直接作为HTTP URL访问的REST端点来检查状态

前后端分离,如何维护接口文档?

  • 前后端分离开发日益流行,大部分情况下,我们都是通过 Spring Boot 做前后端分离开发,前后端分离一定会有接口文档,不然会前后端会深深陷入到扯皮中。
  • 一个比较笨的方法就是使用 word 或者 md 来维护接口文档,但是效率太低,接口一变,所有人手上的文档都得变。
  • 在 Spring Boot 中,这个问题常见的解决方案是 Swagger ,使用 Swagger 我们可以快速生成一个接口文档网站,接口一旦发生变化,文档就会自动更新,所有开发工程师访问这一个在线网站就可以获取到最新的接口文档,非常方便。

如何使用 Spring Boot 实现异常处理?

  • Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。我们通过实现一个 ControlerAdvice 类,来处理控制器类抛出的所有异常

Spring Boot 中如何实现定时任务?

在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一个则是使用第三方框架 Quartz。

  • 使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。
  • 使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven高级的多环境配置与应用

多环境配置与应用 这一节中,我们会讲两个内容,分别是多环境开发和跳过测试 5.1 多环境开发 我们平常都是在自己的开发环境进行开发,当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用,等测试人员测…

Redis报错:MISCONF Redis is configured to save RDB snapshots

错误提示内容: 2024-06-25 16:30:49 : Connection: Redis_Server > [runCommand] PING 2024-06-25 16:30:49 : Connection: Redis_Server > Response received : -MISCONF Redis is configured to save RDB snapshots, but it is currently not able to pers…

Qt Quick Effect Maker 工具使用介绍

一、介绍 随着 Qt 版本的不断升级,越来越多的功能被加入 Qt,一些新的工具也随之应运而生,Qt Quick Effect Maker 工具是 Qt 6.5 之后才新添加的工具,之前的名字应该是叫做 Qt shader tool 这个模块。 以下是官方的释义:Qt Quick Effect Maker是一个用于为Qt Quick创建自定…

C语⾔数据类型和变量

C语⾔数据类型和变量 1.数据类型介绍1.1 字符型1.2 整型1.3 浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof操作符1.5.2 数据类型长度1.5.3 sizeof中表达式不计算 2. signed 和 unsigned3. 数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5. 算术操作符&#…

Vue2+TS el-table简单封装 和 使用

1.封装的组件写法 <template><div style"height: calc( 100% - 33px);width:100%;position:relative"><!-- 权限管理标题显示与否 --><div ref"operationBtnbox" class"operation-Btn-box" v-if"showOperationBtn&qu…

React Hooks 小记(七)_useReducer

useReducer usereducer 相当于 复杂的 useState 当状态更新逻辑较复杂时可以考虑使用 useReducer。useReducer 可以同时更新多个状态&#xff0c;而且能把对状态的修改从组件中独立出来。 相比于 useState&#xff0c;useReducer 可以更好的描述“如何更新状态”。例如&#…

Zookeeper 集群的应用场景

Zookeeper 集群的应用场景 Zookeeper 是一个分布式协调服务,主要用于管理分布式应用中的配置、同步和命名等任务。由于其高可用性、 一致性和可靠性,Zookeeper 被广泛应用于各种分布式系统中。以下是 Zookeeper 集群的一些典型应用场景: 1. 配置管理 Zookeeper 可以用来集…

社区团购小程序开发

在快节奏的现代生活中&#xff0c;人们越来越追求便利与效率。社区团购小程序应运而生&#xff0c;以其独特的优势成为连接社区居民与优质商品的重要桥梁。本文将探讨社区团购小程序的特点、优势以及未来发展趋势&#xff0c;为大家揭示这一新型购物模式的魅力。 社区团购小程序…

LLM与GPT的一些概念

LLM 大模型语言模型(Large Language Model,LLM)技术是近年来人工智能领域的重要突破,凭借其出色的语义理解和生成能力,正在广泛应用于各种自然语言处理场景。 基本原理 LLM 是基于深度学习的语言模型,通过学习大规模文本数据,获得对自然语言的深入理解。这种模型能够准确地预…

MAC 查看公钥私钥

电脑配置过公钥私钥&#xff0c;现在需要查看&#xff1a; 1、 查看本地是否存在SSH密钥 命令&#xff1a;ls -al ~/.ssh 如果在输出的文件列表中发现id_rsa和id_rsa.pub的存在&#xff0c;证明本地已经存在SSH密钥&#xff0c;请执行第3步 2、 生成SSH密钥 命令&#xff1…

一本好的电子画册应这样做,你做对了吗?

​一本好的电子画册&#xff0c;不仅要有吸引人的图文&#xff0c;还可能包括视频、音频等多媒体元素&#xff0c;为读者提供全方位的阅读体验。连贯性是指画册的整体设计风格、内容布局要协调一致&#xff0c;让读者在阅读过程中感受到流畅和自然。创新性则要求创作者在内容呈…

39 - 电影评分(高频 SQL 50 题基础版)

39 - 电影评分 (selectu.name as results fromMovieRating m left join Users u on m.user_idu.user_id GROUP BYm.user_id order by count(*) desc,u.name asc limit 1) union all (selectm1.title as results fromMovieRating m left join Movies m1 on m.movie_idm1.movie…

加速业务布局,30年老将加盟ATFX,掌舵运营新篇章

全球领先的差价合约经纪商ATFX日前宣布了一项重大人事任命&#xff0c;聘请业界资深人士约翰博格(John Bogue)为机构业务运营总监。约翰博格是一名行业老将&#xff0c;曾在差价合约界深耕三十余载。伴随其加入ATFX&#xff0c;相信他的深厚专业知识和从业经验将为ATFX机构业务…

Java序列化进阶:Java内置序列化的三种方式

Java序列化就是把Java对象按照一定的格式存到文件或者磁盘当中 序列化的进阶&#xff1a;即三种方式&#xff0c;任何一种方式都可以进行序列化和反序列化 如果将数据读写到文档&#xff0c; 一般通过 ObjectOutputStream 将数据写入到文件当中&#xff0c;就是一种序列化的…

数据分析python基础实战分析

数据分析python基础实战分析 安装python&#xff0c;建议安装Anaconda 【Anaconda下载链接】https://repo.anaconda.com/archive/ 记得勾选上这个框框 安装完后&#xff0c;然后把这两个框框给取消掉再点完成 在电脑搜索框输入"Jupyter"&#xff0c;牛马启动&am…

简单聊聊云硬盘的规格

云硬盘类型及对应性能介绍 衡量云硬盘性能的指标有很多种&#xff0c;例如IOPS&#xff0c;吞吐量&#xff0c;读写时延&#xff1a; IOPS&#xff1a;云硬盘每秒进行读写的操作次数&#xff0c;可以细分到单盘最大IOPS&#xff0c;基线IOPS&#xff0c;IOPS突发上限等等。吞…

司美格鲁肽在中国获批!深度解析报告附上

在中国&#xff0c;肥胖问题日益严重&#xff0c;但有效的治疗方法却相对匮乏。然而&#xff0c;这一现状随着国家药品监督管理局&#xff08;NMPA&#xff09;对诺和诺德公司研发的司美格鲁肽注射液&#xff08;商品名&#xff1a;诺和盈&#xff09;的批准而得到改变。6月25日…

LabVIEW中卡尔曼滤波的作用与意义

卡尔曼滤波&#xff08;Kalman Filter&#xff09;是一种在控制系统和信号处理领域广泛应用的递推滤波算法&#xff0c;能够在噪声环境下对动态系统的状态进行最优估计。其广泛应用于导航、目标跟踪、图像处理、经济预测等多个领域。本文将详细介绍卡尔曼滤波在LabVIEW中的作用…

pytorch基础知识Tensor算术运算

1、Tensor的基本概念 标量是零维的张量&#xff0c;向量是一维的张量&#xff0c;矩阵是二维的张量 2、Tensor的创建 import torch"""常见的几个tensor创建""" a torch.Tensor([[1,2],[3,4]]) #2行2列的 print(a, a.type()) print(torch.on…

大数据平台需要存算分离吗?某保险集团:以 ZBS 优化资源利用率,缩短业务用时超一半

金融机构普遍采用“存算一体”架构支撑基于 Hadoop 框架的大数据平台。而随着金融业务的多元化发展&#xff0c;不同业务对计算和存储的需求差异较大&#xff0c;由于“存算一体”架构共享存储与计算资源&#xff0c;经常会出现资源需求不均衡、资源利用率低下、难以灵活调度等…