Java面试 —— SpringBoot

news/2025/1/12 17:53:40/文章来源:https://www.cnblogs.com/codyxz/p/18666049

什么是SpringBoot

Spring Boot 是一个开源的 Java 框架,用于简化 Spring 应用程序的开发过程,减省了繁重的配置文件,提供了各种启动器,开发者能快速上手

SpringBoot的优点、

  • 自动配置:根据项目的依赖关系自动配置 Spring 框架

  • 内嵌服务器:内嵌Tomcat或Jetty、 Undertow 等Servlet容器;

  • 开箱即用:SpringBoot提供了许多默认的配置和模版,使开发者可以快速上手

  • 提供可选的starter,简化应用整合:场景启动器(starter):web、json、邮件、oss(对象存储)、异步、定时任务、缓存...

  • 开发工具支持:支持自动重启、热部署

SpringBoot的核心注解

@SpringBootApplication注解包含了三个注解:

  • @SpringBootConfiguration:包含了@Configuration注解,实现配置文件的功能

  • @EnableAutoConfiguration:启动自动配置,也可以关闭某个自动配置的选项

  • @ComponentScan:Spring组件臊面

Java Config

提供了配置Spring IOC容器的纯Java方法,优点:

  • 面向对象的配置:是Java类,用户可以充分利用Java的面向对象功能,一个配置类可以继承另一个,重写它的@Bean方法

  • 减少或消除XML配置

  • 类型安全和重构友好:JavaConfig提供了一种安全的方法来配置Spring容器,可以按照类型而不是按照名称来检索,不需要进行强转或者基于字符串的查找

自动配置原理

  Spring Boot的自动装配机制是其核心特性之一,它允许开发者通过引入相应的Starter依赖,自动配置Spring应用程序中所需的bean,从而大大减少了手动配置的工作量。这一机制的实现主要依赖于@SpringBootApplication注解,它包含了@Configuration@EnableAutoConfiguration@ComponentScan三个关键注解。其中,@EnableAutoConfiguration注解负责启用自动配置功能,它会根据项目的依赖关系和类路径中的jar包来自动注册所需的bean。,Spring Boot会通过SpringFactoriesLoader类读取META-INF/spring.factories文件中的配置,找到所有自动配置类的全路径名,并利用ImportSelector接口实现对这些配置类的动态加载。这些自动配置类通常位于第三方jar包中,并使用了@Configuration@Bean注解来声明要装配到IOC容器的bean对象。

配置文件加载顺序

  1. 命令行参数配置

  2. 项目名/config/配置文件

  3. 项目名/配置文件

  4. src/main/resources/config/配置文件

  5. src/main/resources/配置文件

SpringBoot的核心配置文件

SpringBoot的两个核心配置文件:

  • bootstrap:由父ApplicationContext加载,比Application优先级高,配置在应用程序上下文的引导阶段生效,一般会在Spring Cloud Config中用,且其属性不会被覆盖

  • applicantion:由ApplicationContext加载,用于SpringBoot的自动化配置

Spring profile

  Spring Profile 是 Spring 框架的核心特性之一,它允许开发者将 Bean 映射到不同的环境配置中,如开发(dev)、测试(test)和生产(prod)环境。通过在不同环境中激活特定的 Profile,可以确保只加载当前环境所需的 Bean。

Spring Security 和 Shiro

  • Shiro比Spring Security更容易使用,也就是实现上简单一些

  • Spring Security社区支持度更高,支持力度和更新维护上有优势,同时和Spring这一套的结合较好。

  • Shiro 功能强大、且 简单、灵活。是Apache 下的项目比较可靠,且不跟任何的框架或者容器绑定,可以独立运行。

Spring Boot 中如何解决跨域问题

跨域可以在前端通过JSONP来解决,但是JSONP只能发送GET请求,无法发送其他类型的请求,在Restful风格的应用中,比较鸡肋

  • 添加@CrossOrigin注解

  • 添加CORS过滤器

  • 实现WebMvcConfigurer,重写addCorsMappings方法

  • 引入Spring Security(引入后,第一种和第三种会失效,这两种方案的原理是使用Spring中的拦截器,过滤器的执行顺序在拦截器之前,加入Spring Security后,会引入很多过滤器,导致之前的配置失效,想要让第二种方式生效,需要使用@Order注解指定顺序)

什么是 CSRF 攻击

CSRF 代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

简单来说就是,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品))。因为浏览器之前认证过,所以被访问的站点会觉得这是真正的用户操作而去运行。

SpringBoot中的监视器

用于监控和管理SpringBoot应用程序的工具集。通过Spring boot actuator,可以在应用运行过程中查看健康状态、指标、应用配置、环境变量等信息,通过它,我们可以更方便的进行应用的监控、调试、诊断和管理,其公开了一组可直接作为 HTTP URL 访问的REST 端点来检查状态

如何在 Spring Boot 中禁用 Actuator 端点安全性

默认情况下,Actuator 的端点由 Spring Security 保护,所有敏感的HTTP端口都是安全的,只有 Actuator 角色的用户可以访问它们,可以通过以下方式来禁用:

  • 通过完全排除 Spring Security 来禁用安全性

  • 通过自定义的 Spring Security 配置来禁用 Actuator 端点的安全性,保留其他部分的安全性保护

  • 通过配置文件暴露特定的端点,限制暴露的敏感信息

如何监视所有的 SpringBoot 微服务

什么是 WebSockets

什么是 Spring Data

什么是 Swagger

用于设计、构建、文档化和使用 Restful API,主要用于生成API文档,并提供了可视化交互界面,Swagger 最初是由 Wordnik 开发的,现在是 OpenAPI 规范的一部分

如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?Spring Boot 项目如何热部署?

通过DevTools实现,导入依赖后,允许开发者在修改代码后,无需重启服务器或者重新部署就能看到更改的效果

您使用了哪些 starter maven 依赖项

Web项目

  • spring-boot-starter-web:用于构建基于SpringMVC的Web应用

  • spring-boot-starter-thymeleaf:用于构建基于 Thymeleaf 模板引擎的 Web 应用,常用于生成 HTML 页面的渲染

数据访问

  • spring-boot-starter-data-jpa:用于构建基于 JPA 的持久层应用

  • spring-boot-starter-jdbc

  • mysql -connector-j

  • mybatis-plus-boot-starter

  • p6spy-spring-boot-starter:SQL检测工具,针对数据库访问进行拦截和记录的工具,它通过代理JDBC驱动程序来工作

安全性

spring-boot-starter-security:提供生产环境监控和管理功能,支持健康检查、指标监控、日志管理等功能

测试

spring-boot-starter-test:用于集成测试,包含了 JUnit、Spring Test 等测试工具

日志、缓存

spring-boot-starter-logging:用于日志记录

spring-boot-starter-cache:用于集成缓存功能

Spring Boot 中的 starter 到底是什么

它是一组预配置好的 Maven 依赖,用于简化项目的集成与配置,它提供了一个自动化配置类,一般命名为XXXAutoConfiguration,在这个配置类中通过条件注解来决定一个配置是否生效,然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性

spring-boot-starter-parent 有什么用

它是一个特殊的SpringBoot父级的POM文件,作用:

  • 子项目可以继承父POM中定义的所有插件、依赖、版本等配置

  • 依赖版本管理:会自动管理项目中所有常用库的版本(如:SpringFramework、json)

  • 插件配置:提供了与Maven构建相关的默认插件配置,如打包的SpringBoot Maven插件

  • 默认编码和构建设置:自动配置了编码、构建环境和Java版本

  • 简化配置:通过继承父POM,项目中不需要重复设置版本信息、插件配置和其他构建相关的细节

Spring Boot 打包成的 jar 和普通的 jar 有什么区别

Spring Boot 项目最终打包成的 jar 是可执行 jar,这种jar 可以直接通过java -jar xxx.jar命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类

Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在\BOOT-INF\classes目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用

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

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

相关文章

【bt下载软件qBittorrent-增强版】下载链接

原作者github项目地址:https://github.com/c0re100/qBittorrent-Enhanced-Edition 找到当前的最新版本根据自身需要选择下载版本,这里选的是windows版本

鸟哥的Linux私房菜 基础学习篇 第四版PDF、EPUB免费下载

Linux入门书升级版,适用Linux系统应用和开发及运维的人员,涵盖linux内核,命令行,嵌入式,基于CentOS,7.x适读人群 :Linux初学者 适合Linux管理员作为参考手册 Linux入门书升级版,适用Linux系统应用和开发及运维的人员,涵盖linux内核,命令行,嵌入式,基于CentOS,7.x电…

领域驱动设计:软件核心复杂性应对之道(修订版)PDF、EPUB免费下载

本书是领域驱动设计方面的经典之作,修订版更是对之前出版的中文版进行了全面的修订和完善。全书围绕着设计和开发实践,结合若干真实的项目案例,向读者阐述如何在真实的软件开发中应用领域驱动设计。书中给出了领域驱动设计的系统化方法,并将人们普遍接受的一些实践综合到一…

JAVA之集合

1、集合集合可以存储引用数据类型; 集合不可以存储基本数据类型,若要存储,需封装成包装类;2、集合和数组的对比长度【数组长度固定,集合长度可变】 存储类型【数组可以存基本数据类型和引用数据类型,集合可以存引用数据类型,若存储基本数据类型,需封装成包装类】3、Arr…

[题目记录]P9999 [Ynoi2000] tmostnrq

当前自己写过了码量第二大的题目 , 不管怎么说对拍非常重要 .P9999 [Ynoi2000] tmostnrq 题意 给定 \(n\) 个顶点的树,顶点编号为 \(1,\dots,n\),给定长度 \(n_0\) 的序列 \(a_1,\dots,a_{n_0}\),共 \(m\) 次查询,每次查询给定 \(l,r,x\),问树的顶点 \(x\),依次向 \(a_l,…

多光谱火焰智能监测摄像机

多光谱火焰智能监测摄像机将在未来继续发展。未来的摄像机可能会更加智能化,具备更强的自主识别和决策能力,进一步提升火灾监测的灵敏度和准确性。此外,随着物联网的发展,这些摄像机还有望与其他设备和系统实现更深入的数据共享和集成应用,为整个安全监控体系增添新的可能…

明火智能监测摄像机

明火智能监测摄像机检测到火源时,它会立即触发报警机制,以警告人员采取适当的行动。它可以与各种报警系统集成,发出清晰可闻的警报声,并通过网络将警报信息发送到相关部门或人员的手机应用程序,确保快速响应。明火智能监测摄像机全天候工作,不间断地监测环境中的火情。它…

山体滑坡自动监测识别摄像机

山体滑坡自动监测识别摄像机系统通过技术创新和智能化应用,为减少自然灾害带来的损失和风险提供了重要的技术手段和支持。随着技术的进步和系统的完善,相信这类系统将在全球范围内得到广泛应用,为社会公共安全和环境保护作出更大贡献。对于现代社会而言,山体滑坡作为自然灾…

水位智能监测识别摄像机

水位智能监测识别摄像机的应用前景十分广阔。未来,这些摄像机有望进一步提升监测精度和反应速度,扩展到更多复杂的水域环境和特殊应用场景中,为保障社会公共安全和生态环境做出更大贡献。总之,水位智能监测识别摄像机以其先进的技术和多功能性能,正在成为水域监测领域的重…

1.12 CW 模拟赛 T1. 括号序列

思路 根据赛时的检验, 典型的动点问题的 \(\rm{trick}\) 并不能在这里使用, 也就是说, 分类讨论前缀 + \(i\) + 后缀 前缀 + \(i\) 后缀 + \(i\)是不可行的 考虑括号串问题的常见做法, 先将其赋值成 \(1, -1\) 之后进行处理 你发现这种做法有枚举字段和的瓶颈, 所以也不可行 当…

【Docker】Docker搭建一款开源的RAG聊天应用

项目介绍 Kotaemon是一个由Cinnamon开发的开源项目,旨在提供一个基于检索增强生成(RAG)技术的用户界面,使用户能够与自己的文档进行交互问答。 功能特点 文档问答:Kotaemon允许用户通过自然语言查询与文档进行交互,快速获取所需信息。这一功能在学术研究、企业文档管理等…

客梯自动监测识别摄像机

客梯自动监测识别摄像机通过技术创新和智能化应用,为现代城市客梯的安全管理提供了全新的解决方案。随着技术的不断进步和应用场景的扩展,相信这类系统将在全球范围内得到广泛应用,为乘客的安全出行和客梯运行的高效管理提供更加可靠的保障和支持。当今社会,随着城市建设的…