Spring 面试

1、SpringBoot、SpringMVC和Spring有什么区别

spring是一个使用IOC容器来统一管理Bean,使用依赖注入来实现控制反转的框架,并且提供了AOP面向切面编程的来弥补oop面向对象中重复代码的问题。日志,异常,缓存,事务

springMVC是spring提供处理web的一个框架,提供一个总的前端控制器Servlet,用于接收请求

springboot可以看为是spring+springmvc的一个快速开发工具

2、什么是spring?

3、Spring的优缺点?

1、IOC :集中管理对象,对象与对象之间的耦合度减低了,方便维护默认是单例的

2、AOP:在不修改代码的情况下,对业务代码进行增强,减少重复代码

3、声明事务:提高开发效率,只需要一个简单注解@Transactional就可以完成事务的声明

4、什么是Spirng IOC容器?有什么作用?优点是什么?

控制反转IOC,控制了对象的创建(之前是new 出一个新对象,现在只需要将对象的创建交给了Spring的IOC,使用就是要DI依赖注入@Autowired自动注入)

优点:集中管理对象,方便维护,默认都是单例模式

5、Spring IOC的实现机制是什么?

使用:简单工厂模式(通过一个方法 传入一个标识 生产对应对象) 和 反射机制(<bean class="类路径" 创建对象) 来完成的

6、IOC和DI的区别是什么

ioc是创建对象的理念  DI是IOC实现的理念的重要一环(依赖注入)

7、BeanFactory的作用

顶层接口,主要职责是生产Bean,(getBean() 来获取bean)

8、BeanDefinition的作用

主要就是存储Bean的定义信息,决定Bean的生产方式

9、BeanFactory和ApplicationContext有什么区别

区别:BeanFactory getBean 用于生产Bean

ApplicationContext  实现了FactoryBean接口。它不生产bean而是通知BeanFactory来进行生产。

它还会更多:1、自动帮我们把我们配置的bean注册进来        2、加载环境变量        3、支持多语言...

10、BeanFactory和FactoryBean有什么区别

beanFactory是一个生产bean的工厂,FactoryBean是一个特殊的bean,实现这个接口会实现getBean()返回的实例。FactoryBean会变成懒加载 @Lazy

11、Spring IOC容器的加载过程

new ApplicationContext() spring上下文开始

概念态:进行配置了bean的定义信息,还没有new spring上下文

定义态:读取bean的定义信息到BeanDifinition中去

纯净态:实例化,最开始存在的bean对象,里面还没有属性值的,循环依赖就体现了它的作用

成熟态:初始化,依赖注入,完成属性注入

概念态——(bean工厂后置处理器)——> 定义态——(实例化)——> 纯静态——(初始化)——> 成熟态

12、什么是Spring bean? JavaBean和SpringBean和对象的区别

spring bean 就是被spring IOC管理的对象就是bean

javaBean 就是 new 出来的,自己实例化出来的

13、配置Bean有哪几种方式

14、解释Spring支持的几种bean的作用域

@Scope 来配置

单例(默认),多例,request,session,application

15、单例bean的优势

对象只会创建一个,性能好

16、Spring 的 bean是线程安全的吗?

17、spring如何处理线程并发问题?

1、多例        2、将成员变量放在ThreadLocal中去,3、同步锁(在代码块中添加synchronized)

18、Spring实例化bean方式的几种方式

1、构造函数方式(反射):配置文件,或者注解将bean 的定义信息放到 Beandifinition

2、静态工厂方式

3、实例工厂方式(@Bean)

4、FactoryBean方式

19、什么是bean的装配?什么是bean的自动装配?

@Autowird @Resoure注解

通过bean的名字,类型进行装配

20、自动装配的方式有几种

1、none:默认不进行自动装配,手动设置ref来进行装配(先根据类型,再根据名字(set方法))

2、byName: 根据名字(set方法)

3、byType:根据类型

4、constructor: 构造函数

21、解释Spring框架中bean的生命周期

1、实例化:

        a:通过反射去推断构造函数进行实例化        b:静态工厂,实例工厂

2、属性赋值

        a:就是自动装配: DI的体现依赖注入        b:循环依赖

3、初始化

        a:调用很多aware回调方法        b:调用初始化生命周期回调        c:如果bean实现了aop,创建动态代理

4、销毁

        spring容器关闭进行销毁

22、Spring是如何解决Bean的循环依赖

三级缓存(三个map) 进行解决

一级缓存:缓存完整的bean

二级缓存:避免多重循环依赖的情况 重复创建动态代理

三级缓存:

        a:函数接口 lambda 把方法传进去(把Bean的实例和Bean名字传进去)

        b:不会立即调用

        c:会在ABA(第二次getBean(A) 才会调用三级缓存(如何实现了aop会创建动态代理,如果没有依然返回bean的实例))

        d:放到二级缓存中去(避免重复创建)

23、二级缓存能不能解决:

可以,但是如果出现多次出现循环依赖,会被多次创建动态代理

@Lazy 延迟加载可以解决循环依赖

24、Spring是如何帮我们在并发的情况下避免获取不完整的Bean?

双重检查锁:两个同步锁,两次检查一级缓存(在看到没有三级缓存,会再次检查一级缓存)

实例化加锁,二级三级缓存加锁

25、描述BeanDefinition的加载过程

26、Spring有哪几种配置方式

1、xml配置文件

2、基于注解的配置

3、基于java的配置,javaConfig

27、JavaConfig是如何代替spring.xml的?

28、@Component,@Controller,@Repository,@Service有什么区别

三层结构

@Primary

29、@Autowird注解自动装配的过程是怎么样的?

30、@Configuration的作用

1、代替xml配置文件

2、加了这个注解会创建cglib动态代理(保证@Bean方法调用Bean是单例的)

31、@Bean的方式如何保证单例的

加@Configuration注解

32、什么是AOP、能做什么?

33、spring Aop有哪些类型的通知

34、Spring AOP 和 AspectJ AOP有什么区别

答:spring AOP提供了AspectJ AOP的支持,只用到了它的切点解析和匹配。@Aspect @Before等注解是AspectJ发明的

35、JDK动态代理和CGLIB动态代理的区别

36、JavaConfig方式如何启用AOP?如何强制使用cglib

@EnableAspectJAutoProxy注解开启AOP

37、什么情况下AOP会失效,怎么解决?

内部调用方法会导致失效。解决方式:必须走代理,重新拿到代理对象再次执行方法才能进行增强。 1、在本类中自动注入当前的bean        2、设置暴露当前代理对象到本地线程,通过AopContext.cuttentProx()拿到当前正在调用的动态代理对象

38、Spring的AOP是在哪里创建的动态代理?

        1、在bean的生命周期的初始化后,通过bean的后置处理器会创建aop动态代理

        2、特殊,循环依赖的时候会对需要的bean进行aop动态代理

39、事务四大特性ACID

40、Spring支持的事务管理类型,Spring事务实现方式有哪些?

编程式事务,声明式事务(注解 @Transactional,xml配置)

接口,xml配置,注解@Transactional

41、Spring的事务传播行为?

42、spring 的事务隔离?

1、脏读(读已提交)        2、不可重复读(可重复读(一条数据)(加行锁))        3、幻读(整一表)(序列化(加表锁)))

43、Spring事务实现原理

添加@EnableTransactionManagement注解才能使用 @Transactional 开启事务注解

AOP 同理 

        1、解析切面—— bean创建前的第一个bean的后置处理器进行解析advisor

        2、创建动态代理—— bean的初始化后调用bean的后置处理器进行创建动态代理,创建动态代理之前会先根据advisor中的pointCut匹配@Transacational 注解是不是有,类上面,接口或者父类

        3、调用—— 

44、Spring事务传播行为实现原理

spring的事务信息是存在ThreadLocal中的,所以一个线程永远只能有一个事务

融入:当传播行为为融入外部事务则拿到ThreadLocal中的Connection,共享一个数据库连接共同提交、回滚

创建事务:当传播行为是创建新事务,会将嵌套事务存入ThreadLocal,再将外部事务暂存起来;当嵌套事务提交、回滚后,会将暂存的事务信息恢复到ThreadLocal中

45、Spring多线程事务,能否保证事务的一致性(同时提交,同时回滚)

46、Spring事务的失效原因

47、Spring事件监听的核心机制是什么

观察者模式  MQ

48、Spring框架中都用到了哪些设计模式?

单例模式(bean),代理模式(AOP),简单工厂模式(BeanFactory),观察者模式(spring事件监听)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值