1. 程式人生 > >廣州奧格智慧科技有限公司

廣州奧格智慧科技有限公司

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()清空快取。優點是邏輯簡單,缺點是效率低,更新資料時如果系統出錯會很麻煩