Java 面试题--SpringBoot篇
一、什么是 SpringBoot?
Spring Boot 是 Spring 开源组织下的子项目,
是 Spring 组件一站式解决方案,主要是简化
了使用 Spring 的难度,简省了繁重 xml 的配
置,提供了各种启动器,在运行过程中自定
配置,,开发者能快速上手
二、为什么要用 SpringBoot?
① 独立运行
② 简化配置
③ 自动配置
④ 无代码生成和 XML 配置
⑤ 无需部署 war 文件
三、Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
Spring Boot 的核心配置文件是 application
和 bootstrap 配置文件
1. application 配置文件
主要用于 Spring Boot 项目的自动化配置
2. bootstrap 配置文件
有以下几个应用场景:
① 使用 SpringCloudConfig 配置中心时,
这时需要在 bootstrap 配置文件中添加
连接到配置中心的配置属性来加载外部
配置中心的配置信息;
② 一些固定的不能被覆盖的属性;
③ 一些加密/解密的场景;
四、SpringBoot 的配置文件有哪几种格式?它们有什么区别?
.properties 和 .yml,它们的区别主要是书
写格式不同
1. .properties
app.user.name = javastack
2. .yml
app:user:name: javastack
另外,.yml 格式不支持 @PropertySource
注解导入配置
五、SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是 @SpringBootApplication,
它也是 SpringBoot 的核心注解
主要组合包含了以下 3 个注解:
① @SpringBootConfiguration:组合了
@Configuration 注解,实现配置文件
的功能
② @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配
置的选项,如关闭数据源自动配置功能:
@SpringBootApplication(exclude =
{ DataSourceAutoConfiguration.class })
③ @ComponentScan:Spring 组件扫描
六、开启SpringBoot特性有哪几种方式?
① 继承 spring-boot-starter-parent 项目
② 导入 spring-boot-dependencies 项目依
赖
七、SpringBoot 需要独立的容器运行吗?
可以不需要,内置了 Tomcat/ Jetty 等容器
八、运行 SpringBoot 有哪几种方式?
① 打包用命令或者放到容器中运行
② 用 Maven/ Gradle 插件运行
③ 直接执行 main 方法运行
九、SpringBoot 自动配置原理是什么?
注解 @EnableAutoConfiguration,,
@Configuration,@ConditionalOnClass
就是自动配置的核心,首先它得是一个配
置文件,其次根据类路径下是否有这个类
去自动配置
Spring Boot 的自动配置注解是
@EnableAutoConfiguration, 从上面的
@Import 的类可以找到下面自动加载自动
配置的映射
org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames(Class<?>, ClassLoader)
public static List<String> loadFactoryNames(Class<?> factoryClass,
ClassLoader classLoader) {String factoryClassName = factoryClass.getName();try {Enumeration<URL> urls = (classLoader != null ?
classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :
lassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));List<String> result = new ArrayList<String>();while (urls.hasMoreElements()) {URL url = urls.nextElement();Properties properties = PropertiesLoaderUtils.loadProperties(
new UrlResource(url));String factoryClassNames = properties.getProperty(factoryClassName);result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(
factoryClassNames)));}return result;}catch (IOException ex) {throw new IllegalArgumentException("Unable to load [" + factoryClass.getName() +"] factories from location [" + FACTORIES_RESOURCE_LOCATION + "]", ex);}
}
这个方法会加载类路径及所有jar包下META-INF/spring.factories配置中映射的自动配置的类。
/**
* The location to look for factories.
* <p>Can be present in multiple JAR files.
*/
public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
查看Spring Boot自带的自动配置的包: spring-boot-autoconfigure-1.5.6.RELEASE.jar,
打开其中的META-INF/spring.factories文件会找到自动配置的映射org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
...
再来看看数据源自动配置的实现注解
@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ Registrar.class, DataSourcePoolMetadataProvidersConfiguration.class })
public class DataSourceAutoConfiguration {
...
@Configuration,@ConditionalOnClass就是自动配置的核心,首先它得是一个配置文件,其次根据类
十、如何理解 SpringBoot 中的 Starters?
Starters 可以理解为启动器,它包含了一
系列可以集成到应用里面的依赖包,你可
以一站式集成 Spring 及其他技术,而不
需要到处找示例代码和依赖包
如果想使用 Spring JPA 访问数据库,只
要加入 spring-boot-starter-data-jpa 启动
器依赖就能使用了
相关文章:
Java 面试题--SpringBoot篇
一、什么是 SpringBoot? Spring Boot 是 Spring 开源组织下的子项目, 是 Spring 组件一站式解决方案,主要是简化 了使用 Spring 的难度,简省了繁重 xml 的配 置,提供了各种启动器,在运行过程中自定 配置,&a…...
GitKraken 详细图文教程
前言 写这篇文章的原因是组内的产品和美术同学,开始参与到git工作流中,但是网上又没有找到一个比较详细的使用教程,所以干脆就自己写了一个[doge]。文章的内容比较基础,介绍了Git内的一些基础概念和基本操作,适合零基…...
ubuntu20.04 root用户下使用中文输入法——root用户pycharm无法用中文输入法问题
因为一些众所不周知的bug,我的pycharm使用apt或者snap安装都不行了,官网下了“绿色版”,运行pycharm.sh也运行不起来,有个java相关环境报错,jre和jdk都装了,还是有点问题,最后尝试发现可以用roo…...
FastDFS与Nginx结合搭建文件服务器,并实现公网访问【内网穿透】
文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…...
嵌入式蓝海变红海?其实是大浪淘沙!
嵌入式是当下热门的职业方向之一,吸引了众多求职者的目光。然而,有人担心大家一拥而上,导致嵌入式就业竞争激烈,找工作难度大。其实,嵌入式行业的竞争并非无法逾越的天堑,也远远没有从蓝海变成红海…...
【附安装包】Solid Edge2023安装教程最强CAD选择
软件下载 软件:Solid Edge版本:2023语言:简体中文大小:3.85G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.bai…...
494. 目标和
494. 目标和 原题链接:完成情况:解题思路:数组回溯法动态规划 参考代码:数组回溯法__494目标和__动态规划 经验吸取 原题链接: 494. 目标和 https://leetcode.cn/problems/target-sum/description/ 完成情况&#…...
C++学习笔记总结练习:C++编译过程详解
编译和链接的过程 0 概述 程序要运行起来,必须要经过四个步骤:预处理、编译、汇编和链接。接下来通过几个简单的例子来详细讲解一下这些过程。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EFwSfKYp-1692237034055)(imag…...
嵌入式设备应用开发(qt界面开发)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 linux界面开发有很多的方案可以选。比如说lvgl、minigui、ftk之类的。但是,这么多年来,一直屹立不倒的还是qt。相比较其他几种方案,qt支持多个平台,这里面就包括了linux平台。此…...
pytest结合Excel实现接口自动化
前言 我们先来回顾下之前篇章“pytest通过parametrize方法实现数据驱动实战”,主要是通过yaml文件来读取测试用例。而我们用Excel文件存放测试用例又有什么区别呢? 毫无疑问,Pytest自动化测试框架也能读取Excel文件实现数据驱动。 还记得之…...
【LLM数据篇】预训练数据集+指令生成sft数据集
note 在《Aligning Large Language Models with Human: A Survey》综述中对LLM数据分类为典型的人工标注数据、self-instruct数据集等优秀的开源sft数据集:alpaca_data、belle、千言数据集、firefly、moss-003-sft-data多轮对话数据集等 文章目录 note构造指令实例…...
WebDAV之π-Disk派盘 + 一羽记帐
一羽记帐是一款真正让你体验3S极速记账的轻量级APP。针对个人记账,没有花哨冗余的功能。界面美丽、无广告、极速启动、功能全面。一羽记帐功能涵括广,基本可以满足90%人的记账需求。完全无侵入、百分百无广告,无需担心数据安全,所有的操作都不经过任何第三方。 π-Disk派盘…...
ChatGPT:记一次超复杂的KVM桌面系统连接问答记录
KVM切换器可以使多台电脑共用键盘,显示器,鼠标,当电脑很多,显示器也是分为主从,需要共用键盘鼠标和音响设备,而买KVM切换器只有2个通道4进2出不满足需求时,就要组合多个KVM使用,大…...
python-docx把dataframe表格添加到word文件中
python-docx把dataframe表格添加到word文件中思路较为简单: 先把dataframe格式转变为table新建一个段落:document.add_paragraph()把table添加到这个段落下方 效果图 示例代码 from docx import Document, oxml import pandas as pd import numpy as …...
Web AP—BOM 浏览器对象模型
代码下载 BOM BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window。 BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。 BOM 缺乏标…...
Flink分流,合流,状态,checkpoint和精准一次笔记
第8章 分流 1.使用侧输出流 2.合流 2.1 union :使用 ProcessFunction 处理合流后的数据 2.2 Connect : 两条流的格式可以不一样, map操作使用CoMapFunction,process 传入:CoProcessFunction 2.2 BroadcastConnectedSt…...
c# 实现sql查询DataTable数据集 对接SqlSugar ORM
有时候对于已经查询到的数据集,想要进行二次筛选或者查询,还得再查一遍数据库 或者其他的一些逻辑处理不太方便,就想着为什么不能直接使用sql来查询DataTable呢? 搜索全网没找到可用方案,所以自己实现了一个。 主要…...
记一次布尔盲注漏洞的挖掘与分析
在上篇文章记一次由于整型参数错误导致的任意文件上传的漏洞成因的分析过程中,发现menu_id貌似是存在注入的。 public function upload() {$menu_id $this->post(menu_id);if ($id) {$where "id {$id}";if ($menu_id) {$where . " and menu_id…...
C++11 新特性 ---- noexcept
1. 异常 异常通常用于处理逻辑上可能发生的错误 在C98中,提供了一套完善的异常处理机制,直接在程序中将各种类型的异常抛出,从而强制终止程序的运行。 1.1 基本语法 当函数抛出异常时,程序会停止执行,并显示异常信息…...
《Linux运维总结:Centos7.6之OpenSSH7.4p1升级版本至9.4p1》
Centos通过yum升级OpenSSH 在官方支持更新的CentOS版本,如果出现漏洞,都会通过更新版本来修复漏洞。这时候直接使用yum update就可以升级版本。 yum -y update openssh 但是,CentOS更新需要有一段时间,不能在漏洞刚出来的时候就有…...
LeaderKey.app开发者指南:深入源码解析架构设计
LeaderKey.app开发者指南:深入源码解析架构设计 【免费下载链接】LeaderKey The *faster than your launcher* launcher 项目地址: https://gitcode.com/gh_mirrors/le/LeaderKey LeaderKey.app是一款轻量级启动器应用,以"比你的启动器更快&…...
别再只盯着效率了!DCDC降压芯片选型,这5个‘隐形’参数才是关键
别再只盯着效率了!DCDC降压芯片选型,这5个‘隐形’参数才是关键 在电源设计领域,工程师们往往过于关注DCDC降压芯片的效率、输入输出电压范围等基础参数,却忽略了那些真正影响系统长期稳定性和用户体验的"隐形"特性。这…...
ColorBrewer完整指南:如何为地图和数据可视化选择完美配色方案
ColorBrewer完整指南:如何为地图和数据可视化选择完美配色方案 【免费下载链接】colorbrewer 项目地址: https://gitcode.com/gh_mirrors/co/colorbrewer ColorBrewer是一个专为地图着色和数据可视化设计的开源配色工具,基于Cynthia Brewer博士的…...
城通网盘直连解析终极解决方案:告别限速,实现全速下载的完整指南
城通网盘直连解析终极解决方案:告别限速,实现全速下载的完整指南 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘的龟速下载而烦恼吗?每次下载大文件都…...
如何在Windows系统上一键部署终极包管理器:winget安装工具完全指南
如何在Windows系统上一键部署终极包管理器:winget安装工具完全指南 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh…...
MusicGPT:基于大语言模型的AI音乐导师项目架构与实现
1. 项目概述:当AI成为你的私人音乐导师最近在GitHub上看到一个挺有意思的项目,叫gabotechs/MusicGPT。光看名字,你可能会觉得这又是一个用GPT来生成音乐旋律或者歌词的玩具。但实际深入进去,你会发现它的野心和实用性远超想象。它…...
DIY蓝牙街机摇杆:从零打造无线复古游戏控制器
1. 项目概述与核心思路作为一个玩了二十多年街机,也折腾了十几年硬件的“老炮儿”,我始终觉得,有些东西的味道是数字模拟不出来的。比如,用键盘或现代手柄玩《拳皇97》或《合金弹头》,总觉得少了点灵魂——那“咔哒咔哒…...
别再只盯着CVE-2017-7529复现了,聊聊Nginx缓存机制下的那些‘信息泄露’风险
深入解析Nginx缓存机制与敏感信息防护实践 Nginx作为现代Web架构的核心组件,其高效的缓存机制在提升性能的同时也隐藏着不容忽视的安全隐患。当开发者们热衷于讨论CVE-2017-7529这类高危漏洞的复现时,我们更需要将目光投向日常配置中那些容易被忽视的信息…...
iOS 26.4-26.5终极越狱指南:安全解锁iPhone隐藏功能与高级定制方案
iOS 26.4-26.5终极越狱指南:安全解锁iPhone隐藏功能与高级定制方案 【免费下载链接】Jailbreak iOS 26.4 - 26, 17 - 17.7.5 & iOS 18 - 18.7.3 Jailbreak Tools, Cydia/Sileo/Zebra Tweaks & Jailbreak News Updates || AI Jailbreak Finder 👇…...
东南亚1.5亿数字钱包用户如何覆盖?Antom收单解决方案拆解
在东南亚,很多用户第一次完成线上付款可能不是通过信用卡,而是通过自己熟悉的本地电子钱包。从印尼的GoPay、DANA,到菲律宾的GCash,再到泰国的TrueMoney、马来西亚的Touch ‘n Go,电子钱包已经深度融入当地人的日常消费…...
