【Jsp精品源码栏目提醒】:本文主要为网学会员提供“SSH框架面试题(自己+别人的试题) - 招聘面试”,希望对需要SSH框架面试题(自己+别人的试题) - 招聘面试网友有所帮助,学习一下!
问答题选择题(在 55 页)Java 工程师(程序员)面题StrutsSpringHibernate 三大框架 1.Hibernate 工作原理及为什么要用?原理: 1.读取并解析配置文件 2.读取并解析映射信息, 创建 SessionFactory 3.打开 Session 4.创建事务 Transation 5.持久化操作 6.提交事务 7.关闭 Session 8.关闭 SesstionFactory为什么要用: 1. 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate 是一个基于 JDBC 的主流持久化框架,是一个优秀的 ORM 实现。
他很大程度的简化 DAO 层的编码工作 3. hibernate 使用 Java 反射机制,而不是字节码增强程序来实现透明性。
4. hibernate 的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2.Hibernate 是如何延迟加载1. Hibernate2 延迟加载实现:a实体对象 b集合(Collection)2. Hibernate3 提供了属性的延迟加载功能 当 Hibernate 在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
3.Hibernate 中怎样实现类之间的关系如:一对多、多对多的关系类与类之间的关系主要体现在表与表之间的关系进行操作, 它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的 many-to-one、one-to-many、many-to-many4.Struts1 流程:1、客户端浏览器发出 HTTP 请求。
2、根据 web.xml 配置,该请求被 ActionServlet 接收。
3、根据 struts-config.xml 配置, ActionServlet 先将请求中的参数填充到 ActionForm 中,然后ActionServlet 再将请求发送到 Action 进行处理。
4、是否验证,需要验证则调用 ActionForm的 validate 方法,验证失败则跳转到 input,成功则继续。
5、Action 从 ActionForm 获得数据,调用 javabean 中的业务方法处理数据。
6、Action 返回 ActionForward 对象, 跳转到相应
JSP页面或 Action。
7、返回 HTTP 响应到客户端浏览器。
“MVC 设 计 模 式 : modal : 模 型 ” 也 称 业 务 逻 辑 , 是 正 真 完 成 任 务 的 代 码 相 当 与JavaBeanview:视图,其实就是显示界面,相当于 JSPcontroller:控制器,他控制模型和视图的交互过程,相当于 servletstruts1 是基于 MVC 设计模式 hibernate 是基于 ORM 对象关系映射5.struts 是什么? 使用的是 MVC 的设计模式 struts2struts1 是基于
JSP 和 servlet 的一个开源的 Web 应用框架, 是是基于 webwork 技术的框架, sun 和 webwork 公司联手开发的一个功能非常齐全的框架,struts2 和 struts1 没有任何关系,是一个全新的框架6.spring 是什么?spring 是一个集成了许多第三方框架的大杂烩,其核心技术是 IOC(控制反转,也称依赖注入)和 AOP(面向切面编程)7.hibernate 是什么?hibernate 是基于 ORM 对象关系映射(完成对象数据到关系数据映射的机制)实现的做数据持久化的工具8.JSF 是什么?JavaServer Face 是基于组件的 web 开发框架,跟 sturts 差不多的框架9.数据库里面的索引和约束是什么索引是为了提高数据的检索速度,索引是建立在数据表上,根据一个或多个字段建立的约束是为了保持数据的完整性,约束有非空约束,主键约束,外键约束等等。
10.spring 是什么这个问题,往往可以通过我们为什么要使用 spring 这个问题来切入:AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。
使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。
IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。
正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。
没有 ,使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction) 。
每一个对象都是用其协作对象构造的。
因此是由容器管理协作对象(collaborator) Spring即使一个 AOP 框架,也是一 IOC 容器。
Spring 最好的地方是它有助于您替换对象。
有了 。
然后可以很容易地在需Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)要时替换具有类似接口的协作对象。
11.用自己的话简要阐述 struts2 的执行流程。
Struts 2 框架本身大致可以分为 3 个部分:核心控制器 FilterDispatcher、业务控制器 Action和用户实现的企业业务逻辑组件。
核心控制器 FilterDispatcher 是 Struts 2 框架的基础,包含了框架内部的控制流程和处理机制。
业务控制器 Action 和业务逻辑组件是需要用户来自己实现的。
用户在开发 Action 和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器 FilterDispatcher 来使用。
Struts 2 的工作流程相对于 Struts 1 要简单,与 WebWork 框架基本相同,所以说 Struts 2 是WebWork 的升级版本。
基本简要流程如下: 客户端浏览器发出 HTTP 请求。
根据 web.xml 1、 2、配置,该请求被 FilterDispatcher 接收。
3、根据 struts.xml 配置,找到需要调用的 Action 类和方法, 并通过 IoC 方式, 将值注入给 Aciton。
4、Action 调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action 执行完毕,根据 struts.xml 中的配置找到对应的返回结果result,并跳转到相应页面。
6、返回 HTTP 响应到客户端浏览器。
1 Action 是不是线程安全的?如果不是 有什么方式可以保证 Action 的线程安全?如果是,说明原因不是声明局部变量,或者扩展 RequestProcessor,让每次都创建一个 Action,或者在 spring 中用scopequotprototypequot来管理2.MVC,分析一下 struts 是如何实现 MVC 的m:JavaBean 或结合 EJB 组件或者 pojo 构成c:Action 来实现v:一组
JSP 文件及其标签构成。
3.struts 中的几个关键对象的作用说说几个关键对象的作用Action:控制器类,ActionForm:表单对象,DynaValidatorForm:动态 form,ActonMapping:配置文件中 action 节点的信息......4.说说 AOP 和 IOC 的概念以及在 spring 中是如何应用的AOP:面向方面编程,ioc:依赖注入;声明式事务和编程式事务积极一些通用部分5.Hibernate 有哪几种查询数据的方式hql 查询,sql 查询,条件查询6.load和 get的区别hibernate 对于 load 方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,load 默认支持延迟加载,在用到对象中的其他属性数 据时才查询数据库,但是万一数据库中不存在该记录,只能抛异常 ObjectNotFoundEcception;所说的 load 方法抛异常是指在使用该对 象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。
由于session 中的缓存对于 hibernate 来说是个相当廉价的资源,所以在 load 时会先查一下 session缓存看看该 id 对应的对象是否存在,不存在则创建代理(load 时候之查询一级缓存,不存在则创建代理)。
get 现在一级缓存找,没有就去二级缓存找,没有就去数据库找,没有就返回 null ;而对于 get 方法,hibernate 一定要获取到真实的数据,否则返回 null。
7.谈谈 hibernate 的延迟加载和 openSessionInView延迟加载要在 session 范围内,用到的时候再加载;opensessioninview 是在 web 层写了一个filter 来打开和关闭 session,这样就表示在一次 request 过程中 session 一直开着,保证了延迟加载在 session 中的这个前提。
8.spring 的事务有几种方式?谈谈 spring 事务的隔离级别和传播行为。
声明事务和编程事务隔离级别:- DEFAULT 使用数据库默认的隔离级别- READ_UNCOMMITTED 会出现脏读,不可重复读和幻影读问题- READ_COMMITTED 会出现重复读和幻影读- REPEATABLE_READ 会出现幻影读- SERIALIZABLE 最安全,但是代价最大,性能影响极其严重和传播行:- REQUIRED 存在事务就融入该事务,不存在就创建事务- SUPPORTS 存在事务就融入事务,不存在则不创建事务- MANDATORY 存在事务则融入该事务,不存在,抛异常- REQUIRES_NEW 总是创建新事务- NOT_SUPPORTED 存在事务则挂起,一直执行非事务操作- NEVER 总是执行非事务,如果当前存在事务则抛异常- NESTED 嵌入式事务9.Hibernate 中的 update和 saveOrUpdate的区别.摘自 hibernate 说明文档:saveOrUpdate做下面的事:如果对象已经在本 session 中持久化了,不做任何事如果另一个与本 session 关联的对象拥有相同的持久化标识identifier,抛出一个异常如果对象没有持久化标识identifier属性,对其调用 save如果对象的持久标识identifier表明其是一个新实例化的对象,对其调用 save如果对象是附带版本信息的(通过 ltversiongt或 lttimestampgt) 并且版本属性的值表明其是一个新实例化的对象,save它。
否则 update 这个对象10.Spring 对多种 ORM 框架提供了很好的支持, 简单描述在 Spring 中使用 Hibernate 的方法,并结合事务管理。
getHiberanteTemplate 里面提供了 save,update,delete,find 等方法。
简单说一个:如果配置了声明式事务,当执行 getHibernateTemplate 的各种方法的时候,事务会自动被加载如果没有配置事务,那么以上操作不会真正的被同步到数据库,除非配置了 hibernate 的autocommittrue8.spring 的事务有几种方式?谈谈 spring 事务的隔离级别和传播行为。
spring 事务分两种形式,声明式事务和编程式事务,spring 提供了一个事务的接口PaltformTractionManager 接口,针对不同的事务,spring 进行了不同的实现对 hibernate 事务的实现 HIbernateTractionManager对 JDBC 的 JdbcTractionManager,DataSourceTractionManager 以及 JdoTractionManager。
接口 platformTractionManager 提供了三个方法,获取事务,提交和回滚的方法。
分享面试题二】Springhibernatestruts 的面试笔试题(含答案)(声明:这里不是为其他商业利益,是为学习讨论使用)【郑重声明】:单纯接分将被删帖,希望大家有自己的感触Hibernate 工作原理及为什么要用?原理:1.读取并解析配置文件2.读取并解析映射信息,创建 SessionFactory3.打开 Sesssion4.创建事务 Transation5.持久化操作6.提交事务7.关闭 Session8.关闭 SesstionFactory为什么要用:1. 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate 是一个基于 JDBC 的主流持久化框架,是一个优秀的 ORM 实现。
他很大程度的简化 DAO 层的编码工作3. hibernate 使用 Java 反射机制,而不是字节码增强程序来实现透明性。
4. hibernate 的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2. Hibernate 是如何延迟加载1. Hibernate2 延迟加载实现:a实体对象 b集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当 Hibernate 在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
3.Hibernate 中怎样实现类之间的关系如:一对多、多对多的关系类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作, 我们程序中把所有的表与类都映射在一起,它们通过配置文件中的 many-to-one、one-to-many、many-to-many、4. 说下 Hibernate 的缓存机制1. 内部缓存存在 Hibernate 中又叫一级缓存,属于应用事物级缓存2. 二级缓存:a 应用及缓存b 分布式缓存条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据c 第三方缓存的实现5. Hibernate 的查询方式Sql、Criteriaobject comptositionHql:1、 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数6. 如何优化 Hibernate?1.使用双向一对多关联,不使用单向一对多2.灵活使用单向一对多关联3.不用一对一,用多对一取代4.配置对象缓存,不使用集合缓存5.一对多集合使用 Bag多对多集合使用 Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰7. Struts 工作机制?为什么要使用 Struts?工作机制:Struts 的工作流程:在 web 应用启动时就会加载初始化 ActionServletActionServlet 从struts-config.xml 文件中读取配置信息把它们存放到各种配置对象当 ActionServlet 接收到一个客户请求时将执行如下流程. -1检索和用户请求匹配的 ActionMapping 实例如果不存在就返回请求路径无效信息 -2如果 ActionForm 实例不存在就创建一个 ActionForm 对象把客户提交的表单数据保存到 ActionForm 对象中 -3根据配置信息决定是否需要表单验证.如果需要验证就调用 ActionForm 的 validate方法 -4如果 ActionForm 的 validate方法返回 null 或返回一个不包含 ActionMessage 的ActuibErrors 对象 就表示表单验证成功 -5ActionServlet 根据 ActionMapping 所包含的映射信息决定将请求转发给哪个 Action如果相应 的 Action 实例不存在就先创建这个实例然后调用 Action的 execute方法 -6Action 的 execute方法返回一个 ActionForward 对象ActionServlet 在把客户请求转发给 ActionForward 对象指向的
JSP 组件 -7ActionForward 对象指向
JSP 组件生成动态网页返回给客户为什么要用:
JSP、Servlet、JavaBean 技术的出现给我们构建强大的企业应用系统提供了可能。
但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts 便应运而生。
基于 Struts 开发的应用由 3 类组件构成:控制器组件、模型组件、视图组件8. Struts 的 validate 框架是如何验证的?在 struts 配置文件中配置具体的错误提示,再在 FormBean 中的 validate方法具体调用。
9. 说下 Struts 的设计模式MVC 模式: web 应用程序启动时就会加载并初始化 ActionServler。
用户提交表单时,一个配置 好 的 ActionForm 对 象 被 创 建 , 并 被 填 入 表 单 相 应 的 数 据 , ActionServler 根 据Struts-config.xml 文件配置好的设置决定是否需要表单验证,如果需要就调用 ActionForm 的Validate()验证后选择将请求发送到哪个 Action,如果 Action 不存在,ActionServlet 会先创建这个对象,然后调用 Action 的 execute()方法。
Execute()从 ActionForm 对象中获取数据,完成业务逻辑,返回一个 ActionForward 对 象,ActionServlet 再把客户请求转发给ActionForward 对象指定的
jsp 组件,ActionForward 对象指定的
jsp 生成动 态的网页,返回给客户。
10. spring 工作机制及为什么要用1.spring mvc 请所有的请求都提交给 DispatcherServlet它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
2.DispatcherServlet 查询一个或多个 HandlerMapping找到处理请求的 Controller.3.DispatcherServlet 请请求提交到目标 Controller4.Controller 进行业务逻辑处理后,会返回一个 ModelAndView5.Dispathcher 查询一个或多个 ViewResolver 视图解析器找到 ModelAndView 对象指定的视图对象6.视图对象负责渲染返回给客户端。
为什么用:AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。
使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。
IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。
正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。
没有使用一堆抽象工厂、服务定位 ,器、单元素(singleton)和直接构造(straight construction)每 一个对象都是用其协作对象 。
构造的。
因此是由容器管理协作对象(collaborator)Spring 即使一个 AOP 框架,也是一 IOC 容器。
Spring 最好的地方是它有助于您替换对象。
有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。
然后可以很容易地在需要时替换具有类似接口的协作对象。
StrutsSpringHibernate 优缺点Struts 跟 Tomcat、Turbine 等诸 多 Apache 项目一样,是开源软件,这是它的一大优点。
使开发者能更深入的了解其内部实现机制。
Struts 开放
源码框架的创建是为了使开发者在构建基于 Java Servlet 和 JavaServer Pages(
JSP)技术 的 Web 应用时更加容易。
Struts 框架为开放者提供了一个统一的标准框架,通过使用 Struts 作为基础,开发者能够更专注 于应用程序 的 商 业 逻 辑 。
Struts 框 架 本 身 是 使 用 Java Servlet 和 JavaServer Pages 技 术 的 一 种Model-View-Controller(MVC)实现.具体来讲Struts 的优点有:1. 实现 MVC 模式,结构清晰使开发者只关注业务逻辑的实现.2. 有丰富的 tag 可以用 Struts 的标记库Taglib,如能灵活动用,则能大大提高开发效率。
另外,就目前国内的
JSP 开发者而言,除了使用
JSP 自带的常用标记外,很少开发自己的标记,或许 Struts 是一个很好的起点。
3. 页面导航.页面导航将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。
通过一个配置文件, 即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。
尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。
4. 提供 Exception 处理机制 .5. 数据库链接池管理6. 支持 I18N缺点:一、转到展示层时,需要配置 forward,每一次转到展示层,相信大多数都是直接转到
jsp,而涉及到转向, 需要配置 forward,如果有十个展示层的
jsp,需要配置十次 struts,而且还不包括有时候目录、文件变更,需要重新修改 forward,注意, 每次修改配置之后,要求重新部署整个项目,而 tomcate 这样的服务器,还必须重新启动服务器,如果业务变更复杂频繁的系统,这样的操作简单不可想象。
现在就是这样,几十上百个人同时在线使用我们的系统,大家可以想象一下,我的烦恼有多大。
二、 Struts 的 Action 必需是 thread-safe 方式,它仅仅允许一个实例去处理所有的请求。
所以 action 用到的所有的资源都必需统一同步,这个就引起了线程安全的问题。
三、 测试不方便. Struts 的每个 Action 都同 Web 层耦合在一起,这样它的测试依赖于 Web容器,单元测试也很难实现。
不过有一个 Junit 的扩展工具 Struts TestCase 可以实现它的单元测试。
四、 类型的转换. Struts 的 FormBean 把所有的数据都作为 String 类型,它可以使用工具Commons-Beanutils 进行类型转化。
但它的转化都是在 Class 级别,而且转化的类型是不可配置的。
类型转化时的错误信息返回给用户也是非常困难的。
五 、 对 Servlet 的 依 赖 性 过 强 . Struts 处 理 Action 时 必 需 要 依 赖 ServletRequest 和ServletResponse,所有它摆脱不了 Servlet 容器。
六、前端表达式语言方面.Struts 集成了 JSTL,所以它主要使用 JSTL 的表达式语言来获取数据。
可是 JSTL 的表达式语言在 Collection 和索引属性方面处理显得很弱。
七、 对 Action 执行的控制困难. Struts 创建一个 Action,如果想控制它的执行顺序将会非常困难。
甚至你要重新去写 Servlet 来实现你的这个功能需求。
八、 对 Action 执行前和后的处理. Struts 处理 Action 的时候是基于 class 的 hierarchies,很难在 action 处理前和后进行操作。
九 、 对 事 件 支 持 不 够 . 在 struts 中 , 实 际 是 一 个 表 单 Form 对 应 一 个 Action 类 或DispatchAction,换一句话说:在 Struts 中实际是一个表单只能 对应一个事件,struts 这种事件方式称为 application event,application event 和 component event 相比是一种粗粒度的事件。
Struts 重要的表单对象 ActionForm 是一种对象,它代表了一种应用,这个对象中至少包含几个字段, 这些字段是
Jsp 页面表单中的 input 字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一 个事件时,单纯使用 Struts 就不太可能,当然通过结合 JavaS.
上一篇:
软件工程师
下一篇:
论文提纲的定义与分类