SpringBoot系列十三:SpringBoot面试常见问题

news/2025/10/18 18:20:45/文章来源:https://www.cnblogs.com/leeSmall/p/19150021

你觉得 SpringBoot 最大的优势是什么呢?

答:SpringBoot 的最大的优势是“约定优于配置“。“约定优于配置“是一种软件设计范式,开发人员按照约定的方式来进行编程,可以减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。

SpringBoot 中 “约定优于配置“的具体产品体现在哪里?

答:SpringBoot Starter、SpringBoot Jpa 都是“约定优于配置“的一种体现。都是通过“约定优于配置“的设计思路来设计的,SpringBoot Starter 在启动的过程中会根据约定的信息对资源进行初始化;SpringBoot Jpa 通过约定的方式来自动生成 Sql ,避免大量无效代码编写。

SpringBoot Starter 的工作原理是什么?

答: SpringBoot 在启动的时候,按照约定去读取 SpringBoot Starter 的配置信息,再根据配置信息对资源进行初始化,并注入到 Spring 容器中。这样 SpringBoot 启动完毕后,就已经准备好了一切资源,使用过程中直接注入对应 Bean 资源即可。

具体干了这几件事情:

  • ① SpringBoot 在启动时会去依赖的 Starter 包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包。

  • ② 根据 spring.factories 配置加载 AutoConfigure 类

  • ③ 根据 @Conditional 注解的条件,进行自动配置并将 Bean 注入 Spring Context

SpringBoot 的自动配置是如何实现的?

SpringBoot 项目的启动注解是:@SpringBootApplication,是一个复合注解,由下面三个注解组成的:

  • @EnableAutoConfiguration

  • @ComponentScan
  • @Configuration

其中 @EnableAutoConfiguration注解是实现自动配置的入口,该注解又通过 @Import 注解导入了AutoConfigurationImportSelector类,在AutoConfigurationImportSelector类中加载 META-INF/spring.factories 的配置信息,然后筛选出以 EnableAutoConfiguration 为 key 的数据,加载到 IOC 容器中,实现自动配置功能!

方便理解记忆链条:

@EnableAutoConfiguration注解自动配置入口 ->  @Import 注解 导入了AutoConfigurationImportSelector类 -> AutoConfigurationImportSelector类中加载 META-INF/spring.factories 配置 -> 筛选出以 EnableAutoConfiguration 为 key 的数据,加载到 IOC 容器中实现自动配置

什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?

思考一下在你的虚拟机上部署应用程序需要些什么。

第一步:安装 Java

第二部:安装 Web 或者是应用程序的服务器(Tomat/Wbesphere/Weblogic 等等)

第三部:部署应用程序 war 包

如果我们想简化这些步骤,应该如何做呢?

让我们来思考如何使服务器成为应用程序的一部分?

你只需要一个安装了 Java 的虚拟机,就可以直接在上面部署应用程序了,

是不是很爽?

这个想法是嵌入式服务器的起源。

什么是嵌入式服务器:

当我们创建一个可以部署的应用程序的时候,我们将会把服务器(例如,tomcat)嵌入到可部署的服务器中,这就是嵌入式服务器。

例如,对于一个 SpringBoot 应用程序来说,你可以生成一个包含 Embedded Tomcat 的应用程序 jar。你就可以像运行正常 Java 应用程序一样来运行 web 应用程序了。

嵌入式服务器就是我们的可执行单元包含服务器的二进制文件(例如,tomcat.jar)。

使用嵌入式服务器的好处:

可以简化传统部署应用程序的步骤,只需要安装Java虚拟机,然后直接部署应用程序即可。

SpringBoot 如何设置支持跨域请求?

现代浏览器出于安全的考虑, HTTP 请求时必须遵守同源策略,否则就是跨域的 HTTP 请求,默认情况下是被禁止的,IP(域名)不同、或者端口不同、协议不同(比如 HTTP、HTTPS)都会造成跨域问题

一般前端的解决方案有:

  • ① 使用 JSONP 来支持跨域的请求,JSONP 实现跨域请求的原理简单的说,就是动态创建<script>标签,然后利用<script>的 SRC 不受同源策略约束来跨域获取数据。缺点是需要后端配合输出特定的返回信息。

  • ② 利用反应代理的机制来解决跨域的问题,前端请求的时候先将请求发送到同源地址的后端,通过后端请求转发来避免跨域的访问。

后来 HTML5 支持了 CORS 协议。CORS 是一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。它通过服务器增加一个特殊的 Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,如果浏览器支持 CORS、并且判断 Origin 通过的话,就会允许 XMLHttpRequest 发起跨域请求。

前端使用了 CORS 协议,就需要后端设置支持非同源的请求,SpringBoot 设置支持非同源的请求有两种方式。

第一,配置 CorsFilter。

 1 @Configuration
 2 public class GlobalCorsConfig {
 3     @Bean
 4     public CorsFilter corsFilter() {
 5         CorsConfiguration config = new CorsConfiguration();
 6           config.addAllowedOrigin("*");
 7           config.setAllowCredentials(true);
 8           config.addAllowedMethod("*");
 9           config.addAllowedHeader("*");
10           config.addExposedHeader("*");
11 
12         UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
13         configSource.registerCorsConfiguration("/**", config);
14 
15         return new CorsFilter(configSource);
16     }
17 }

 

需要配置上述的一段代码。第二种方式稍微简单一些。

第二,在启动类上添加:

public class Application extends WebMvcConfigurerAdapter {  @Override  public void addCorsMappings(CorsRegistry registry) {  registry.addMapping("/**")  .allowCredentials(true)  .allowedHeaders("*")  .allowedOrigins("*")  .allowedMethods("*");  }  
}  

Spring 、SpringBoot 和 SpringCloud 的关系?

Spring 最初最核心的两大核心功能 Spring Ioc 和 Spring Aop 成就了 Spring,Spring 在这两大核心的功能上不断的发展,才有了 Spring 事务、Spring Mvc 等一系列伟大的产品,最终成就了 Spring 帝国,到了后期 Spring 几乎可以解决企业开发中的所有问题。

SpringBoot 是在强大的 Spring 帝国生态基础上面发展而来,发明 SpringBoot 不是为了取代 Spring ,是为了让人们更容易的使用 Spring

SpringCloud 是一个微服务治理框架,基于SpringBoot实现,它利用 SpringBoot 的开发便利性巧妙地简化了分布式系统基础设施的开发。如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 SpringBoot 的开发风格做到一键启动和部署。

SpringCloud 是为了解决微服务架构中服务治理而提供的一系列功能的开发框架,并且 SpringCloud 是完全基于 SpringBoot 而开发,SpringCloud 利用 SpringBoot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案。

用一组不太合理的包含关系来表达它们之间的关系。

Spring ioc/aop > Spring > SpringBoot > SpringCloud

JPA 和 Hibernate 有哪些区别?JPA 可以支持动态 SQL 吗?

JPA本身是一种ORM规范(不是ORM框架,因为JPA并未提供ORM实现,只是制定了规范)因为JPA是一种规范,所以,只是提供了一些相关的接口,但是接口并不能直接使用,JPA底层需要某种JPA实现,Hibernate 是 JPA 的一个实现集

JPA 是根据实体类的注解来创建对应的表和字段,如果需要动态创建表或者字段,需要动态构建对应的实体类,再重新调用Jpa刷新整个Entity。动态SQL,mybatis支持的最好,jpa也可以支持,但是没有Mybatis那么灵活。

shiro和oauth还有cas他们之间的关系是什么?问下您公司权限是如何设计,还有就是这几个概念的区别。

cas和oauth是一个解决单点登录的组件,shiro主要是负责权限安全方面的工作,所以功能点不一致。但往往需要单点登陆和权限控制一起来使用,所以就有 cas+shiro或者oauth+shiro这样的组合。

token一般是客户端登录后服务端生成的令牌,每次访问服务端会进行校验,一般保存到内存即可,也可以放到其他介质;redis可以做Session共享,如果前端web服务器有几台负载,但是需要保持用户登录的状态,这场景使用比较常见。

我们公司使用oauth+shiro这样的方式来做后台权限的管理,oauth负责多后台统一登录认证,shiro负责给登录用户赋予不同的访问权限。

各服务之间通信,对Restful和Rpc这2种方式如何做选择?

在传统的SOA治理中,使用rpc的居多;SpringCloud默认使用restful进行服务之间的通讯。rpc通讯效率会比restful要高一些,但是对于大多数公司来讲,这点效率影响甚微。我建议使用restful这种方式,易于在不同语言实现的服务之间通讯。

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

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

相关文章

人生四大支柱 - 健康,金钱,工作,关系

人生四大支柱 如果把人生看作是一座大厦,想要这座大厦扛过人生一路的风风雨雨,让他能安稳长久,必须有坚实的支柱支撑大厦。 细数下来,最主要的有四根柱子:健康、金钱、工作、关系。它们相互依存,缺了哪一根,生活…

【Docker项目实战】使用Docker部署IT运维管理平台CAT - 指南

【Docker项目实战】使用Docker部署IT运维管理平台CAT - 指南2025-10-18 17:52 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

2025 夹丝玻璃源头厂家最新推荐排行榜:解析防火 / 艺术 / 酒店等多场景厂商优势,助力精准选型

引言随着夹丝玻璃在防火防爆、艺术装饰、高端家居等场景的应用愈发广泛,市场需求持续攀升,但行业乱象也随之凸显。部分厂商缺乏核心技术,产品强度、透光率等关键指标未达 GB/T 18091 标准,金属丝分布不均、粘结强度…

2025 中空板源头厂家最新推荐排行榜揭晓:覆盖全产业链,老牌与新锐共筑品质标杆

引言在物流包装、广告展示、建筑防护等多领域需求的驱动下,中空板市场规模持续扩张,源头厂家数量随之激增。然而,行业内仍存在产品性能参差、定制能力不足、售后保障缺失等问题,部分企业因选错供应商面临交货延迟、…

2025 中空板源头厂家最新推荐排行榜揭晓:覆盖全产业链,老牌与新锐共筑品质标杆

引言在物流包装、广告展示、建筑防护等多领域需求的驱动下,中空板市场规模持续扩张,源头厂家数量随之激增。然而,行业内仍存在产品性能参差、定制能力不足、售后保障缺失等问题,部分企业因选错供应商面临交货延迟、…

adb安装教程(附adb命令大全详解)adb环境部署教程

adb安装教程(附adb命令大全详解)adb环境部署教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

2025 年感温电缆厂家最新推荐榜单:覆盖线型 / 缆式 / 可恢复 / 消防等多类型产品,全方位解析头部企业核心优势

在工业生产、城市基建等领域,火灾安全防护是保障生命财产安全的关键环节,而感温电缆作为火灾探测的核心设备,其品质与性能直接决定了火灾预警的及时性与准确性。当前感温电缆市场呈现品牌繁杂、产品质量差异显著的态…

2025 年盖板源头厂家最新推荐榜单:电力 / 隧道 / 电缆沟等多场景适用品牌优选,解析原材料采购与成本控制要点

引言当前盖板市场需求持续攀升,市政工程、电厂、高铁隧道等多场景对盖板的质量、适配性及成本性价比要求愈发严苛。但行业内部分厂家存在原材料把控不严、成本管控失衡、定制服务滞后等问题,导致采购方难以精准筛选可…

win

ed2k://|file|cn_windows_10_business_editions_version_1909_x64_dvd_0ca83907.iso|5275090944|9BCD5FA6C8009E4D0260E4B23008BD47|/

2025 年真空炉制造厂家最新推荐排行榜:涵盖高温烧结真空炉 / 真空退火炉 / 智能铍铜真空炉,助力企业精准选型

当前工业 4.0 持续推进,半导体、5G 通信、航空航天等尖端产业对真空炉的需求日益攀升,同时对设备智能化、节能性、温控精度的要求也不断提高。然而,真空炉市场品牌繁杂,产品质量参差不齐,部分设备存在升温慢、能耗…

2025 年最新推荐排水沟厂家排行榜:聚焦树脂 / 线性 / 树脂混凝土 / 成品 / U 型排水沟优质企业

在市政工程、电厂建设、道路施工等基础设施项目中,排水沟质量直接关乎工程稳定性与使用寿命。当前市场上排水沟产品质量参差不齐,部分产品存在强度不足、易腐蚀、安装后异响移位等问题,增加后期维护成本且埋下安全隐…

将 XMind 测试用例转换为 CSV 文件导入测试管理平台

将 XMind 测试用例转换为 CSV 文件导入测试管理平台实用教程及脚本在日常的软件测试工作中,我们常常使用 XMind 来整理测试用例。XMind 的可视化结构让用例层次清晰、逻辑直观,但当我们需要将这些用例导入到测试管理…

互评-OO之接口-DAO模式代码阅读及应用

集美大学课程实验报告-互评-OO之接口-DAO模式代码阅读及应用项目名称 内容课程名称 Java班级 网安2413指导教师 郑如滨学生姓名 林沁茹学号 202421336067实验项目名称 互评-OO之接口-DAO模式代码阅读及应用上机实践日期…

【为美好CTF献上祝福】unity逆向

咕咕,有点懒,以后再更 当你正在做一道逆向题,下载文件后发现得到一个unity文件,此时你应该: 第一步:判断

今日学习笔记

AI 学习与人脑类比总结文档 一、AI 与人类学习的本质 • 共同点:无论是人类大脑还是人工神经网络,本质上都是在寻找并逼近输入与输出之间的复杂映射函数。 • 人类学习:通过感官获取信息 → 在大脑形成突触连接 → …

CSP-S 2022 Solution

CSP-S 2022 题解报告\[『山鸟与鱼不同路,从此山水不相逢。莫问故人长短痛,昨夜星辰皆随风』 \]\[\LARGE CSP-S\ \ 2022 题解报告\\ Author : Floyd.Uranus \]题目 假期计划 策略游戏 星战 数据传输算法概览 \(贪心,…

印刷电子技术挑战传统PCB主导地位

荷兰初创企业TracXon获得475万欧元种子轮融资,致力于推广混合印刷电子技术。该技术通过卷对卷制造工艺直接在可回收薄膜上印刷电路,无需铜材、焊料或有毒化学品,可降低80%碳排放,目标在2033年前替代至少10%的传统印…

2025-10-18

2025-10-18verilator的赋值也是有时序的,在调用top->eval()前用所用的verilog的输出都是旧值。另外ELF文件结构这块还是需要看一下的,例如看一下《程序员的自我修养》这本书

某兔网站加密学习

声明:本文仅作学习交流,请遵守法律法规,不要恶意爬取网站 某兔快递单号查询抓接口,发现载荷里面有一个S参数非常神秘正常断点跟堆栈发现是异步操作,一步步跟进,发现走到了app开头的这个JS中。 搜索:e.s = a.cre…

5.vtk学习——点云显示进阶

介绍 承接上文,介绍下面的显示效果如何实现。如果能理解之前的内容,这里的思路是很自然的。三角化会把点相连创建出一个个三角面。这个三角面不就是需要显示的拓扑结构吗。 从Halcon里面获取到三角化后创建的三角形数…