SpringBoot面试基础知识

SpringBoot 是面试中后端开发岗位的高频考点,以下是核心考点整理:

 

1. SpringBoot 基础概念

 

- 定义:SpringBoot 是 Spring 框架的简化版,通过“自动配置”“起步依赖”等特性,简化 Spring 应用的搭建和开发,减少 XML 配置。

- 核心优势:

- 自动配置:根据类路径下的依赖自动配置 Spring 组件(如引入  spring-boot-starter-web  会自动配置 Tomcat、SpringMVC 等)。

- 起步依赖(Starter):将常用依赖打包,如  spring-boot-starter-data-jpa  包含 JPA 相关的所有依赖,无需手动管理版本。

- 嵌入式服务器:内置 Tomcat、Jetty 等,无需单独部署。

- actuator 监控:可监控应用健康状态、 metrics 等。

 

2. 自动配置原理

 

- 核心注解:

-  @SpringBootApplication :组合了  @Configuration (配置类)、 @ComponentScan (扫描组件)、 @EnableAutoConfiguration (开启自动配置)。

-  @EnableAutoConfiguration :通过  @Import(AutoConfigurationImportSelector.class)  加载 META-INF/spring.factories 中定义的自动配置类。

- 条件注解:自动配置类需满足条件才生效,如  @ConditionalOnClass (类存在)、 @ConditionalOnMissingBean (Bean 不存在)等。

- 自定义配置:通过 application.properties/yaml 覆盖自动配置的默认值(如  server.port=8081 )。

 

3. 起步依赖(Starter)

 

- 原理:Starter 是一个 Maven 依赖描述符,定义了常用依赖的集合,通过 Maven 传递依赖自动引入相关 Jar 包。

- 常见 Starter:

-  spring-boot-starter-web :Web 开发(SpringMVC + Tomcat)。

-  spring-boot-starter-data-jpa :JPA 数据访问。

-  spring-boot-starter-redis :Redis 集成。

- 自定义 Starter:需定义自动配置类、编写 spring.factories 注册配置类,并打包为 Maven 依赖。

 

4. 配置文件

 

- 格式:支持 properties、yaml(更简洁,支持层级结构),优先级:properties > yaml。

- 多环境配置:

- 命名规则: application-{profile}.properties (如  application-dev.properties )。

- 激活方式: spring.profiles.active=dev (在主配置文件中指定)。

- 配置注入:

-  @Value("${key}") :注入单个配置项。

-  @ConfigurationProperties(prefix = "prefix") :批量注入配置到实体类(需配合  @Component  或  @EnableConfigurationProperties  使用)。

 

5. 核心功能与扩展

 

- 嵌入式服务器:默认 Tomcat,可通过排除依赖切换为 Jetty 或 Undertow:

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

    <exclusions>

        <exclusion>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-tomcat</artifactId>

        </exclusion>

    </exclusions>

</dependency>

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-jetty</artifactId>

</dependency>

 

- Actuator 监控:引入  spring-boot-starter-actuator ,通过端点(如  /health 、 /info 、 /metrics )监控应用,可配置暴露端点的方式和权限。

- 日志配置:默认使用 Logback,可通过  logging.level.包名=DEBUG  配置日志级别。

 

6. 与 Spring 生态集成

 

- Spring Security:引入  spring-boot-starter-security  实现身份认证和授权。

- MyBatis:通过  mybatis-spring-boot-starter  集成,简化 mapper 扫描和配置。

- 事务管理:使用  @Transactional  注解,SpringBoot 自动配置事务管理器。

 

7. 面试高频问题

 

- 如何理解 SpringBoot 的自动配置?其实现流程是什么?

- 如何自定义一个 Starter?

- 配置文件中如何实现多环境切换?

-  @Configuration  和  @Component  的区别?

- SpringBoot 如何解决依赖冲突?(通过 Starter 统一版本,Maven 依赖调解)

- 如何禁用某个自动配置类?( @SpringBootApplication(exclude = 类名.class) )

 

以上考点覆盖了 SpringBoot 的核心原理和常用场景,面试中需结合实际使用经验理解记忆。

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

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

相关文章

Java面试全方位解析:从基础到AI的技术交锋

Java面试全方位解析&#xff1a;从基础到AI的技术交锋 面试场景&#xff1a;互联网大厂Java工程师岗位面试 面试官&#xff1a;您好&#xff0c;我是今天的面试官&#xff0c;接下来我们将进行三轮技术面试。 谢飞机&#xff1a;您好您好&#xff01;我是谢飞机&#xff0c;特别…

Web Worker:解锁浏览器多线程,提升前端性能与体验

目录 一、Web Worker 是什么&#xff1f; 核心特性 类型 二、为什么需要 Web Worker&#xff1f;(单线程的痛点) 三、Web Worker 的典型使用场景 四、一个简单的代码示例 (专用 Worker) 五、使用 Web Worker 的注意事项 六、总结 一、Web Worker 是什么&#xff1f; 简…

LabVIEW命令行调用与传参功能

该功能一方面借助 Formatinto String 构建命令行字符串&#xff0c;实现LabVIEW 环境下命令行调用 VI 并传参&#xff1b;另一方面&#xff0c;针对 Mac 平台&#xff0c;通过解析应用 Info.plist 文件&#xff0c;处理 LabVIEW 可执行文件路径&#xff0c;完善跨平台命令行调用…

使用FRP搭建内网穿透工具,自己公网服务器独享内外网端口转发

内网穿透&#xff0c;也即 NAT 穿透&#xff0c;进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。简单来说&#xff0c;就是让互联网&#xff08;外网&#xff09;设备能访问局域网&#xff08;内网&#xff09;设备提…

JavaWeb01——基础标签及样式(黑马视频笔记)

1.如何用VScode写html代码 1. 首先在vscode上安装一些插件&#xff0c;插件如下&#xff1a; 2.打开你要写入的html文件的文件夹&#xff0c;然后右击“ 新建文件”&#xff0c;命名 “xxx.html”, 3.如果是写 css文件&#xff0c;那么也是右击“新建文件”&#xff0c;命名“x…

在2G大小的文件中,找出高频top100的单词

将 2GB 的大文件分割为 2048 个大小为 512KB 的小文件&#xff0c;采用流式读取方式处理&#xff0c;避免一次性加载整个文件导致内存溢出。初始化一个长度为 2048 的哈希表数组&#xff0c;用于分别统计各个小文件中单词的出现频率。利用多线程并行处理机制遍历所有 2048 个小…

基于LNMP分布式个人云存储

1.准备工作a.关闭两台虚拟机的安全软件客户端&#xff1a;[rootmaster ~]# systemctl stop firewalld [rootmaster ~]# systemctl disable firewalld [rootmaster ~]# systemctl status firewalld ○ firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (…

指针运算全攻略:加减、比较与排序

常见的指针指针运算说明1.指针与整数的加减运算对指针可以进行加法运算&#xff0c;即p n或者p - n。其结果依旧是一个是一个指针&#xff0c;新的指针是在原来的地址值基础上加上/减去n *(sizeof(指针指向的数据类型)&#xff09;个字节。示例&#xff1a;#include<stdio.…

物联网安装调试-物联网网关

物联网网关作为连接终端设备与云平台的核心枢纽,其分类与选型需结合功能定位、硬件性能、连接方式及应用场景等多维度考量。以下从分类体系和产品推荐两方面系统梳理,助您高效决策: 🔧 一、物联网网关分类体系 1. 按功能定位划分 类型 核心能力 典型场景 代表产品 边缘计…

Jenkins教程(自动化部署)

Jenkins教程(自动化部署) 1. Jenkins是什么&#xff1f; Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具&#xff0c;广泛用于项目开发&#xff0c;具有自动化构建、测试和部署等功能。Jenkins用Java语言编写&#xff0c;可在Tomcat等流行的servlet容器中运行&…

linux 驱动验证是否成功 之 查看moudle信息

这些是 Linux 内核模块&#xff08;.ko&#xff09;中的元信息&#xff08;metadata&#xff09;&#xff0c;可以通过如下方式查看&#xff1a;✅ 1. 使用 modinfo 命令查看已加载或已编译模块信息 示例&#xff1a; modinfo aw2013.ko输出内容大概如下&#xff1a; filename:…

浏览器关闭之前请求接口到后端

2025.07.24今天我学习了如何在浏览器关闭之前请求一个接口返回到后端。可以用performance.navigation判断是浏览器关闭&#xff0c;还是浏览器刷新&#xff0c;因为我这边只需要浏览器关闭的时候才去触发1. 利用performance API&#xff08;刷新检测&#xff09; 刷新页面时&am…

MySQL批量数据处理与事务管理

MySQL是一种广泛应用的关系型数据库管理系统&#xff0c;尤其在数据分析和业务逻辑处理方面具有重要地位。在数据量庞大的业务场景中&#xff0c;批量数据处理和事务管理是提高效率和保障数据一致性的重要手段。掌握高效的批量数据操作方法与事务管理技巧&#xff0c;不仅能够提…

iOS网络之异步加载

为什么你的图片要异步加载&#xff1f;在仿写天气预报时&#xff0c;我们常常需要从网络加载天气图标&#xff0c;例如显示某个小时的天气状态图标。这看似简单的事情&#xff0c;如果处理不当&#xff0c;却很容易造成界面卡顿&#xff0c;甚至影响整个 App 的用户体验。错误做…

C#值类型属性的典型问题

问题复现&#xff1a;值类型属性的副本问题以下代码展示了值类型属性的典型问题&#xff1a;struct Point {public int X;public int Y; }class MyClass {public Point Position {get; set;} }// 使用属性修改结构体&#xff08;无效&#xff01;&#xff09; var obj new MyC…

机器学习基础-k 近邻算法(从辨别水果开始)

一、生活中的 "分类难题" 与 k 近邻的灵感 你有没有这样的经历&#xff1a;在超市看到一种从没见过的水果&#xff0c;表皮黄黄的&#xff0c;拳头大小&#xff0c;形状圆滚滚。正当你犹豫要不要买时&#xff0c;突然想起外婆家的橘子好像就是这个样子 —— 黄色、圆…

【WPF】NumericUpDown的用法

在 WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;NumericUpDown 控件并不是内置的标准控件之一&#xff0c;但它是一个非常常用的控件&#xff0c;用于让用户输入一个数值&#xff08;整数或浮点数&#xff09;&#xff0c;并提供上下箭头来递增或…

Kotlin位运算

Kotlin 提供了几种用于操作整数各个位&#xff08;bit&#xff09; 的运算符。这些操作是由处理器直接支持的&#xff0c;速度快且操作简单。在底层编程中非常重要&#xff0c;比如设备驱动、低级图形处理、网络通信、加密和压缩等。 尽管计算机通常都有高效的硬件指令来执行算…

墨者:通过手工解决SQL手工注入漏洞测试(MongoDB数据库)

一、SQL手工注入漏洞测试(MongoDB数据库) 本文以墨者学院靶场为例&#xff0c;演示MongoDB数据库的手工SQL注入全过程。靶场以自己的地址为准&#xff1a;http://124.70.71.251:42286/new_list.php?id1 二、注入原理说明 MongoDB作为NoSQL数据库&#xff0c;其注入方式与传…

Kafka——CommitFailedException异常处理深度解析

引言在分布式消息系统Kafka的生态中&#xff0c;消费者组&#xff08;Consumer Group&#xff09;机制是实现高吞吐量和负载均衡的核心设计。然而&#xff0c;消费过程中位移提交&#xff08;Offset Commit&#xff09;的稳定性始终是开发者面临的最大挑战之一。当消费者尝试提…