spring 和 springMVC 面试问题
- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
-
详细描述什么是Spring?
Spring的核心是一个轻量级的容器,它是实现IoC容器和非入侵性的框架,并提供AOP概念的实现方式;提供对持久层、事物的支持;提供MVC Web框架的实现,并对一些常用的企业服务API提供一致的模型封装,是一个全方位的应用程序框架,除此之外,对现存的各种框架,Spring也提供了与他们相整合的方案。
-
什么是Spring IOC?
ioc(inverse of control )控制反转:所谓控制反转就是把对象(bean)对象和维护对象(bean)之间的关系的权利转移到Sqring容器中去了(ApplicationContext.xml)而程序本身不在维护了
-
什么是Spring AOP?描述其应用场景
AOP(Aspect-Oriented Programming),一般称为面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理等。
-
AOP的通知有几个,分别是什么
- 前置通知(Before):在目标方法被调用之前调用通知功能;
- 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;
- 返回通知(After-returning ):在目标方法成功执行之后调用通知;
- 异常通知(After-throwing):在目标方法抛出异常后调用通知;
- 环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
-
描述Spring Bean的作用域?
Spring框架支持以下五种bean的作用域:
singleton : bean在每个Spring ioc容器中只有一个实例。
prototype:一个bean的定义可以有多个实例。
request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:在一HTTP Session中,一个bean定义对应一个实例。
-
Spring Bean 注入有几种方式?
使用属性的setter方法注入 这是最常用的方式;
使用构造器注入;
工厂注入方式
-
SpringBean 生命周期?
- Spring启动,查找并加载需要被Spring管理的bean,进行Bean的实例化
- Bean实例化后对将Bean的引入和值注入到Bean的属性中
- 如果Bean实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法
- 如果Bean实现了BeanFactoryAware接口的话,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
- 如果Bean实现了ApplicationContextAware接口的话,Spring将调用Bean的setApplicationContext()方法,将bean所在应用上下文引用传入进来。
- 如果Bean实现了BeanPostProcessor接口,Spring就将调用他们的postProcessBeforeInitialization()方法。
- 如果Bean 实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用
- 如果Bean 实现了BeanPostProcessor接口,Spring就将调用他们的postProcessAfterInitialization()方法。
- 此时,Bean已经准备就绪,可以被应用程序使用了。他们将一直驻留在应用上下文中,直到应用上下文被销毁。
- 如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用了destory-method 声明销毁方法,该方法也会被调用。
-
Spring框架中 用到了哪些设计模式?
-
工厂设计模式 : Spring使用工厂模式通过
BeanFactory
、ApplicationContext
创建 bean 对象。 - 代理设计模式 : Spring AOP 功能的实现。
- 单例设计模式 : Spring 中的 Bean 默认都是单例的。
-
模板方法模式 : Spring 中
jdbcTemplate
、hibernateTemplate
等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。 - 包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
- 观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
-
适配器模式 :Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配
Controller
。
-
工厂设计模式 : Spring使用工厂模式通过
-
描述Spring事务传播行为?
REQUIRED(常用):如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
MANDATORY:强制的 使用当前的事务,如果当前没有事务,就抛出异常。
REQUIRES_NEW:需要JTA事务管理器的支持,新建事务,如果当前存在事务,把当前事务挂起。
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
NESTED:嵌套 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
-
描述Spring事务的隔离级别?
int ISOLATION_DEFAULT = -1; 使用数据库默认的隔离级别
int ISOLATION_READ_UNCOMMITTED = 1;读未提交
int ISOLATION_READ_COMMITTED = 2;读提交
int ISOLATION_REPEATABLE_READ = 4;可重复读
int ISOLATION_SERIALIZABLE = 8;串行化
上一篇: 八年小厂技术 LEADER 面试大厂后台开发人员,凉凉了
下一篇: 刘淘
推荐阅读
-
面试问题:对猫叫、老鼠跑和人醒来的一点见解
-
spring 和 springMVC 面试问题
-
Spring Cloud Ribbon 面试问题
-
Spring Boot 经典面试问题(八)
-
腾讯、百度、华为、搜狗和滴滴 Android 面试问题汇总
-
Python 学习从入门到精通:行和缩进(3),2024 个华为面试问题
-
15 个 Google 面试问题和答案
-
Spring Boot 经典面试问题 (4)-3。
-
关于阿里云 RDS 数据库 CPU 和内存使用情况的 20 个面试问题 - 9.RDS 数据库的 CPU 占用率和内存占用率与数据库大小有什么关系?
-
2024 最新软件测试 [测试理论 + 抓包和网络协议] 面试问题(附答案)