java工程师中兴面试题

来源:互联网 发布:win10cf老出现网络异常 编辑:程序博客网 时间:2024/05/06 04:33

1.servlet线程安全吗 怎样避免?

Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求。所以Servlet是线程不安全的。有几种方法可以实现Servlet线程安全:1,实现 SingleThreadModel 接口的servlet是线程安全的2,用synchronized同步对共享数据的操作3,避免使用实例变量 Servlet的优势在于多线程,高并发。第一种方法其实就是扼杀了其并发性能,所以不推荐在高并发的业务环境下使用。
2.web启动线程

调用servlet的时候,启动线程就ok了 
不要用listener,如果用了,tomcat启动就会加载,会提高tomcat内存用量

3.spring事务控制调用存储过程,存储过程中commit了还可以rollback吗?

commit后就不能rollback了

4.查询缓存是什么

通过SQL查询的话,是不会经过hibernate的缓存的

hibernate中 ,使用createSQLQuery(sql)查询,在开启getHibernateTemplate().setCacheQueries(true);后,执行到query.list();报异常:java.lang.ArrayIndexOutOfBoundsException: 0
当把关闭缓存getHibernateTemplate().setCacheQueries(false)能正常返回。
原因估计是createSQLQuery返回的对象不受hibernate 管理,因此对其设置缓存失效。
5.Struts2+Spring+Junit单元测试

使用Junit对Struts+spring系统进行单元测试,好处是不用启动tomcat等容器。

简单实例代码如下:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. import org.apache.struts2.StrutsSpringTestCase;  
  2.   
  3. public class ActionTest extends StrutsSpringTestCase{  
  4.   
  5.     @Override  
  6.     protected String getContextLocations() {  
  7.         return "classpath*:applicationContext*.xml";  
  8.     }  
  9.   
  10.     public void testAll() throws Exception{  
  11.         request.addParameter("id""1");  
  12.         String res=executeAction("/test.action");  
  13.         System.out.println(res);  
  14.     }  
  15. }  


主要是继承StrutsSpringTestCase类。

测试用例中,action返回的数据为json,res即为response的内容。


6.监听器的顺序

1,一个webServlet里面若有多个监听器的话,顺序是按照加载的顺序来加载和注册的这些servlet监听器的

2,优先级:

监听器.>过滤器>Servlet


0 0
原创粉丝点击