java面试day3 | 框架篇、Spring、SpringMVC、SpringBoot、MyBatis、注解、AOP、Bean

目录

Spring

单例bean是线程安全的吗?

AOP相关面试题

Spring中事务失效的场景

Sprin-bean

Spring-bean的生命周期

Spring-bean的循环引用

SpringMVC

SpringMVC执行流程

SpringBoot

SpringBoot自动配置原理-最高频

Spring框架常见注解?(Spring,SpringBoot,SpringMVC)

MyBatis

MyBatis执行流程

MyBatis延迟加载使用及原理

MyBatis一级、二级缓存


Spring

单例bean是线程安全的吗?

单例singleton:spring容器只会创建这个bean的一个实例

非单例prototype:每次请求获取bean时,容器都会新创建一个实例

如果不设置的话,默认是单例的

成员变量需要考虑线程安全 ,而id是形式参数,形式参数一般都是局部变量,没有线程安全问题

成员变量:定义在类内部、方法外部的变量,描述类的属性或状态,是类的重要组成部分。它与 "局部变量"(定义在方法内部的变量)相对,两者的作用域、生命周期有显著区别。

维度 Service 类 Dao 类(data access object 数据访问对象)
职责 处理业务逻辑、协调 Dao 操作 仅负责数据 CRUD,无业务逻辑,直接与数据库交互
依赖关系 依赖 Dao 层(可调用多个 Dao) 依赖数据库(或 ORM 框架)
方法设计 按业务场景设计(如register 按数据操作设计(如saveUser
事务控制 通常包含事务注解 不处理事务
复用场景 供 Controller 层调用 供 Service 层调用

由于成员变量需要考虑线程安全,所以尽量不要定义可修改的成员变量

AOP相关面试题

Spring中事务失效的场景

这样配置之后,所有抛出的异常都会导致事务回滚。

非检查异常(Unchecked Exception) 是指编译器不强制要求 开发者显式处理(捕获或声明抛出)的异常,它属于 RuntimeException 及其子类,同时也包括 Error 及其子类(虽然 Error 通常不被视为 "异常",但从编译器检查规则上属于非检查范畴)。

Sprin-bean

Spring-bean的生命周期

BeanPostProcessor#before(后置处理器):用于增强bean,在初始化方法之前进行调用

BeanPostProcessor#after:在初始化方法之后进行调用

@PreDestroy用于关闭容器时销毁bean

Spring-bean的循环引用

上面的二级缓存可以解决一般的循环依赖问题

但如果A是代理对象,现在的二级缓存无法解决问题

补充:代理对象

代理对象是一种替代真实对象(目标对象)的对象,它与目标对象实现相同的接口或者继承相同的抽象类。客户端在使用时,通常不会直接访问目标对象,而是访问代理对象。代理对象会根据实际需求决定是将请求转发给目标对象,还是在转发请求前后执行一些额外的操作。

常见类型:

静态代理:在编译期就确定代理类,代理类和目标类实现相同的接口,代理类中持有目标类的引用。通过代理类可以在调用目标方法前后添加额外的逻辑。

动态代理:在运行期动态生成代理类。在 Java 中,主要有 JDK 动态代理和 CGLIB 动态代理。

  • JDK 动态代理 :要求目标对象实现一个或多个接口,通过 java.lang.reflect.Proxy 类和 InvocationHandler 接口来实现。
  • CGLIB 动态代理:可以在目标对象没有实现接口的情况下创建代理类,它通过继承目标类来实现代理功能。需要引入 CGLIB 的相关依赖

三级缓存可以解决初始化过程中产生的循环依赖,不能解决 构造函数 产生的循环依赖

解决:加注解@Lazy,需要的时候再创建

通过工厂生成的对象统一都放在二级缓存,使用的时候直接拿出来

SpringMVC

SpringMVC执行流程

SpringBoot

SpringBoot自动配置原理-最高频

springboot自动配置:Spring Boot 会根据你添加的依赖和配置,自动帮你完成很多繁琐的框架配置工作。

只需在 pom.xml 中添加 spring-boot-starter-web 依赖,启动类上标注 @SpringBootApplication,运行 main 方法,Web 应用就直接能跑起来 ------Spring Boot 会自动配置好 Tomcat 服务器、DispatcherServlet、JSON 解析器等所有 Web 开发需要的组件。

Spring框架常见注解?(Spring,SpringBoot,SpringMVC)

MyBatis

MyBatis执行流程

配置文件

MyBatis延迟加载使用及原理

fetchType =" lazy" 开启延迟加载,是局部的

全局配置延迟加载:mybatis-config.xml

MyBatis一级、二级缓存

只执行一次查询,第一次的结果放到缓存中(两个使用同一个sqlsession)

相关推荐
c++之路11 分钟前
C++20概述
java·开发语言·c++20
Championship.23.2415 分钟前
Linux Top 命令族深度解析与实战指南
java·linux·服务器·top·linux调试
橘子海全栈攻城狮30 分钟前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
逻辑驱动的ken36 分钟前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
冷雨夜中漫步1 小时前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
直奔標竿1 小时前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring
研究点啥好呢1 小时前
高德多模态算法工程师面试题精选:10道高频考题+答案解析
python·面试·llm·求职招聘·笔试·高德
fzil0012 小时前
自动投递简历 + 面试进度跟踪
人工智能·面试·职场和发展
其实防守也摸鱼2 小时前
面试常问问题总结--护网蓝队方向
网络·笔记·安全·面试·职场和发展·护网·初级蓝队
one_love_zfl2 小时前
java面试-微服务组件篇
java·微服务·面试