《工程师面试题之三大框架样本[整理]》由会员分享,可在线阅读,更多相关《工程师面试题之三大框架样本[整理](26页珍藏版)》请在金锄头文库上搜索。
1、资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 Java 工程师 ( 程序员 ) 面题 Struts,Spring,Hibernate三大框架 1.Hibernate工作原理及为什么要用 ? 原理: 1.读取并解析配置文件 2. 读取并解析映射信息 , 创立 SessionFactory 3. 打开 Session 4. 创立事务Transation 5.持久化操作 6. 提交事务 7. 关闭 Session 8. 关闭 SesstionFactory 为什么要用 : 1. 对 JDBC访问数据库的代码做了封装, 大大简化了数据访问层 繁琐的重复性代码。 2. Hibernat
2、e是一个基于 JDBC的主流持久化框架 , 是一 个优秀的 ORM 实现。 她很大程度的简化 DAO 层的编码工作 3. hibernate 使用 Java 反射机制 , 而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好 , 因为它是个轻量级框架。 映射的灵活性很出众。 它支持各种关系数据库 , 从一对 一到多对多的各种复杂关系。 2Hibernate 是如何延迟加载 ? 1. Hibernate2延迟加载实现 : a) 实体对象 b) 集合( Collection) 2. Hibernate3 提供了属性的延迟加载功能当 Hibernate在查询数据的时候 , 数据并
3、没有存在与内存中, 当程序真正对数据的操作时, 对象才存在与内存中 , 就实现了延迟加载 , 她节省了服务器的内存开销, 从而提高了服务器的性能。 3Hibernate 中怎样实现类之间的关系?(如: 一对多、多对多的关系 ) 类与类之间的关系主要体现在表与表之间的关系进行操作, 它们都是对对象进 行操作 , 我们程序中把所有的表与类都映射在一起, 它们经过配置文件中的 many-to-one 、 one-to-many 、 many-to-many 4.Struts1流程: 1、客户端浏览器发出HTTP 请求。 2、根据web.xml 配置, 该请 求被 资料内容仅供您学习参考,如有不当或者
4、侵权,请联系改正或者删除。 ActionServlet接收。3、 根据 struts-config.xml配置, ActionServlet先将 请求中的参数填充到ActionForm中, 然后ActionServlet再将请求发送到 Action 进行处理。 4、 是否验证 , 需要验证则调用 ActionForm 的 validate方 法, 验证失败则跳转到input, 成功则继续。 5、 Action从 ActionForm 获得数 据, 调用 javabean 中的业务方法处理数据。6、 Action返回 ActionForward 对象, 跳转到相应 JSP页面或 Action 。
5、7、 返回 HTTP 响应到客户端浏览器。 MVC设计模式 : modal: ”模型”也称业务逻辑 , 是正真完成任务的代码 , 相当 与 JavaBeanview: 视图, 其实就是显示界面 , 相当于 JSPcontroller: 控制器 , 她控制模型和视图的交互过程, 相当于 servletstruts1是基于 MVC设计模式 hibernate是基于 ORM 对象关系映射 5.struts是什么 ? struts1是基于 JSP和 servlet的一个开源的 Web应用框架 , 使用的是 MVC 的设 计模式 struts2是基于 webwork技术的框架 , 是 sun和 webw
6、ork公司联手开发的 一个功能非常齐全的框架, struts2和 struts1没有任何关系 , 是一个全新的框 架 6.spring是什么 ? spring是一个集成了许多第三方框架的大杂烩, 其核心技术是 IOC( 控制反转 , 也称依赖注入 ) 和 AOP( 面向切面编程 ) 7.hibernate是什么 ? hibernate是基于 ORM 对象关系映射 ( 完成对象数据到关系数据映射的机制) 实 现的, 做数据持久化的工具 8.JSF 是什么 ? JavaServer Face 是基于组件的 web开发框架 , 跟 sturts差不多的框架 资料内容仅供您学习参考,如有不当或者侵权,
7、请联系改正或者删除。 9. 数据库里面的索引和约束是什么? 索引是为了提高数据的检索速度, 索引是建立在数据表上, 根据一个或多个字 段建立的约束是为了保持数据的完整性, 约束有非空约束 , 主键约束 , 外键约 束等等。 10.spring是什么 这个问题 , 往往能够经过我们为什么要使用spring 这个问题来切入 : AOP 让开 发人员能够创立非行为性的关注点, 称为横切关注点 , 并将它们插入到应用程 序代码中。使用 AOP 后, 公共服务 ( 比 如日志、持久性、 事务等 ) 就能够 分解成方面并应用到域对象上, 同时不会增加域对象的对象模型的复杂性。 IOC 允许创立一个能够构造
8、对象的应用环境, 然后向这些对象传递它们的协作对象。 正如单词倒置 所表明的 , IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、 服务定位器、单元素 ( singleton) 和直接构造 ( straight construction) , 每 一 个 对 象 都 是 用 其 协 作 对 象 构 造 的 。 因 此 是 由 容 器 管 理 协 作 对 象 ( collaborator) 。 Spring即使一个 AOP框架, 也是一 IOC容器。 Spring 最 好的地方是它有助于您替换对象。有了 Spring, 只要用 JavaBean 属性和配置 文件加入依赖性 ( 协作对象
9、) 。 然后能够很容易地在需要时替换具有类似接口的 协作对象。 11. 用自己的话简要阐述struts2的执行流程。 Struts 2 框架本身大致能够分为3 个部分 : 核心控制器 FilterDispatcher、 业 务 控 制 器Action和 用 户 实 现 的 企 业 业 务 逻 辑 组 件 。 核 心 控 制 器 FilterDispatcher是 Struts 2 框架的基础 , 包含了框架内部的控制流程和处理 机制。业务控制器Action 和业务逻辑组件是需要用户来自己实现的。用户在开 发 Action 和业务逻辑组件的同时 , 还需要编写相关的配置文件, 供核心控制器 Fi
10、lterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单 , 与 WebWork 框架基本相同 , 因此 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 说 Struts 2是 WebWork 的升级版本。基本简要流程如下: 1 、 客户端浏览器发 出 HTTP请求。 2、 根据 web.xml 配置, 该请求被 FilterDispatcher接收。3、根 据 struts.xml配置, 找到需要调用的 Action 类和方法 , 并经过 IoC 方式, 将 值注入给 Aciton 。4、 Action调用业务逻辑组件处理业务逻辑, 这一步
11、包含表 单验证。5、 Action执行完毕 , 根据 struts.xml中的配置找到对应的返回结果 result, 并跳转到相应页面。 6、 返回 HTTP响应到客户端浏览器。 1 Action是不是线程安全的 ? 如果不是有什么方式能够保证Action的线程安 全? 如果是 , 说明原因 不是 声明局部变量 , 或者扩展 RequestProcessor, 让每次都创立一个Action, 或者 在 spring 中用 scope=prototype来管理 2.MVC, 分析一下 struts是如何实现 MVC 的 m: JavaBean 或结合 EJB 组件或者 pojo 构成 c: Ac
12、tion 来实现 v: 一组 JSP 文件及其标签构成。 3.struts中的几个关键对象的作用 ( 说说几个关键对象的作用 ) Action: 控制器类 , ActionForm: 表单对象 , DynaValidatorForm: 动态 form, ActonMapping: 配置文件中 action节点的信息 . 4. 说说 AOP 和 IOC的概念以及在 spring 中是如何应用的 AOP: 面向方面编程 , ioc: 依赖注入 ; 声明式事务和编程式事务积极一些通用部 分 5.Hibernate有哪几种查询数据的方式 hql 查询, sql查询, 条件查询 6.load()和 ge
13、t() 的区别 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 hibernate对于 load 方法认为该数据在数据库中一定存在, 能够放心的使用代 理来延迟加载 , load 默认支持延迟加载 , 在用到对象中的其它属性数据时才查 询 数 据 库 , 可 是 万 一 数 据 库 中 不 存 在 该 记 录 , 只 能 抛 异 常 ObjectNotFoundEcception; 所说的 load 方法抛异常是指在使用该对象的数据 时, 数据库中不存在该数据时抛异常, 而不是在创立这个对象时。 由于 session 中的缓存对于 hibernate来说是个相当廉价的资源 ,
14、因此在 load 时会先查一下 session 缓存看看该 id 对应的对象是否存在 , 不存在则创立代理 ( load时候之 查询一级缓存 , 不存在则创立代理 ) 。 get() 现在一级缓存找 , 没有就去二级缓 存找, 没有就去数据库找 , 没有就返回 null ; 而对于 get 方法, hibernate一 定要获取到真实的数据 , 否则返回 null 。 7. 谈谈 hibernate的延迟加载和 openSessionInView 延迟加载要在session范围内 , 用到的时候再加载 ; opensessioninview是在 web层写了一个 filter来打开和关闭 se
15、ssion, 这样就表示在一次request 过程中 session 一直 开着, 保证了延迟 加载在 session 中的这个前提。 8.spring的事务有几种方式 ? 谈谈 spring 事务的隔离级别和传播行为。 声明事务和编程事务 隔离级别 : - DEFAULT使用数据库默认的隔离级别 - READ_UNCOMMITTED会出现脏读 , 不可重复读和幻影读问题 - READ_COMMITTED会出现重复读和幻影读 - REPEATABLE_READ会出现幻影读 - SERIALIZABLE最安全 , 可是代价最大 , 性能影响极其严重 和传播行 : 资料内容仅供您学习参考,如有不当
16、或者侵权,请联系改正或者删除。 - REQUIRED 存在事务就融入该事务 , 不存在就创立事务 - SUPPORTS 存在事务就融入事务 , 不存在则不创立事务 - MANDATORY存在事务则融入该事务 , 不存在 , 抛异常 - REQUIRES_NEW总是创立新事务 - NOT_SUPPORTED存在事务则挂起 , 一直执行非事务操作 - NEVER总是执行非事务 , 如果当前存在事务则抛异常 - NESTED嵌入式事务 9.Hibernate中的 update() 和 saveOrUpdate() 的区别 . 摘自 hibernate说明文档 : saveOrUpdate() 做下面的事 : 如果对象已经在本session 中持久化了 , 不做任何事 如果另一个与本session关联的对象拥有相同的持久化标识(identifier), 抛 出一个异常 如果对象没有持久化标识(identifier)属性, 对其调用 save() 如果对象的持久标识(identifier)表明其是一个新实例化的对象,