Java面试题———SpringBoot篇
目录
1、项目中为什么选择SpringBoot
2、SpringBoot的自动装配原理
3、SpringBoot的核心注解是哪个
4、SpringBoot中的starter是干什么的
5、SpringBoot可以有哪些方式加载配置
6、bootstrap.yml和application.yml有何区别
7、SpringBoot读取配置的方式有几种
8、SpringBoot项目如何热部署
9、SpringBoot项目如何实现方法的异步调用
10、SpringBoot中如何实现定时任务
11、SpringBoot中如何解决跨域问题
12、如何理解拦截器
13、拦截器和过滤器的区别是什么
1、项目中为什么选择SpringBoot
SpringBoot简化了Spring,可以快速搭建企业级项目,而且开发起来效率也会更高,它的主要优点如下:
-
版本锁定:SpringBoot在父工程中进行了大量常见依赖的版本锁定,省去了我们查找依赖版本和解决版本冲突的麻烦
-
起步依赖:SpringBoot以功能化的方式将需要的依赖进行组装,并且允许程序员以starter的方式进行引入
-
默认配置:SpringBoot实现了大量依赖框架的默认配置项,程序员无须再进行自己配置
-
内置Tomcat:SpringBoot内置了一个tomcat,使用它开发的程序无需再进行tomcat部署,可直接运行
2、SpringBoot的自动装配原理
Springboot自动装配主要是基于注解编程和约定优于配置的思想来进行设计的
自动装配就是自动地把其他组件中的Bean装载到IOC容器中,不需要开发人员再去配置文件中添加大量的配置
我们只需要在SpringBoot的启动类上添加一个@SpringBootApplication的注解,就可以开启自动装配
SpringBootApplication底层最重要的一部分是@EnableAutoConfiguration这个注解来实现的,它作用是:
-
读取所有jar包/META-INF/spring.factories文件中EnableAutoConfiguration键对应的值
-
这些值必须声明为Spring的配置类,也就是在类中需要向Spring容器放入对象
-
为了防止非当前所需的组件进入到容器,配置类中需要使用@Conditional注解来声明配置成立的必要条件
3、SpringBoot的核心注解是哪个
SpringBoot的核心注解在启动类上,叫@SpringBootApplication,主要组合包含了以下3个注解:
-
@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能
-
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项
-
@ComponentScan:Spring组件扫描,默认会扫描启动类所在的包
4、SpringBoot中的starter是干什么的
当项目足够复杂时,因为涉及的组件太多了,就需要引入很多的依赖,此时管理依赖就边的很麻烦
此时SpringBoot的starter就派上用场了,每个starter都可以为我们提供某个服务场景所需要的一系列依赖
在导入starter之后,SpringBoot主要帮我们完成了两件事情:
-
相关组件的自动导入
-
相关组件的自动配置
5、SpringBoot可以有哪些方式加载配置
SpringBoot支持很多种方式加载配置,常见有
-
配置文件,直接在项目中提供SpringBoot支持的配置文件,比如properties、yaml 、yml
-
系统环境变量,SpringBoot是可以读取系统环境变量中的配置信息的,但不推荐这么做
-
命令行参数,SpringBoot在项目启动的时候运行通过命令行直接传递参数,一般用于临时修改配置的情况
6、bootstrap.yml和application.yml有何区别
这是SpringBoot支持的两个核心配置文件,区别点在于
-
boostrap比applicaton优先加载,在应用程序上下文的引导阶段生效,且里面的属性不能被覆盖
一般来说我们在SpringCloud Config或者Nacos中会用到它
-
application用于SpringBoot项目的自动化配置,一般来说我们会将自己项目的业务配置项写在这里面
7、SpringBoot读取配置的方式有几种
SpringBoot常见的读取配置信息的方式有两种:
-
使用@Value配合EL表达式(@Value("${name}"))注解直接注入对应的值
-
使用@ConfigurationProperties注解把对应的值绑定到一个配置对象,然后将配置对象注入到需要的地方
推荐使用使用第二种方式,在配置比较多的情况下,操作简单,可读性好
8、SpringBoot项目如何热部署
Spring Boot有一个开发工具(DevTools)模块,通过它可以实现SpringBoot项目的热部署
也就是开发人员将文件更改后,它会自动部署到服务器并自动重启服务器。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency>
9、SpringBoot项目如何实现方法的异步调用
异步调用指的是a方法在调用b方法的时候,无需等待b方法执行完毕,就可以继续向下执行
一般用在a方法无需使用b方法返回结果的场景下,可以在一定程度上提高运行效率
在SpringBoot中使用异步调用是很简单的,只需要做两个操作就可以了
-
在启动类上添加@EnableAsync注解,开启异步调用支持
-
在被调用的方法上添加@Async注解
controller-a(){代码1 service-a()代码3 }@Asyncservice-a(){}
10、SpringBoot中如何实现定时任务
在SpringBoot中使用定时任务主要有两种方式,一个就是使用SpringTask,另一个则是使用第三方框架Quartz
SpringTask主要是通过@Scheduled注解来实现定时任务触发的,格式如下
@Scheduled(fixedRate = 5000)public void printTime() {System.out.println(new Date().toLocaleString());}
主要属性如下:
-
fixedRate:按一定的频率执行任务,参数类型为long,单位 ms
-
fixedDelay:上一次任务执行完后多久再执行,参数类型为long,单位 ms
-
initialDelay:延迟多久再第一次执行任务,参数类型为 long,单位 ms
-
cron:使用cron表达式指定任务在特定时间执行
11、SpringBoot中如何解决跨域问题
跨域是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制
当浏览器从一个域名的网页去请求另一个域名的资源时,出现域名、端口、协议任一不同,都属于跨域

SpringBoot解决跨域很简单,执行添加一个配置类实现WebMvcConfigurer接口然后重写addCorsMappings方法即可
@Configurationpublic class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*")//允许跨域访问的路径.allowCredentials(true).allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")//运行跨越的请求方式.maxAge(3600);}}
12、如何理解拦截器
拦截器是Spring提供的一种拦截机制,目的是实现对指定请求路径进行拦截,然后做成指定的处理
自定义一个拦截器需要实现HandlerInterceptor,并重写接口中定义的3个方法
-
preHandle: 这个方法在Controller处理请求之前被调用,通过方法的返回值可以确定是否放行请求
-
postHandle:这个方法在Controller处理请求之后被调用
-
afterCompletion:这个方法将在整个请求结束之后被调用,此方法主要用于进行资源清理

13、拦截器和过滤器的区别是什么
拦截器和过滤器都可以实现请求的拦截处理,不同点有下面几个:
-
技术栈所属不同:过滤器属于JavaWeb技术,依赖Servlet容器;而拦截器是属于Spring的技术
-
实现原理不同:拦截器是基于Java的反射机制,而过滤器是基于函数回调
-
拦截范围不同:过滤器可以拦截所有请求,而拦截器主要是针对发往controller请求
-
拦截位置不同:过滤器在前端控制器前拦截行,而拦截器在前端控制器后拦截
相关文章:
Java面试题———SpringBoot篇
目录 1、项目中为什么选择SpringBoot 2、SpringBoot的自动装配原理 3、SpringBoot的核心注解是哪个 4、SpringBoot中的starter是干什么的 5、SpringBoot可以有哪些方式加载配置 6、bootstrap.yml和application.yml有何区别 7、SpringBoot读取配置的方式有几种 8、Spring…...
模块化沙箱:构建零信任架构的关键技术
在数字化时代,数据安全成为了企业和机构关注的焦点。模块化沙箱作为一种创新的数据安全解决方案,正逐渐成为保护敏感信息的有力工具。深信达模块化沙箱,凭借其高灵活性和高扩展性,为不同安全需求提供了定制化的解决方案。 模块化沙…...
10.14学习日志
一.矩阵 接上篇 11.伴随矩阵 设 A 是一个 nn 的方阵,其元素为 aij。伴随矩阵 adj(A)或A* 是一个 nn的矩阵,其第 i 行第 j 列的元素是 A 的余子式 Mji 的代数余子式 Cji,即: 其中 Mji是 A 的第j 行第i 列元素的余子式࿰…...
“我们为什么缺少科学精神”演讲内容拆解
演讲人张双南,视频链接: https://tv.cctv.com/2017/04/23/VIDEdqzdpmxStYXAmYBdgDP7170423.shtml...
openpyxl 3.0.7 中文教程
openpyxl 3.0.7 中文教程 python Execl 处理库教程 https://openpyxl-chinese-docs.readthedocs.io/zh-cn/latest/tutorial.html#id2 案例: 生成表格,设置单元格样式 from openpyxl import Workbook from openpyxl.styles import Font, Border, Side, …...
idea开发工具使用
idea开发工具使用 1.idea下载 2.idea设置 字体 编码格式 换行 忽略大小写 自动导包 各方法之间加横线 3.快捷键 4.导入工程 5.安装scala插件 6.运行代码 7.导入jar包 8.git托管 9.打jar包...
Android map 获取值
Android Map 获取值的完整指南 在Android开发中,使用Map(映射)来存储和检索数据是非常常见的需求。Map是一种键值对集合,能够快速而高效地根据特定的键获取值。在这篇文章中,我们将深入探讨如何在Android应用中使用Ma…...
Leetcode.13 罗马数字转整数
关键词:to_string, string.size(), string.length() 1.题目 2.解答思路及解答 解答思路: 首先,罗马数字表达中和常规数学表达类似,基本是按照从后往前,从小到大排列。因此,理论上只需要从后往前相加即可。…...
骨架提取(持续更新)
一 什么是骨架提取 1.1 简介 骨架提取是图像处理或计算机视觉中的一种技术,用于从二值化图像中提取物体的中心线或轮廓,通常称为“骨架”或“细化图像”。这一技术主要用于简化形状表示,同时保留物体的拓扑结构。 这里我们强调了ÿ…...
B3622 枚举子集
1. 注意dfs内,for循环的遍历,想清楚把什么赋值给a[x] 2.本题只需要把0或1赋值给a[x]所以 #include<bits/stdc.h> using namespace std; int n; int a[20]; int vis[20]; void pr() {for (int i 1; i < n; i) {if (a[i] 0)cout << N;els…...
git submodule add用法
背景 介绍 git submodule add 命令用于将一个 Git 仓库作为子模块添加到另一个 Git 仓库中。子模块是一个独立的 Git 仓库,但它被嵌套在另一个 Git 仓库中,并且可以通过主仓库进行管理。当你需要在主项目中引用另一个项目(子模块)…...
计算机毕业设计 基于Python的汽车销售管理系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
主流的安全测试工具知识点
1. 静态应用安全测试(SAST)工具 工具示例: SonarQube: 支持多种编程语言的代码质量和安全分析。Checkmarx: 提供全面的代码扫描和漏洞检测。知识点: 分析源代码或二进制代码以发现潜在的安全漏洞。早期发现和修复代码中的安全问题,减少修复成…...
如何接入实时期货行情数据 - 2024最新教程
期货市场通过标准化合约的交易,为投资者提供了在大宗商品、金融工具等方面进行风险对冲和投机的机会。量化交易以计算机模型为核心,通过历史数据和实时数据进行分析和策略执行,减少人为情绪对交易的干扰。由于期货市场的波动性强且价格变化迅…...
通义灵码:AI 编码的强大助力
一、通义灵码简介 通义灵码是阿里云推出的智能编码辅助工具,以通义大模型为基础,提供多种强大功能助力开发者高效编码。 通义灵码集成了行级 / 函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等…...
docker 容器启动详解
1.启动容器 示例 1:启动一个复杂的 Web 应用容器 docker run -d \ -p 8080:80 \ -v /data/webapp:/app \ -e APP_ENVproduction \ -e DB_HOSTdb.example.com \ -it \ --network my_network \ --name webapp_container \ --restart always \ --memory 1g \ --cpu-sh…...
【spring ai】java 实现RAG检索增强,超快速入门
rag 需求产生的背景介绍: 在使用大模型时,一个常见的问题是模型会产生幻觉(即生成的内容与事实不符),同时由于缺乏企业内部数据的支持,导致其回答往往不够精准和具体,偏向于泛泛而谈。这些问题…...
【Java SE 题库】递归的魅力之--> 汉诺塔问题
🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 题目 2. 分析 2.1 图解 2.2 代码解析 3. 完整代码 3.1 运行截图 4. 小结 1. 题目 汉诺塔问题是一个经典的递归问题,源自一个古老的印度传…...
《为什么要在三层交换机 VLAN 上配置 IP 地址?》
如果在三层交换机上划分了 VLAN10 和 VLAN20 但没有给 IP 地址的情况下,只有相同 VLAN 的端口之间才能相互通信。 这是因为在没有为 VLAN 配置 IP 地址(即没有创建 SVI,交换虚拟接口)时,三层交换机仅作为一个二层设备…...
Git的基本使用入门
参考:Git速查 git的基本概念 git常用命令大部分是基于三大分区来执行的。先来了解一些专有名词吧。 工作区,也叫 Working Directory暂存区,也叫 stage,index版本库,也叫本地仓库,commit History 将代码推…...
避坑指南:Windows下OpenCV摄像头索引混乱问题的3种解决之道
避坑指南:Windows下OpenCV摄像头索引混乱问题的3种解决之道 在工业视觉和智能监控领域,多摄像头协同工作是常见需求。但当你在Windows平台上使用OpenCV的VideoCapture接口时,可能会遇到这样的困扰:每次重启系统后,原本…...
深入解析串口通信:从RS232到RS485的工业应用实战
1. 串口通信的工业应用基础 第一次接触工业自动化项目时,我被现场密密麻麻的线缆搞得头晕眼花。直到老师傅指着角落里不起眼的两根双绞线说:"这条RS485总线控制着整条生产线的30台设备",我才意识到串口通信在工业领域的强大之处。 …...
SEO排名专家的工作内容是什么_如何成为一名出色的SEO排名专家
<h2>SEO排名专家的工作内容是什么</h2> <p>SEO排名专家,全称搜索引擎优化专家,是一类致力于提升网站在搜索引擎中排名的专业人士。他们的工作内容涵盖了广泛的技术和策略,旨在让网站在搜索结果中获得更高的曝光率ÿ…...
Windows下Go-FastDFS对象存储系统:从零搭建到可视化管理的完整指南
1. Go-FastDFS简介与核心优势 Go-FastDFS是一个基于HTTP协议的轻量级分布式文件存储系统,特别适合中小型项目快速搭建文件存储服务。我第一次接触这个系统是在2019年,当时需要一个简单易用的文件存储方案来支撑公司内部的文件共享需求。经过对比多个方案…...
OpenClaw调试技巧:QwQ-32B任务失败的根本原因分析
OpenClaw调试技巧:QwQ-32B任务失败的根本原因分析 1. 问题背景与诊断框架 上周我在尝试用OpenClaw对接本地部署的QwQ-32B模型时,遇到了一个典型问题:简单的文件整理任务总是执行到一半就中断,控制台只显示"模型响应超时&qu…...
具身智能系统集成与计算效率优化路径探析
具身智能作为连接人工智能与物理世界的核心载体,通过融合感知、决策、执行等多模块实现自主交互,其系统集成的合理性与计算效率的高低,直接决定了智能体在复杂场景中的落地能力。当前,具身智能正从实验室走向产业化应用࿰…...
Ludusavi完整指南:如何专业备份和管理PC游戏存档
Ludusavi完整指南:如何专业备份和管理PC游戏存档 【免费下载链接】ludusavi Backup tool for PC game saves 项目地址: https://gitcode.com/gh_mirrors/lu/ludusavi Ludusavi是一款基于Rust语言开发的跨平台PC游戏存档备份工具,专为保护玩家游戏…...
如何用FCEUX重温经典游戏?全场景部署指南
如何用FCEUX重温经典游戏?全场景部署指南 【免费下载链接】fceux FCEUX, a NES Emulator 项目地址: https://gitcode.com/gh_mirrors/fc/fceux 为什么选择FCEUX模拟器?🎮 在众多NES模拟器中,FCEUX凭借三大核心优势脱颖而出…...
MybatisPlus分页插件PaginationInnerInterceptor原理解析与实战配置指南
MybatisPlus分页插件PaginationInnerInterceptor深度剖析与高效实践 当你在Spring Boot项目中处理海量数据时,分页查询就像给数据装上精准导航——而MybatisPlus的PaginationInnerInterceptor正是这个导航系统的核心引擎。不同于简单配置就能用的工具类,…...
AT32F435_437_USB_MSC_SDIO:实现高效SD卡U盘功能的开发指南
1. 从零开始:AT32F435/437的USB MSC功能初探 第一次接触AT32F435/437的USB大容量存储设备(MSC)功能时,我完全被它的实用性惊艳到了。想象一下,你的嵌入式设备突然变身成电脑上的U盘,可以直接拖拽文件读写SD卡,这对数据…...
