JavaEE阶段测试

选择题(每题3分,共36分,不定项选择)

1. 下面关于spring描述错误的是:( C

A)Spring支持可插入的事务管理器,使事务划分更轻松,同时无需处理底层的问题。

B)Spring事务管理的通用抽象层还包括JTA策略和一个JDBC DataSource。

C)与JTA或EJB CMT一样,Spring的事务支持依赖于Java EE环境。

D)Spring事务语义通过AOP应用于 POJO,通过XML或Java SE 5注释进行配置。

 

2. 下列关于Spring特性中IOC描述错误的是:( A

A)IOC就是指程序之间的关系由程序代码直接操控。

B)所谓“控制反转”,是指控制权由应用代码转到外部容器,控制权的转移

C)IOC将控制创建的职责搬进了框架中;并把它从应用代码脱离开来

D)当使用Spring的IOC容器时只需指出组件需要的对象,在运行时Spring的IOC容器会根据XML配置数据提供给它。

 

3. Spring容器对象类型是( AD )

A)BeanFactory

B)JdbcTemplate

C)DataSourceTransactionManager

D)ApplicationContext

 

4. 下面不属于持久化的是( A

A)把对象转换为字符串的形式通过网络传输,

在另一端接收到这个字符串后能把对象还原出来

B)把程序数据从数据库中读出来

C)从XML配置文件中读取程序的配置信息

D)把程序数据保存为文件

 

5. 执行下面代码返回的结果为( A

Criteria criteria = session.createCriteria(User.class);

criteria.addOrder(Order.desc("id"));

List result = criteria.list();

A)以id降序排列的User对象列表

B)以id升序排列的User对象列表

C)返回Order为id的User对象的列表

D)不返回对象

 

6. 以下关于SessionFactory的说法哪些正确?( BC

A)对于每个数据库事务,应该创建一个SessionFactory对象

B)一个SessionFactory对象对应一个数据库存储源。

C)SessionFactory是重量级的对象,不应该随意创建。如果系统中只有一个数据库存储源,只需要创建一个。

D)SessionFactoryload()方法用于加载持久化对象

 

7. Spring各模块之间关系( BC

ASpring各模块之间是紧密联系的,相互依赖的 

BSpring各模块之间可以单独存在 

CSpring的核心模块是必须的,其他模块是基于核心模块 

DSpring的核心模块不是必须的,可以不要

 

8. 已知系统中TBL_USER 表对应的实体类是TblUser,下列HQL 语句中正确的是( D

Afrom Tbl_User

Bselect * from tbluser

Cselect TblUser from TblUser

Dfrom TblUser t where t.uname = "15"

 

9. Hibernate由持久化状态向游离状态转变的方法不包括( C )。

A)session.close()

B)session.clear()

C)session.delete()

D)session.evict(obj)

 

10下面( AB )不是Hibernate 映射文件中包含的内容。

A.数据库连接信息

BHibernate 属性参数

C.主键生成策略

D.属性数据类型

 

11.关于HQL与SQL,以下哪些说法正确( BC

A.HQL与SQL没什么差别

B.HQL面向对象,而SQL操作关系数据库

C.HQL和SQL相似,可包含select、from、where、group by、having、order by子语

D.HQL仅用于查询和删除数据,不支持insert,update语句

 

12. 如果要实现struts2的数据校验功能( D

A.普通Action类可以实现

B.继承自Action接口可以实现

C.继承自ActionSupport类可以实现

D.继承自ActionValidate类可以实现

 

答案: 1.C   2.A       3.AD   4.A       5.A    6.BC       7.BC   8.D       9.C    10.CD     11.BC       12.D

 

简答题(第一题4分,其余每题5分,共64分)

1、请写出 spring I0C 的三种实现机制。

三种机制为:通过 setter 方法注入、通过构造方法注入和接口注入。

 

2、描述Spring Web MVC的工作流程?

Spring Web MVC的工作流成如下:

1.控制器通过HandlerMapping请求,请求交给前端控制器DispatcServlet处理。

2.控制器通过HandlerMapping维护的请求和Controller映射信息,找到相应的Controller组件请求处理。

3.执行Controller组件约定方法处理请求,在约定方法中可以调用ServiceDAO等组件完成数据库操作。约定方法可以返回一个ModelAndView对象,封装了模型数据和视图名称信息。

4.控制器接收ModelAndView之后,调用ViewResolver组件,定位ViewJSP并传递Model信息,生成响应界面结果。

 

3.介绍一下Struts2的工作原理?

  1.读取配置,加载struts控制器.

  2.用户请求 用户提交表单或调用URLWEB应用程序服务器提交一个请求,请求的数据用HTTP协议上传给WEB服务器。

  3.通过struts控制器进行处理,

  4.经过一系列的拦截器处理

  5.进行业务逻辑的处理

  6.响应用户JSP将结果展现给用户。

 

4、如何控制Bean对象的作用域,默认作用域是什么?

可以通过<Bean>定义的scope属性指定Bean对象的作用域或者使用注解@Scope指定Bean对象的作用域。

默认Bean对象的作用域为singleton

 

5.什么是Hibernate延迟加载机制?有什么好处?

Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载。

延迟加载节省了服务器的内存开销,从而提高了服务器的性能;也缓解了并发处理。

 

6、简述MyBatis的体系结构。

MyBatis体系结构主要由以下几个关键部分:

1.加载配置

配置有两种形式,一种是XML配置文件,另一种是Java代码的注解。MyBatisSQL 的配置信息加载成为一个个的MappedStatement对象(包括了传入参数映射配置、执行 SQL语句、结果映射配置),并将其存储在内存中

2.SQL解柝

API接口层接收到调用请求时,会接收到传入SQLID和传入对象(可以是Map Java Bean或者基本数据类型),Mybatis会根据SQLID找到对应的MappedStatement r 然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的 SQL语句和参数。

3.SQL执行

将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。

4.结果映射

将橾作数据库的结果按照映射的配置进行转换,可以转换成HashMapJava Bean 者基本数据类型,并'将最终结果返回。

 

7JDBCHibernate分页怎样实现?

1.Hibernate实现分页的方式如下

Query query = session * createQuery(TTfrom StudentfT);

query.setFirstResult (firstResult); //设置每页开始的记录号

query.setMaxResuits(resultNumber); //设置每页显的记录数

Collection students = query*list();

上述代码中的集合students中为某页要获取的数据。

2.JDBC实现分页的方式如下:

根据不同的数据库采用不同的sql分页语句,例如:Oracle中的sql语句为:

SELECT * FROM (SELECT a.*rownum r FROM TB_STUDENT) WHERE r between 2 and 10 ; 

上述査询语句,査询了从记录号2到记录号10之间的所有记录。将上述SQL语句使

JDBC进行执行,即可得到分页后数据。

 

8、简述ssh框架的工作流程。

 在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)ActionServlet接收到的Request委派给相应的Action处理。在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。

9、对于HibernateMyBatis的区别与利弊,谈谈你的看法。

hibernate MyBatis 的对比:

1.MyBatis非常简单易学,Hibernate相对较复杂,门槛较高;

2.二者都是比较优秀的开源产品;

3.当系统属于二次开发,无法对数据库结构做到控制和修改’那MyBatis的灵活性将 hibernate更适合;

4.系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优 化的sql语句(或存储过程)才能达到系统性能设计指标。在这种情况下MyBatis会有更 好的可控性和表现;

5.MyBatis需要手写sql语句,也可以生成一部分.Hibernate则基本上可以自动生成, 偶尔会写一些sql。同样的需求,MyBatis的工作量比Hibernate要大很多。类似的,如果 涉及到数据库字段的修改,Hibernate修改的地方很少,MyBatis要把那些sql mapping 的地方----修改;

6.MyBatis以数据库字段-对应映射得到的poHibernate这种对象化映射得到的po是截然不同的,本质区别在于这种po是扁平化的,不像hibernate映射的po是可以 表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路;Hibernate现在已经是主流〇R Mapping框架,从文档的丰富性f产品的完善性, 版本的开发速度都要强于MyBatis.

 

10Struts2如何实现MVC,与Spring MVC有什么不同?

Struts2采用filter充当前端控制器来处理请求,filter会根据struts.xml的配置,将请 求分发给不同的业务控制器Action ,再由Action处理具体的业务逻辑。Action处理完业务之后,filter会根据其返回的字符串,struts.xml中找到对应的result,最终由result 将请求转发给页面。

这个实现的思路与Spring MVC基本一致。其差异如下:

1) Spring采用Servlet充当前端控制器,分发请求。

2) Spring采用RequestMapping配置请求与业务控制器的关系。

3) Spring采用Controller充当业务控制器。

4) Spring采用ViewResolver将请求转发给页面。

 

11Struts2中的拦截器和Servlet中的过滤器有什么区别。

struts2中的拦截器和servlet中的过滤器的区别如下:

1.拦截器是基于Java反射机制的f而过滤器是基于函数回调的;

2.过滤器依赖于servlet容器,而拦截器不依赖于servlet容器;

3.拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用;

4.拦截器可以访问Action上下文、值栈里的对象,而过滤器不能;

5.Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调

一次。

 

12Hibernate中对象有哪几种状态,有什么规则?

Hibernate中对象可以看做有3种状态,分别是临时态、持久态、游离态,这些状态可以相互转换。

具体各个状态的特征为:

1.临时态

1)临时态的对象可以被垃圾回收;

2)临时态的对象未进行过持久化f未与session关联。

2.持久态

1)持久态对象垃圾回收器不能回收;

2)持久态的对象进行了持久化,与session相关联,即持久态对象存在于session

存中,由session负责管理。

3)持久态对象的数据可以自动更新到数据库中,时机是在调用session.flushO时执

行。而提交事务时会调用session.flushO ,因此提交事务时也会触发同步,可以理解为tsxommit=sessionilush()+commit

3.游离态

1)游离态的对象可以被垃圾回收;

2)游离态的对象进行过持久化,但已与session解除了关联。

 

13Hibernate一级缓存和二级缓存区别

一级缓存:Session级别的缓存

   Sessionopen时,缓存即被open

   Sessionclose时,缓存即被close

   在缓存openclose这段时间,多次加载同一个持久化对象,只有第一次向数据库发送SQL语句加载,之后的加载都是基于缓存的

   不过Session从打开到关闭的时间很短暂,一般在项目中都是在业务方法开始时打开Session,调用结束后即关闭Session,在如此短暂的瞬间时刻内,多次加载同一个对象的可能性不大,换言之,一级缓存的可用之处也并不大

 

二级缓存:SessionFactory级别的缓存

   Session同理,level2 cache会随着sessionFactory的打开而打开,关闭而关闭。

   但是在一般的应用程序中,sessionfactory会以单例的形式存在,所以在整个应用程序的生命周期里,sessionfactory会一直存在。既二级缓存也一直存在直到关闭应用程序。

 


欢迎转载:海阔天空 » JavaEE阶段测试

评论 沙了个发

换个身份

取消评论