SSH 面试题

jielysong

贡献于2014-09-10

字数:0 关键词: 面试题目 试题

中关村软件园人才基地研发部 中关村软件园人才基地 面试宝典 部门:中关村软件园人才基地研发部 目录 中关村软件园人才培训基地 - 1 - 一、Struts2............................................................................................- 4 - 1、谈谈你对 Struts 的理解.........................................................- 4 - 2、Struts2 的优点和缺点............................................................- 4 - 3、Struts1.x 和 Struts2.x 的区别...............................................- 5 - 4、STRUTS 的工作流程.............................................................- 6 - 5、MVC 的各个部分都有那些技术来实现,如何实现?............- 7 - 6、struts 的入口类.......................................................................- 8 - 7、说出 struts 中的标签..............................................................- 8 - 二、Hibernate.......................................................................................- 9 - 1、谈谈你对 hibernate 的理解...................................................- 9 - 2、Hibernate 对象的三种状态是什么?.................................- 10 - 3、Hibernate 工作原理及为什么要用?.................................- 11 - 4、Hibernate 是如何延迟加载?...............................................- 12 - 5、说下 Hibernate 的缓存机制................................................- 13 - 6、如何优化 Hibernate?.........................................................- 13 - 7、hibernate 进行多表查询每个表中各取几个字段,也就是说 查询出来的结果集没有一个实体类与之对应如何解决;.....- 13 - 8、在 hibernate 中,使用二级缓存机制要注意什么?........- 14 - 9、Hibernate 有哪些主键?.....................................................- 15 - 10、Hibernate 有几种查询数据的方式?..............................- 15 - 11、Hibernate 在性能提升上其实有很多种做法,请描述你在项 目中提升性能通常采用的方法。.............................................- 15 - 中关村软件园人才培训基地 - 2 - 12、iBatis 与 Hibernate 有什么不同?.....................................- 17 - 三、Spring 部分:(共 14 题:基础 3 道,中等难度 10 道,较难 1 道)......................................................................................................- 18 - 1.bean 实例的生命周期?【中等难度】.......................- 18 - 2.使用 spring 依赖注入的好处【基础】.......................- 18 - 3.在 spring 中如何配置的 log4j?【基础】..................- 19 - 4.请描述出 Spring 的 MVC。【中等难度】......................- 19 - 5.Spring 主要的作用。【中等难度】..............................- 22 - 6.SpringMVC 与 StrutsMVC 的比较【较难】..................- 22 - 7.Spring 都有哪些特点?为什么要使用 Spring?【中等难 度】......................................................................................- 24 - 8.说一下 SSH 整合的整个流程【基础】.........................- 26 - 9.Spring 中如何实现国际化?【中等难度】................- 26 - 10.J2EE 是什么?【中等难度】......................................- 28 - 11.请对以下在 J2EE 中常用的名词进行解释(或简单描述) 【中等难度】......................................................................- 28 - 12.J2EE 是技术还是平台还是框架?【中等难度】......- 29 - 13.请写出 Spring 中 IOC 的三种实现机制。【中等难度】 - 32 - 14.写出你熟悉的开源框架以及各自的作用。【中等难度】- 34 - 四、Ajax..............................................................................................- 35 - 1、什么是 AJAX,为什么要使用 Ajax(请谈一下你对 Ajax 的认识)什么是 ajax:.....................................................- 35 - 中关村软件园人才培训基地 - 3 - 2、为什么要用 ajax...........................................................- 36 - 3、AJAX 最大的特点是什么。........................................- 36 - 4、请介绍一下 XMLhttprequest 对象。.........................- 36 - 5、AJAX 应用和传统 Web 应用有什么不同..................- 37 - 6、Ajax 和 javascript 的区别。........................................- 37 - 7、XMLHttpRequest 对象在 IE 和 Firefox 中创建方式有没 有不同。 有,IE 中通过 new ActiveXObject()得到, Firefox 中通过 newXMLHttpRequest()得到。..............- 38 - 8、介绍一下 XMLHttpRequest 对象的常用方法和属性。- 38 - 9、AJAX 都有哪些优点和缺点?....................................- 39 - 10、Ajax 主要包含了哪些技术?....................................- 40 - 11、AJAX 技术体系的组成部分有哪些。......................- 40 - 五、Jquery..........................................................................................- 41 - 1、你在公司是怎么用 jquery 的?..................................- 41 - 2、你为什么要使用 jquery?...........................................- 41 - 3、你使用 jquery 遇到过哪些问题,你是怎么解决的?- 42 - 4、你知道 jquery 中的选择器吗,请讲一下有哪些选择器? ..............................................................................................- 43 - 5、jquery 中的选择器 和 css 中的选择器有区别吗?- 43 - 6、你觉得 jquery 中的选择器有什么优势?..................- 43 - 7、jquery 对象和 dom 对象是怎样转换的?.................- 44 - 8、你是如何使用 jquery 中的 ajax 的?.........................- 44 - 中关村软件园人才培训基地 - 4 - 9、你觉得 jquery 中的 ajax 好用吗,为什么?.............- 44 - 10、jquery 中$.get()提交和$.post()提交有区别吗?...- 45 - 11、jQuery 是如何处理缓存的?....................................- 45 - 一、Struts2 1、谈谈你对 Struts 的理解 Struts 2 是 Struts 的下一代产品,是在 struts 1.X 和 WebWork 的技术基础 上进行了合并的全新的 Struts 2 框架。其全新的 Struts 2 的体系结构与 Struts 1 的体系结构差别巨大。Struts 2 以 WebWork 为核心,采用拦截器的机制来处理 用户的请求,这样的设计也使得业务逻辑控制器能够与 ServletAPI 完全脱离开, 所以 Struts 2 可以理解为 WebWork 的更新产品。Struts2.X 采用的 MVC 的设计 思想设计,将 web 开发大体上分为 3 层 M(Model)层,V(View)层,C(controller) 层。使得 web 开发结构层次化,结构化,提高代码的扩展性、重用性和可维护性。 2、Struts2 的优点和缺点 优点:(1)Struts2 基于 MVC 架构,框架结构清晰,开发流程一目了然,开发 人员可以很好的掌控开发的过程。(2)使用 OGNL 进行参数传递,OGNL 提供了 在 Struts2 里访问各种作用域中的数据的简单方式,大大简化了开发人员在获取 这些数据时的代码量。(3)强大的拦截器 Struts2 的拦截器是一个 Action 级别的 AOP,Struts2 中的许多特性都是通过拦截器来实现的,例如异常处理,文件上 传,验证等。拦截器是可配置与重用,可以将一些通用的功能如:登录验证,权 限验证等置于拦截器中以完成一些 Java Web 项目中比较通用的功能(4)易于测 试 Struts2 的 Action 都是简单的 POJO,这样可以方便的对 Struts2 的 Action 编 写测试用例,大大方便了 Java Web 项目的测试。(5)全局结果与声明式异常为 应用程序添加全局的 Result,和在配置文件中对异常进行处理,这样当处理过程 中关村软件园人才培训基地 - 5 - 中出现指定异常时,可以跳转到特定页面。(6)有丰富的 tag 可以用 ,Struts 的标 记库(Taglib),如能灵活动用,则能大大提高开发效率。 缺点:1.struts2 的 UI 标签,总强加一些样式给破坏了网页布局。2.Struts2 的那些 result 类型缺陷(redirect),Struts 的 Action 方法的返回结果。其实并不 是只由 String 类型的返回结果,struts2 还有其他类型的返回,比如“redirect” 类型。时候用户在后缀上输入上钓鱼网网站的 url 很容易将客户映入到钓鱼网站。 3.Action 中的方法被暴力猜解缺陷,有一种方法可以让用户访问 action 时,不访 问默认的 execute 方法,而是直接访问其他 action 中的方法,条件是在 action 中,写一个 public 的方法。开发人员如果需要做一个登陆后,展示所有用户列 表的功能,而他的一个“解耦合”的开发习惯,将在这里导致安全缺陷。4.Struts 属性容易被用户修改,比如说用户注册时候表单 时 user.name/user.password..user.type=0 表示普通用户 user.type=1 表示管理员, 那么在用户注册的时候用户可以随意的修改表单将数据提交给后台,这样就会带 来隐患。尝试使用属性攻击,修改当前表单,里面有所有你猜测到的属性,一并 提交上来,就可能会影响整个逻辑,达到攻击目的。Struts 仅仅看到这种封装的 好处却没有看到这种设计的带来的安全隐患。 3、Struts1.x 和 Struts2.x 的区别 (1)Action 类:Struts1 要求 Action 类继承一个抽象基类. Struts1 的一个普遍的问题是使用抽象类编程而不是接口。Struts2 Action 类 可以实现一个 Action 接口,也可实现其他的接口,使可选和定制的服 务成为可能.Struts2提供了一个 ActionSupport 基类去实现常用的 接口; Action 接口不是必须的,任何有 execute 标识的 POJO 对象。 都可以用作 Struts2 的 Action 对象。 (2)线程模式:Struts1 Action 是单例的模式并且必须是线程安全的,因 为仅有 Action 的一个实例来处理所有的请求.单例的策略限制了 Struts1 Action 能做的事情,并且要在开发的时候特别的小心. Action 资源必须是线程安全或者同步的。Struts2 Action 对象为每一个请求 产生一个实例,因此没有线程安全的问题。 中关村软件园人才培训基地 - 6 - (3)Servlet 依赖:Struts1 Action 依赖于 Servlet API,因为当一个 Action 被调用 HttpServletRequest 和 HttpServletResponse 被传 递给 execute() 方法 Struts2 Action 不依赖于容器,允许 Action 脱 离容器单独的被测试. (4)参数接受:struts1.x 的参数接受需要写一个 FormBean 继承 ActionForm 对象接受参数使用 Beanutil 赋值.Struts2.x 采用拦截器方 式底层采用 OGNL 框架赋值。 (5)Struts1.x 前端控制器是一个 Servlet 但是 Struts2前端控制器实现 是 Filter。 4、STRUTS 的工作流程 简单的工作流程: 1、客户端浏览器发出 HTTP 请求。 2、根据 web.xml 配置,该请求被 FilterDispatcher 接收。 3、根据 struts.xml 配置,找到需要调用的 Action 类和方法, 并通过 IoC 方式,将值注入给 Aciton。 4、Action 调用业务逻辑组件处理业务逻辑,这一步包含表单验证。 5、Action 执行完毕,根据 struts.xml 中的配置找到对应的返回结果 result,并跳转到相应页面。 6、返回 HTTP 响应到客户端浏览器。 Struts2 底层实现原理: 1、客户端发送请求 。 中关村软件园人才培训基地 - 7 - 2、请求先通过 ActionContextCleanUp-->FilterDispatcher 。 3、FilterDispatcher 通过 ActionMapper 来决定这个 Request 需要调 用哪个 Action 4、如果 ActionMapper 决定调用某个 Action,FilterDispatcher 把请 求的处理交给 ActionProxy。 5、ActionProxy 根据 ActionMapping 和 ConfigurationManager 找到 需要调用的 Action 类 。 6、ActionProxy 创建一个 ActionInvocation 的实例 7、ActionInvocation 调用真正的 Action,之前会先调用该 action 配 置的拦截器后在调用 Action。 8、Action 执行完毕,ActionInvocation 创建 Result 并返回,如果要 在返回之前做些什么,可以实现 PreResultListener。添加 PreResultListener 可以在 Interceptor 中实现。 以上只需学员掌握 struts 简单的工作原理即可 struts 底层的工作原 理只需要了解。 5、MVC 的各个部分都有那些技术来实现,如何实现? M(Model)层,就相当于后台,V(View),相当于前台,C(Controller)层, 相当于控制页面跳转;MVC 模式的目的就是实现 Web 系统的职能分 工。Model 层实现系统中的业务逻辑,通常可以用 JavaBean 或 EJB 来实现。View 层用于与用户的交互,通常用 JSP 来实现。 Controller 层是 Model 与 View 之间沟通的桥梁,它可以分派用户的请求并选择 中关村软件园人才培训基地 - 8 - 恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射 为模型层可执行的操作。各个层的实现技术举例: M(Model)javaBean 中 DAO+Service 构成 Model 层一般由 hibernate/mybatis 技术实现。模型是应用程序的主体部分。模型表示 业务数据,或者业务逻辑. C(servlet/struts action/spring action) Struts/SpringMVC 等技术。控 制器工作就是根据用户的输入,控制用户界面数据显示和更新 model 对象状态。V(View) jsp/FreeMarker 等技术,视图是应用程序中用户 界面相关的部分,是用户看到并与之交互的界面。 6、struts 的入口类 StrutsPrepareAndExecuteFilter 所有的 Action 请求都邀经过该前端 控制器过滤。 7、说出 struts 中的标签 控制标签:if elseif else | append generator |iterator merge sort subset.数据标签: a action bean date debug i18n include param property push set text url UI 标签:form text 等 其他标签 学员自行查阅 Struts 帮助文档。 请写出 spring 中 I0C 的三种实现机制 答:接口注入、set 值注入、构造注入 Spring 工作机制及为什么要用 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创 中关村软件园人才培训基地 - 9 - 建的。Spring 既是一个 AOP 框架,也是一 IOC 容器。 SpringFramework 的组成:Spring AOP,Spring DAO,Spring ORM, Spring Web,Spring Context, Spring Web MVC。Spring 的核心 就是 IOC 和 AOP,所以 Spring 的工作机制简单的理解也就是 IOC 和 AOP 的工作机制。借助于 Spring AOP,Spring IoC 能够很方便的 使用到非常健壮、灵活的企业级服务,通过使用 IoC 能够降低组件之 间的耦合度,最终,能够提高类的重用性,利于测试,而且更利于整 个产品或系统集成和配置。 二、Hibernate 1、谈谈你对 hibernate 的理解 1、hibernate 是一个开源的、采用面向对象的思想实现 ORM 映射框 架,它对 jdbc 进行了一层封装,对于数据库的连接、关闭、数据的 持久化(增删改查)、事务的管理都进行了封装,使得程序开发的时 候可以用面向对象的思想来操作数据库。 2、hibernate 可以用于 jdbc 应用的任何场合。优点是,使用面向对 象的思想操作数据库;对 jdbc 的封装,使得开发中不需要写大量的 sql 语句,大大提高了开发效率;采用数据库方言等方式使得数据库 移植十分方便,也使得在开发中不需要考虑数据之间的差异;提供缓 存机制,提高查询效率等。 3、缺点是,hibernate 并不支持批量操作。对 jdbc 的封装失去了对 中关村软件园人才培训基地 - 10 - sql 的控制,而如果执行本地 sql 则失去了 hibernate 的可移植性的优 势。消耗内存较大。 2、Hibernate 对象的三种状态是什么? 瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)。处于 持久态的对象也称为 PO(Persistence Object),瞬时对象和脱管对象 也称为 VO(Value Object)。瞬时态由 new 命令开辟内存空间的 java 对象,eg. Person person = new Person(”amigo”,“女”); 如果没有变量对该对象进行引用,它将被 java 虚拟机回收。 瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据 有任何关联关系,在 Hibernate 中,可通过 session 的 save()或 saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插 入数据库中,此时该瞬时对象转变成持久化对象。持久态 处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标 识。如果是用 hibernate 的 delete()方法,对应的持久对象就变成瞬 时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记 录关联。 当一个 session 执行 close()或 clear()、evict()之后,持久对象变成脱 管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库 识别值,但它已不在 HIbernate 持久层的管理之下。持久对象具有如 下特点: 1.和 session 实例关联; 中关村软件园人才培训基地 - 11 - 2.在数据库中有与之关联的记录。 脱管态 当与某持久对象关联的 session 被关闭后,该持久对象转变为脱管对 象。当脱管对象被重新关联到 session 上时,并再次转变成持久对象。 脱管对象拥有数据库的识别值,可通过 update()、saveOrUpdate() 等方法,转变成持久对象。 脱管对象具有如下特点: 1. 本质上与瞬时对象相同,在没有任何变量引用它时,JVM 会在适 当的时候将它回收; 2.比瞬时对象多了一个数据库记录标识值。 3、Hibernate 工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建 SessionFactory 3.打开 Sesssion 4.创建事务 Transation 5.持久化操作 6.提交事务 7.关闭 Session 8.关闭 SesstionFactory 中关村软件园人才培训基地 - 12 - 使用 hibernate 的原因如下: 1. 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁 琐的重复性代码。 2. Hibernate 是一个基于 JDBC 的主流持久化框架,是一个优秀的 ORM 实现。他很大程度的简化 DAO 层的编码工作 3. hibernate 使用 Java 反射机制,而不是字节码增强程序来实现透明 性。 4. hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性 很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 4、Hibernate 是如何延迟加载? 1.Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) 2.Hibernate3 提供了属性的延迟加载功能 当 Hibernate 在查询数据的时候,数据并没有存在与内存中,当程序 真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他 节省了服务器的内存开销,从而提高了服务器的性能。 3.Hibernate 中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市 对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通 过配置文件中的 many-to-one、one-to-many、many-to-many。 中关村软件园人才培训基地 - 13 - 5、说下 Hibernate 的缓存机制 1.内部缓存存在 Hibernate 中又叫一级缓存,属于应用事务级缓存 2.二级缓存 a) 应用及缓存 b) 分布式缓存 条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频 率低、同一数据被系统频繁使用、非关键数据 c) 第三方缓存的实现 6、如何优化 Hibernate? 1. 使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用 Bag,多对多集合使用 Set 6.继承类使用显式多态 7.表字段要少,表关联不要怕多,有二级缓存撑腰。 7、hibernate 进行多表查询每个表中各取几个字段,也就是说查询 出来的结果集没有一个实体类与之对应如何解决; 解决方案一,按照 Object[]数据取出数据,然后自己组 bean 解决方案二,对每个表的 bean 写构造函数,比如表一要查出 中关村软件园人才培训基地 - 14 - field1,field2 两个 字段,那么有一个构造函数就是 Bean(type1 filed1,type2field2) ,然 后在 hql 里面就可以直接生成这个 bean 了。 8、在 hibernate 中,使用二级缓存机制要注意什么? 二级缓存能够明显提高系统的性能,当然,如果数据量特别巨大,此 时不适合于二级缓存,原因是缓存的数据量过大可能会引起内存资源 紧张,反而降低性能。 对于数据更新频率过高的数据,频繁的同步缓存中数据的代价可能和 查询缓存中的数据从中获得好处相当。坏处和益处相抵消,此时缓存 的意义不大。 财务数据等是非常重要的数据,绝对不允许出现或使用无效的数据, 所以此时为了安全起见,最好不要使用二级缓存,因为此时“正确性” 的重要性远远大于“高性能”的重要性。 因为数据表中的数据量虽然大,但是经常使用的往往只是较新的那部 分数据,此时,也可为其配置二级缓存。但是必须单独配置其持久化 类的缓存策略,比如最大缓存数,缓存过期时间等,将这些参数降低 至一个合理的范围(太高会引起资源紧张,太低了,则缓存的意义不 大),同时也会消耗太多的内存,可以通过配置文件来指定内存中能 够加载的最多元素,这有利于避免消耗过多的内存。 中关村软件园人才培训基地 - 15 - 9、Hibernate 有哪些主键? Hibernate 的主键如下: Hilo,Increment,Identity,Sequence,Native,Foreign . 10、Hibernate 有几种查询数据的方式? 有三种查询方式: HQL:hibernate query language,他跟 sql 非常类似。 Criteria query:以对象的方式添加查询条件。 SQL:直接使用 sql 语句操作数据库。 11、Hibernate 在性能提升上其实有很多种做法,请描述你在项目中 提升性能通常采用的方法。 lazy load Lazy load 是常用的一种提升性能的方法。这个其实很容易理解。在 不采用 lazy load 的情况下,hibernate 在获取一个 PO 的时候,将同 时获取 PO 中的属性,PO 中的集合及集合中对象的属性、集合。这 样很容易看出,如果对象的关联结构有深层次的话,最后整个库可能 被加载出来了,而在实际使用中往往可能只需要用到 PO 中的一两个 属性而已。在 hibernate3以后,默认的 lazy 就已经设置为 true 了, 这个时候包括 PO 中的属性都是采用 lazy load 的方式,只有在调用 到这个属性时才会从缓存或数据库中加载。当然,集合也同样如此。 中关村软件园人才培训基地 - 16 - 推荐不要什么字段都采用 lazy load 的方式。对于一些基本属性的字 段,建议将其 lazy 设置为 false,而对于一些可能需要消耗内存的字段, 如 clob 这样的字段,建议将其 lazy 设置为 true,对于集合,则全部设 置为 lazy=true. 是否采用 lazy load 对系统的性能会有非常明显的影响,同时尽量不 要将 detached Object 放入 HTTP 的 session 中。 Cache Cache 是在提升性能方面常用的方法。在 hibernate 中通常有非常好 的对于 Cache 的支持方法。Hibernate 中对于 Cache 优一级缓存和 二级缓存的概念。一级缓存是必需的,位于 Session 部分;二级缓存 则不是必需的,优开发人员自行指定。二级缓存可指定使用何种开源 框架的 Cache 工具。Hibernate3以后的版本默认使用的是 EhCache, 也可以切换为 OsCache、JBossCache,他们最重要的区别在于对 cluster 的支持上。 二级缓存的设置在 hibernate 中非常简单,只需要在相应的 hbm.xml 中增加 Cache 元素,指明使用何种策略,如:read-only,read-write 等,也可以通过直接使在 hibernate.cfg.xml 中增加 class-cache 的方 式来进行全局指定。 高效的查询语句 查询语句是否高效,对于系统的性能也会造成明显的影响。为了方便 系统性能的调优,建议大家对查询语句进行统一管理,如统一采用 NamedQuery 的方式。在这样的情况下可以在系统运行时请教数据 中关村软件园人才培训基地 - 17 - 库专家,有他们分析系统中查询语句的执行效率及提出改进策略。而 对于开发人员来讲,在查询语句方面能够注意的就是采用占位符式的 查询。 占位符式的数据库查询对于所有的 SQL 语句都要进行语法分析,而 其分析通常会受到语句中的大小写、空格及参数不同的影响,在其语 法分析器认为不同的情况下将再次进行分析,这就不可避免的降低了 相应的速度。而采用占位符式的语法查询则可保证语法分析器只进行 一次分析,在参数不同的情况下并不会出现重复解析的现象。其次就 是要统一查询语句的编写风格,包括大小写、空格等。 配置 在 hibernate.cfg.xml 中的一些配置也会对性能产生一定的影响,如 jdbc.fetch_size 的设置等,还有像采用连接池方面的设置。对于 B/S 应用情况,建议尽量采用应用服务器提供的 JNDI 的方式。 12、iBatis 与 Hibernate 有什么不同? 相同点:屏蔽 jdbc api 的底层访问细节,使用我们不用与 jdbc api 打交道,就可以访问数据。 jdbc api 编程流程固定,还将 sql 语句与 java 代码混杂在了一起, 经常需要拼凑 sql 语句,细节很繁琐。 ibatis 的好处:屏蔽 jdbc api 的底层访问细节;将 sql 语句与 java 代 码进行分离;提供了将结果集自动封装称为实体对象和对象的集合的 功能,queryForList 返回对象集合,用 queryForObject 返回单个对 中关村软件园人才培训基地 - 18 - 象;提供了自动将实体对象的属性传递给 sql 语句的参数。 Hibernate 是一个全自动的 orm 映射工具,它可以自动生成 sql 语 句,ibatis 需要我们自己在 xml 配置文件中写 sql 语句,hibernate 要比 ibatis 功能负责和强大很多。因为 hibernate 自动生成 sql 语句,我们 无法控制该语句,我们就无法去写特定的高效率的 sql。对于一些不 太复杂的 sql 查询,hibernate 可以很好帮我们完成,但是,对于特 别复杂的查询,hibernate 就很难适应了,这时候用 ibatis 就是不错 的选择,因为 ibatis 还是由我们自己写 sql 语句。 三、Spring 部分: (共 14 题:基础 3 道,中等难度 10 道, 较难 1 道) 1.bean 实例的生命周期?【中等难度】 答:对于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在 缓冲池管理,而对于Entity Bean和Statefull Session Bean存在Cache管理,通常 包含创建实例,设置上下文、创建EJB Object(create)、业务方法调用、remove 等过程,对于存在缓冲池管理的Bean,在create之后实例并不从内存清除,而是采 用缓冲池调度机制不断重用实例,而对于存在Cache管理的Bean则通过激活和去激活 机制保持Bean的状态并限制内存中实例数量。 Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例, 并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时 容器会把调用分派到与此客户机相关 2.使用 spring 依赖注入的好处【基础】 答:依赖注入或者说是控制反转,说白了就是使用了配置文件,这种思想的唯一好 处就是增加了模块的重用性灵活性。 中关村软件园人才培训基地 - 19 - 一般配置文件里存的都是数据,例如:键值之类的。Spring的配置文件把要引用 类和要给类传的参数都放到配置文件里,这样比以前写死在程序里更灵活,因此更 具重用性。 解答要点:概念由来只是帮助理解,笔试时不用写。 详细回答: 依赖注入概念的由来: 最初在描述Spring容器特点时,使用了Inversion Of Control(控制反转)这 个词,即将java组件的创建以及生命周期的维护交由容器来管理。但后来人们意识 到,这种特性并非Spring所独有,其它容易(如Web容器)也有这一特点。因此,后 来又提出了一个名词:Dependency Injection(依赖注入)来更明确的区分Spring 容器与其他容器的不同之处:Spring容器不仅管理java组件的创建、还会负责管理 它们之间的依赖关系。 依赖注入的好处: 当开发一个复杂系统时,你可以让每个类的功能相对独立,这样它们重用性很 好而且可以方便地被测试,依赖注入使得它们可以被粘合在一起,同时也保留它们 之间的独立性。 将java组件的创建和关系维护都统一由Spring容器进行管理,目的是达到组件 之间的松耦合,一旦组件的依赖关系发生变化,只需要修改配置文件,而不需要改 动Java代码,增强了组件的重用性和灵活性。 3.在 spring 中如何配置的 log4j?【基础】 答:在web.xml中加入以下代码即可。 <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> 4.请描述出 Spring 的 MVC。【中等难度】 详细解答: Spring MVC的特点有:  清晰的角色分离:控制器(Controller),校验器(Validator),模型对象(Model Object),前控制器(DispatcherServlet),请求映射(Handler mapping),视 图解析(view resolver)...都可以被专门的对象来充当。 中关村软件园人才培训基地 - 20 - 扩展解答:HandlerMapping是Spring抽象的一个接口,用来表示URL路径与 Controller类之间的一种对应关系,常见的实现类有: 1) SimpleUrlHandlerMapping,它的配置方式举例如下,比较就知道跟Struts2中 Action的配置是类似的: 2) BeanNameUrlHandlerMapping,通过BeanName(注意在Spring对于Controller 的配置中,id属性不能以/开头,因此要使用bean标签的name属性)与路径实现 对应,比如请求URL中路径为/hello,那么会找一个BeanName为/hello的 Controller 3) RequestMappingHandlerMapping , 这 是Spring 3.1之 后 新 增 的 功 能 , 通 过 @RequestMapping注解来完成路径映射,例如: @Controller public class MyController { @Autowired private MyService myService; @RequestMapping("/save.action") public String saveMethod(){ myService.save(); return "success"; } } 会在访问/save.action的URI路径时,使用MyController的saveMethod来处理请 求。  强大而简单配置  良好的适配性和灵活性,非侵入:比如对于控制器的方法声明可以非常随意, 然后通过@RequestParam, @RequestHeader, @PathVariable等注解让它们适应 给定场景  可重用性:可以使用已有的业务对象充当命令或表单对象,而不用像其他框架 中关村软件园人才培训基地 - 21 - 那样需要实现特定接口或继承父类。  自定义的数据绑定和验证机制  灵活的模型传值:Spring MVC使用了Map键值对方式作为模型传值方式,这样可 以容易与任意的视图技术结合  提供简单但强大的一组用于jsp的标签库  提供Request,Sessoin, Global Session作用域的支持 Spring MVC的设计原则是“Open for extension, closed for modification”(开 闭原则). Spring MVC的工作原理图 如图所示, 1) 请求首先经过一个前控制器:DispatcherServlet由它进行进一步请求分发,这 里使用HandlerMapping接口的一些实现类进行URL与控制器之间的映射。 2) HandlerMapping当找到合适的控制器后,返回一个HandlerExecutionChain(类 似于Struts2中的拦截器栈+Action),再做一次包装成HandlerAdapter(类似 于Struts2中的ActionProxy),最后由HandlerAdapter来对请求进行处理最终调 用Controller。 3) Controller调用业务逻辑方法,创建模型并选择视图。 4) 选择视图的方法有如下几种: 直接返回ModelAndView或View对象,这时Spring使用View对象展示结果,常见 的 View 实 现 有 : JstlView , RedirectView , FreeMarkerView , MappingJackson2JsonView等 中关村软件园人才培训基地 - 22 - 如果返回的仅是一个逻辑视图名(或ModelAndView中也是一个视图名),那么还 需要借助ViewResolver来根据视图名进一步解析获得视图。常见的ViewResolver有: InternalResourceViewResolver: 用来解析 JstlView 和 TilesView XmlViewResolver: 用来解析/WEB-INF/views.xml 中配置的视图 VelocityViewResolver:用来解析 VelocityView FreeMarkerViewResolver:用来解析 FreeMarkerView 5) 渲染视图:使用spring标签等技术,将模型中的数据在视图中展现。 5.Spring 主要的作用。【中等难度】 答:1.整合其他框架 2.实现声明式事务 3.降低程序之间的解耦合度,增强代码的重用性和可维护性 6.SpringMVC 与 StrutsMVC 的比较【较难】 答:我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置。 spring3 mvc可以认为已经100%零配置了(除了配置spring mvc-servlet.xml外)。 Spring MVC和Struts2的区别:1. 机制:spring mvc的入口是servlet,而struts2 是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的 一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别 了。 2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基 于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring 基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方 法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在 spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截, 每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据 注入;struts2实际上是通过setter getter方法与request打交道的;struts2中, 一个Action对象对应一个request上下文。 3. 参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数 是让多个方法共享的。 4. 设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet 上扩展。 5. intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的 是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts 中关村软件园人才培训基地 - 23 - 的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率 Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个 request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc 就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文; 实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其 类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。 spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过 参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的 就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响 程序运行,却给我们编码,读程序时带来麻烦。 6. 另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方 便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。 解答要点: 因为对SpringMVC不熟悉,那么就不要多罗嗦,将区别中1,2两点说出来就可以 了。其它的在有一定实践基础上再补充回答。 详细解答: 相同点: 都是MVC框架,都代表了业界先进的架构及技术实现; 它们的控制器类都便于单元测试; 都支持在进入控制器前后进行拦截处理(AOP); 都支持请求参数校验; 都支持国际化; 都支持页面修饰技术如:tiles,sitemesh 区别主要有: 1. Struts2每次请求实例化新Action,请求参数和返回的模型都存储于Action成员 变量之中,而SpringMVC的Controller是单例的,请求参数和模型都位于方法级 别。 2. Struts2使用值栈配合OGNL表达式传值,而Spring MVC 使用ModelMap(用了 Request作用域)来传值 3. Spring MVC用来开发RESTful风格的WebService非常方便,通过@PathVariable 可以方便将URL路径中变量映射到方法参数,这种思想还可以用来实现“伪静态 化”,而@ResponseBody注解能方便返回JSON格式的响应;Struts2 做这些比较 困难。 4. Ajax支持,Spring没有内建的Ajax支持;而Struts2通过标签集成了Dojo来实现 了Ajax(这一点看起来不那么吸引人) 5. Spring MVC进化较快,从刚开始的简陋功能到现在支持诸多先进特性(如 RESTful,Servlet3.0新特性);而Struts2则比较平淡,没什么大更新,而且在 中关村软件园人才培训基地 - 24 - 2013年7月爆发的漏洞事件让我们意识到OGNL表达式在带来灵活性的同时也有 很严重的安全隐患 附:国外www.indeed.com/jobtrends上关于Struts2和Spring MVC的职位对比: 7.Spring 都有哪些特点?为什么要使用 Spring?【中等难度】 答:Spring的特点: 1>Spring不同于其他的Framework,它要提供的是一种管理你的业务对象的方法。 2>Spring有分层的体系结构,意味着你能选择仅仅使用它的任何一个独立部分, 而其他的仍然使用你的相关实现。 3>它的设计从一开始就是要帮助你编写易于测试的代码,Spring是使用测试驱动 开发(TDD)工程的理想框架。 4>Spring不会给你的工程添加对其他的框架依赖,同时Spring又可以称得上是一 个一揽子解决方案,提供了一个典型应用所需要的大部分基础架构。 之所以要使用Spring,是因为: 1>Spring能有效地组织你的中间层对象。 中关村软件园人才培训基地 - 25 - 2>Spring能消除在许多工程中常见的对Singleton的过多使用。 3>通过一种在不同应用程序和项目间一致的方法来处理配置文件,消除各种自定 义格式的属性文件的需要,仅仅需要看看类的JavaBean属性。Inversion of Control 的使用帮助完成了这种简化。 4>能够很容易培养你面向接口而不是面向类的编程习惯。 5>Spring的设计会让使用它创建的应用尽可能少地依赖于它的API,在Spring应 用中的大多数业务对象没有依赖于Spring。 6>使用Spring构建的应用程序易于单元测试。 7>Spring为数据提取提供了一个一致的框架,不论是使用JDBC还是O/R mapping 的产品。 解答要点: 尽量用自己的理解来阐述Spring的特点,不要拘泥于详细解答中的1,2,3,4,不 熟悉的可以不讲;毕竟有些特点是跟Spring框架的使用熟练程度有关,在现阶段未 必体会很深。 详细解答: Spring的主要特点有:  依赖注入  面向切面编程以及声明式的事务处理  SpringMVC web应用程序和RESTful web服务框架  对JDBC,JPA,JMS,Hibernate等技术的整合与支持 为什么要使用Spring: 1.Spring使得使用POJO开发企业级的应用程序成为可能。 在此之前,EJB是开发企业级应用程序的唯一选择,因为当时EJB提供了诸 如声明式事务、分布式部署等一系列吸引人的特性,但接下来的几年内,程序 员痛苦地认识到EJB组件依赖于容器(这些EJB容器通常都非常昂贵),业务组件 也需要实现特殊接口,在容器外根本无法测试。而Spring打破了这一规律,可 以使用简单java对象(POJO)来充当业务组件,并且只需要使用简单轻便的如 Tomcat之类Web容器就能充当应用服务器,而如声明式事务这些东西,Spring容 器一样提供了。可以说从2003年起,Spring,正如其名,带来了开源软件的春 天。 2.提供轻量级的IOC容器,降低组件之间的依赖关系,使得程序的复用性、可 测试性得到提高。 3.引入面向切面编程(AOP)思想,将一些重复代码集中处理。Spring就是使 用了AOP思想实现声明式的事务管理 中关村软件园人才培训基地 - 26 - 4.Spring倡导使用面向接口编程,使用Spring框架能够培养你使用面向接口的 编程习惯。 5.Spring统一管理“单例”类,而在此之前,对单例模式的过度使用导致程序 不容易被测试。 6.Spring不重造“轮子”,它可以用来集成已有的其它技术 7.Spring提供了方便的API将JDBC、Hibernate或JDO的异常统一转换为非检查 异常,便于一致处理。 8.Spring按模块化思想来组织其结构,你不需要引入它提供所有的jar包,只 要按需选用 9.Spring统一管理配置文件,可以将配置都集中在Spring的配置文件中。 8.说一下 SSH 整合的整个流程【基础】 答: 详细解答:  Hibernate负责处理实体与数据库表之间的映射关系,以及增删改查操作;  Spring与Hibernate整合:将数据源的管理、SessionFactory的创建交给Spring, Spring来负责处理Session上下文;  Spring来负责管理各层组件之间的依赖关系;  业务层的事务处理也可以通过Spring的声明式事务来配置完成;  Struts2使用Action来处理请求和展示结果:请求参数接收,请求参数验证,调 用业务组件,使用值栈传值,配合标签数据展示;  Spring容器要用于Web环境,需要配置一个监听器保证在应用程序加载时初始化 Spring容器并放入ServletContext作用域供应用程序使用;  Spring与Struts2的整合:原理是将原本由Struts2管理的Action交由Spring管 理,从而让Action享用Spring容器带来的额外功能。 9.Spring 中如何实现国际化?【中等难度】 答: 首先给出资源文件 messages.properties 中关村软件园人才培训基地 - 27 - name.question=What is your name? Welcome.message=Welcome guest 与 messages_zh_CN.properties name.question=\u59d3\u540d\u662f? Welcome.message=\u6b22\u8fce\u60a8 其中中文做了 native2ascii 转码,以上文字分别为“姓名是?”和“欢 迎您” 然后给出配置文件 最后在应用程序使用来获取简体中文信息: ApplicationContext context = new ClassPathXmlApplicationContext(...); String chineseMsg = context.getMessage("name.question",null, Locale.SIMPLIFIED_CHINESE); System.out.println(chineseMsg); 更多关于 Spring 国际化知识,请参考 http://docs.spring.io/spring/docs/3.0.x/spring-framework-re ference/html/beans.html#context-functionality-messagesource 和 Spring MVC 国际化部分内容 中关村软件园人才培训基地 - 28 - 10.J2EE 是什么?【中等难度】 答:J2EE是Sun公司提出的多层(multi-tiered),分布式(distributed),基于组件 (component-base)的企业级应用模型(enterpriese application model).在这样的 一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上, 并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组 件,Business层和组件,企业信息系统(EIS)层。 请参考下图: 备注1:学过的Web层的组件有Servlet, Jsp等技术,没有学过的有业务层组件如 Session Bean,消息驱动Bean等,但在使用了一些开源框架后,某些业务层的组件 被开源技术取代了。 备注2:EIS指Enterprise Information System,是enterprise resource planning (ERP)数据库系统和遗留系统的统称。 11.请对以下在 J2EE 中常用的名词进行解释(或简单描述)【中等难 度】 答: Web容器:即Servlet,JSP等Web组件的运行环境。由Web容器管理这些Web组件,控 制它们的调用以及生命周期。常见的Web容器有:Tomcat,Jetty,WeboLogic, 中关村软件园人才培训基地 - 29 - WebSphere,JBoss等。 EJB容器:即EJB,消息驱动bean,Java持久化实体等业务逻辑组件的运行环境。EJB 容器来管理这些组件的生命周期,并提供系统级别的服务如声明式的事务管理,邮 件服务等。常见的EJB容器有:WebLogic,WebSphere,JBoss等 JNDI:Java Naming and Directory Interface,JAVA命名和目录服务。大家可以将 JNDI理解为一棵目录树,树上的每个节点有一个字符串路径名称,它绑定一个java 对象或服务,然后应用程序可以通过一致的方式来查询到该对象或服务来进一步使 用该对象或服务,这些绑定在JNDI上的对象或服务一般是被共用、并具有分布式的 特点; 经常用于绑定到JNDI上的服务有:数据源(DataSource),JMS,LDAP 甚至是像 SessionFactory这样的东西。 JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的异步 通讯。它有两种工作方式,分别为PTP(点对点消息传输模型)和pub/sub(发布订 阅模型),比较著名的开源实现有Apache的ActiveMQ,WebLogic和WebSphere等应用 程序服务器也自带JMS实现; JTA:(Java Transaction API)JAVA事务服务。由容器提供支持分布式事务控制, 一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连 接。下列任一个Java平台的组件都可以参与到一个JTA事务中:JDBC连接、JMS 队列 与主题、企业JavaBeans(EJB)等; JAF:(JavaBeans Activation Framework)所见过的它应用是配合JavaMail使用, 它被用来处理JavaMail中数据块的分类和解析(邮件内容中可能会包含多种MIME类 型的数据如图片、附件等等); RMI/IIOP:(Remote Method Invocation /Internet Inter-ORB Protocol)RMI以Java 为核心,可与采用本机方法与现有系统相连接。这就是说,RMI可采用自然、直接和 功能全面的方式为您提供分布式计算技术,而这种技术可帮助您以不断递增和无缝 的方式为整个系统添加Java功能。 IIOP,Internet Inter-ORB Protocol(互联网内部对象请求代理协议),它是一个用 于CORBA 2.0及兼容平台上的协议。用来在CORBA对象请求代理之间交流的协议。Java 中使得程序可以和其他语言的CORBA实现实现互操作性的协议。 RMI-IIOP出现以前,只有RMI和CORBA两种选择来进行分布式程序设计,二者之间不 能协作。RMI-IIOP综合了RMI 和CORBA的优点,克服了他们的缺点,使得程序员能更 方便的编写分布式程序设计,实现分布式计算。 首先,RMI-IIOP综合了RMI的简单性和CORBA的多语言性(兼容性),其次RMI-IIOP 克服了RMI只能 用于Java的缺点和CORBA的复杂性。 12.J2EE 是技术还是平台还是框架?【中等难度】 答:J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台; J2EE 也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。 中关村软件园人才培训基地 - 30 - 解答要点:不用正面回答是平台还是框架,这个问法也有问题。将JavaEE平台的概 念解释清楚,再列举一些自己知道的J2EE中的标准即可。所谓“标准”即指JavaEE 制订的一些接口和规范,而由各个服务器厂商给出这些接口和规范的具体实现。对 于以下标准中没有接触过的,有兴趣也可以自己google一下。 详细解答:JavaEE即Java平台企业版(Java Platform Enterprise Edition),是Sun 公司为企业级应用推出的标准平台。在2005年正式由J2EE更名为JavaEE。 随着Java技术的发展,JavaEE平台得到了迅速的发展,成为Java语言中最活跃 的体系之一。现如今,JavaEE不仅仅是指一种标准平台,它更多的表达着一种软件 架构和设计思想。 JavaEE是一系列技术标准所组成的平台,包括: Applet - Java Applet EJB- 企业级JavaBean(Enterprise Java Beans) JAAS- Java Authentication and Authorization Service JACC- J2EE Authorization Contract for Containers JAF- Java Beans Activation Framework JAX-RPC- Java API for XML-Based Remote Procedure Calls JAXM- Java API for XML Messaging JAXP- Java XML解析API(Java API for XML Processing) StAX - Streaming APIs for XML Parsers JAXR- Java API for XML Registries JCA- J2EE连接器架构(J2EE Connector Architecture) JDBC- Java数据库联接(Java Database Connectivity) JMS- Java消息服务(Java Message Service) JMX- Java Management JNDI- Java名称与目录接口(Java Naming and Directory Interface) JSF- Java Server Faces JSP- Java服务器页面(Java Server Pages) JSTL- Java服务器页面标准标签库(Java Server Pages Standard Tag Library) JTA- Java事务API(Java Transaction API) JavaMail Servlet - Java Servlet API Web Services JAX-WS- Java API for XML Web Services JAX-RS- Java API for REST Web Services 中关村软件园人才培训基地 - 31 - 备注:绿色背景是学习过的;黄色背景是没有学习过但应当简单了解的;蓝色背景 是没有学习过但比较重要,最好能深入了解的。 下面一些图能够对Java EE技术给出更直观的认识: 图1.JavaEE容器之间的关系 中关村软件园人才培训基地 - 32 - 图2. Web容器和EJB容器中用到的API 图3. 客户端容器中用到的API 13.请写出 Spring 中 IOC 的三种实现机制。【中等难度】 答:主要的三种机制为:通过setter方法注入、通过构造方法注入和接口注入。 解答要点:至少答出依赖注入在Spring中的前四种实现方式,后两种只做了解。扩 展回答可以加分,视自身能力而定。 详细解答: 依赖注入有如下实现方式:  基于接口。实现特定接口(或继承抽象父类)以供外部容器注入所依赖类型的 对象。 例如:在某一Bean需要用到Spring容器自身时,可以实现BeanFactoryAware接 口,Spring容器会将调用接口中setBeanFactory方法将自己注入给该Bean。 扩展回答:这一思想不仅仅体现在Spring框架,比如说Struts2中的Action如果 实现了ServletRequestAware接口,则Struts2中的拦截器会将HttpServletRequest 对象注入给该Action;又如大家所熟悉的HttpServlet父类在运行时会将request, response对象注入给service方法,这实际也是依赖注入的一种体现。  基于 set 方法。实现特定属性的public set方法,来让外部容器调用传入所依 赖类型的对象。  基于构造函数。实现特定参数的构造函数,在新建对象时传入所依赖类型的对 象。 中关村软件园人才培训基地 - 33 -  基于注解。基于Java的注解功能,通过在私有成员变量前或set方法上加 @Autowired等注解,便可以让外部容器传入对应的对象。 扩展回答:注解方式可以让注入更加灵活,不仅可以用在私有成员变量上、set 方法上,甚至可以用在方法参数上。例子可以参考SpringMVC中的@PathVariable, @RequestParam,@CookieValue等  Lookup method注入,例: public abstract class CommandManager { public Object process(Object commandState) { // 获得一个 Command 的新实例 Command command = createCommand(); // 使用之... return command.execute(); } // 好...那这个 Command 对象的实例从哪里来? protected abstract Command createCommand(); } 看如下配置:  任意方法替换 public class MyValueCalculator { public String computeValue(String input) { //... } } 要重新替换的实现: public class ReplacementComputeValue implements MethodReplacer { public Object reimplement(Object o, Method m, Object[] args) throws Throwable { 中关村软件园人才培训基地 - 34 - // 获取参数值,执行一些其他操作,最后返回字符串 String input = (String) args[0]; ... return ...; } } 配置: String 14.写出你熟悉的开源框架以及各自的作用。【中等难度】 答:框架:hibernate、spring、struts; Hibernate主要用于数据持久化; Spring 的控制反转能起到解耦合的作用; Struts主要用于流程控制。 解答要点:如果是笔试题,简单答答,说一下 ssh 框架就行了。如果是 面试题,建议这里多了解一些框架,这都是能加分的题目,上这里 http://www.oschina.net/project/lang/19/java 你能了解更多的 java 开源项目和开源框架。 回答时一定不要按照详细解答生搬硬套,要按照自己的理解说明该框 架的作用,尽可能简明扼要。 详细解答(仅作为参考): Spring 是一个开源框架,是为了解决企业应用程序开发复杂性,由 Rod Johnson 创建 的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同 时为 J2EE 应用程序开发提供集成的框架。Spring 使用基本的 JavaBean 来完成以前只可 中关村软件园人才培训基地 - 35 - 能由 EJB 完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角 度而言,任何 Java 应用都可以从 Spring 中受益。 Hibernate 是一个开放源代码的对象关系映射框架(ORM 框架),它对 JDBC 进行了非常 轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate 可以应用在任何使用 JDBC 的场合,既可以在 Java 的客户端程序使用,也可以 在 Servlet/JSP 的 Web 应用中使用,最具革命意义的是,Hibernate 可以在应用 EJB 的 J2EE 架构中取代 CMP,完成数据持久化的重任。图片为 Hibernate 之父 Gavin King. Apache Struts 2 是一个优雅的,可扩展的 MVC 框架。用来创建企业级的 Java web 应用程序,。框架被设计用来精简开发中从编译、部署到维护的各个 环节。Struts2 的前身是 WebWork 2,经过与 Struts 的整合成为了新版本的 Struts2. 四、Ajax 1、什么是 AJAX,为什么要使用 Ajax(请谈一下你对 Ajax 的认识) 什么是 ajax: AJAX 是“Asynchronous JavaScript and XML”的缩写。他是指一 种创建交互式网页应用的网页开发技术。 Ajax 包含下列技术: 基于 web 标准(standards-basedpresentation)XHTML+CSS 的表 示; 使用 DOM(Document ObjectModel)进行动态显示及交互; 使用 XML 和 XSLT 进行数据交换及相关操作; 使用 XMLHttpRequest 进行异步数据查询、检索; 使用 JavaScript 将所有的东西绑定在一起。 中关村软件园人才培训基地 - 36 - 2、为什么要用 ajax Ajax 应用程序的优势在于: 1. 通过异步模式,提升了用户体验 2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返, 减少了带宽占用 3. Ajax 引擎在客户端运行,承担了一部分本来由服务器承担的工 作,从而减少了大用户量下的服务器负载。 3、AJAX 最大的特点是什么。 Ajax 可以实现动态不刷新(局部刷新) 就是能在不更新整个页面的前提下维护数据。这使得 Web 应用程 序更为迅捷地回应用 户动作,并避免了在网络上发送那些没有改 变过的信息。 4、请介绍一下 XMLhttprequest 对象。 Ajax 的核心是 JavaScript 对象 XmlHttpRequest。该对象在 Internet Explorer 5 中首次引入,它是一种支持异步请求的技术。简而言之, XmlHttpRequest 使您可以使用 JavaScript 向服务器提出请求并处理 响应,而不阻塞用户。通过 XMLHttpRequest 对象,Web 开发人员 可以在页面加载以后进行页面的局部更新。 中关村软件园人才培训基地 - 37 - 5、AJAX 应用和传统 Web 应用有什么不同 在传统的 Javascript 编程中,如果想得到服务器端数据库或文件上的 信息,或者发送客户端信息到服务器,需要建立一个 HTML form 然 后 GET 或者 POST 数据到服务器端。用户需要点击”Submit”按钮来 发送或者接受数据信息,然后等待服务器响应请求,页面重新加载。 因为服务器每次都会返回一个新的页面, 所以传统的 web 应用有可 能很慢而且用户交互不友好。 使用 AJAX 技术, 就可以使 Javascript 通过 XMLHttpRequest 对象 直接与服务器进行交互。 通过 HTTP Request, 一个 web 页面可以发送一个请求到 web 服务 器并且接受 web 服务器返回的信息(不用重新加载页面),展示给用户 的还是通一个页面,用户感觉页面刷新,也看不到到 Javascript 后台 进行的发送请求和接受响应。 6、Ajax 和 javascript 的区别。 javascript 是一种在浏览器端执行的脚本语言,Ajax 是一种创建交互 式网页应用的开发技术 ,它是利用了一系列相关的技术其中就包括 javascript。 Javascript 是由网景公司开发的一种脚本语言,它和 sun 公司的 java 语言是没有任何关系的,它们相似的名称只是一种行销策略。 在一般的 web 开发中,javascript 是在浏览器端执行的,我们可以用 中关村软件园人才培训基地 - 38 - javascript 控制浏览器的行为和内容。 7、XMLHttpRequest 对象在 IE 和 Firefox 中创建方式有没 有不同。 有 , IE 中 通 过 new ActiveXObject() 得 到 , Firefox 中 通 过 newXMLHttpRequest()得到。 8、介绍一下 XMLHttpRequest 对象的常用方法和属性。 open(“method”,”URL”) 建立对服务器的调用,第一个参数是 HTTP 请求 方式可以为 GET,POST 或任何服务器所支持的您想调用 的方式。 第二个参数是请求页面的 URL。 send()方法,发送具体请求 abort()方法,停止当前请求 readyState 属性 请求的状态 有 5 个可取值 0=未初始化 ,1= 正在加载 2=以加载,3=交互中,4=完成 responseText 属性 服务器的响应,表示为一个串 reponseXML 属性 服务器的响应,表示为 XML 中关村软件园人才培训基地 - 39 - status 服务器的 HTTP 状态码,200 对应 ok 400 对应 not found。 9、AJAX 都有哪些优点和缺点? 1、最大的一点是页面无刷新,用户的体验非常好。 2、使用异步方式与服务器通信,具有更加迅速的响应能力。 3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲 置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成 本。并且减轻服务器的负担,ajax 的原则是“按需取数据”,可以最大 程度的减少冗余请求,和响应对服务器造成的负担。 4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。 ajax 的缺点 1、ajax 不支持浏览器 back 按钮。 2、安全问题 AJAX 暴露了与服务器交互的细节。 3、对搜索引擎的支持比较弱。 4、破坏了程序的异常机制。 5、不容易调试。 中关村软件园人才培训基地 - 40 - 10、Ajax 主要包含了哪些技术? Ajax(Asynchronous JavaScript + XML)的定义 基于 web 标准(standards-based presentation)XHTML+CSS 的表 示; 使用 DOM(Document Object Model)进行动态显示及交互; 使用 XML 和 XSLT 进行数据交换及相关操作; 使用 XMLHttpRequest 进行异步数据查询、检索; 使用 JavaScript 将所有的东西绑定在一起。英文参见 Ajax 的提出者 Jesse James Garrett 的原文,原文题目(Ajax: A New Approach to Web Applications)。 类似于 DHTML 或 LAMP,AJAX 不是指一种单一的技术,而是有机 地利用了一系列相关的技术。事实上,一些基于 AJAX 的“派生/合成” 式(derivative/composite)的技术正在出现,如“AFLAX”。 AJAX 的应用使用支持以上技术的 web 浏览器作为运行平台。这些浏 览器目前包括:Mozilla、Firefox、Internet Explorer、Opera、Konqueror 及 Safari。但是 Opera 不支持 XSL 格式对象,也不支持 XSLT。 11、AJAX 技术体系的组成部分有哪些。 HTML,css,dom,xml,xmlHttpRequest,javascript 中关村软件园人才培训基地 - 41 - 五、Jquery 1、你在公司是怎么用 jquery 的? 答:在项目中是怎么用的是看看你有没有项目经验(根据自己的实际 情况来回答) 你用过的选择器啊,复选框啊,表单啊,ajax 啊,事件等 配置 Jquery 环境 下载 jquery 类库 在 jsp 页面引用 jquery 类库即可 2、你为什么要使用 jquery? 答:因为 jQuery 是轻量级的框架,大小不到 30kb,它有强大的选择器, 出色的 DOM 操作的封装,有可靠的事件处理机制(jQuery 在处理事 件绑定的时候相当的可靠), 中关村软件园人才培训基地 - 42 - 完善的 ajax(它的 ajax 封装的非常的好,不需要考虑复杂浏览器的兼 容性和 XMLHttpRequest 对象的创建和使用的问题。) 出色的浏览器的兼容性。 而且支持链 式操作,隐式迭代。 行为层和结构层的分离,还支持丰富的插件,jquery 的文档也非常的 丰富。 3、你使用 jquery 遇到过哪些问题,你是怎么解决的? 答:这个答案是开发的,看你是否有相关的项目经验。 例 前台拿不到值,JSON 可是出现的错误(多了一个空格等)这编译 是不会报错的 jquery 库与其他库冲突: 1>如果其他库在 jquery 库之前导入的话 1.我们可以通过 jquery.noconflict()将变量的$的控制权过度给其他库 2.自定义快捷键,用一个变量接住 jquery.noconflict() 3.通过函数传参 2>如果 jquery 库在其他库之前导入就直接使用 jquery 今天在处理一个数据问题时,发现 jQuery.ajax()方法返回的值一直有 问题,清除缓存后数据无误, 多次测试后发现返回的值都是之前的值,并且一直未执行 url(后台为 中关村软件园人才培训基地 - 43 - JAVA,设置断点一直未进入)。在网上查找下,发现是未设置 type 的 原因。 如果没设置 jQuery.ajax 的 type="Post",那么 ajax 就会默认 type="Get",这就会导致之前数据被缓存起来。加上 type="Post", 问题解决! 4、你知道 jquery 中的选择器吗,请讲一下有哪些选择器? 答 :jQuery 中的选择器大致分为:基本选择器,层次选择器,过滤选 择器,表单选择器 5、jquery 中的选择器 和 css 中的选择器有区别吗? 答:jQuery 选择器支持 CSS 里的选择器, jQuery 选择器可用来添加样式和添加相应的行为 CSS 中的选择器是只能添加相应的样式 6、你觉得 jquery 中的选择器有什么优势? 答:简单的写法 $('ID') 来代替 document.getElementById()函数 支持 CSS1 到 CSS3 选择器 中关村软件园人才培训基地 - 44 - 完善的处理机制(就算写错了 id 也不会报错) 7、jquery 对象和 dom 对象是怎样转换的? 答 :jquery 转 DOM 对象:jQuery 对象是一个数组对象,可以通过 [index]的丰富得到相应的 DOM 对象 还可以通过 get[index]去得到相应的 DOM 对象。 DOM 对象转 jQuery 对象:$(DOM 对象) 8、你是如何使用 jquery 中的 ajax 的? 答: 如果是一些常规的 ajax 程序的话,使用 load(),$.get(),$.post(), 就可以搞定了, 一般我会使用的是$.post() 方法。 如果需要设定 beforeSend(提交前回调函数),error(失败后处 理),success(成功后处理) 及 complete(请求完成后处理)回调函数等,这个时候我会使用 $.ajax()。 9、你觉得 jquery 中的 ajax 好用吗,为什么? 中关村软件园人才培训基地 - 45 - 答: 好用的。 因为 jQuery 提供了一些日常开发中夙瑶的快捷操作,例 load,ajax, get,post 等等, 所以使用 jQuery 开发 ajax 将变得极其简单,我们就可以集中精力在 业务和用户的体验上 ,不需要去理会那些繁琐的 XMLHttpRequest 对象了。 10、jquery 中$.get()提交和$.post()提交有区别吗? 答: 1 $.get() 方法使用 GET 方法来进行异步请求的。 $.post() 方法使用 POST 方法来进行异步请求的。 2 get 请求会将参数跟在 URL 后进行传递,而 POST 请求则是作为 HTTP 消息的实体 内容发送给 Web 服务器的,这种传递是对用户不可见的。 3 get 方式传输的数据大小不能超过2KB 而 POST 要大的多 4 GET 方式请求的数据会被浏览器缓存起来,因此有安全问题。 11、jQuery 是如何处理缓存的? 答 :要处理缓存就是禁用缓存. 1 通过$.post() 方法来获取数据,那么默认就是禁用缓存的。 2 通过$.get()方法 来获取数据,可以通过设置时间戳来避免缓存。 中关村软件园人才培训基地 - 46 - 可以在 URL 后面加上+(+new Date) 例 $.get('ajax.xml?'+(+new Date),function (){ //内容 }); 3 通过$.ajax 方法来获取数据,只要设置 cache:false 即可。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档

相关文档