當前位置:才華齋>IT認證>J2EE>

J2EE框架面試題庫

J2EE 閱讀(5.58K)

J2EE核心是一組技術規範與指南,其中所包含的各類元件、服務架構及技術層次,均有共同的標準及規格,讓各種依循J2EE架構的不同平臺之間,存在良好的相容性,解決過去企業後端使用的資訊產品彼此之間無法相容,企業內部或外部難以互通的窘境。以下是小編整理的J2EE框架面試題庫,希望大家認真閱讀!

J2EE框架面試題庫

  let 的生命週期

參考答案:Servlet 的生命週期主要為四個步驟例項化時呼叫構造方法,初始化 init()、業務處理 service()、銷燬 destory()。

1,啟動tomcat時,呼叫Servlet的構造方法

2、init 階段:init()方法在 Servlet 例項化的時候呼叫,而且只調用一次(對於

Servlet 的初始化,一般是第一次被請求時;或者在在 中沒有配置

標籤的對映這個時候, 我們可以配置元素中指定了子元素時,容器在啟動的時候自動載入這些 Servlet 並呼叫 init()方法) , init()方法的作用是完成一些全域性性的比較花費時間的初始化工作。

3、service()階段:Servlet 繼承了父類的 service()方法,那麼前端 URL 發出的請求不管是以 get 方式或者 post 方式,都將直接走重寫的 service()方法,而不再走 doGet()和 goPost()方法。

4、終止階段呼叫 destroy()方法:Servlet 容器關閉時呼叫,用來關閉 Servlet 佔用的一些資源。

  let3.0 有哪些新特性

參考答案: Servlet 3.0 作為 Java EE 6 規範體系中一員, 隨著 Java EE 6 規範一起釋出。 該版本在前一版本 (Servlet 2.5) 的基礎上提供了若干新特性用於簡化 Web應用的開發和部署。其中有幾項特性的引入讓開發者感到非常奮:

1、非同步處理支援:有了該特性,Servlet 執行緒不再需要一直阻塞,直到業務處

理完畢才能再輸出響應, 最後才結束該 Servlet 執行緒。 在接收到請求之後, Servlet執行緒可以將耗時的操作委派給另一個執行緒來完成, 自己在不生成響應的情況下返回至容器。針對業務處理較耗時的情況,這將大大減少伺服器資源的佔用,並且提高併發處理速度。

2、 新增的註解支援: 該版本新增了若干註解, 用於簡化 Servlet、 過濾器 (Filter)和偷聽(Listener)的宣告,這使得 部署描述檔案從該版本開始不再是必選的了。

3、可插性支援:熟悉 Struts2 的開發者一定會對其通過外掛的方式與包括

Spring 在內的各種常用框架的整合特性記憶猶新。將相應的外掛封裝成 JAR 包

並放在類路徑下,Struts2 執行時便能自動載入這些外掛。現在 Servlet 3.0 提供了類似的特性,開發者可以通過外掛的方式很方便的擴充已有 Web 應用的功能,而不需要修改原有的應用。

4、 原本檔案上傳時通過 common-fileupload 或者 SmartUpload, 上傳比較麻煩,在 Servlet 3.0 中不需要匯入任何第三方 jar 包,並且提供了很方便進行檔案上傳的功能;

5、ServletContext 的效能增強除了以上的新特性之外,ServletContext 物件的

功能在新版本中也得到了增強。現在,該物件支援在執行時動態部署 Servlet、

過濾器、偷聽,以及為 Servlet 和過濾器增加 URL 對映等。以 Servlet 為例,過濾器與偷聽與之類似。

  ard 與 與 redirect 區別

參考答案:

Forward :轉發,是伺服器內部的一種轉向行為,客戶端並不能察覺,URL 顯示的依然是轉發前的地址;它屬於一次 Request 請求,轉發目標頁依然可以使用

Request 範圍內的資料。使用場景:多使用者多角色的系統根據登入使用者進行模組的跳轉。

Redirect :重定向,伺服器會首先響應請求端一個狀態碼,請求端根據狀態碼再次發生的請求, URL 的地址會換成後一次請求的地址; 它屬於兩次 Request 請求,所以第一次 Request 請求範圍內的資料將丟失,不能再從 Request 中獲取資料。使用場景:Session 過期(或未登入時)跳轉到登入頁,系統異常跳轉到異常頁。

  ion 與 與 Cookie

參考答案:

Session:執行在伺服器端,預設是儲存在記憶體中,安全性高,可以存放物件,

可以設定生命週期,當伺服器端維護 Session 物件過多的時候,會影響到伺服器的效能,可以將一部分 Session 序列化到硬碟上儲存。當用戶第一次請求生成Session 物件時會生成 sessionID 用來標識此物件,SessionID 將會返回給使用者儲存在 Cookie 中。

Cookie:是儲存在客戶端,一般不超過 4k,使用者客戶端對 cookie 資料量也有限制,好像 20 個左右,Cookie 安全性低,可以被改寫,而且容易被瀏覽器禁用,但如果 Cookie 完全被禁用,Session 的會話功能也將失效。

  5.如何實現一個自己的 session

參考答案:要寫一個自己的' session,首先要知道 session 的幾個特點:第一,

能夠進行物件的儲存;第二,有一個唯一的識別碼 sessionID 可以通過 cookie 中的 sessionID 來找到 session 物件;第三,就是可以設定 session 的有效期;解決這三點就可以來實現我們自己的 session 了;上面三個條件中最容易實現的就是sessinID,在 Java 中生成一個不重複的 ID 太容易了,這裡用 UUID 生成一個 32位序列作為唯一識別碼 token(token 就是上面的 sessionID,自己寫時就不要用原來的名稱了) 。下面推薦三種方案,面試時根據自己的理解選擇。

第一種Map 方案:

1、定義一個全域性的靜態的Map 物件(最好用執行緒安全的實現類) ;

2、使用者首次訪問時生成一個 token 作為 Map 中的 key 值,Map 中的 value

可以根據需要定義成物件,此物件裡面一定要有一個時間欄位,來記錄使用者最近一次的訪問時間;

3、 定義一個後臺執行緒, 用來監控 Map 中物件的日期與系統日期時間的差值,

當大於設定的時間時,就把物件從 Map 中刪除(模擬 session 過期清理)。

第二種 SQL 方案:

1、建一張 t_session 表,裡面的主鍵為 token,至少有一個日期欄位,其餘

的欄位根據儲存的物件需要建立;

2、使用者首次訪問時生成一個 token 作為主鍵,同時插入一個當前日期;後

續只要使用者對 Session 要操作的地方,就要更新 t_session 中的日期欄位;

3、定義一個數據 JOB,用來監控 t_session 中物件的日期與系統日期時間的

差值, 當大於設定的時間時, 就把物件從t_session中刪除(模擬session過期清理)。

第三種快取方案:

1、引入一個快取 Encache 物件;

2、使用者首次訪問時生成一個 token 作為 Encache 中的 key 值,Value 值可以

根據需要定義物件,最好是實現了序列化。

3、在快取配置中宣告一個過期日期。

綜上:第一種方案有一個問題,就是當 Map 存和的物件足夠多的時候,後臺線

程在掃描的時候會不會造成前臺使用者操作 Map 物件的阻塞,從原理上是有這存

情況發生,總之隨著 Map 存放的東西越多,效能下降的越厲害。第二種方案不

多說了,每次操作都可能引起後臺資料表的操作,而且線上使用者多的時候,只是這塊就會佔用很多的連線數,有點浪費系統資源。第三種方案是我比較推崇的方試,不用再擔心過期時間的管理,快取本身就有過期時間管理的機制,有人擔心Encache 是與應用繫結釋出的,不容易做分散式,其實多慮了,Encache 本身支援分散式的,即使有問題,我們還有 memcached 等其它快取呢。總之根據業務場景需要來選擇就行了。

   請求中 Get 和 和 Post 區別

參考答案:get,post 是前臺與後臺互動時兩種請求方式。

Get :從 URL 上看它是以明文的方式展現(一般要對引數需要加密處理)在地

址欄中, 而且它對提交的內容長度有限制, 不能超過 1024Btye;Get 一般用於向伺服器中請求資料(查詢時) 。

Post:是一種自動加密的請求方式, 而且理論請求的內容沒有長度限制, 一般用於表單提交,向伺服器進行資料新增或者更新的時候使用。

   中動態 INCLUDE 與靜態 INCLUDE 的區別

參考答案:

1、寫法不同,動態包含,而靜態包

含;動態包含中一般是同樣的 頁,而靜態包含可以是其它, 等檔案。

2、動態包含是兩個獨立的檔案,分別編譯,但它總會動態檢查被引入頁中的

內容變化,在執行到 jsp:include 時動態引入被包含的檔案,而且可以向被引入的頁面中傳遞引數。靜態包含相當於在編譯前將被包含的檔案插入到