高级java每日一道面试题-2024年11月10日-框架篇[SpringBoot篇]-你对SpringBoot了解多少?

如果有遗漏,评论区告诉我进行补充

面试官: 你对SpringBoot了解多少?

我回答:

在Java高级面试中,SpringBoot是一个经常被提及的话题。以下是对SpringBoot的详细解析:

SpringBoot概述

SpringBoot是Spring开源组织下的子项目,是Spring组件一站式解决方案。它主要简化了使用Spring的难度,减少了繁重的配置,提供了各种启动器,使开发者能快速上手。SpringBoot是一个快速开发的Spring框架,而SpringCloud是一个完整的微服务框架,且SpringCloud依赖于SpringBoot。

SpringBoot的核心组件与注解

  1. @SpringBootApplication:这是SpringBoot的核心注解,它综合了@Configuration、@EnableAutoConfiguration和@ComponentScan注解,用于自动配置和组件扫描。
  2. @RestController:用于定义RESTful风格的控制器类,它将返回的对象自动转换为JSON或XML格式。
  3. @RequestMapping:用于映射HTTP请求到控制器的方法,支持不同的请求方法(如GET、POST等)。
  4. @Async:用于实现方法的异步调用,需要在启动类上添加@EnableAsync注解以开启异步支持。
  5. @Scheduled:用于实现定时任务,可以通过设置不同的属性(如fixedRate、fixedDelay、initialDelay、cron等)来指定任务的执行时间。

SpringBoot的配置与管理

  1. 配置文件:SpringBoot支持properties、yaml等格式的配置文件,开发者可以在这些文件中配置应用程序的各项参数。
  2. 环境变量:SpringBoot可以读取系统环境变量中的配置信息,但通常不推荐这种做法。
  3. 命令行参数:SpringBoot支持在项目启动时通过命令行传递参数,这些参数通常用于临时修改配置。
  4. YAML配置的优势:与传统的properties配置相比,YAML配置更加简洁明了,支持数组和对象,且配置有序。但需要注意的是,YAML配置不支持@PropertySource注解导入自定义的配置。

SpringBoot的自动配置原理

SpringBoot的自动配置主要基于注解编程和“约定优于配置”的思想。当开发者在启动类上添加@SpringBootApplication注解时,SpringBoot会读取所有jar包中的META-INF/spring.factories文件,并根据这些文件中定义的自动配置类来自动配置项目。这些自动配置类通常使用@Conditional注解来声明配置成立的必要条件,以确保只有满足条件的配置才会被加载到IOC容器中。

起步依赖(Starter Dependencies)

  • 概念:Spring Boot 提供了一系列的起步依赖,这些依赖预先配置了常用的库和框架,简化了项目的依赖管理。例如,spring-boot-starter-web 包含了构建 Web 应用所需的所有依赖。
  • 常用起步依赖
    • spring-boot-starter-web:用于构建 Web 应用。
    • spring-boot-starter-data-jpa:用于 JPA 数据访问。
    • spring-boot-starter-security:用于安全认证。
    • spring-boot-starter-actuator:用于监控和管理应用。

SpringBoot的日志管理

SpringBoot默认使用logback作为日志框架,但开发者可以通过排除logback的依赖并添加其他日志框架的桥接器和配置文件来切换日志框架。SpringBoot的日志门面使用的是slf4j,这使得开发者可以更加灵活地管理日志。

SpringBoot的热部署与调试

SpringBoot提供了一个名为DevTools的开发工具模块,通过它可以实现SpringBoot项目的热部署。即开发者在修改代码后,无需手动重启服务器,DevTools会自动将更改部署到服务器上并重启服务器。这使得开发者可以更加高效地进行代码调试和测试。

SpringBoot的扩展与自定义

SpringBoot提供了许多扩展点和自定义选项,使得开发者可以根据项目需求进行灵活的配置和扩展。例如,开发者可以自定义starter来封装项目所需的依赖和配置;可以使用@ConfigurationProperties注解将配置文件中的值绑定到一个配置对象上;可以通过实现ApplicationListener或CommandLineRunner接口来在项目启动时执行自定义的逻辑等。

Actuator

  • 概念:Spring Boot Actuator 提供了生产就绪的功能,如健康检查、审计、指标收集等。通过这些功能,可以更好地监控和管理应用。
  • 端点
    • /actuator/health:健康检查。
    • /actuator/info:应用信息。
    • /actuator/metrics:指标收集。
    • /actuator/loggers:日志级别管理。

Spring Boot CLI

  • 概念:Spring Boot CLI 是一个命令行工具,用于快速原型开发。它允许你编写 Groovy 脚本并运行 Spring Boot 应用,而无需创建 Maven 或 Gradle 项目。

Spring Boot DevTools

  • 概念:Spring Boot DevTools 是一组开发工具,用于提高开发效率。它提供了热部署、自动重启、LiveReload 等功能。
  • 配置:可以通过 spring-boot-devtools 依赖引入。

Profile

  • 概念:Spring Boot 支持多环境配置,通过 spring.profiles.active 属性激活不同的配置文件。例如,application-dev.properties 用于开发环境,application-prod.properties 用于生产环境。
  • 用途:可以在不同的环境中使用不同的配置,而不必更改代码。

Spring Boot 的优缺点

优点
  • 快速构建项目:SpringBoot提供了大量的starter,这些starter包含了构建项目所需的各种依赖,开发者只需添加相应的starter,即可快速搭建项目。
  • 开箱即用:SpringBoot提供了许多默认配置,这些配置使得开发者无需再进行繁琐的配置工作,即可快速启动项目。
  • 内嵌服务器:SpringBoot支持内嵌Tomcat、Jetty和Undertow等服务器,使得应用程序可以独立运行,无需外部Web服务器。
  • 生产级别的特性:SpringBoot具备健康检查、应用监控、日志管理等生产级别的功能,使得开发者可以更加专注于业务逻辑的开发。
  • 简化依赖管理:SpringBoot通过starter的方式管理依赖,避免了版本冲突的问题,使得依赖管理更加简单。
  • 社区支持:Spring Boot 拥有庞大的社区支持和丰富的文档。
缺点
  • 学习曲线:对于初学者来说,Spring Boot 的一些高级特性和配置可能会有一定的学习曲线。
  • 过度自动化:自动配置有时可能会导致一些不必要的 Bean 被创建,需要开发者手动排除。
  • 性能开销:内嵌服务器和自动配置可能会带来一定的性能开销,特别是在大规模应用中。

外部配置

  • 概念:Spring Boot 支持多种外部配置源,如命令行参数、环境变量、配置文件等。
  • 优先级:命令行参数 > 环境变量 > 配置文件。

安全性

  • 概念:Spring Boot 提供了开箱即用的安全性支持,通过 spring-boot-starter-security 依赖可以快速启用安全认证。
  • 配置:可以通过 application.propertiesapplication.yml 配置安全性相关的属性,如用户名、密码、角色等。

日志

  • 概念:Spring Boot 默认使用 Logback 作为日志框架,但也支持其他日志框架,如 Log4j2。
  • 配置:可以通过 application.propertiesapplication.yml 配置日志级别和输出格式。

测试

  • 概念:Spring Boot 提供了多种测试支持,包括单元测试和集成测试。
  • 常用注解
    • @SpringBootTest:加载完整的 Spring 应用上下文。
    • @WebMvcTest:仅加载 Web 层的配置。
    • @DataJpaTest:仅加载 JPA 相关的配置。

最佳实践

  • 模块化:将应用拆分成多个模块,每个模块负责单一职责。
  • 配置分离:将不同环境的配置分开,使用 spring.profiles.active 激活不同的配置。
  • 使用 Actuator:利用 Actuator 提供的生产就绪功能,监控和管理应用。
  • 日志管理:合理配置日志级别和输出格式,便于调试和监控。
  • 安全性:启用并配置 Spring Security,保护应用免受常见攻击。
  • 测试:编写全面的单元测试和集成测试,确保应用的稳定性和可靠性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s上部署redis高可用集群

介绍: Redis Cluster通过分片(sharding)来实现数据的分布式存储,每个master节点都负责一部分数据槽(slot)。 当一个master节点出现故障时,Redis Cluster能够自动将故障节点的数据槽转移到其他健…

【工具插件类教学】在 Unity 中使用 iTextSharp 实现 PDF 文件生成与导出

目录 一、准备工作 1. 安装 iTextSharp 2. 准备资源文件 二、创建 ExportPDFTool 脚本 1、初始化 PDF 文件,设置字体 2、添加标题、内容、表格和图片 三、使用工具类生成 PDF 四、源码地址 在 Unity 项目中,我们有时会需要生成带有文本、表格和图片的 PDF 文件,以便…

Centos 7 安装wget

Centos 7 安装wget 最小化安装Centos 7 的话需要上传wget rpm包之后再路径下安装一下。rpm包下载地址(http://mirrors.163.com/centos/7/os/x86_64/Packages/) 1、使用X-ftp 或者WinSCP等可以连接上传的软件都可以首先连接服务器,这里我用的…

任意文件下载漏洞

1.漏洞简介 任意文件下载漏洞是指攻击者能够通过操控请求参数,下载服务器上未经授权的文件。 攻击者可以利用该漏洞访问敏感文件,如配置文件、日志文件等,甚至可以下载包含恶意代码的文件。 这里再导入一个基础: 你要在网站下…

PySpark——Python与大数据

一、Spark 与 PySpark Apache Spark 是用于大规模数据( large-scala data )处理的统一( unified )分析引擎。简单来说, Spark 是一款分布式的计算框架,用于调度成百上千的服务器集群,计算 TB 、…

推荐一款流程图和图表绘制工具:WizFlow Flowcharter Pro

WizFlow Flowcharter是一款易于使用、功能丰富的Windows流程图和图表绘制工具。它允许用户使用超过一百种预定义的形状和箭头定义形状“样式”。您可以将自己的样式保存在图表模板中,以建立自己的绘图方法。WizFlow附带了完整的流程图模板,以帮助您入门。…

关系型数据库和非关系型数据库详解

文章目录 关系型数据库和非关系型数据库详解一、引言二、关系型数据库1、关系型数据库简介1.1、SQL语言 2、关系型数据库的实际应用3、关系型数据库的优点4、关系型数据库的缺点 三、非关系型数据库1、非关系型数据库简介1.1、灵活性示例 2、非关系型数据库的分类3、非关系型数…

第8章利用CSS制作导航菜单

8.1 水平顶部导航栏 8.1.1 简单水平导航栏的设计与实现 8.1.1.1导航栏的创建 <nav>标签是 HIML5 新增的文档结构标签&#xff0c;用于标记导航栏&#xff0c;以便后续与网站的其他内整合&#xff0c;所以常用<nav>标签在页面上创建导航栏菜单区域。 例如,在<na…

UniAPP快速入门教程(一)

一、下载HBuilder 首先需要下载HBuilder开发工具&#xff0c;下载地址:https://www.dcloud.io/hbuilderx.htmlhttps://www.dcloud.io/hbuilder.html 选择Windows正式版.zip文件下载。下载解压后直接运行解压目录里的HBuilderX.exe就可以启动HBuilder。 UniApp的插件市场网址…

linux逻辑卷练习

目录 知识点&#xff1a; 常用命令 题目&#xff1a; 解题&#xff1a; 1&#xff09;分区 2&#xff09;创建物理卷 3&#xff09;创建卷组 4&#xff09;生成逻辑卷 "要带参数 -n" 5&#xff09;扩容 6&#xff09;格式化(添加文件系统) 7&#xff09;挂…

【Linux学习】【Ubuntu入门】1-4 ubuntu终端操作与shell命令1

1.使用快捷键CtrlAltT打开命令终端&#xff0c;或者单击右键点击… 2.常用shell命令 目录信息查看命令&#xff1a;ls ls -a&#xff1a;显示目录所有文件及文件夹&#xff0c;包括隐藏文件&#xff0c;比如以.开头的 ls -l&#xff1a;显示文件的详细信息 ls -al&#xff1…

华东师范大学数学分析第五版PDF习题答案上册及下册

“数学分析”是数学专业最重要的一门基础课程&#xff0c;也是报考数学类专业硕士研究生的专业考试科目。为了帮助、指导广大读者学好这门课程&#xff0c;编者编写了与华东师范大学数学科学学院主编的《数学分析》(第五版)配套的辅导用书&#xff0c;以帮助读者加深对基本概念…

iOS逆向入门:使用theos注入第三方依赖库

背景 theos是一个跨平台的软件开发框架&#xff0c;常用于管理&#xff0c;开发和部署iOS项目&#xff0c;同时也是开发iOS越狱插件的主要工具。和MonkeyDev不同的是&#xff0c;它不依赖于xcode&#xff0c;可以在多个操作系统上运行。一个完整的iOS越狱开发流程包括&#xf…

从0开始学习机器学习--Day26--聚类算法

无监督学习(Unsupervised learning and introduction) 监督学习问题的样本 无监督学习样本 如图&#xff0c;可以看到两者的区别在于无监督学习的样本是没有标签的&#xff0c;换言之就是无监督学习不会赋予主观上的判断&#xff0c;需要算法自己去探寻区别&#xff0c;第二张…

【论文模型复现】深度学习、地质流体识别、交叉学科融合?什么情况,让我们来看看

文献&#xff1a;蓝茜茜,张逸伦,康志宏.基于深度学习的复杂储层流体性质测井识别——以车排子油田某井区为例[J].科学技术与工程,2020,20(29):11923-11930. 本文目录 一、前言二、文献阅读-基于深度学习的复杂储层流体性质测井识别2.1 摘要2.2 当前研究不足2.3 本文创新2.4 论文…

STM32设计防丢防摔智能行李箱

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展&#xff0c;嵌入式系统、物联网技术、智能设备…

【IC每日一题:IC常用模块--RR/handshake/gray2bin】

IC每日一题&#xff1a;IC常用模块--RR/handshake/gray2bin 1 RR仲裁器2 异步握手信号处理3 格雷码和二进制相互转换 1 RR仲裁器 应用&#xff1a;在多个FIFO请求pop时存在仲裁策略&#xff0c;还有比如多master申请总线控制权的仲裁等这些应用场合&#xff1b;假如当前是最高…

从dos上传shell脚本文件到Linux、麒麟执行报错“/bin/bash^M:解释器错误:没有那个文件或目录”

[rootkylin tmp]#./online_update_wars-1.3.0.sh ba51:./online_update_wars-1.3.0.sh:/bin/bash^M:解释器错误:没有那个文件或目录 使用scp命令上传文件到麒麟系统&#xff0c;执行shell脚本时报错 “/bin/bash^M:解释器错误:没有那个文件或目录” 解决方法&#xff1a; 执行…

几何合理的分片段感知的3D分子生成 FragGen - 评测

FragGen 来源于 2024 年 3 月 25 日 预印本的文章&#xff0c;文章题目是 Deep Geometry Handling and Fragment-wise Molecular 3D Graph Generation&#xff0c; 作者是 Odin Zhang&#xff0c;侯廷军&#xff0c;浙江大学药学院。FragGen 是一个基于分子片段的 3D 分子生成模…

【不写for循环】玩玩行列

利用numpy的并行操作可以比纯用Python的list快很多&#xff0c;不仅如此&#xff0c;代码往往精简得多。 So, 这篇来讲讲进阶的广播和花哨索引操作&#xff0c;少写几个for循环&#xff08;&#xff09;。 目录 一个二维的例题 一个三维的例题 解法一 解法二 更难的三维例题…