当前位置: 首页 > news >正文

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)

http://www.dtcms.com/a/394711.html

相关文章:

  • 【log4j2】log4j2插件挂载变更msg格式(工作实战,原理详解)
  • MVCC(多版本并发控制):InnoDB 高并发的核心技术
  • 决策树习题
  • PHP-ThinkPhp漏洞学习-MVC模型路由访问模版渲染安全写法版本漏洞(2024小迪安全Day31)
  • [已修复] iTunes 无法识别您的 iPhone
  • EC2 实例的操作系统 (OS) 未能成功从 AWS 的网络服务 (DHCP) 中获取到分配给它的私有 IPv4 地址
  • Vercel、Netlify、AWS 与 Cloudflare:前端部署与边缘计算平台全景对比
  • 【Threejs】【工具类】Raycaster实现 3D 交互(如鼠标拾取、碰撞检测)的核心工具
  • Fay数字人QA功能详解
  • NETSTAT命令详解
  • FFmpeg 5.x 编译 so 文件的记录
  • 以开启https的nginx转发流量到minio
  • StarRocks 各类索引以及存储位置详解
  • PromptPilot 技术深解,工程化提示词开发如何让大模型准确率大大提高
  • RTX4090:AI与深度学习应用实践的革命性推动者
  • Cursor Multi-Root Workspace 新特性深度实战:一次打开 React 前端 + Go 后端,AI 自动跨项目跳转、联调、写代码!
  • 如何处理单位换算的问题
  • Docker部署 MySQL+Mycat
  • RTX4090:极致性能探索与硬核评测
  • DM物理存储结构及内存结构
  • ASP.NET Core MVC 路由逻辑初探
  • 【Python办公】文字转视频(可自定义颜色、字体大小)
  • 数据洪流时代,如何挑选一款面向未来的时序数据库?IoTDB 的答案
  • python+django/flask的吉安红色旅游平台 红色教育景区展示+图文资讯发布+评论互动功能系统java+nodejs
  • 设计模式(C++)详解——代理模式 (Proxy Pattern)(2)
  • 详解 Kubernetes 命令:kubectl exec -it nginx -- bash 及实战场景
  • Android挂机短信模板和多台手机同步短信模板
  • Solid Edge 转换为 IGS 全流程技术指南:含迪威模型网在线转换方案
  • 设计模式(C++)详解——代理模式 (Proxy Pattern)(1)
  • 聊聊AI agents MCP 开发