- 相關(guān)推薦
J2EE框架面試題庫
J2EE核心是一組技術(shù)規范與指南,其中所包含的各類(lèi)組件、服務(wù)架構及技術(shù)層次,均有共同的標準及規格,讓各種依循J2EE架構的不同平臺之間,存在良好的兼容性,解決過(guò)去企業(yè)后端使用的信息產(chǎn)品彼此之間無(wú)法兼容,企業(yè)內部或外部難以互通的窘境。以下是小編整理的J2EE框架面試題庫,希望大家認真閱讀!
J2EE框架面試題庫1
1.Servlet 的生命周期
參考答案:Servlet 的生命周期主要為四個(gè)步驟實(shí)例化時(shí)調用構造方法,初始化 init()、業(yè)務(wù)處理 service()、銷(xiāo)毀 destory()。
1,啟動(dòng)tomcat時(shí),調用Servlet的構造方法
2、init 階段:init()方法在 Servlet 實(shí)例化的時(shí)候調用,而且只調用一次(對于
Servlet 的初始化,一般是第一次被請求時(shí);或者在在 web.xml 中沒(méi)有配置
標簽的映射這個(gè)時(shí)候, 我們可以配置元素中指定了子元素時(shí),容器在啟動(dòng)的時(shí)候自動(dòng)加載這些 Servlet 并調用 init()方法) , init()方法的作用是完成一些全局性的比較花費時(shí)間的初始化工作。
3、service()階段:Servlet 繼承了父類(lèi)的 service()方法,那么前端 URL 發(fā)出的請求不管是以 get 方式或者 post 方式,都將直接走重寫(xiě)的 service()方法,而不再走 doGet()和 goPost()方法。
4、終止階段調用 destroy()方法:Servlet 容器關(guān)閉時(shí)調用,用來(lái)關(guān)閉 Servlet 占用的一些資源。
2.Servlet3.0 有哪些新特性
參考答案: Servlet 3.0 作為 Java EE 6 規范體系中一員, 隨著(zhù) Java EE 6 規范一起發(fā)布。 該版本在前一版本 (Servlet 2.5) 的基礎上提供了若干新特性用于簡(jiǎn)化 Web應用的開(kāi)發(fā)和部署。其中有幾項特性的引入讓開(kāi)發(fā)者感到非常奮:
1、異步處理支持:有了該特性,Servlet 線(xiàn)程不再需要一直阻塞,直到業(yè)務(wù)處
理完畢才能再輸出響應, 最后才結束該 Servlet 線(xiàn)程。 在接收到請求之后, Servlet線(xiàn)程可以將耗時(shí)的操作委派給另一個(gè)線(xiàn)程來(lái)完成, 自己在不生成響應的情況下返回至容器。針對業(yè)務(wù)處理較耗時(shí)的情況,這將大大減少服務(wù)器資源的占用,并且提高并發(fā)處理速度。
2、 新增的注解支持: 該版本新增了若干注解, 用于簡(jiǎn)化 Servlet、 過(guò)濾器 (Filter)和偷聽(tīng)(Listener)的聲明,這使得 web.xml 部署描述文件從該版本開(kāi)始不再是必選的了。
3、可插性支持:熟悉 Struts2 的開(kāi)發(fā)者一定會(huì )對其通過(guò)插件的方式與包括
Spring 在內的各種常用框架的整合特性記憶猶新。將相應的插件封裝成 JAR 包
并放在類(lèi)路徑下,Struts2 運行時(shí)便能自動(dòng)加載這些插件,F在 Servlet 3.0 提供了類(lèi)似的特性,開(kāi)發(fā)者可以通過(guò)插件的方式很方便的擴充已有 Web 應用的功能,而不需要修改原有的應用。
4、 原本文件上傳時(shí)通過(guò) common-fileupload 或者 SmartUpload, 上傳比較麻煩,在 Servlet 3.0 中不需要導入任何第三方 jar 包,并且提供了很方便進(jìn)行文件上傳的功能;
5、ServletContext 的性能增強除了以上的新特性之外,ServletContext 對象的
功能在新版本中也得到了增強,F在,該對象支持在運行時(shí)動(dòng)態(tài)部署 Servlet、
過(guò)濾器、偷聽(tīng),以及為 Servlet 和過(guò)濾器增加 URL 映射等。以 Servlet 為例,過(guò)濾器與偷聽(tīng)與之類(lèi)似。
3.forward 與 與 redirect 區別
參考答案:
Forward :轉發(fā),是服務(wù)器內部的一種轉向行為,客戶(hù)端并不能察覺(jué),URL 顯示的依然是轉發(fā)前的地址;它屬于一次 Request 請求,轉發(fā)目標頁(yè)依然可以使用
Request 范圍內的數據。使用場(chǎng)景:多用戶(hù)多角色的系統根據登錄用戶(hù)進(jìn)行模塊的跳轉。
Redirect :重定向,服務(wù)器會(huì )首先響應請求端一個(gè)狀態(tài)碼,請求端根據狀態(tài)碼再次發(fā)生的請求, URL 的地址會(huì )換成后一次請求的地址; 它屬于兩次 Request 請求,所以第一次 Request 請求范圍內的數據將丟失,不能再從 Request 中獲取數據。使用場(chǎng)景:Session 過(guò)期(或未登錄時(shí))跳轉到登錄頁(yè),系統異常跳轉到異常頁(yè)。
4.Session 與 與 Cookie
參考答案:
Session:運行在服務(wù)器端,默認是保存在內存中,安全性高,可以存放對象,
可以設置生命周期,當服務(wù)器端維護 Session 對象過(guò)多的時(shí)候,會(huì )影響到服務(wù)器的性能,可以將一部分 Session 序列化到硬盤(pán)上存儲。當用戶(hù)第一次請求生成Session 對象時(shí)會(huì )生成 sessionID 用來(lái)標識此對象,SessionID 將會(huì )返回給用戶(hù)保存在 Cookie 中。
Cookie:是保存在客戶(hù)端,一般不超過(guò) 4k,用戶(hù)客戶(hù)端對 cookie 數據量也有限制,好像 20 個(gè)左右,Cookie 安全性低,可以被改寫(xiě),而且容易被瀏覽器禁用,但如果 Cookie 完全被禁用,Session 的會(huì )話(huà)功能也將失效。
5.如何實(shí)現一個(gè)自己的 session
參考答案:要寫(xiě)一個(gè)自己的 session,首先要知道 session 的幾個(gè)特點(diǎn):第一,
能夠進(jìn)行對象的保存;第二,有一個(gè)唯一的識別碼 sessionID 可以通過(guò) cookie 中的 sessionID 來(lái)找到 session 對象;第三,就是可以設置 session 的有效期;解決這三點(diǎn)就可以來(lái)實(shí)現我們自己的 session 了;上面三個(gè)條件中最容易實(shí)現的就是sessinID,在 Java 中生成一個(gè)不重復的 ID 太容易了,這里用 UUID 生成一個(gè) 32位序列作為唯一識別碼 token(token 就是上面的 sessionID,自己寫(xiě)時(shí)就不要用原來(lái)的名稱(chēng)了) 。下面推薦三種方案,面試時(shí)根據自己的理解選擇。
第一種Map 方案:
1、定義一個(gè)全局的靜態(tài)的Map 對象(最好用線(xiàn)程安全的實(shí)現類(lèi)) ;
2、用戶(hù)首次訪(fǎng)問(wèn)時(shí)生成一個(gè) token 作為 Map 中的 key 值,Map 中的 value可以根據需要定義成對象,此對象里面一定要有一個(gè)時(shí)間字段,來(lái)記錄用戶(hù)最近一次的訪(fǎng)問(wèn)時(shí)間;
3、 定義一個(gè)后臺線(xiàn)程, 用來(lái)監控 Map 中對象的日期與系統日期時(shí)間的差值,當大于設定的時(shí)間時(shí),就把對象從 Map 中刪除(模擬 session 過(guò)期清理)。
第二種 SQL 方案:
1、建一張 t_session 表,里面的主鍵為 token,至少有一個(gè)日期字段,其余的字段根據保存的對象需要建立;
2、用戶(hù)首次訪(fǎng)問(wèn)時(shí)生成一個(gè) token 作為主鍵,同時(shí)插入一個(gè)當前日期;后續只要用戶(hù)對 Session 要操作的地方,就要更新 t_session 中的日期字段;
3、定義一個(gè)數據 JOB,用來(lái)監控 t_session 中對象的日期與系統日期時(shí)間的差值, 當大于設定的時(shí)間時(shí), 就把對象從t_session中刪除(模擬session過(guò)期清理)。
第三種緩存方案:
1、引入一個(gè)緩存 Encache 對象;
2、用戶(hù)首次訪(fǎng)問(wèn)時(shí)生成一個(gè) token 作為 Encache 中的 key 值,Value 值可以根據需要定義對象,最好是實(shí)現了序列化。
3、在緩存配置中聲明一個(gè)過(guò)期日期。
綜上:第一種方案有一個(gè)問(wèn)題,就是當 Map 存和的對象足夠多的時(shí)候,后臺線(xiàn)程在掃描的時(shí)候會(huì )不會(huì )造成前臺用戶(hù)操作 Map 對象的阻塞,從原理上是有這存情況發(fā)生,總之隨著(zhù) Map 存放的東西越多,性能下降的越厲害。第二種方案不
多說(shuō)了,每次操作都可能引起后臺數據表的操作,而且在線(xiàn)用戶(hù)多的時(shí)候,只是這塊就會(huì )占用很多的連接數,有點(diǎn)浪費系統資源。第三種方案是我比較推崇的方試,不用再擔心過(guò)期時(shí)間的管理,緩存本身就有過(guò)期時(shí)間管理的機制,有人擔心Encache 是與應用綁定發(fā)布的,不容易做分布式,其實(shí)多慮了,Encache 本身支持分布式的,即使有問(wèn)題,我們還有 memcached 等其它緩存呢?傊鶕䴓I(yè)務(wù)場(chǎng)景需要來(lái)選擇就行了。
6.Http 請求中 Get 和 和 Post 區別
參考答案:get,post 是前臺與后臺交互時(shí)兩種請求方式。
Get :從 URL 上看它是以明文的方式展現(一般要對參數需要加密處理)在地
址欄中, 而且它對提交的內容長(cháng)度有限制, 不能超過(guò) 1024Btye;Get 一般用于向服務(wù)器中請求數據(查詢(xún)時(shí)) 。
Post:是一種自動(dòng)加密的請求方式, 而且理論請求的內容沒(méi)有長(cháng)度限制, 一般用于表單提交,向服務(wù)器進(jìn)行數據添加或者更新的時(shí)候使用。
7.JSP 中動(dòng)態(tài) INCLUDE 與靜態(tài) INCLUDE 的區別
參考答案:
1、寫(xiě)法不同,動(dòng)態(tài)包含,而靜態(tài)包
含;動(dòng)態(tài)包含中一般是同樣的jsp 頁(yè),而靜態(tài)包含可以是其它.txt,.html 等文件。
2、動(dòng)態(tài)包含是兩個(gè)獨立的文件,分別編譯,但它總會(huì )動(dòng)態(tài)檢查被引入頁(yè)中的
內容變化,在執行到 jsp:include 時(shí)動(dòng)態(tài)引入被包含的文件,而且可以向被引入的頁(yè)面中傳遞參數。靜態(tài)包含相當于在編譯前將被包含的文件插入到
J2EE框架面試題庫2
1、請簡(jiǎn)述一下 Spring 框架的核心特性。
Spring 框架的核心特性包括控制反轉(IoC)、依賴(lài)注入(DI)、面向切面編程(AOP)、事務(wù)管理等。
2、解釋一下 Spring Boot 的自動(dòng)配置原理。
Spring Boot 的自動(dòng)配置原理是基于條件判斷和默認配置,根據項目依賴(lài)和配置來(lái)自動(dòng)生成相應的配置。
3、在 Hibernate 中,如何實(shí)現一對多和多對多的關(guān)聯(lián)映射?
在 Hibernate 中,可以通過(guò)配置關(guān)聯(lián)關(guān)系和相關(guān)屬性來(lái)實(shí)現一對多和多對多的關(guān)聯(lián)映射。
4、談?wù)勀銓?MyBatis 中動(dòng)態(tài) SQL 的理解。
MyBatis 中的動(dòng)態(tài) SQL 可以根據不同的條件動(dòng)態(tài)生成 SQL 語(yǔ)句,提高靈活性和適應性。
5、Struts2 和 Spring MVC 有什么區別?
Struts2 和 Spring MVC 在架構、請求處理方式、靈活性等方面存在區別。
6、簡(jiǎn)述一下 JPA 的主要作用和優(yōu)勢。
JPA 主要用于對象關(guān)系映射,簡(jiǎn)化數據庫操作,提供了標準化的接口和規范。
7、在使用 Spring Security 時(shí),如何進(jìn)行用戶(hù)認證和授權?
使用 Spring Security 時(shí),可以通過(guò)配置用戶(hù)信息、權限等進(jìn)行認證和授權。
8、解釋一下 Maven 和 Gradle 在項目管理中的區別。
Maven 更強調約定和規范,Gradle 則更具靈活性和個(gè)性化。
9、如何在 Spring 中進(jìn)行事務(wù)管理?
在 Spring 中可以通過(guò)配置事務(wù)管理器、注解等方式進(jìn)行事務(wù)管理。
10、談?wù)勀銓Ψ植际绞聞?wù)的理解,以及常用的解決方案。
分布式事務(wù)是在分布式系統中保證多個(gè)操作的原子性,常用的解決方案有兩階段提交(2PC)、補償事務(wù)等。
【J2EE框架面試題庫】相關(guān)文章:
關(guān)于J2EE三大框架學(xué)習順序的討論08-21
J2EE經(jīng)典面試題及答案01-21
J2EE面試題及答案「精選」09-20
2016年J2EE面試題及答案「精選」06-04
2016年IBM面試試題庫07-15
關(guān)于J2EE MVC方面的面試題及答案07-08
什么是J2EE07-05
j2ee介紹07-22
J2EE的概念08-23