您的位置:首页 > 职场人生

JAVA 面试题整理(一)

2015-05-21 20:11 183 查看
框架类:

1、 spring ioc、aop的原理

a)spring依赖注入IOC:

依赖注入有哪些方法:依赖注入其实就是控制反转,它分为构造方法注入,set方法注入,接口注入,我们最常用的就是set方法注入。

举个例子说明一下,我们在用spring时用xml配置的方式的话,都是将bean配置在spring中,也有bean的property属性。spring容器在初始化时就通过反射将容器中的bean实例化,假如bean配置中有property属性,就会反射property属性注入到bean中。这就是依赖注入。

b)什么是spring的IOC:

IOC是一种思想,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IO C容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程 序的整个体系结构变得非常灵活。

IOC是一种思想,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IO C容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程 序的整个体系结构变得非常灵活。

依赖注入的作用:减少类间耦合度,避免用new来创建对象

spring AOP:

a)spring AOP 的作用

AOP,面向切面编程,就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中,比如事务管理、权限控制、日志记录、性能统计等。

b)spring AOP的具体实现

AOP就是面向切面编程。它主要运用了jdk动态代理中的Proxy类和InvicationHandler接口实现。举例简单来说假如想要在原来的目标类的前后要加入日志的功能,目标类一定要实现一个接口,如果没有实现接口,spring就会用cglib包实现AOP。推荐的还是要实现一个接口。实现过程大概就是实现了一个InvicationHandler接口的方法,里边有一个属性是目标类,在invoke方法中利用反射执行目标类的方法,并在其前后加入日志的方法。然后将目标类的类加载器,目标类实现的接口和实现了InvicationHandler接口的方法传入到Proxy的newProxyInstance方法中。这样就实现了AOP。这样的话我们就可以在不修改任何代码的情况下在任何目标类中都可以动态的加入记日志的功能。

2、session的一级缓存

* 使用hibernate进行查询的时候,将查询结果放置到session的一级缓存中,在一级缓存中存在对象,对象使用属性的OID的值进行区分,此时再使用相同的OID进行查询的时候,首先会在session一级缓存中进行查找是否存在相同的OID

* 如果存在相同的OID,此时不再查询数据库,而是直接使用一级缓存中存在的对象

* 如果没有存在相同的OID,此时再查询数据库,将查询得到的结果数据再放置到session一级缓存中

目的:减少访问数据库的次数

session的快照

* 使用id进行查询数据库,将查询得到的结果放置到session一级缓存中,同时复制一份数据,放置到session的快照中

* 当使用tr.commit()的时候,同时清理session的一级缓存(flush)

* 当清理session一级缓存的时候,会使用OID判断一级缓存中对象和快照中的对象进行比对

* 如果2个对象(一级缓存的对象和快照的对象)中的属性发生变化,则执行update语句,此时更新数据库,更新成一级缓存中的数据

* 如果2个对象中的属性不发生变化,此时不执行update语句

目的:确保和数据库中的数据一致
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: