java工程師中興面試題
阿新 • • 發佈:2018-12-31
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等容器。
簡單例項程式碼如下:
- import org.apache.struts2.StrutsSpringTestCase;
- publicclass ActionTest extends StrutsSpringTestCase{
- @Override
- protected String getContextLocations() {
- return"classpath*:applicationContext*.xml";
- }
- publicvoid testAll() throws Exception{
-
request.addParameter("id"
- String res=executeAction("/test.action");
- System.out.println(res);
- }
- }
主要是繼承StrutsSpringTestCase類。
測試用例中,action返回的資料為json,res即為response的內容。
6.監聽器的順序
1,一個webServlet裡面若有多個監聽器的話,順序是按照載入的順序來載入和註冊的這些servlet監聽器的
2,優先順序:
監聽器.>過濾器>Servlet