不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

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

Java面試題全新解讀

時(shí)間: 護(hù)托1061 分享

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

  Java面試題全新解讀篇1

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

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

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

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

  答:Servlet接口定義了5個(gè)方法,其中前三個(gè)方法與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并將其實(shí)例化后,Servlet生命周期開始,容器運(yùn)行其init()方法進(jìn)行Servlet的初始化;請(qǐng)求到達(dá)時(shí)調(diào)用Servlet的service()方法,service()方法會(huì)根據(jù)需要調(diào)用與請(qǐng)求對(duì)應(yīng)的doGet或doPost等方法;當(dāng)服務(wù)器關(guān)閉或項(xiàng)目被卸載時(shí)服務(wù)器會(huì)將Servlet實(shí)例銷毀,此時(shí)會(huì)調(diào)用Servlet的destroy()方法。

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

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

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

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

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

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

  - pageContext:通過該對(duì)象可以獲取其他對(duì)象;

  - session:封裝用戶會(huì)話的對(duì)象;

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

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

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

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

  - exception:封裝頁(yè)面拋出異常的對(duì)象。

  Java面試題全新解讀篇2

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

  答:

 ?、賕et請(qǐng)求用來從服務(wù)器上獲得資源,而post是用來向服務(wù)器提交數(shù)據(jù);

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

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

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

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

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

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

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

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

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

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

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

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

  Java面試題全新解讀篇3

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

  答:其實(shí)這個(gè)問題在上面已經(jīng)闡述過了,Servlet是一個(gè)特殊的Java程序,它運(yùn)行于服務(wù)器的JVM中,能夠依靠服務(wù)器的支持向?yàn)g覽器提供顯示內(nèi)容。JSP本質(zhì)上是Servlet的一種簡(jiǎn)易形式,JSP會(huì)被服務(wù)器處理成一個(gè)類似于Servlet的Java程序,可以簡(jiǎn)化頁(yè)面內(nèi)容的生成。Servlet和JSP最主要的不同點(diǎn)在于,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML分離開來。而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文件。有人說,Servlet就是在Java中寫HTML,而JSP就是在HTML中寫Java代碼,當(dāng)然這個(gè)說法是很片面且不夠準(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代表與一個(gè)頁(yè)面相關(guān)的對(duì)象和屬性。

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

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

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

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

  答:

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

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

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

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

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

  ①URL 重寫:在URL中添加用戶會(huì)話的信息作為請(qǐng)求的參數(shù),或者將唯一的會(huì)話ID添加到URL結(jié)尾以標(biāo)識(shí)一個(gè)會(huì)話。

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

  這兩種方式很難處理跨越多個(gè)頁(yè)面的信息傳遞,因?yàn)槿绻看味家薷腢RL或在頁(yè)面中添加隱式表單域來存儲(chǔ)用戶會(huì)話相關(guān)信息,事情將變得非常麻煩。

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

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

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

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

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

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

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

3153392