面试题(三)

目录

41.谈谈你对AQS的理解,AQS如何实现可重⼊锁?

42.谈谈你对IOC的理解

43.单例Bean和单例模式

44.Spring事务传播机制

45.Spring事务什么时候会失效?

46.Spring中的Bean创建的⽣命周期有哪些步骤

47.Spring中Bean是线程安全的吗

48.ApplicationContext和BeanFactory有什么区别

49.Spring中的事务是如何实现的

50.Spring中什么时候@Transactional会失效

51.Spring容器启动流程是怎样的

52.Spring⽤到了哪些设计模式

53. Spring Boot中常⽤注解及其底层实现

54.Spring Boot是如何启动Tomcat的

55.Mybatis的优缺点

56.#{}和${}的区别是什么?

 57.索引的基本原理

 58.索引设计的原则?

59.事务的基本特性和隔离级别

 

60.什么是MVCC


41.谈谈你对AQS的理解,AQS如何实现可重⼊锁?

1. AQS是⼀个JAVA线程同步的框架。是JDK中很多锁⼯具的核⼼实现框架。
2. 在AQS中,维护了⼀个信号量state和⼀个线程组成的双向链表队列。其中,这个线程队列,就是⽤ 来给线程排队的,⽽state就像是⼀个红绿灯,⽤来控制线程排队或者放⾏的。 在不同的场景下,有不⽤的意义。
3. 在可重⼊锁这个场景下,state就⽤来表示加锁的次数。0标识⽆锁,每加⼀次锁,state就加1。释放锁state就减1。

42.谈谈你对IOC的理解

  • 提到Spring 我们都能想到核心是,IOC和AOP
  • 那么我就谈一谈IOC的理解,说到IOC就要想到他的核心就是控制反转。
  • 对于我来说,控制反转就是把对于成员变量赋值的控制权,从代码中反转(转移)Spring工厂和配置文件中完成,他的好处就是解耦合,底层实现是工厂设计模式。

43.单例Bean和单例模式

  • 单例模式表示JVM中某个类的对象只会存在唯⼀⼀个。
  • ⽽单例Bean并不表示JVM中只能存在唯⼀的某个类的Bean对象。

44.Spring事务传播机制

  • 多个事务⽅法相互调⽤时,事务如何在这些⽅法间传播,⽅法A是⼀个事务的⽅法,⽅法A执⾏过程中调 ⽤了⽅法B,那么⽅法B有⽆事务以及⽅法B对事务的要求不同都会对⽅法A的事务具体执⾏造成影响, 同时⽅法A的事务对⽅法B的事务执⾏也有影响,这种影响具体是什么就由两个⽅法所定义的事务传播类型所决定。
  • REQUIRED(Spring中默认的传播类型):  如果a有事务,那么b就加入, 如果a没有事务,b就创建一个事务执行。
  • SUPPORT: 如果a有事务,b就加入,如果a没有事务,那么b也没有必要有事务
  • MANDATORY:如果a有事务,b就加入,没有事务,就抛出异常
  • REQUIRES_NEW: 如果a有事务,b暂时挂起,互不影响,各自执行
  • NOT_SUPPORTS:如果a有事务,则挂起事务,以非事务方式
  • NEVER:不使用事务,如果有事务就抛出异常
  • NESTED:如果当前有事务存在,就嵌套执行,跟REQUIRED一样。

45.Spring事务什么时候会失效?

Spring的事务其实就是Aop,进行了切面增强,如果事务失效就说明Aop动态代理失效。

  • 发生自身调用,类方法调用本类的this方法(this通常省略),动态代理就会失效
  • 数据库不支持事务
  • 有异常被吃掉,事务没有回滚
  • 没有被spring容器管理
  • @Transactional 注解需要在public方法上面,如果不是public修饰,导致事务失效

46.Spring中的Bean创建的⽣命周期有哪些步骤

实例化:

  •   通过推断构造方法(反射)
  •    实例工厂、静态工厂

属性注入:

  •  解析自动装配(@Autowried,byname,bytype,@Resource,@constractor),DI
  •  循环依赖

初始化:

  • 实现不同的XXXAware的回调方法
  • 调用初始化生命周期回调(实现init().@PostConstruct,实现InitializingBean接口)
  • 如bean实现Aop,创建动态代理

销毁:

  • Spring容器关闭时回调
  • 调用摧毁时回调

        

更加细致的流程图:

47.Spring中Bean是线程安全的吗

Spring本身并没有针对Bean做线程安全的处理,所以:

  • 如果Bean是⽆状态的,那么Bean则是线程安全的
  • 如果Bean是有状态的,那么Bean则不是线程安全的
  • 另外,Bean是不是线程安全,跟Bean的作⽤域没有关系,Bean的作⽤域只是表示Bean的⽣命周期范 围,对于任何⽣命周期的Bean都是⼀个对象,这个对象是不是线程安全的,还是得看这个Bean对象本身。

48.ApplicationContext和BeanFactory有什么区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值