SSH常见面试题文库_第1页
SSH常见面试题文库_第2页
SSH常见面试题文库_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、最新资料,word文档,可以自由编辑! !精品文档下载【本页是封面,下载后可以删除!】SSH常见面试题文库.txt "我羡慕内些老人羡慕他们手牵手一直走到最后。一交话费的时候,才发现自己的话那么值钱。1 Acti on 是不是线程安全的?如果不是有什么方式可以保 证 Action 的线程安全?如果是,说明原因2. MVC,分析一下struts 是如何实现MVC勺3. struts中的几个关键对象的作用 ( 说说几个关键对象的作用 )4. 说说AOP和IOC的概念以及在spring中是如何应用的5. Hibernate 有哪几种查询数据勺方式6.load() 和 get() 的区别7.

2、 谈谈 hibernate 的延迟加载和 openSessionInView8. spring 的事务有几种方式?谈谈 spring 事务的隔离级别和传播行为。9. Hibernate中的 update() 和 saveOrUpdate() 的区别 .lO.Spring对多种ORM匡架提供了很好的支持,简单描述在Spring中使用Hibernate的方法, 并结合事务管理。ssh 常见面试题 (2009-03-28 15:26:42) 标签:常见 spring hibernate struts 面试问题 ssh 学习 it 分类: java 学习其实 spring,hibernate,stru

3、ts面试的话 一般不会问什么太深的问题 一般只是看你用过没有 做过什么什么项目 有个面试官就问我 ssh 集成要配置多少个 xml 文件 哇哈哈 很简 单的就答出来了 不过有些同学也问得挺难的 下面是些常问的问题1. MVC,分析一下struts 是如何实现MVC的 m: JavaBean 或结合 EJB 组件或者 pojo 构成 c: Action 来实现v :一组 JSP 文件及其标签构成。2. struts中的几个关键对象的作用Action :控制器类,ActionForm :表单对象,DynaValidatorForm :动态 form ,ActonMapping :配置文件中 act

4、ion 节点的信息 .3. Hibernate有哪几种查询数据的方式hql 查询, sql 查询,条件查询4.load() 和 get() 的区别load 默认支持延迟加载, 在用到对象中的其他属性数据时才查询数据库, 但是万一数据库中 不存在该记录, 只能抛异常 ObjectNotFoundEcception ;所说的 load 方法抛异常是指在使用 该对象的数据时, 数据库中不存在该数据时抛异常, 而不是在创建这个对象时。 由于 session 中的缓存对于 hibernate 来说是个相当廉价的资源, 所以在 load 时会先查一下 session 缓存 看看该 id 对应的对象是否存在

5、,不存在则创建代理( load 时候之查询一级缓存,不存在则 创建代理)。 get() 现在一级缓存找,没有就去二级缓存找,没有就去数据库找,没有就返回 null ;而对于 get 方法, hibernate 一定要获取到真实的数据,否则返回 null 。5. spring 的事务有几种方式?谈谈 spring 事务的隔离级别和传播行为。 声明事务和编程事务隔离级别:- DEFAULT 使用数据库默认的隔离级别-READ_UNCOMMITTE会出现脏读,不可重复读和幻影读问题-READ_COMMITTE会出现重复读和幻影读-REPEATABLE_REA会出现幻影读- SERIALIZABLE

6、最安全,但是代价最大,性能影响极其严重和传播行:-REQUIRED存在事务就融入该事务,不存在就创建事务-SUPPORTS存在事务就融入事务,不存在则不创建事务-MANDATORY?在事务则融入该事务,不存在,抛异常-REQUIRES_NEW、是创建新事务-NOT_SUPPORTE存在事务则挂起,一直执行非事务操作-NEVER总是执行非事务,如果当前存在事务则抛异常-NESTED嵌入式事务6.Spring对多种ORM!架提供了很好的支持,简单描述在Spring中使用Hibernate的方法, 并结合事务管理。getHiberanteTemplate 里面提供了 save, update , d

7、elete , find 等方法。简单说一个: 如果配置了声明式事务, 当执行 getHibernateTemplate 的各种方法的时候, 事 务会 自动被加载如果没有配置事务,那么以上操作不会真正的被同步到数据库,除非配置了hibernate 的autocommit=true7.spring 的事务有几种方式?谈谈 spring 事务的隔离级别和传播行为。spring 事务分两种形式,声明式事务和编程式事务, spring 提供了一个事务的接口PaltformTractionManager 接口, 针对不同的事务, spring 进行了不同的实现 , 对 hibernate事务DataSo

8、urceTractionManager 以及 JdoTractionManager 。接口 platformTractionManager 提 供了三 个方法,获取事务,提交和回滚的方法。8 Hibernate 中怎样实现类之间的关系 ?( 如:一对多、多对多的关系 )类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们 程序中把所有的表与类都映射在一起,它们通过配置文件中的 many-to-one 、 one-to-many 、 many-to-many 、Hibernate 工作原理及为什么要用?原理:1. 读取并解析配置文件2. 读取并解析映射信息,创建 Se

9、ssionFactory3. 打开 Sesssion4. 创建事务 Transation5. 持久化操作6. 提交事务7. 关闭 Session8. 关闭 SesstionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAC层的编码工作3. hibernate 使用 Java 反射机制,而不是字节码增强程序来实现透明性。4. hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关 系数据库,从一对一到多

10、对多的各种复杂关系。2 Hibernate1. Hibernate2是如何延迟加载 ?延迟加载实现: a) 实体对象 b) 集合( Collection )2. Hibernate3提供了属性的延迟加载功能当 Hibernate 在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时, 对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器 的性能。3 Hibernate 中怎样实现类之间的关系 ?( 如:一对多、多对多的关系 )类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们 程序中把所有的表与类都映射在一起,它们通过配置

11、文件中的many-to-one 、 one-to-many 、many-to-many 、4 说下 Hibernate 的缓存机制1. 内部缓存存在 Hibernate 中又叫一级缓存,属于应用事物级缓存2. 二级缓存:a) 应用及缓存b) 分布式缓存 条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统 频繁使用、非 关键数据c) 第三方缓存的实现5 Hibernate 的查询方式Sql 、 Criteria,object comptositionHql:1、属性查询2、参数查询、命名参数查询3、关联查询4、分页查询5、统计函数6 如何优化 Hibernate ?

12、1. 使用双向一对多关联,不使用单向一对多2. 灵活使用单向一对多关联3. 不用一对一,用多对一取代4. 配置对象缓存,不使用集合缓存5. 一对多集合使用 Bag, 多对多集合使用 Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰7 Struts 工作机制?为什么要使用 Struts ?工作机制:Struts 的工作流程 :在 web 应用启动时就会加载初始化 ActionServlet,ActionServlet 从 struts-config.xml 文件中读取配置信息 , 把它们存放到各种配置对象 当 ActionServlet 接收到一个客户请求时 , 将

13、执行如下流程 .-(1) 检索和用户请求匹配的 ActionMapping 实例 , 如果不存在 , 就返回请求路径无效信息 ;-(2) 如果 ActionForm 实例不存在 , 就创建一个 ActionForm 对象 , 把客户提交的表单数据保存 到 ActionForm 对象中 ;-(3) 根据配置信息决定是否需要表单验证 . 如果需要验证 , 就调用 ActionForm 的 validate() 方法;-(4) 如果 ActionForm 的 validate() 方法返回 null 或返回一个不包含 ActionMessage 的 ActuibErrors 对象 , 就表示表单验证

14、成功 ;-(5)ActionServlet 根据 ActionMapping 所包含的映射信息决定将请求转发给哪个 Action, 如果相应的 Action 实例不存在 , 就先创建这个实例 , 然后调用 Action 的 execute() 方法 ; -(6)Action 的 execute() 方法返回一个 ActionForward 对象 ,ActionServlet 在把客户请求转 发给ActionForward 对象指向的JSP组件;-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;为什么要用:JSP、Servlet 、JavaBean 技术的出现给我们构

15、建强大的企业应用系统提供了可能。但用这些 技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来 的规则,这就是框架, Struts 便应运而生。基于 Struts 开发的应用由 3 类组件构成:控制器组件、模型组件、视图组件8 Struts 的 validate 框架是如何验证的?在struts 配置文件中配置具体的错误提示,再在FormBean中的validate。方法具体调用。9 说下 Struts 的设计模式MVC莫式:web应用程序启动时就会加载并初始化ActionServler 。用户提交表单时,一个配置 好 的 ActionForm 对 象 被创 建 ,

16、 并 被 填 入表 单 相 应 的 数 据, ActionServler 根 据 Struts-config.xml 文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate ()验证后选择将请求发送到哪个 Action ,如果 Action 不存在, ActionServlet 会先创建这个对象,然后调用 Action 的 execute ()方法。 Execute ()从 ActionForm 对象 中获取数据,完成业务逻辑,返回一个 ActionForward 对象, ActionServlet 再把客户请求 转发给 ActionForward 对象指

17、定的 jsp 组件, ActionForward 对象指定的 jsp 生成动态的网 页,返回给客户。10 spring 工作机制及为什么要用 ?1. spri ng mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。2. DispatcherServlet查询一个或多个 HandlerMapping, 找到处理请求的 Controller.3. DispatcherServlet请请求提交到目标 Controller4. Controller进行业务逻辑处理后,会返回一个 ModelAndView5. Dispathche

18、r 查询一个或多个 ViewResolver 视图解析器 , 找到 ModelAndView 对象指定的视 图对象6. 视图对象负责渲染返回给客户端。为什么用:AOP 让开发人员可以创建非行为性的关注点, 称为横切关注点, 并将它们插入到应用程序代 码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到 域对象上,同时不会增加域对象的对象模型的复杂性。IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单 词 倒置 所表明的, IOC 就像反 过来的 JNDI 。没有使用一堆抽象工厂、服务定位器、单元 素( singleton )

19、和直接构造( straight construction ),每一个对象都是用其协作对象构造 的。因此是由容器管理协作对象( collaborator )。Spring即使一个AOP匡架,也是一 IOC容器。Spring 最好的地方是它有助于您替换对象。 有了 Spring ,只要用 JavaBean 属性和配置文件加入依赖性(协作对象) 。然后可以很容易 地在需要时替换具有类似接口的协作对象。 其它知识点:不会涉及到 2 级缓存以及 hql1. Configuration读取 hibernate.cfg.xml. 并把.hbm.xml 文件交给 HbmBinder 做第一次处理,HbmBin

20、der 根 据.hbm.xml 解析出 PersistentClass,Collection, 然后在创建 SessionFactory 的时候,会对Collection 做第 2 次处理塞入关联2 PersistentClass根据 .hbm.xml 产生的描述要持久化的类的信息的类 . 主要的实例变量包括 List <Property> propertiesProperty 对象里的有个 Value 属性 value, 通过 value 来描述该 property 和 数据库里的哪些列对应以及获得该 property 对应的 type3 Value主要分为SimpleValue

21、,Collection,Component,ToOneSimpleValue 主要包括 Table 和 Columns 属性 , 用于描述简单属性或单主键Collection 主要属性包括collectionTable 表示 Collection 里面 element 对象所对应的 Tablekey 表示 CollectionTable 里的哪几列和 Collection owner 所对应的表的主键做关联 element, 描 述 了 主 表 (referencingTable), 从 表 的 EnityName, 以 及 从 表 对 应 的 PersistentClassComponent

22、可以用来描述多主键,通过属性properties 来表示ToOne包括被引用的属性名,被引用的实体名,columns,(被引用的属性名不能和 columns 同时设置 ), 用于 OneToOne,ManyToOne4 SessionFactory在创建 SessionFactory 的时候 , 会根据 Configuration 里 Classes 和Collections, 创建 EntityPersister 和 CollectionPersister.SessionFactory 会缓存这些 persisters.EnityPersistenter 的 key 是 EntityName

23、,CollectionPersister 的 key 是 entityName+propertyNameSingleTableEntityPersister( 通过一个字段做标识 JoinedSubclassEntityPersister( UnionSubclassEntityPersister(5 EntityPersister 分为 一个实体一个表 / 一个类继承结构一个表 )每个子类一个表 )每个具体类一个表 )6 CollectionPersister 封装对一个 Collection 的 crud 操作 .不过做 insert,update,delete,recreate 的时候

24、, 会判 Inverse 是否为 false. 如果为 false 才会执行相应的操作 , 表示是由 Collection 维护关系 .如果 Inverse=true, 表示关联关系是由多端来维护 ( 即直接通过操作 Collection 里的 element 来维护 , 而不是通过操作 Collection 来维护 )则该 CollectionPersister 不会做任何操作7 Type 主要包括对 SqlTypes 的封装 , 以及 CollectionType,EntityType (ManyToOneType,OneToOneType), 主要接口有 nullSafeGet( 从 R

25、esultSet 拼装出对象 ),nullSafeSet( 给 PreparedStatement setParameter).可以通过 Value.getType() 获得 Type 对于 EntityType,CollectionType, 就是通过 resolve 方法从 ResultSet 中拼装出对象EntityType的nullSafeSet, 就是获取One端对象的主键所对应的 Type 进行 nullSafeSet CollectionType 没有实现 nullSafeSet, 通过保存时的 Cascade 或者 CollectionPersister, 将 Collecti

26、on 的 Element 一个一个的 set也可以自定义 Type, 实现 UserType 接口具体见 封装对一个 entity 的 crud 操作 , 在创建 EntityPersister 实例过程中 , 会产 生 crud 的 sql, 可以在以后的操作提高效率。不过如果是 DynamicInsert, DynamicUpdate, 则会根据对象修改的属性动态的生成 sqlDAS不支持类继承的映射,因此只会用到 SingleTableEntityPersister8 StatefulPersistenceContextStatefulPersistenceContext 和 Sessi

27、onImpl 是一一对应的,会缓存通过 SessionImpl 操作过的对象 , 包括 entity 和 collection. 主要属性有 EntitiesByKey key=EntityKey, value=entity.(EntityKey=id+EntityPersister+EntityMode entityMode) entityEntries key=entity, value=EntityEntry.EntityEntry用于描述一个对象的持久化状态,女口 DELETED,MANAGED等CollectionsByKeykey=CollectionKey, value=Pers

28、istentCollection CollectionKey=CollectionPersister+key+EntityMode,这个Key 是通过 Collection.value.getType.nullSafeGet()得到的PersistentCollection 是 hibernate 对于 Collection 的封装, 主要用于实现延迟加载collectionEntries key=PersistentCollection,value=CollectionEntry StatefulPersistenceContext 的主要用途可以实现对象之间的关联关系 的设置 , 动态的更

29、新 , 以及对缓存的数据无需显示调用 save,update,delete 的 方法就可以实现这些操作 , 是因为在 Tmit() 的时候会调用 session.flush(), 会保证内存对象状态和数据库的一致性9 Cascade,CascadeStyle,CascadingAction在 Cascade 执行级联操作的时候 , 会通过 CascadeStyle.doCascade( CascadingAction) 来判断是否可以执行 cascade, 并且当要保存的对象有外键 约束的关联对象时候会通过 ForeignKeyDirection 来判断是应该在保存该对象 之前要保存关联对象还

30、是在保存该对象之后再保存关联对象10 Loader,CriteriaQueryTranslator,Criteria,QueryParameters, CriteriaJoinWalker用于 Criteria api 对实体的查询Criteria 是一个查询 entity 的 api 。可以设置类似 where 条件的表达式 ,Select 字段 ,order 等等当使用 Criteria 查询时 , 首先会创建 CriteriaLoader,CriteriaLoader会通过 CriteriaQueryTranslator 从 Criteria 中得到查询参数QueryParameters

31、, 通过 CriteriaJoinWalker 把 Criteria 变成 sql, 然后 执行查询11 ActionQueue当调用 session 对实体进行 insert,update,delete 的时候,只是会创建相应的 action 放入 ActionQueue, 然后在 session.flush() 的时候才会真正操作 数据库ActionQueue 的执行顺序 :executeActions( insertions );executeActions( updates );executeActions( collectio nRemovals );executeActions(

32、collectionUpdates );executeActions( collectionCreati ons );executeActions( deletions );12 Tuplizer用于根据 entityname 实例化出对象 , 以及 set/get propertyhibernate 内置的有 PojoEntityTuplizer , Dom4jEntityTuplizerDAS是在hibernate 基础之上实现了 DataObject的持久化,支持DataObject对象之间的关联 延迟加载 , 级联 , 控制反转 , 不支持 DataObject 的继承1. 新实现了一个 SDOEntityTuplizer支持创建 DataObject, 以及 set/get DataObject 的属性SDOEntityTuplizer 实现抽象类中规定的如下方法SDOEntityTuplizer 类的 buildInstantiator 方法用来根据 mapping 信息来为相应的实体建

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论