4.Java面试题—【Spring】、【Spring Boot】、Spring Cloud、Mybatis-Plus

本文介绍了Spring框架的核心概念,如控制反转(IOC)和面向切面编程(AOP),详细讲解了SpringBean的生命周期、作用域以及SpringBoot的自动配置、Starter和配置文件。此外,还探讨了SpringBoot中的事务管理和接口幂等性保障。同时,文章还涉及MyBatis-Plus的优势及其常用注解。
摘要由CSDN通过智能技术生成

九、Spring Boot

一、Spring 基础知识

什么是 Spring 框架?

Spring 是 一个 轻量级 Java 开发框架,可以提高系统的 开发效率Spring核心概念

  • 控制反转(IOC):由 Spring IOC 容器 管理 对象 的 生命周期 (此时称为 Bean)。
  • 面向切面(AOP)

Spring 框架主要包含哪些模块?

  • spring-core:提供了 Spring 框架基本核心工具类
  • spring-beans:提供对 Bean创建管理 等功能。
  • spring-aop:提供了 面向切面编程 实现。
  • spring-web:提供对 Web 功能 的基础支持。
  • spring-webmvc:提供对 Spring MVC 的实现。

@ - Spring 常用注解有哪些?

  • @Controller:用于标记 控制层
  • @Service:用于标记 业务逻辑层
  • @RequestMapping 等: 处理 请求地址映射
  • @Autowired: 按照 类型(Type) 自动注入 Bean
  • @Value:加载 单个属性值

@ - @RestController 和 @Controller 有什么区别?

  • @RestController@Controller@ResponseBody 组成。
  • @Controller:用于构建 传统 Web 应用程序,返回 视图数据
  • @RestController:用于构建 RESTful 应用程序,返回 JSON 数据

IOC - 解释一下什么是 Spring IOC (控制反转)?

点击查看

  • IOC (控制反转): 是一种设计思想,把设计好的对象交给 容器 控制,而不是在 程序中 手动控制。
  • Spring 框架中,由 Spring 来负责控制 对象的生命周期 。(Spring 提供了一个容器,称为 IoC容器)、(IoC容器 中管理的 对象, 叫做 Bean)

IOC - Spring Bean 是什么?Bean 的生命周期是怎样的?

Spring Bean 的生命周期

Spring Bean 指的是将自己的 生命周期,交给 Spring IoC容器 来管理的 对象


Spring Bean生命周期 如下:

  • 实例化
  • 属性赋值
  • 初始化
  • 销毁

IOC - Spring Bean 的作用域有哪些?

  • 单例模式: IoC 容器中只有 唯一的 Bean。(Spring Bean 默认是 单例模式)。
  • 每次获取创建: 每次获取 都会 创建新的 Bean
  • 每次HTTP请求创建: 每个 HTTP 请求 都会 创建新的 Bean

IOC - Spring 单例 Bean 是线程安全的吗?

结论:有 可变成员变量单例 Bean 不是线程安全的,否则就是 线程安全的解决方法

  • 尽量 避免Bean 中定义 可变的成员变量
  • Bean 中的 成员变量 保存在 ThreadLocal 中。

IOC - @Component 和 @Configuration 的区别?

点击查看

@ComponentScan注解 可以扫描到 @Configuration@Component,并将其交由 Spring Ioc容器 管理。区别

  • @Component 标注在 上, 将该 交给 Spring Ioc容器 进行管理。
  • @Configuration 需要搭配 @Bean 使用。 @Bean 标注在 方法 上, 将该方法 返回实例化对象 交给 Spring Ioc容器 进行管理。

IOC - @Bean 注解有什么作用?

Spring Boot - @Bean

  • @Bean 标注在 方法 上, 将该方法 返回实例化对象 交给 Spring Ioc容器 进行管理。
  • 注1: @Bean 注解作用在 方法 上。
  • 注2: @Bean 一般和 @Configuration 一起使用。

IOC - @Autowired 和 @Resource 有什么区别?

  • @AutowiredSpring 内置的注解,默认的注入方式为 byType (根据 类型 进行匹配)。
  • @ResourceJDK 提供的注解,默认注入方式为 byName (根据 名称 进行匹配)。

IOC - 什么情况下 Bean 会失效?

Spring中有哪些情况会导致@Bean注入失效呢?

  • @ComponentScan 扫描路径配置错误
  • @Bean 标注的方法 重名,即 beanName 相同,导致 Bean覆盖

IOC - Spring 中的循环依赖 是怎么解决的?

Spring — 三级缓存和 循环依赖

Spring 通过 三级缓存 来解决 循环依赖 问题:

  • 第一级缓存:存放 完整Bean对象,这些对象可以 直接使用
  • 第二级缓存:存放的 Bean对象 已经 实例化,但还没有完成 属性填充,这个缓存主要用于解决 循环依赖 问题。
  • 第三级缓存:存放 Bean 工厂,主要用于解决 AOP场景 下的 循环依赖 问题。

Spring 有哪几种读取配置的方式?

  • @Value 注解:加载 单个属性值

AOP - 解释一下什么是 AOP (面向切片编程)?

Spring AOP 使用实例
Spring AOP 的简单实现案例

  • 面向切片编程AOP: 将 非核心业务 封装起来,供 核心业务 调用,从而 减少系统的重复代码,降低模块间的 耦合度
  • Spring AOP 是基于 动态代理 实现的。

  • 切面 (Aspect) - @Aspect:是一个类,包含 切入点通知
  • 切入点 (Pointcut) - @Pointcut: 实际 被增强的方法,称为 切入点
  • 通知 (Advice) - befor、after: 实现需要添加的 非核心逻辑

AOP - Spring AOP 应用场景?

AOP 本质是 动态的 对方法 增强,优雅的实现 横向扩展

  • 记录日志
  • 权限控制
  • 事务管理 (调用方法前 开启事务, 调用方法后提交 关闭事务)

简单介绍下 Spring 的 事件机制 (事件监听器)?

  • Spring的事件机制 是一种用于实现 消息传递 的机制。
  • 事件源 产生 事件 后,会通过 事件广播器事件 发布给所有注册了的 事件监听器事件监听器 接收并处理 事件

二、Spring Boot 基础知识

简单介绍一下 Spring Boot 框架?

Spring Boot 基于 Spring 开发,可以快速创建独立的 Spring 应用程序,而又无需进行复杂的 配置。我认为Spring Boot 的四大 重要特性:

  • 自动配置:可以 快速集成 大量 第三方工具,无需进行 XML 配置。
  • 内嵌容器: 内置 Tomcat 容器。
  • 控制反转 (IOC):由 Spring Ioc容器 管理 对象 的 生命周期 (此时称为 Bean)。
  • 面向切面 (AOP)

Spring Boot 自动配置原理?

SpringBoot原理–自动配置

  • 启动 Spring Boot 项目的时候,@EnableAutoConfiguration 注解开启 自动配置
  • 然后 Spring Boot 会加载 spring.factories文件
  • spring.factories文件 列出了所有 自动配置类全限定名Spring Boot启动时 会根据 pom.xml 中的引用 加载相应的配置类 并进行 自动装配

spring.factories文件 中也包括 Spring Boot Starter全限定名


Spring Boot Starter 的作用?

  • Spring Boot Starter 包含了一组相关的 依赖配置,用于 启动和配置 特定的 功能
  • 主要用于 启动和配置 Spring核心模块 的功能,比如:spring-corespring-beansspring-aopspring-webspring-webmvc 等。

Spring Boot 核心配置文件是什么?

Spring Boot 提供了两种常用的配置文件:

  • properties文件
  • YAML文件

优先级Properties文件 > YAML文件


YAML 配置的优势在哪里 ?

  • 1.减少了重复的前缀, 方便阅读
  • 2.支持数组

三、Spring Boot 事务

Spring Boot 中怎么使用 事务?

SpringBoot 事务的使用

Spring Boot实现事务 的方式主要有两种:声明式事务编程式事务

  • 声明式事务:建立在 AOP 之上的,其本质是 对方法进行拦截,然后在 目标方法 前后加入 事务操作。【使用 @Transactional 注解】
  • 编程式事务:在代码中 显式声明事务

Spring Boot 中事务什么情况下会失效?

Spring事物失效的几种场景

Spring Boot 事务 基于 AOP 实现,因此会为 目标类 创建 代理类

  • 方法被 protected 和 private 修饰:其他包无法访问这个方法,会导致 事务失效
  • 方法被 final 修饰子类 无法 重写 该方法,会导致 事务失效
  • 方法内部调用:因为这种调用方法没有提供 代理对象,则无法获取Bean,会导致 事务失效
  • 类没有被 Spring Ioc 管理:若该类没有被 Spring Ioc 管理,则无法获取Bean,会导致 事务失效

四、其他

(了解) 如何保证 接口 的幂等性?

  • 使用 HTTP 方法GET 方法 都是 幂等的,而 POSTPUTDELETE 不是。
  • 缓存请求结果缓存 接口的 请求结果,当 同一请求 再次到达 服务器 时,可以直接返回之前 缓存的结果
    【需要使用 唯一的标识符 (如 UUID) 对请求进行 标记

十、Spring Cloud 基础知识

微服务基础知识、Spring Cloud基础知识

1.Spring Cloud (Hoxton.SR8) 学习笔记—微服务基础知识、Spring Cloud基础知识


十一、Mybatis-Plus

MyBatis-Plus保姆级快速上手教程

什么是 ORM 框架?

  • ORM 框架:实现了 程序对象关系数据库数据 的映射。【即:对象-关系映射
  • ORM 框架 内部封装了 JDBC

说说什么是 MyBatis?

Mybatis 是⼀个 半ORM框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,而无需关注 加载驱动创建连接 等繁杂的过程。


Mybatis-Plus 相比 Mybatis 的优点?

MyBatis-Plus 是一个 MyBatis增强工具简化开发、提高效率 。有如下优点:

  • 简化代码MyBatis-Plus 内置 通用Mappe、Service,通过 少量代码 即可实现常规 CRUD操作
  • 动态 SQL (语句不是固定的, 有 Boolean 类型参数 决定是否使用 当前条件)
  • 支持多种数据库

MyBatis 中 #{} 和 ${} 的区别是什么?

Mybatis—#{}和${}的区别

  • # 相当于对数据加上 双引号$ 相当于 直接显示数据
  • # 可以防止 SQL注入$ 无法防止 SQL注入
  • 例如入侵者 在参数后面添加 1=1,则 ${} 所在的 SQL语句 就被 成功侵入。而 #{} 会在外面添加 双引号,不会产生影响。

Mybatis-Plus 常用注解有哪些?

点击查看

  • @TableName:映射 数据库表名
  • @TableId:设置 主键字段
  • @TableField:设置 非主键字段

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

页川叶川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值