【Java面试课程】框架

1.什么是框架

框架是一个框子,具有约束性。是一个架子,具有一定的支撑性

IT中的框架是指为解决一个开放性问题而设计的具有一定约束性支撑结构
在此结构上可以根据具体问题扩展安插更多的组成部分。从而更迅速的构建完整的解决方案

  • 框架本身不解决特定问题,可以在框架基础上扩展
  • 框架天生就是为了扩展
  • 可以为后续扩展的组件提供很多辅助性、支撑性的使用工具

2. 简要介绍MVC模式

MVC是Model view controller的缩写。

最经典的就是 jsp(view)+servlet(controller)+JavaBean(model)
【Java面试课程】框架

  1. 当控制器收到请求后,
  2. 调用javabean完成业务
  3. 通过控制器跳转jsp页面的方式给用户反馈信息
  4. jsp给用户做响应

控制器都是核心

4 谈谈Spring Bean的生命周期和作用域

在企业应用软件开发中,Java 是毫无争议的主流语言,开放的Java EE 规范和强大的开源框架功不可没,其中 Spring 毫无疑问已经成为企业软件开发的事实标准之一。今天这一讲,我将补充 Spring 相关的典型面试问题,并谈谈其部分设计细节。

典型回答

Spring Bean的生命周期比较复杂,可以分为创建和销毁两个过程。

首先,创建Bean会经过一系列的步骤,主要包括

  • 实例化Bean对象
  • 设置Bean属性
  • 如果我们通过各种Aware接口声明了依赖关系,则会注入Bean对容器基础设施层面的依赖。具体包括BeanNameAware、BeanFactoryAware和ApplicationContentAware,分别会注入Bean ID,Bean Factory或者ApplicationContext
  • 调用BeanPostProcessorBean接口,则会调用afterPropertiesSet方法
  • 如果实现了InitializingBean接口,则会调用afterPropertiesSet方法
  • 调用Bean自身定义的init方法
  • 调用BeanPostProcessor的后置初始化方法postProcessAfterInitialization
  • 创建过程完毕

【Java面试课程】框架


销毁bean的过程会依次调用DisposableBeandestroy方法和Bean自己定制的destroy方法。


SpringBean有5个作用域。最基础的有下面两种

  • Singleton,这是 Spring 的默认作用域,也就是每个IOC容器创建唯一的一个Bean实例
  • Prototype,针对每个 getBean 请求,容器都会单独创建一个Bean实例

从Bean的特定来看,Prototype适合有状态的bean。而Singleton适用于无状态的情况。另外Prototype作用域需要仔细思考,毕竟频繁创建和销毁Bean需要很大开销。

5.讲一下Spring中的两大核心AOP和IOC

Spring是什么?

Spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架。主要针对javabean的生命周期进行管理的轻量级容器。

1. IOC(Inversion of Control)或DI(Dependency Injection)

IOC表示控制器反转
原来:我的Service需要调用DAO,Service就需要创建DAO
Spring:Spring发现你Service依赖于DAO,就给你注入
控制权从service转到了Spring
核心原理:配置文件+反射(工厂也可以)+容器(map)

2. AOP 面向切面编程

核心原理:使用动态代理的设计模型的方式在执行方法前后或出现异常后加入相关逻辑

主要用于:

  • 事务管理 (本来需要执行方法前开启事务,执行方法后关闭事务,出现异常后回滚事务)
  • 日志管理
  • 权限管理 (在执行方法前判断是否具有权限)等等

6.Spring的事务传播特性和隔离级别

存在多个事务是怎么处理的。

Spring事务的传播特性:

1、PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启
2、PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行
3、PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常
4、PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
5、PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。
6、PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常
7、PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行


Spring事务的隔离级别:
1、ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
另外四个与JDBC的隔离级别相对应
2、ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
3、ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
4、ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
5、ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

与数据库的隔离级别非常类似。