學(xué)習(xí)啦>創(chuàng)業(yè)指南>職場>面試題>

Java面試題全新解讀

時間: 護托1061 分享

  如何實現(xiàn)JSP或Servlet的單線程模式? 下面就由學(xué)習(xí)啦小編為大家介紹一下Java面試題全新解讀的文章,歡迎閱讀。

  Java面試題全新解讀篇1

  1、闡述Servlet和CGI的區(qū)別?

  答:Servlet與CGI的區(qū)別在于Servlet處于服務(wù)器進程中,它通過多線程方式運行其service()方法,一個實例可以服務(wù)于多個請求,并且其實例一般不會銷毀,而CGI對每個請求都產(chǎn)生新的進程,服務(wù)完成后就銷毀,所以效率上低于Servlet。

  補充:Sun Microsystems公司在1996年發(fā)布Servlet技術(shù)就是為了和CGI進行競爭,Servlet是一個特殊的Java程序,一個基于Java的Web應(yīng)用通常包含一個或多個Servlet類。Servlet不能夠自行創(chuàng)建并執(zhí)行,它是在Servlet容器中運行的,容器將用戶的請求傳遞給Servlet程序,并將Servlet的響應(yīng)回傳給用戶。通常一個Servlet會關(guān)聯(lián)一個或多個JSP頁面。以前CGI經(jīng)常因為性能開銷上的問題被詬病,然而Fast CGI早就已經(jīng)解決了CGI效率上的問題,所以面試的時候大可不必信口開河的詬病CGI,事實上有很多你熟悉的網(wǎng)站都使用了CGI技術(shù)。

  2、Servlet接口中有哪些方法?

  答:Servlet接口定義了5個方法,其中前三個方法與Servlet生命周期相關(guān):

  - void init(ServletConfig config) throws ServletException

  - void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException

  - void destory()

  - java.lang.String getServletInfo()

  - ServletConfig getServletConfig()

  Web容器加載Servlet并將其實例化后,Servlet生命周期開始,容器運行其init()方法進行Servlet的初始化;請求到達時調(diào)用Servlet的service()方法,service()方法會根據(jù)需要調(diào)用與請求對應(yīng)的doGet或doPost等方法;當(dāng)服務(wù)器關(guān)閉或項目被卸載時服務(wù)器會將Servlet實例銷毀,此時會調(diào)用Servlet的destroy()方法。

  3、轉(zhuǎn)發(fā)(forward)和重定向(redirect)的區(qū)別?

  答:forward是容器中控制權(quán)的轉(zhuǎn)向,是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個URL 的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來的,所以它的地址欄中還是原來的地址。redirect就是服務(wù)器端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址,因此從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址,很明顯redirect無法訪問到服務(wù)器保護起來資源,但是可以從一個網(wǎng)站redirect到其他網(wǎng)站。forward更加高效,所以在滿足需要時盡量使用forward(通過調(diào)用RequestDispatcher對象的forward()方法,該對象可以通過ServletRequest對象的getRequestDispatcher()方法獲得),并且這樣也有助于隱藏實際的鏈接;在有些情況下,比如需要訪問一個其它服務(wù)器上的資源,則必須使用重定向(通過HttpServletResponse對象調(diào)用其sendRedirect()方法實現(xiàn))。

  4、JSP有哪些內(nèi)置對象?作用分別是什么?

  答:JSP有9個內(nèi)置對象:

  - request:封裝客戶端的請求,其中包含來自GET或POST請求的參數(shù);

  - response:封裝服務(wù)器對客戶端的響應(yīng);

  - pageContext:通過該對象可以獲取其他對象;

  - session:封裝用戶會話的對象;

  - application:封裝服務(wù)器運行環(huán)境的對象;

  - out:輸出服務(wù)器響應(yīng)的輸出流對象;

  - config:Web應(yīng)用的配置對象;

  - page:JSP頁面本身(相當(dāng)于Java程序中的this);

  - exception:封裝頁面拋出異常的對象。

  Java面試題全新解讀篇2

  1、get和post請求的區(qū)別?

  答:

  ①get請求用來從服務(wù)器上獲得資源,而post是用來向服務(wù)器提交數(shù)據(jù);

 ?、趃et將表單中數(shù)據(jù)按照name=value的形式,添加到action 所指向的URL 后面,并且兩者使用"?"連接,而各個變量之間使用"&"連接;post是將表單中的數(shù)據(jù)放在HTTP協(xié)議的請求頭或消息體中,傳遞到action所指向URL;

 ?、踘et傳輸?shù)臄?shù)據(jù)要受到URL長度限制(1024字節(jié));而post可以傳輸大量的數(shù)據(jù),上傳文件通常要使用post方式;

 ?、苁褂胓et時參數(shù)會顯示在地址欄上,如果這些數(shù)據(jù)不是敏感數(shù)據(jù),那么可以使用get;對于敏感數(shù)據(jù)還是應(yīng)用使用post;

 ?、輌et使用MIME類型application/x-www-form-urlencoded的URL編碼(也叫百分號編碼)文本的格式傳遞參數(shù),保證被傳送的參數(shù)由遵循規(guī)范的文本組成,例如一個空格的編碼是"%20"。

  2、常用的Web服務(wù)器有哪些?

  答:Unix和Linux平臺下使用最廣泛的免費HTTP服務(wù)器是Apache服務(wù)器,而Windows平臺的服務(wù)器通常使用IIS作為Web服務(wù)器。選擇Web服務(wù)器應(yīng)考慮的因素有:性能、安全性、日志和統(tǒng)計、虛擬主機、代理服務(wù)器、緩沖服務(wù)和集成應(yīng)用程序等。下面是對常見服務(wù)器的簡介:

  - IIS:Microsoft的Web服務(wù)器產(chǎn)品,全稱是Internet Information Services。IIS是允許在公共Intranet或Internet上發(fā)布信息的Web服務(wù)器。IIS是目前最流行的Web服務(wù)器產(chǎn)品之一,很多著名的網(wǎng)站都是建立在IIS的平臺上。IIS提供了一個圖形界面的管理工具,稱為Internet服務(wù)管理器,可用于監(jiān)視配置和控制Internet服務(wù)。IIS是一種Web服務(wù)組件,其中包括Web服務(wù)器、FTP服務(wù)器、NNTP服務(wù)器和SMTP服務(wù)器,分別用于網(wǎng)頁瀏覽、文件傳輸、新聞服務(wù)和郵件發(fā)送等方面,它使得在網(wǎng)絡(luò)(包括互聯(lián)網(wǎng)和局域網(wǎng))上發(fā)布信息成了一件很容易的事。它提供ISAPI(Intranet Server API)作為擴展Web服務(wù)器功能的編程接口;同時,它還提供一個Internet數(shù)據(jù)庫連接器,可以實現(xiàn)對數(shù)據(jù)庫的查詢和更新。

  - Kangle:Kangle Web服務(wù)器是一款跨平臺、功能強大、安全穩(wěn)定、易操作的高性能Web服務(wù)器和反向代理服務(wù)器軟件。此外,Kangle也是一款專為做虛擬主機研發(fā)的Web服務(wù)器。實現(xiàn)虛擬主機獨立進程、獨立身份運行。用戶之間安全隔離,一個用戶出問題不影響其他用戶。支持PHP、ASP、ASP.NET、Java、Ruby等多種動態(tài)開發(fā)語言。

  - WebSphere:WebSphere Application Server是功能完善、開放的Web應(yīng)用程序服務(wù)器,是IBM電子商務(wù)計劃的核心部分,它是基于Java的應(yīng)用環(huán)境,用于建立、部署和管理Internet和Intranet Web應(yīng)用程序,適應(yīng)各種Web應(yīng)用程序服務(wù)器的需要。

  - WebLogic:WebLogic Server是一款多功能、基于標(biāo)準(zhǔn)的Web應(yīng)用服務(wù)器,為企業(yè)構(gòu)建企業(yè)應(yīng)用提供了堅實的基礎(chǔ)。針對各種應(yīng)用開發(fā)、關(guān)鍵性任務(wù)的部署,各種系統(tǒng)和數(shù)據(jù)庫的集成、跨Internet協(xié)作等Weblogic都提供了相應(yīng)的支持。由于它具有全面的功能、對開放標(biāo)準(zhǔn)的遵從性、多層架構(gòu)、支持基于組件的開發(fā)等優(yōu)勢,很多公司的企業(yè)級應(yīng)用都選擇它來作為開發(fā)和部署的環(huán)境。WebLogic Server在使應(yīng)用服務(wù)器成為企業(yè)應(yīng)用架構(gòu)的基礎(chǔ)方面一直處于領(lǐng)先地位,為構(gòu)建集成化的企業(yè)級應(yīng)用提供了穩(wěn)固的基礎(chǔ)。

  - Apache:目前Apache仍然是世界上用得最多的Web服務(wù)器,其市場占有率很長時間都保持在60%以上(目前的市場份額約40%左右)。世界上很多著名的網(wǎng)站都是Apache的產(chǎn)物,它的成功之處主要在于它的源代碼開放、有一支強大的開發(fā)團隊、支持跨平臺的應(yīng)用(可以運行在幾乎所有的Unix、Windows、Linux系統(tǒng)平臺上)以及它的可移植性等方面。

  - Tomcat:Tomcat是一個開放源代碼、運行Servlet和JSP的容器。Tomcat實現(xiàn)了Servlet和JSP規(guī)范。此外,Tomcat還實現(xiàn)了Apache-Jakarta規(guī)范而且比絕大多數(shù)商業(yè)應(yīng)用軟件服務(wù)器要好,因此目前也有不少的Web服務(wù)器都選擇了Tomcat。

  - Nginx:讀作"engine x",是一個高性能的HTTP和反向代理服務(wù)器,也是一個IMAP/POP3/SMTP代理服務(wù)器。 Nginx是由Igor Sysoev為俄羅斯訪問量第二的Rambler站點開發(fā)的,第一個公開版本0.1.0發(fā)布于2004年10月4日。其將源代碼以類BSD許可證的形式發(fā)布,因它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名。在2014年下半年,Nginx的市場份額達到了14%。

  Java面試題全新解讀篇3

  1、JSP和Servlet是什么關(guān)系?

  答:其實這個問題在上面已經(jīng)闡述過了,Servlet是一個特殊的Java程序,它運行于服務(wù)器的JVM中,能夠依靠服務(wù)器的支持向瀏覽器提供顯示內(nèi)容。JSP本質(zhì)上是Servlet的一種簡易形式,JSP會被服務(wù)器處理成一個類似于Servlet的Java程序,可以簡化頁面內(nèi)容的生成。Servlet和JSP最主要的不同點在于,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。有人說,Servlet就是在Java中寫HTML,而JSP就是在HTML中寫Java代碼,當(dāng)然這個說法是很片面且不夠準(zhǔn)確的。JSP側(cè)重于視圖,Servlet更側(cè)重于控制邏輯,在MVC架構(gòu)模式中,JSP適合充當(dāng)視圖(view)而Servlet適合充當(dāng)控制器(controller)。

  2、講解JSP中的四種作用域。

  答:JSP中的四種作用域包括page、request、session和application,具體來說:

  - page代表與一個頁面相關(guān)的對象和屬性。

  - request代表與Web客戶機發(fā)出的一個請求相關(guān)的對象和屬性。一個請求可能跨越多個頁面,涉及多個Web組件;需要在頁面顯示的臨時數(shù)據(jù)可以置于此作用域。

  - session代表與某個用戶與服務(wù)器建立的一次會話相關(guān)的對象和屬性。跟某個用戶相關(guān)的數(shù)據(jù)應(yīng)該放在用戶自己的session中。

  - application代表與整個Web應(yīng)用程序相關(guān)的對象和屬性,它實質(zhì)上是跨越整個Web應(yīng)用程序,包括多個頁面、請求和會話的一個全局作用域。

  3、如何實現(xiàn)JSP或Servlet的單線程模式?

  答:

  對于JSP頁面,可以通過page指令進行設(shè)置。

  對于Servlet,可以讓自定義的Servlet實現(xiàn)SingleThreadModel標(biāo)識接口。

  說明:如果將JSP或Servlet設(shè)置成單線程工作模式,會導(dǎo)致每個請求創(chuàng)建一個Servlet實例,這種實踐將導(dǎo)致嚴重的性能問題(服務(wù)器的內(nèi)存壓力很大,還會導(dǎo)致頻繁的垃圾回收),所以通常情況下并不會這么做。

  4、實現(xiàn)會話跟蹤的技術(shù)有哪些?

  答:由于HTTP協(xié)議本身是無狀態(tài)的,服務(wù)器為了區(qū)分不同的用戶,就需要對用戶會話進行跟蹤,簡單的說就是為用戶進行登記,為用戶分配唯一的ID,下一次用戶在請求中包含此ID,服務(wù)器據(jù)此判斷到底是哪一個用戶。

 ?、賃RL 重寫:在URL中添加用戶會話的信息作為請求的參數(shù),或者將唯一的會話ID添加到URL結(jié)尾以標(biāo)識一個會話。

 ?、谠O(shè)置表單隱藏域:將和會話跟蹤相關(guān)的字段添加到隱式表單域中,這些信息不會在瀏覽器中顯示但是提交表單時會提交給服務(wù)器。

  這兩種方式很難處理跨越多個頁面的信息傳遞,因為如果每次都要修改URL或在頁面中添加隱式表單域來存儲用戶會話相關(guān)信息,事情將變得非常麻煩。

 ?、踓ookie:cookie有兩種,一種是基于窗口的,瀏覽器窗口關(guān)閉后,cookie就沒有了;另一種是將信息存儲在一個臨時文件中,并設(shè)置存在的時間。當(dāng)用戶通過瀏覽器和服務(wù)器建立一次會話后,會話ID就會隨響應(yīng)信息返回存儲在基于窗口的cookie中,那就意味著只要瀏覽器沒有關(guān)閉,會話沒有超時,下一次請求時這個會話ID又會提交給服務(wù)器讓服務(wù)器識別用戶身份。會話中可以為用戶保存信息。會話對象是在服務(wù)器內(nèi)存中的,而基于窗口的cookie是在客戶端內(nèi)存中的。如果瀏覽器禁用了cookie,那么就需要通過下面兩種方式進行會話跟蹤。當(dāng)然,在使用cookie時要注意幾點:首先不要在cookie中存放敏感信息;其次cookie存儲的數(shù)據(jù)量有限(4k),不能將過多的內(nèi)容存儲cookie中;再者瀏覽器通常只允許一個站點最多存放20個cookie。當(dāng)然,和用戶會話相關(guān)的其他信息(除了會話ID)也可以存在cookie方便進行會話跟蹤。

 ?、蹾ttpSession:在所有會話跟蹤技術(shù)中,HttpSession對象是最強大也是功能最多的。當(dāng)一個用戶第一次訪問某個網(wǎng)站時會自動創(chuàng)建HttpSession,每個用戶可以訪問他自己的HttpSession??梢酝ㄟ^HttpServletRequest對象的getSession方法獲得HttpSession,通過HttpSession的setAttribute方法可以將一個值放在HttpSession中,通過調(diào)用HttpSession對象的getAttribute方法,同時傳入屬性名就可以獲取保存在HttpSession中的對象。與上面三種方式不同的是,HttpSession放在服務(wù)器的內(nèi)存中,因此不要將過大的對象放在里面,即使目前的Servlet容器可以在內(nèi)存將滿時將HttpSession中的對象移到其他存儲設(shè)備中,但是這樣勢必影響性能。添加到HttpSession中的值可以是任意Java對象,這個對象最好實現(xiàn)了Serializable接口,這樣Servlet容器在必要的時候可以將其序列化到文件中,否則在序列化時就會出現(xiàn)異常

  **補充:**HTML5中可以使用Web Storage技術(shù)通過JavaScript來保存數(shù)據(jù),例如可以使用localStorage和sessionStorage來保存用戶會話的信息,也能夠?qū)崿F(xiàn)會話跟蹤。

  5、過濾器有哪些作用和用法?

  答: Java Web開發(fā)中的過濾器(filter)是從Servlet 2.3規(guī)范開始增加的功能,并在Servlet 2.4規(guī)范中得到增強。對Web應(yīng)用來說,過濾器是一個駐留在服務(wù)器端的Web組件,它可以截取客戶端和服務(wù)器之間的請求與響應(yīng)信息,并對這些信息進行過濾。當(dāng)Web容器接受到一個對資源的請求時,它將判斷是否有過濾器與這個資源相關(guān)聯(lián)。如果有,那么容器將把請求交給過濾器進行處理。在過濾器中,你可以改變請求的內(nèi)容,或者重新設(shè)置請求的報頭信息,然后再將請求發(fā)送給目標(biāo)資源。當(dāng)目標(biāo)資源對請求作出響應(yīng)時候,容器同樣會將響應(yīng)先轉(zhuǎn)發(fā)給過濾器,在過濾器中你可以對響應(yīng)的內(nèi)容進行轉(zhuǎn)換,然后再將響應(yīng)發(fā)送到客戶端。

  常見的過濾器用途主要包括:對用戶請求進行統(tǒng)一認證、對用戶的訪問請求進行記錄和審核、對用戶發(fā)送的數(shù)據(jù)進行過濾或替換、轉(zhuǎn)換圖象格式、對響應(yīng)內(nèi)容進行壓縮以減少傳輸量、對請求或響應(yīng)進行加解密處理、觸發(fā)資源訪問事件、對XML的輸出應(yīng)用XSLT等。

  和過濾器相關(guān)的接口主要有:Filter、FilterConfig和FilterChain。

3153392