SSH框架面试题集锦

Hibernate的工作原理及为什么要使用Hibernate?

  Hibernate是一个开放源代码的O/R Mapping 持久化框架,一个用于和数据库进行交互的中间件.

  工作原理:

    1.读取并解析配置文件

    2.读取并解析映射文件,创建SessionFactory

    3.打开Session

    4.创建事务Transation

    5.持久化操作

    6,提交事务

    7.关闭Session

    8.关闭SessionFactory

为什么要使用Hibernate(即它的优点)?

  1.对JDBC访问数据库的代码作了封装,大大简化了数据访问层繁琐的重复性代码

  2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它很大程度上简化了DAO层的编码工作

  3.Hibernate使用Java反射机制,而不是字节码增强程序来实现透明性

  4.Hibernate映射的灵活性很出色,它支持各种关系型数据库,从一对一到多对多的各种复杂的关系

Hibernate中get和load方法的区别?

  具体介绍:

    1.对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中,还没有查到就查询数据库,数据库没有就返回null.

    2.load方法加载实体对象的时候,根据映射文件上类级别的lazy属性的配置(默认为true)

    分情况讨论:

      若为true,则首先在Session的缓存中查找,看看该对应的id对象是否存在,不存在则使用延迟加载,返回实体的代理类对象(该代理类为实体类的子类,由CGLIB生成)等到具体使用该对象(除获取OID )的时候,在查询二级缓存和数据库,若仍没发现符合条件的记录,则会抛出一个ObjectNotFoundException.

      若为false就跟get方法查找的顺序一样,只是最终若没有发现符合条件的记录,则会抛出一个ObjectNotFoundException.

Hibernate是如何延迟加载?

  Hibernate3提供了属性的延迟加载功能,当Hibernate在查询数据的时候,数据并没有存在内存之中,而是当程序真正对对象进行操作时,对象才存在于内存中,就实现了延迟加载,它节省了内存开销,从而提高了服务器的性能.

Hibernate怎样实现类之间的关系?

  类与类之间的关系主要体现在表与表之间的关系进行操作,他们都是对对象进行操作,我们在所有的表与表都映射在一起,它们通过配置文件中的many-to-one   many-to many  one-to-many 进行操作.

说说Hibernate中的缓存机制?

 1.一级缓存:内部缓存存在Hibernate中,属于应用事务级缓存

 2.二级缓存: 应用级缓存,分布式缓存.使用场景:数据不会被第三方修改,数据大小在可接受的范围,数据更新频率低,同一数据被系统频繁使用,非关键数据

如何优化Hibernate?

 1.使用双向一对多关联,不使用单向一对多

 2.灵活使用单向一对多关联

 3.不用一对一,使用多对一取代

   4.配置对象缓存,不使用集合缓存

   5.一对多集合使用Bag,多对多集合使用Set

   6.继承类使用显示多态

   7.表字段要少,表关联不要怕多,有二级缓存撑腰

谈谈hibernate 的延迟加载和openSessionInView

  延迟加载要在session范围内,用到的时候在加载;

  opensessioninview是在web层写了一个filter来打开和关闭session,这样就表示在一次request过程中session一直开着,保证了延迟加载在session中的这个前提

简要阐述struts2的工作流程

  struts2是一个按照MVC设计模式,开发的一个开源的web应用框架由一组相互协作的类或组件,Servlet以及JSP标签库组成.

  1.客户端浏览器发出HTTP请求

  2.根据web,xml配置,该请求被FilterDispatcher接受,

  3.根据struts.xml配置,找到需要调用的Action类,和方法,并通过Ioc方式,将值注入给Action

  4,Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证

  5.Action执行完毕,根据struts,xml中的配置找到对应的返回结果result,并跳转到响应的页面

  6.返回HTTP响应到客户端浏览器

什么是AOP?

  面向切面编程(AOP)完善spring的依赖注入(DI)面向切面编程在spring中主要表现在两个方面:

  1.面向切面编程提供声明式事务管理

  2.spring支持用户自定义的切面

什么是DI机制?

  依赖注入(Dependency Injection) 和控制反转(Inversion of Control) 是同一个概念,具体的讲:当某个角色需要另外一个角色的协助的时候,在传统的设计过程中,通常油调用者,来创建被调用者的实例.

  在spring中,创建被调用者的工作不再由调用者来完成,因此成为控制反转创建被调用者的工作由spring来完成,然后注入调用者,因此也成为依赖注入.

  spring以动态灵活的方式来管理对象,注入的两种方式,设置注入和构造注入

  设置注入的优点:直观.自然

  构造注入的优点:可以在构造器中决定依赖关系的顺序.

  

 

posted @ 2017-12-15 20:52  友情天  阅读(260)  评论(0编辑  收藏  举报