廣州奧格智慧科技有限公司
1、Servlet包含那幾個特定的方法?不同方法分別在什麼條件下呼叫?
HttpServlet 類包含 init() 、 service() 、destroy() 等方法。其中 init() 和 destroy() 方法是繼承的。分別在初始化,訪問,結束回話時候呼叫
Struts2框架問題
1.Action是執行緒安全的嗎?為什麼?
不是執行緒安全的,首先JSP預設是以多執行緒方式執行的,在action裡用例項變數時,因為例項變數是在堆中分配的,並被屬於該例項的所有執行緒共享,所以不是執行緒安全的.
2.從頁面發出的請求(request)資料是如何載入到Action屬性的?實際上是通過Struts2框架的什麼機制來實現的?能否描述一下您對這種機制的理解?
一、通過get set方法獲取
二、通過ServletActionContext獲取
三、通過ActionContext獲取//匯入
MVC執行機制
核心控制器是會過濾所有請求,如果以Action結尾,該親戚會轉入框架處理,當框架獲取*Action請求後,根據*Action的前半部分決定呼叫那個業務邏輯元件,最後根據邏輯元件的處理資訊決定轉發到那個檢視。
3.JSP頁面是通過什麼方式來獲取並顯示Action屬性值的?能否描述這種實現方式的原理過程嗎?
一、用struts標籤獲取:<s:property value="#session.sessionid"/>
二、用會話獲取:session.getAttribute("sessionid");
三、el表示式獲取:${sessionScope.sessionid}
Spring 框架問題:
1.service (或bean)要配置資料庫事務,一般有哪些配置方式?能否描述下Spring實現資料庫事務自動注入的原理過程?
第一種方式:每個Bean都有一個代理
第二種方式:所有Bean共享一個代理基類
第三種方式:使用攔截器
第四種方式:使用tx標籤配置的攔截器
第五種方式:全註解
通過以上配置事務,讓我們從複雜的事務處理中得到解脫。使得我們再也無需要去處理獲得連線、關閉連線、事務提交和回滾等這些操作。再也無需要我們在與事務相關的方法中處理大量的try…catch…finally程式碼。
2.帶有資料庫事務的service可以注入dao,但可以注入其他的也帶有資料庫事務的service嗎?為什麼?
dao屬於依賴注入,Service屬於包內呼叫
3.詳細描述一下如何利用AOP實現通用日誌功能的主要步驟過程?
第一步:在程式碼中新增自定義註解,並且定義兩個屬性,一個是日誌的描述(description),還有個是操作表型別(tableType),屬性引數可按需求改變
第二步:定義切面類,獲取切面引數
第三步:在service需要記錄日誌的地方進行註解
第四步:把切面類所在的包路徑新增到Spring註解自動掃描路徑下,並且啟動對@AspectJ註解的支援
Hibernate框架問題:
1.一級快取和二級快取的區別是什麼?
第一級是Session的快取。由於Session物件的生命週期通常對應一個數據庫事務或者一個應用事務,因此它的快取是事務範圍的快取。第一級快取是必需的,不允許而且事實上也無法比卸除。在第一級快取中,持久化類的每個例項都具有唯一的OID。
第二級快取是一個可插拔的的快取外掛,它是由SessionFactory負責管理。由於SessionFactory物件的生命週期和應用程式的整個過程對應,因此第二級快取是程序範圍或者叢集範圍的快取。這個快取中存放的物件的鬆散資料。第二級物件有可能出現併發問題,因此需要採用適當的併發訪問策略,該策略為被快取的資料提供了事務隔離級別。快取介面卡用於把具體的快取實現軟體與Hibernate整合。第二級快取是可選的,可以在每個類或每個集合的粒度上配置第二級快取。
2.假設讓您使用Hibernate框架來批量更新大量資料記錄,您會怎麼做?這種做法的優缺點是什麼?
如果直接更新的話會出現記憶體溢位等問題,我的處理方法是用每50作為一個數據單元,每50條呼叫flush()重新整理資料,再用clear()清空快取。優點是邏輯簡單,缺點是效率低,更新資料時如果系統出錯會很麻煩