Pasted image 20240709093615

spring框架中的单例bean是线程安全的吗?

spring框架中的bean默认是单例,
Pasted image 20240709095536

  • singleton:bean在每个spring IOC容器中只有一个实例
  • prototype:一个bean的定义可以有多个实例

Pasted image 20240709095835

spring框架中的单例bean是线程安全的吗?
不是线程安全的,
spring框架中有一个@Scope注解,默认的值是singleton,单例的
因为一般在spring的bean中都是注入无状态的对象,没有线程安全问题,如果在bean中定义了可修改的成员变量,是要考虑线程安全问题的,可以使用多例或者加锁来解决

参考问答

Pasted image 20240709100321

什么是AOP?你们项目中有咩有使用AOP

AOP应用场景

  • 记录操作日志

  • 缓存处理

  • spring中内存的事务处理

spring中的事务如何实现

Pasted image 20240709103610

什么是AOP?
面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降低耦合

项目中有咩有使用到AOP?
使用过。
Pasted image 20240709104437
spring中的事务是如何实现的?
本质是通过AOP功能,对方法前后进行拦截。在执行方法之前开启事务,在执行完目标方法之后根据执行情况提交或者回滚事务

参考问答

spring中事务失效的场景有哪些

(考察对spring框架的深入理解,复杂业务和编码经验)

异常捕获处理

Pasted image 20240709105002
如果没有捕获异常,事务回滚是正常的。
失效原因:事务通知只有捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉
解决方法:在catch块中添加throw new RuntimeException(e)抛出
Pasted image 20240709105252

抛出检查异常

Pasted image 20240709105538

失效原因:spring默认只会回滚非检查异常
解决办法:配置rollbackFor属性
@Transaction(rollbackFor=Exception.class)

非public方法导致的事务失效

Pasted image 20240709105957

原因:spring为方法创建代理、添加解决方法,前提条件都是该方法时public的
解决方法:改为public方法

spring事务失效的场景有哪些?
1、异常捕获处理
我记得项目中有个业务是保存优惠券信息之后,提取出秒杀券的信息保存。然后测试的时候,突然断网了,连接不上数据库的主机,程序异常,当时没有抛出这个异常,数据库中的数据就没有回滚,在catch块里面添加throw new RuntimeException(e)
2、抛出检查异常
业务是检查库存之后在数据库中扣减库存,然后创建订单,这个业务需要不定时的写到日志里面。但是有次日志文件误删了还是其他原因,业务报了FilenotFound异常,数据库数据之间也不一致,然后我是添加了注解@Transactional(RollBackFor = Excetption.class),并修改了写日志的逻辑

spring的bean的生命周期

BeanDefinition

Pasted image 20240709114829

Pasted image 20240709115405

spring的bean生命周期
Pasted image 20240709142824

spring中的循环引用

循环引用:
Pasted image 20240709144859
具体示例图
Pasted image 20240709144505

三级缓存解决循环依赖

Pasted image 20240709144744

一级缓存的作用:限制bean在beanFactory中只存一份,即实现singleton scope,解决不了循环依赖

二级缓存:如果要打破循环依赖,就需要一个中间人的参与,这个中间人就是二级缓存
Pasted image 20240709150301

但是代理对象无法缓存

Pasted image 20240709150856

构造方法出现了循环依赖怎么办(三级缓存gg)

三级缓存可以解决构造函数之后的循环依赖问题,但是构造函数是第一步
Pasted image 20240709151359

spring中的循环引用
Pasted image 20240709151701
构造方法出现了循环依赖怎么解决?
Pasted image 20240709152143

springmvc的执行流程知道吗?

视图阶段(JSP)

Pasted image 20240709155317

前后端分离阶段(接口开发、异步请求)

Pasted image 20240709155745

springmvc的执行流程
(视图jsp)
Pasted image 20240709160034
(版本二,前后端开发,接口开发)
Pasted image 20240709160109

springboot自动配置原理

Pasted image 20240709163047 Pasted image 20240709164055

Springboot自动配置原理
Pasted image 20240709164541

spring框架常见注解(spring、springboot、springmvc)

spring的常见注解

Pasted image 20240709170842

springmvc常见注解

Pasted image 20240709171339

springboot常见注解

Pasted image 20240709171352

mybatis执行流程

mybatis-config.xml

Pasted image 20240709191429

MappedStatement对象

Pasted image 20240709192405
Pasted image 20240709192615

mybatis执行流程
Pasted image 20240709193936

mybatis是否支持延迟加载

mybatis支持延迟加载,但默认没有开启

Pasted image 20240710091026

Pasted image 20240710094711

在mybatis-config.xml中开启延迟加载的全局设置

1
<setting name="lazyLoadingEnabled" value = "true" />

在mapper文件中开启局部加载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    <resultMap id="userResultMap" type="user" autoMapping="true">

        <id property="id" column="id"></id>

        <result property="username" column="username"></result>

        <result property="password" column="password"></result>

        <result property="gender" column="gender"></result>

        <result property="addr" column="addr"></result>

        <collection property="orderList" ofType="order"

                    select="com.itheima.mapper. OrderMapper.findByUid"

                    column="id" fetchType="lazy">

        </collection>

    </resultMap>

    <select id="selectById" resultMap="userResultMap">

        select *

        from tb_user

        where id = #{id}

    </select>

延迟加载的原理

Pasted image 20240710095512

mybatis是否支持延迟加载
Pasted image 20240710095839
延迟加载的底层原理
Pasted image 20240710095904

mybatis的一级、二级缓存用过吗?

Pasted image 20240710100414

一级缓存

Pasted image 20240710100546

二级缓存

Pasted image 20240710101033Pasted image 20240710101130
二级缓存注意事项

Pasted image 20240710101319

mybatis一级、二级缓存用过吗?
Pasted image 20240710101454
mybatis的二级缓存什么时候会清理缓存中的数据
Pasted image 20240710101526