首页 > 编程语言 >Java面试 —— SpringBoot

Java面试 —— SpringBoot

时间:2025-01-12 17:54:16浏览次数:1  
标签:Java SpringBoot Spring 配置 jar 面试 Boot starter

什么是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 ,一个可执行,一个可引用

标签:Java,SpringBoot,Spring,配置,jar,面试,Boot,starter
From: https://www.cnblogs.com/codyxz/p/18666049

相关文章

  • JAVA之PAI&字符串
    1、API(ApplicationProgrammingInterface):应用程序编程接口JAVAAPI:指的是JDK中提供的各种功能的java类2、字符串String     1.java.long.String类代表字符串     2.字符串的内容是不会发生改变的,它的对象在创建后不能被更改     3.创建Str......
  • C++、Python、Java、JavaScript的fill函数使用
    C++在C++中,std::fill函数用于将指定的值赋给容器或数组中给定范围内的所有元素。它定义在<algorithm>头文件中,函数原型如下:template<classForwardIterator,classT>voidfill(ForwardIteratorfirst,ForwardIteratorlast,constT&value);ForwardIterator:前向迭代......
  • 【JAVA 基础 第(16)课】自定义异常类,会更帅哦
    自定义异常类   编译期异常类: class异常类名 extendsException{}   运行期异常: class异常类名extendsRuntimeException{}   类中添加两个构造方法:一个默认消息的构造方法,一个是指定消息的构造方法代码示例:自定义一个游戏输赢异常类publicclassNot_......
  • JAVA之集合
    1、集合集合可以存储引用数据类型;集合不可以存储基本数据类型,若要存储,需封装成包装类;2、集合和数组的对比长度【数组长度固定,集合长度可变】存储类型【数组可以存基本数据类型和引用数据类型,集合可以存引用数据类型,若存储基本数据类型,需封装成包装类】3、ArrayList【打......
  • 数据结构:栈(Stack)和队列(Queue)—面试题(一)
    目录1、括号匹配2、逆波兰表达式求值 3、栈的压入、弹出序列4、最小栈 1、括号匹配习题链接https://leetcode.cn/problems/valid-parentheses/description/描述:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必......
  • Java程序员不得不会的124道面试题(含答案)
    1)什么是线程局部变量?线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如web服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何......
  • 历史最全大数据开发面试攻略【吐血整理32w+字,260+页】
    备注:下文提到的所有内容均是面试攻略中的标题内容,不包含分析及详细解答。如有需要完整版可以评论或私信联系哈~​​​​​​​        暑期实习、秋招一路走来,踩过不少坑,比如,刚开始在选择岗位时,明确大数据开发后,迷茫如何学习大数据的时候。太多的组件框架、太多的源码......
  • 《JAVA基于SpringBoot的在线拍卖系统》毕业设计项目
    大家好我是蓝天,混迹在java圈的辛苦码农。今天要和大家聊的是一款《JAVA基于SpringBoot的在线拍卖系统》毕业设计项目。项目源码以及部署相关请联系蓝天,文末附上联系信息。......
  • springboot整合EasyExcel导出excel表格
    文章目录什么是EasyExcel?EasyExcel的特点使用EasyExcel导出excel1.添加EasyExcel依赖2.定义converter3.定义导出实体类型4.查询数据库数据并导出5.导出样式什么是EasyExcel?  EasyExcel是阿里巴巴开源的一款高性能、简洁易用的Excel读写工具库,基于Java开......
  • Java中的反射机制及其应用场景
    目录什么是Java反射机制?工作原理主要应用场景注意事项总结什么是Java反射机制?Java反射机制是一种强大的工具,它允许程序在运行时访问、检查和修改其本身的类和对象的信息。通过反射,开发者可以在不知道类的具体实现细节的情况下,动态地操作类的属性和方法。这种能力使得......