SSH常见面试题

wojingwu

贡献于2011-07-08

字数:6507 关键词: Java开发 试题

1.MVC,分析一下struts是如何实现MVC的 m:JavaBean 或结合 EJB 组件或者pojo构成 c:Action 来实现 v:一组 JSP 文件及其标签构成。 2.struts中的几个关键对象的作用 Action:控制器类, ActionForm:表单对象, DynaValidatorForm: 动态form,ActonMapping: 配置文件中action节点的信息.. 3.Hibernate有哪几种查询数据的方式 hql查询,sql查询,条件查询 4.load()和get()的区别 hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,load默认支持延迟加载,在用到对象中的其他属性数据时才查询数据库,但是万一数据库中不存在该记录,只能抛异常ObjectNotFoundEcception;所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在load时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理(load时候之查询一级缓存,不存在则创建代理)。get()现在一级缓存找,没有就去二级缓存找,没有就去数据库找,没有就返回null ;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。 5.spring 的事务有几种方式?谈谈spring事务的隔离级别和传播行为。 声明事务和编程事务 隔离级别: - DEFAULT使用数据库默认的隔离级别 - READ_UNCOMMITTED会出现脏读,不可重复读和幻影读问题 - READ_COMMITTED会出现重复读和幻影读 - REPEATABLE_READ会出现幻影读 - SERIALIZABLE最安全,但是代价最大,性能影响极其严重 和传播行: - REQUIRED存在事务就融入该事务,不存在就创建事务 - SUPPORTS存在事务就融入事务,不存在则不创建事务 - MANDATORY存在事务则融入该事务,不存在,抛异常 - REQUIRES_NEW总是创建新事务 - NOT_SUPPORTED存在事务则挂起,一直执行非事务操作 - NEVER总是执行非事务,如果当前存在事务则抛异常 - NESTED嵌入式事务 6.Spring对多种ORM框架提供了很好的支持,简单描述在Spring中使用Hibernate的方法,并结合事务管理。 getHiberanteTemplate里面提供了save,update,delete,find等方法。 简单说一个:如果配置了声明式事务,当执行getHibernateTemplate的各种方法的时候,事务会 自动被加载 如果没有配置事务,那么以上操作不会真正的被同步到数据库,除非配置了hibernate的 autocommit=true 7.spring的事务有几种方式?谈谈spring事务的隔离级别和传播行为。 spring事务分两种形式,声明式事务和编程式事务,spring提供了一个事务的接口 PaltformTractionManager接口,针对不同的事务,spring进行了不同的实现,对hibernate事务 的实现HIbernateTractionManager,对JDBC的JdbcTractionManager, DataSourceTractionManager 以及JdoTractionManager。接口platformTractionManager提供了三 个方法,获取事务,提交和回滚的方法。 8.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to- many、many-to-many、 8)jspForward1.jsp要把请求转发给jspForward2.jsp,应该在jspForward1.jsp中如何实现? (单选) 选项: (A) jspForward2.jsp (B) (9) 当浏览器第二次访问以下JSP网页时的输出结果是什么?(单选) <% int b=0; a++; b++; %> a:<%= a %>
b:<%= b %> 选项: (A) a=0 b=0 (B) a=1 b=1 (c) a=2 b=1 (10)下面哪个说法是正确的? (单选) 选项: (A) 对于每个要求访问maillogin.jsp的HTTP请求,Servlet容器都会创建一个HttpSession对象 (B)每个 HttpSession对象都有惟一的ID。 (C)JavaWeb应用程序必须负责为HttpSession分配惟一的ID (11) 如果不希望JSP网页支持Session,应该如何办? (单选) 选项: (A) 调用HttpSession的invalidate()方法 (B) <%@ page session= “false\”> (12) 在标签处理类中,如何访问session范围内的共享数据? (多选) 选项: (A)在TagSupport类中定义了session 成员变量,直接调用它的getAttribute()方法即可。 (B)在标签处理类TagSupport类中定义了pageContext成员变量,先通过它的getSession()方法获得当前的 HttpSession对象,再调用HttpSession对象的 getAttribute()方法。 (C)pageContext.getAttribute(“attributename”,PageContext.SESSION_SCOPE) (13)在下面的选项中,哪些是TagSupport类的doStartTag()方法的有效返回值? (多选) 选项: (A) Tag.SKIP_BODY (B) Tag.SKIY_PAGE (C) Tag.EVAL_BODY_INCLUDE (D) Tag.EVAL_PAGE (14)以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果?(单选) request.setAttribute(\”count\”,new Integer(0)); Integer count = request.getAttribute(\”count\”); 选项: A)不能编译通过 B)能编译通过,并正常运行 C) 编译通过,但运行时抛出ClassCastException 答案: (1)C (2)D (3)D (4)A,B,D (5)A (6)C (7)C (8)B (9)C (10)B (11)B (12)B,C (13)A,C (14)A 1.struts Action是不是线程安全的?如果不是,有什么方式可以保证Action的线程安全?如果是,说明原因 2.MVC,分析一下struts是如何实现MVC的 3.struts中的几个关键对象的作用(说说几个关键对象的作用) 4.spring 说说AOP和IOC的概念以及在spring中是如何应用的 5.Hibernate有哪几种查询数据的方式 6.load() 和get()的区别 回答: 1.Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题) 2.struts是用一组类,servlet 和jsp规范实现mvc的 3.ActionFrom ActionServlet Action struts-config.xml 4.spring的核心就是IOC,通过指定对象的创建办法,描述对象与服务之间的关系,而不生成对象 5.3种,hql 条件查询() 原生sql 6.load()方法认为该数据一定存在,可以放心的使用代理来延时加载 ,如果使用过程中发现了问题,就抛出异常; get()方法一定要获取到真实的数据,否则返回null 4楼 hibernate 1.在数据库中条件查询速度很慢的时候,如何优化? (1).建索引 (2).减少表之间的关联 (3).优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的表排在前面 (4).简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据 2.在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方案二,对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那么有一个构造函数就是Bean(type1 filed1,type2 field2) ,然后在hql里面就可以直接生成这个bean了。具体怎么用请看相关文档,我说的不是很清楚。 hibernate 的核心类是什么,它们的相互关系是什么?重要的方法是什么? Configuration 接口:配置Hibernate,根据其启动hibernate,创建 SessionFactory 对象; SessionFactory 接口:初始化Hibernate,充当数据存储源的代理,创建 session 对象,sessionFactory 是线程安全的,意味着它的同一个实例可以被应 用的多个线程共享,是重量级、二级缓存; Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的, 避免多个线程共享同一个session,是轻量级、一级缓存; Transaction 接口:管理事务; Query 和Criteria 接口:执行数据库的查询。 Session如下方法 Save/ load/Update/Delete/get/saveOrUpdate/deleteAll Query q=CreateQuery(“from Customer where customerName=:customerName”) beginTransaction close Transaction Commit() 5楼 一组Struts的选择测试题附答案 (1)在Struts应用的视图中包含哪些组件?(多选) 选项: (A) JSP (B) Servlet (C) ActionServlet (D) Action (E) 代表业务逻辑或业务数据的JavaBean (F) EJB (G) 客户化标签 (2)在Struts应用的控制器中包含哪些组件?(多选) 选项: (A) JSP (B) Servlet (C) ActionServlet (D) Action (E)代表业务逻辑或业务数据的JavaBean (F) EJB (G) 客户化标签 (3) 在Struts应用的模型中包含哪些组件?(多选) 选项: (A) JSP (B) Servlet (C) ActionServlet (D) Action (E)代表业务逻辑或业务数据的JavaBean (F) EJB (G) 客户化标签 (4)以下代码定义了一个变量,如何输出这个变量的值?(多选) 选项: (A) (B) (C)<%= stringBean%> (D) <% String myBean= (String)pageContext.getAttribute(“stringBean”,PageContext.PAGE_SCOPE); %> <%=myBean%> (5)把静态文本放在Resource Bundle中,而不是直接在JSP文件中包含这些静态文本,有什么优点?(多选) A)提高可维护性 B)提高可重用性 C) 支持国际化 D)提高运行速度 (6)以下哪些说法是正确的?(单选) 选项: (A)每个HTTP请求对应一个单独的ActionServlet实例 (B)对于每个请求访问HelloAction的HTTP请求,Struts框架会创建一个单独的 HelloAction实例。 (C)每个子应用对应一个单独的RequestProcessor实例 (D)每个子应用对应一个单独的 web.xml文件 (7)下面哪些任务是RequestProcessor完成的?(多选) 选项: (A)把 Struts配置文件信息加载到内存中 (B)把资源文件信息读入到内存中 (C)如果需要的话,创建ActionForm实例,组装数据,并进行表单验证 (D)找到匹配的Action实例,调用其execute()方法 (E)把请求转发到Action的 execute()方法返回的ActionForward代表的组件。 (8)对于以下代码,HelloAction希望把请求转发给 hello.jsp,在HelloAction的execute()方法中如何实现?(多选) 选项: (A) return (new ActionForward(mapping.getInput())); (B) return (mapping.findForward(\”SayHello\”)); (C) return (mapping.findForward(“hello.jsp\”)); (9)对于以下这段配置ActionServlet的代码,哪些说法是正确的?(多选) action org.apache.struts.action.ActionServlet config /WEB-INF/myconfig.xml 2 action *.do 选项: (A)Servlet容器在启动Struts应用时,会初始化这个ActionServlet。 (B) 对于所有URL中以”.do”结尾的HTTP请求,都由ActionServlet处理。 (C) 这段代码位于struts-config.xml中。 (D)这段代码位于web.xml中。 (10) 问答题:MVC是什么含义? 答案: (1)A,G (2)B,C,D (3)E,F (4)A,D (5)A,B,C (6)C (7)C,D,E (8)A,B (9)A,B,D (10)M表示Model(模型),V表示 View(视图),C表示Controller(控制器) 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wojingwu/archive/2010/07/23/5757181.aspx

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

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

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

下载文档

相关文档