课程咨询 : 400-900-4590

主页 > 企业上门招聘 > Java大数据笔试题 > Java经典笔试题——(4)
  • Java经典笔试题——(4)

    发布:深圳鸿运彩票网      来源:深圳鸿运彩票网      时间:2016-05-25 01:36

  •   请谈谈对SOA的认识。

      解答:面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。

      简要描述如何结合struts、hibernate、spring开发Web应用?

      解答:Struts可以将jsp页面的表单关联起来,就是把JSP页面的表单数据封装成JavaBean,这样的话,在action中你再也不需要使用传统的request.getParameter(“name”);还有struts有一个控制器,你在struts编程中的控制器(XxxAction)都是继承总的ActionServlet,它能集中处理请求,然后转到相关的页面。还有struts的表单验证组件,不用你写js验证了,只需要你配置一下文件就可以了。另外struts的令牌机制可以防表单重复提交。

      Spring 是一个轻量级容器,非侵入性.包含依赖注入,AOP等。它是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

      Hibernate:它可以让我们以OO的方式操作数据库,这让我们看到了hibernate的强大之处,体验到操作数据的方便。但hibernate最耀眼之处是hibernate的缓存机制,而不是以OO的方式操作数据库。Hibernate的缓存机制不外乎是一级缓存session,二级缓存sessionFactory,和第三方缓存如ehcache。也就是hibernate的最强大的地方是它的缓存,理解了这个才能真正的理解hibernate,Hibernate的命名查询/命名参数查询,就是将hql语句放在一个单独的xml文件之中,它仍然让人们以面向对象的方式去操纵数据,而不用在以OO的方式写着代码的同时,然后再转变思维,用面向关系的方式去写那些sql语句。但hibernate不仅做了这些,它的native sql查询方式,完全满足sql语句的偏爱者,它像ibatis一样,将sql语句放在配置文件之中。

      说明反转控制(IOC)和面向方向编程(AOP)在spring中的应用

      解答:Spring 核心容器(Core)提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(Ioc)模式将应用程序的配置和依赖性规范与实际的应用代码程序分开。Spring的声明式事务基于AOP实现,却并不需要程序开发者成为AOP专家,亦可轻易使用Spring的声明式事务管理。

      请看如下片段:

      lazy=“true”

      inverse=“false”

      cascade=“all-delete-orphan”>

      解释lazy、inverse、cascade以及all-delete-orphan属性的含义;并给出示例代码,说明在如下组合情况下,对于save、update、delete一对多关系中的一方对象操作时的区别:

      inverse

      cascade true

      all-delete-orphan false

      all-delete-orphan true all false all true none false

      none

      解答:

      (一)lazy:延迟加载

      Lazy的有效期:只有在session打开的时候才有效;session关闭后lazy就没效了。

      lazy策略可以用在:

      a.标签上:可以取值true/false

      b.标签上,可以取值true/false,这个特性需要类增强

      c./等集合上,可以取值为true/false/extra

      d./等标签上,可以取值false/proxy/no-proxy

      1) get和load的区别:

      a.get不支持延迟加载,而load支持。

      b.当查询特定的数据库中不存在的数据时,get会返回null,而load则抛出异常。

      2) 类(Class)的延迟加载:

      a. 设置标签中的lazy=”true”,或是保持默认(即不配置lazy属性)

      b. 如果lazy的属性值为true,那么在使用load方法加载数据时,只有确实用到数据的时候才会发

      出sql语句;这样有可能减少系统的开销。

      3) 集合(collection)的延迟加载:可以取值true,false,extra

      a.true:默认取值,它的意思是只有在调用这个集合获取里面的元素对象时,才发出查询语句,加载其集合元素的数据

      b.false:取消懒加载特性,即在加载对象的同时,就发出第二条查询语句加载其关联集合的数据

      c.extra:一种比较聪明的懒加载策略,即调用集合的size/contains等方法的时候,hibernate并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据

      4) Hibernate单端关联懒加载策略:即在/标签上可以配置

      懒加载策略。可以取值为:false/proxy/no-proxy

      a.false:取消懒加载策略,即在加载对象的同时,发出查询语句,加载其关联对象

      b.proxy:这是hibernate对单端关联的默认懒加载策略,即只有在调用到其关联对象的方法的时候才真正发出查询语句查询其对象数据,其关联对象是代理类

      c.no-proxy:这种懒加载特性需要对类进行增强,使用no-proxy,其关联对象不是代理类

      注意:在class标签上配置的lazy属性不会影响到关联对象!!!

      (二)inverse

      inverse是指的关联关系的控制方向,inverse=false的side(side其实是指inverse=false所位于的class元素)端有责任维护关系,而inverse=true端无须维护这些关系

      (三)cascade

      cascade指的是层级之间的连锁操作。在定义关联对象的映射时,使用cascade=”all”,cascade=”save-update”,cascade=”all-delete-orphan”或cascade=”delete”

      a.如果父对象被保存,所有的子对象会被传递到saveOrUpdate()方法去执行(cascade=”save-update”)

      b.如果父对象被传递到update()或者saveOrUpdate(),所有的子对象会被传递到saveOrUpdate()方法去执行(cascade=”save-update”)

      c.如果一个临时的子对象被一个持久化的父对象引用了,它会被传递到saveOrUpdate()去执行 (cascade=”save-update”)

      d.如果父对象被删除了,所有的子对象对被传递到delete()方法执行 (cascade=”delete”)

      e.如果临时的子对象不再被持久化的父对象引用,什么都不会发生(必要时,程序应该明确的删除这个子对象),除非声明了cascade=”all-delete-orphan”,在这种情况下,成为“孤儿”的子对象会被

      删除。

      (四) save、update、delete一对多关系中的一方对象操作时的区别

      1)当一方设置inverse=true时,所有由一方发出的操作都不会关联到多方。

      2)当一方设置 inverse=false, cascade=all-delete-orphan时,将删除不再和一方对象关联的所有多方对象。 3)当一方设置 inverse=false, cascade=all时,当保存和删除一方对象时,级联保存和删除所有关联的多方对象。

      4)当一方设置 inverse=false, cascade=none时,当对一方操作时,不级联到关联的多方对象。


上一篇:Java经典笔试题——(3)

下一篇:Java经典笔试题——(5)

最新开班日期

开班时间 2017/03/27
距离开班时间还剩

1 2 3