spring面试题总结(一)

Spring 面试题

1.Spring 的 AOP 理解?
 	面向切面,将与业务无关的一些逻辑和公共行为抽取成一个可重用的模块,这个模块被称为切面(Aspect),减少耦合度。
 	原理:在不改变源码的方式,对方法进行增强,aop会自动根据接口判断进行jdk还是cglib代理。
 	代理分为静态代理和动态代理,静态代理代表是AspectJ,动态代理是以Aop为代表的。
 	Aop的动态代理主要有两种模式,jdk动态代理和cglib动态代理。
 		1.jdk动态代理只提供接口方式代理(反射)
 			InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着Proxy利用 InvocationHandler动态创建一个符合某一接口的的实例,生成目标类的代理对象。
 		2.cglib提供子类方式的代理--
 		-(fastClass--对一个类的方法建立索引的方式)
 			可以在运行时动态的生成指定类的一个子类对象,并覆盖其中特定方法并添加增强代码,从而实现AOP。
 
2.Spring 的 IOC 理解?
	 IOC就是控制反转,通俗来说就是,对象的创建交给spring管理,使用到了反射。实现了解耦。
	 原理:工厂模式+反射机制
	 IOC有三种注入方式:构造器注入,setter方法注入,注解注入
		SpringIOC的常见注解
   			a: 创建对象,交给容器:@Controller,@Service,@Repository,@Component
   			b: 依赖注入的注解:@Autowired,@Value
   			c: 生命周期:@Scope
   		SpringIOC的纯注解
   			@Configuration,@Bean.
3.Spring MVC流程
	
	1.用户发送请求到前端控制器(DispatcherServlet)
	2.前端控制器收到请求之后,调用处理器映射器(HandlerMapping)
	3.处理器映射器(HandlerMapping)根据注解或者xml找到具体的处理器 生成处理器对象以及拦截器一并返回给前端控制器(DispatcherServlet)
	4.前端控制器(DispatcherServlet)调用HandlerAdapter(处理器适配器)
	5.HandlerAdapter(处理器适配器)经过适配,调用具体的处理器(也叫后端控制器-Controller)
	6.Controller执行完毕返回一个ModelAndView
	7.HandlerAdapter(处理器适配器)将controller的执行结果返还给(DispatcherServlet)前端控制器
	8.(DispatcherServlet)前端控制器将ModelAndView传给ViewReslover(视图解析器)
	9.ViewReslover(视图解析器)解析后返回具体的view
	10.(DispatcherServlet)前端控制器将具体的view进行渲染并响应给用户
	
4.Spring框架中都用到了哪些设计模式
	a.工厂模式:beanfactory,创建对象的实例
	b.单例模式:bean默认为单例模式
	c.代理模式:spring的aop功能用到了jdk的动态代理和cglib的字节码生成技术
	d.模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, 	JpaTemplate。
	e.观察者模式:Spring中listener的实现--ApplicationListener
	f.生命周期用了适配器模式、策略模式等等。

5.解释一下spring bean的生命周期
	1.bean的实例化
	2.bean属性的设值
	3.判断是否实现Aware接口,开始注入
	4.bean的初始化
	5.bean的销毁

6.spring如何处理线程安全机制
  • 在Controller中使用ThreadLocal变量
  • 在spring配置文件Controller中声明 scope="prototype",每次都创建新的controller
7.ThreadLocal和线程同步机制相比有什么优势呢?
  • 线程同步机制,通过对象的锁机制保证同一时间只有一个线程在操作,仅提供一份变量,让不同的线程排队访问,采用的是‘时间换取空间’的方式。
  • threadlocal是为每个线程副本提供一个变量副本,因此可以同时访问,采取的是‘空间换取时间’的方式。
8. Spring 事务的实现方式和实现原理

一、Spring 的事务传播行为(7)

1.required: 没有就创建,有就加载(常用)
2.supports: 如果当前存在事务,就加载,没有就以非事务运行
3.mandatory:如果当前存在事务,就加载,不存在就抛出异常
4.requires_new:无论当前存不存在事务,都创建新事务
5.not_supposted:以非事务运行,如果当前有事务,就挂起当前事务
6.never:以非事务运行,如果当前存在事务,就抛出异常
7.nested:如果当前存在事务,则嵌套当前事务内执行,不存在则按照required方式执行
		

二、Spring 中的隔离级别

  • default 默认
  • UNCOMMITTED 读未提交(脏读)
  • READ_COMMITTED 读已提交(幻读)
  • REPEATABLE_READ 可重复读
  • SERIALIZABLE 开启序列化,安全,但是效率低下

三、Spring 事务的种类

  • 编程式事务 TransactionTemplate。

  • 声明式事务 基于AOP @Transactional注解

9.解释一下 Spring AOP 里面的几个名词
  • 切面(Aspect)--切入点和通知的结合
  • 连接点(Join point)--可以拦截的方法
  • 通知(Advice)--增强的逻辑
  • 切入点(Pointcut)--对哪些连接点进行切入
  • 引入(Introduction)--特殊类型的通知
  • 目标对象(Target Object)--被代理对象
  • 织入(Weaving)--增强到应用的过程
10.BeanFactory 和 ApplicationContext 有什么区别?
	BeanFactory 和 ApplicationContext 是 Spring 的两大核心接口,都可以当做 Spring 的容器。其中 ApplicationContext 是 BeanFactory 的子接口。
	1.BeanFactroy 采用的是延迟加载形式来注入 Bean 的.
	2.ApplicationContext,它是在容器启动时,一次性创建了所有的 Bean。
	
	BeanFactory 通常以编程的方式被创建,ApplicationContext 还能以声明的方式创建,如使用 ContextLoader。
11.解释 Spring 支持的几种 bean 的作用域。
  • 默认单例,由beanfactory维护
  • prototype(多例),为每一个bean请求都提供一个实例
  • request,每次网络请求都会创建,请求完成后销毁
  • session,和request类似
  • global-session,全局作用域
12.spring常用注解
@Configuration 把一个类作为一个 IoC 容器,它的某个方法头上如果注册了
@Bean,就会作为这个 Spring 容器中的 Bean。
@scope,指定作用域
@lazy(true)表示延迟加载

@Service 用于业务层标注
@Controller 标注控制层
@Repository (标注数据访问层)
@Component (标注工具类)

@PostConstruct 指定初始化方法
@PreDestory (指定指定销毁方法)

@Resource 默认按名称装配,当找不到与名称匹配的 bean 才会按类型装配
@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合
@Qualifier 结合@Autowired注解一起使用。
posted @ 2021-03-15 20:22  川上  阅读(29)  评论(0)    收藏  举报