高级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,保护应用免受常见攻击。
  • 测试:编写全面的单元测试和集成测试,确保应用的稳定性和可靠性。

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

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

相关文章

vscode vite+vue3项目启动调试

1、经常我们在普通的项目中,如果算法并不复杂,那么基本上console.log就可以搞定,当然也可以直接alert,打包的时候如果不去掉,还会在发版中上接弹出,给你个惊喜。 2、碰到了有些算法过程比较复杂的情况下&a…

Jdbc学习笔记(三)--PreparedStatement对象、sql攻击(安全问题)

目录 (一)使用PreparedStatement对象的原因: 使用Statement对象编写sql语句会遇到的问题 ​编辑 (二)sql攻击 1.什么是sql攻击 2.演示sql攻击 (三)防止SQL攻击 1.PreparedStatement是什么 …

后端分层解耦

引入 在上篇所举的例子中,我们将所有的代码均放在HelloControl方法之中,这样会导致代码的复用性、可读性较差,难以维护。因此我们需 三层架构 在之前的代码中,代码大体可以分为三部分:数据访问、数据逻辑处理、响应数…

97.【C语言】数据结构之栈

目录 栈 1.基本概念 2.提炼要点 3.概念选择题 4.栈的实现 栈初始化函数 入栈函数 出栈函数和栈顶函数 栈顶函数 栈销毁函数 栈 基本概念参见王爽老师的《汇编语言 第四版》第56和57页 节选一部分 1.基本概念 注意:这里提到的数据结构中的栈有别于操作系统的栈,后者是…

初识算法 · 模拟(1)

目录 前言: 替换所有的问号 题目解析 算法原理 算法编写 提莫攻击 题目解析 算法原理 算法编写 外观数列 题目解析 算法原理 算法编写 前言: ​本文的主题是模拟,通过三道题目讲解,一道是提莫攻击,一道是…

【数值分析】高斯-赛德尔方法、规范化幂法、原点移位法

【数值分析】高斯-赛德尔方法、规范化幂法、原点移位法 题目 要求 代码实现过程不能调用任何库函数自带的“线性 方程组求解、特征值求解库函数” 利用高斯-赛德尔方法求解上述线性方程组 使用Python编程求解矩阵A与列向量b import numpy as np import sympy as spdef crea…

【CUDA】了解GPU架构

目录 一、初步认识 二、Fermi架构 三、Kepler 架构 3.1 动态并行 3.2 Hyper-Q 一、初步认识 SM(Streaming Multiprocessors)是GPU架构中非常重要的部分,GPU硬件的并行性就是由SM决定的。以Fermi架构为例,其包含以下主要组成…

64位程序调用32位dll解决方案

最近在做64位代码移植,发现很多老代码使用到了第三方的32位dll;而且这些第三方32位dll库已经年代久远,原开发商已不再了;所以急切的需要在64位主程序 中使用老的32位dll;查询很多解决方案 发现目前只有使用com 进程外组件的方法可以解决此问题…

【HOT100第五天】搜索二维矩阵 II,相交链表,反转链表,回文链表

240.搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 先动手写写最简单方法,二重循环。 class Solution { public:bool searchMa…

模板元函数应用:输出字符串。

看下面三个字符串,s1,s2,s3 : string s1 "逆天邪神";wstring s2 _t("焚星妖莲");_string s3 "焚绝尘"; 在控制台输出字符串,可能的一个方案是: void print_test(const wstring& s) {std::…

pytest | 框架的简单使用

这里写目录标题 单个文件测试方法执行测试套件的子集测试名称的子字符串根据应用的标记进行选择 其他常见的测试命令 pytest框架的使用示例 pytest将运行当前目录及其子目录中test_*.py或 *_test.py 形式的所有 文件 文件内的函数名称可以test* 或者test_* 开头 单个文件测试…

【C++】类和对象-深度剖析默认成员函数-上

> 🍃 本系列为初阶C的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:[小编的个人主页])小编的个人主页 > 🎀 🎉欢迎大家点赞👍收藏⭐文章 > ✌️ 🤞 &#x1…

Web性能优化:从基础到高级

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 Web性能优化:从基础到高级 Web性能优化:从基础到高级 Web性能优化:从基础到高级 引言 基础优…

当 docker-compose.yaml 文件部署时,Dify 线上版本升级过程

如果线上 Dify 是通过 docker-compose.yaml 文件部署的,那么当 Dify 版本升级时该如何操作呢?官方已经给出了 Docker compose 和 Source Code 两种方式。相对而言,前者更简单些,至少不需要安装依赖包和迁移数据库文件。为了更加具…

如何让手机ip变成动态

在数字化浪潮中,手机已成为我们日常生活中不可或缺的一部分。无论是浏览网页、使用社交媒体还是进行在线购物,手机都扮演着举足轻重的角色。然而,在享受网络带来的便利时,我们也需要关注网络安全和隐私保护。静态IP地址可能让手机…

vue3 如何调用第三方npm包内部的 pinia 状态管理库方法

抛砖引玉: 如果在开发vue3项目是, 引用了npm第三方包 ,而且这个包内使用了Pinia 状态管理库,那我们如何去调用 npm内部的 Pinia 状态管理库呢? 实际遇到的问题: 今天在制作npm包时遇到的问题,之前Vue2版本的时候状态管理库用的Vuex ,当时调用npm包内的状态管理库很简单,直接引…

Linux笔记---调试工具GDB(gdb)

1. gdb的概念 GDB,全称GNU Debugger,是一个功能强大的开源调试工具,广泛用于Unix和类Unix系统,以及Microsoft Windows和macOS平台。GDB允许开发者在程序执行过程中查看内部运行情况,帮助定位和修复程序中的错误。 gd…

编译器gcc/g++

gcc 只用来编译C g 编译C/C 1.预处理(进行宏替换/去注释/条件编译/头文件展开等) 先创建 code.c 文件 -E --> 从现在开始,进行程序的翻译,一旦预处理做完,就停下来 -o --> 表明 -o 后面的文件名称 code…

一.安装版本为19c的Oracle数据库管理系统(Oracle系列)

1.数据库版本信息: 版本信息: 或者直接由命令查出来: 2.操作系统的版本信息 3.安装包下载与上传 可以去oracle官网下载也可以从其他人的百度网盘链接中下载: 使用xftp工具或者其他的工具(mobaxterm)上传到l…

DimensionX 部署笔记

目录 生成视频用CogVideoX-5b-I2V 推理代码: DimensionX 生成视频用CogVideoX-5b-I2V 推理代码: 可以生成,从左向右旋转的,也可以生成从上往下旋转的: import torch from diffusers import CogVideoXImageToVideo…