1. 程式人生 > >java工程師中興面試題

java工程師中興面試題

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等容器。

簡單例項程式碼如下:

  1. import org.apache.struts2.StrutsSpringTestCase;  
  2. publicclass ActionTest extends StrutsSpringTestCase{  
  3.     @Override
  4.     protected String getContextLocations() {  
  5.         return"classpath*:applicationContext*.xml";  
  6.     }  
  7.     publicvoid testAll() throws Exception{  
  8.         request.addParameter("id"
    "1");  
  9.         String res=executeAction("/test.action");  
  10.         System.out.println(res);  
  11.     }  
  12. }  

主要是繼承StrutsSpringTestCase類。

測試用例中,action返回的資料為json,res即為response的內容。


6.監聽器的順序

1,一個webServlet裡面若有多個監聽器的話,順序是按照載入的順序來載入和註冊的這些servlet監聽器的

2,優先順序:

監聽器.>過濾器>Servlet