框架之Spring面试题


1. 对IOC的理解

1.将对象的创建权交由工厂(spring),程序中如果需要对象,从工厂(spring)中获取;
2.解除类与类之间的耦合


2. 对Aop的理解

底层使用的是动态代理;使用配置的方式来完成动态代理要实现的功能。
在不修改源码的基础上,对目标对象中方法进行增强。实现业务之间解耦。


3. 切⼊点、通知、连接点、切⾯是什么

切入点:目标对象中要被增强的方法;
通知:要增强的功能;
连接点:目标对象中可以被增强的方法;
切面:切入点和通知的组合
在这里插入图片描述


4. springAOP代理方式有几种,怎么配置,实现原理是什么

springAOP代理方式有几种
JDK动态代理:目标类必须实现一个接口
CGLIB动态代理:目标类不能是最终类
在这里插入图片描述


5. spring常用的注解

在这里插入图片描述
在这里插入图片描述


6. @Autowied和@Qualifier,@Resource区别 --好好看下

在这里插入图片描述


7. BeanFactory和ApplicationContext有什么区别

ApplicationContext是BeanFactory的子接口
ApplicationContext提供了更完整的功能:
①继承MessageSource,因此支持国际化。
②统一的资源文件访问方式。
③提供在监听器中注册bean的事件。
④同时加载多个配置文件。
BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化
ApplicationContext,它是在容器启动时,一次性创建了所有的单例Bean
BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的
使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册
在这里插入图片描述


8. spring BeanFactory和FactoryBean区别

BeanFactory是一个factory,是spring的IOC的工场
FactoryBean是spring创建bean的一种方式

在这里插入图片描述


9. 简述spring bean的生命周期(简版)

1、解析类得到BeanDefinition
2、如果有多个构造方法,则要推断构造方法
3、确定好构造方法后,进行实例化得到一个对象
4、对对象中的加了@Autowired注解的属性进行属性填充
5、回调Aware方法,比如BeanNameAware,BeanFactoryAware
6、调用BeanPostProcessor的初始化前的方法
7、调用初始化方法
8、调用BeanPostProcessor的初始化后的方法,在这里会进行AOP
9、如果当前创建的bean是单例的则会把bean放入单例池
10、使用bean
11、Spring容器关闭时调用DisposableBean中destory()方法


10. spring bean生命周期,实现哪些接口可以自定义生命周期行为

在这里插入图片描述


11. spring支持的bean作用域

singleton:单例模式,在整个Spring IoC容器中,使用 singleton 定义的 bean 只有一个实例
prototype:原型模式,每次通过容器的getbean方法获取 prototype 定义的 bean 时,都产生一个新的 bean 实例
只有在 Web 应用中使用Spring时,request、session、global-session 作用域才有效
在这里插入图片描述


12. Spring框架中的单例Bean是线程安全的么

Spring中的Bean默认是单例模式的
如果Bean是有状态的 那就需要开发人员自己来进行线程安全的保证,最简单的办法就是改变bean的作
用域 把 "singleton"改为’‘protopyte’ 这样每次请求Bean就相当于是 new Bean() 这样就可以保证线程的
安全了。
有状态就是有数据存储功能
无状态就是不会保存数据
controller、service和dao层本身并不是线程安全的。但是如果只是调用里面的方法,多线程调用一个实例的方法。
如果没有对共享变量进行写操作。是没有线程安全;
在这里插入图片描述


13. spring如何保证⾼并发下Controller线程安全

不要在bean中声明任何有状态的实例变量或静态变量,如果必须如此,那么就使用ThreadLocal把变量变为线程私有的,如果bean的实例变量或类变量需要在多个线程之间共享,那么就只能使用synchronized、lock、CAS等这些实现线程同步的方法了。


14. spring框架中使用了哪些设计模式及应用场景

https://www.bilibili.com/video/BV15b4y117RJ?p=174


15. spring事务的实现方式原理以及隔离级别

在这里插入图片描述


16. spring的事务传播机制

当前方法对调用者方法事务的态度
REQUIRED(Spring默认的事务传播类型):如果调用者有事务,就加入到调用者的事务中,如果调用者没有事务就新建事务;
SUPPORTS:调用者存在事务,就加入到调用者的事务中,如果调用者没有事务,就以非事务方法执行
MANDATORY:调用者存在事务,就加入到调用者的事务中,如果调用者事务不存在,则抛出异常。
REQUIRES_NEW:无论调用者是否有事务,当前方法都会开启事务
NOT_SUPPORTED:调用者不能有事务,如果调用者有事务也不会使用调用者事务
NEVER:调用者不能有事务,如果调用者有事务抛异常
NESTED:调用者存在事务,则在嵌套事务中执行,否则REQUIRED的操作一样(开启一个事务)
在这里插入图片描述


17. spring事务什么时候会失效。

在这里插入图片描述
扩展太多了,不展开了,背!


18. spring事物配置方式有几种

基于XML的配置方式
基于注解的配置方式
在这里插入图片描述


19. ApplicationContext Refresh的过程(自己看视频)

①、是否可以改变
String底层维护的char[]数组,使用final修饰。既然使用final修饰,无法重给他赋值;String中的方法,替换,拼接,子串等都是返回一个新的字符串
StringBuffer和StringBuilder底层维护的char[]数组,没有使用final修饰,方法都是在原来对象字符数组的基础上进行操作,不会产生新的对象;
②、线程安全
StringBuffer所有的方法都使用synchronized进行修饰,线程安全;
String是不可变的字符串,线程安全
StringBuilder线程不安全
③、使用场景
如果不经常改变字符串的值,拼串操作;使用String;
如果有拼接字符串的需求
没有线程安全使用StringBuilder
有线程安全没StringBuffer


20. spring中的循环依赖是什么意思,怎么解决(自己看视频)

https://www.bilibili.com/video/BV15b4y117RJ?p=176


21. spring设计模式

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值