• 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以动态灵活的方式来管理对象,注入的两种方式,设置注入和构造注入

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

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

      

  • 相关阅读:
    android studio gradle plugin 用户指南 选择性翻译
    c++ 遍历多维数组的10种方式
    cocos2dx FixedPriority和SceneGraphPriority
    cocos2dx 坐标转换
    MySQL删除表
    MySQL修改表
    MySQL创建表
    MySQL的删除语句
    MySQL的更新语句
    MySQL的插入语句
  • 原文地址:https://www.cnblogs.com/1218-mzc/p/8044792.html
Copyright © 2020-2023  润新知