1. 程式人生 > >Java面試每日十題(十)

Java面試每日十題(十)

91、用Java寫一個折半查詢。

答:折半查詢,也稱二分查詢、二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列已經為空,則表示找不到指定的元素。這種搜尋演算法每一次比較都使搜尋範圍縮小一半,其時間複雜度是O(logN)。

92、闡述Servlet和CGI的區別?

答:Servlet與CGI的區別在於Servlet處於伺服器程序中,它通過多執行緒方式執行其service()方法,一個例項可以服務於多個請求,並且其例項一般不會銷燬,而CGI對每個請求都產生新的程序,服務完成後就銷燬,所以效率上低於Servlet。

93、Servlet介面中有哪些方法?

答:Servlet介面定義了5個方法,其中前三個方法與Servlet生命週期相關:  - 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的初始化;請求到達時呼叫Servlet的service()方法,service()方法會根據需要呼叫與請求對應的doGet或doPost等方法;當伺服器關閉或專案被解除安裝時伺服器會將Servlet例項銷燬,此時會呼叫Servlet的destroy()方法。

94、轉發(forward)和重定向(redirect)的區別?

答:1、 請求轉發request封裝的物件是可以取到的,而重定向是取不到request封裝的屬性。

2、 url地址:請求轉發是伺服器請求資源,伺服器把請求url的響應內容讀取過來,url不變。重定向是服務端根據url,(響應資料、跳轉頁面),url改變。

3、 請求轉發的path只能是當前專案中的path,而重定向location可以是專案外的地址。

4、 請求轉發到servlet中,和先前的請求方式有關,dopost到servlet中,servlet中的dopost執行,doget請求到servlet中,servlet中的doget執行。重定向到servlet中,都是doget執行。

5、forward更高效。

95、JSP有哪些內建物件?作用分別是什麼?

答:JSP共有以下9種基本內建元件

1、request物件 客戶端請求,此請求會包含來自GET/POST請求的引數通過它才能瞭解到客戶的需求,然後做出響應。

2、response物件 響應客戶請求的有關資訊

3、session物件 它指的是客戶端與伺服器的一次會話,從客戶端連到伺服器的一個 WebApplication開始,直到客戶端與服務       器斷開連線為止。

4、out物件   它是JspWriter類的例項,是向客戶端輸出內容常用的物件

5、page物件   它是指向當前JSP頁面本身,有點象類中的this指標,它是 java.lang.Object類的例項

6、application物件 它實現了使用者間資料的共享,可存放全域性變數。它開始於伺服器的啟動,直到伺服器的關閉

7、exception物件 它是一個例外物件,當一個頁面在執行過程中發生了例外,就產生這個物件。

8、pageContext物件 它提供了對JSP頁面內所有的物件及名字空間的訪問

9、config物件 它是在一個Servlet初始化時,JSP引擎向它傳遞資訊用的

96、get和post請求的區別?

答:1.get和post都是http協議中的一種請求方式,不同的請求方式有不同的特點,工作模式也不一樣。

2.get請求沒有請求正文部分,而post有,所以get方式不能使用正文提交資料,但是可以使用queryString的方式來提交,注意:queryString是url的一部分,和請求方式無關,所以不論是什麼請求方式都是可以有queryString的,需要再次注意的是,queryString的長度(url的長度)是有限制的,所以如果請求方式是get,那麼通過queryString提交的資料的話,注意長度不要超出url的長度限制範圍,(範圍:2000多個,不同瀏覽器的url長度限制不一樣,標準瀏覽器一般要再多點)

3.使用queryString方式傳輸資料的時候需要對傳輸的資料進行轉碼(url編碼)-encodeURI()

4.使用http的正文傳送(post),那麼是通過send方法把資料新增到正文中,同時還需要設定傳送頭資訊,設定content-type的型別,這個型別必須和後端的解析型別保持一致,當數頭資訊設定成application/x-www-form-urlencoded的時候,不需要手動進行編碼

5.get方式會快取頁面,需要通過隨機數或時間戳解決快取問題,而post不會快取所以沒有該問題

6.因為get方式會快取,同時快取檔名中有提交的資料,所以get方式傳遞資料有一定隱私安全上的隱患,所以敏感資料通過post提交.

97、常用的Web伺服器有哪些?

答:Web伺服器,也稱為WWW(WORLD WIDE WEB)伺服器,HTTP伺服器,主要功能是提供網上資訊瀏覽的服務。  Unix和Linux下,常用的Web伺服器有Apache、Nginx、Lighttpd、Tomcat、IBM WebSphere等,應用最廣泛的是Apache。Windows下最常用的是微軟公司的IIS(Internet Information Server)。

98、JSP和Servlet是什麼關係?

答:1.JSP是Servlet技術的擴充套件,本質上是Servlet的簡易方式,更強調應用的外表表達。 2.JSP編譯後是"類servlet"。 3.Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java檔案中,並且完全從表示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個副檔名為.jsp的檔案。JSP側重於檢視,Servlet主要用於控制邏輯。

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

答:JSP中的四種作用域包括page、request、session和application,具體來說:- page代表與一個頁面相關的物件和屬性。- request代表與Web客戶機發出的一個請求相關的物件和屬性。一個請求可能跨越多個頁面,涉及多個Web元件;需要在頁面顯示的臨時資料可以置於此作用域。 - session代表與某個使用者與伺服器建立的一次會話相關的物件和屬性。跟某個使用者相關的資料應該放在使用者自己的session中。 - application代表與整個Web應用程式相關的物件和屬性,它實質上是跨越整個Web應用程式,包括多個頁面、請求和會話的一個全域性作用域。

100、如何實現JSP或Servlet的單執行緒模式?

答:對於JSP頁面,可以通過page指令進行設定。

<%@page isThreadSafe=”false”%>

對於Servlet,可以讓自定義的Servlet實現SingleThreadModel標識介面。

說明:如果將JSP或Servlet設定成單執行緒工作模式,會導致每個請求建立一個Servlet例項,這種實踐將導致嚴重的效能問題(伺服器的記憶體壓力很大,還會導致頻繁的垃圾回收),所以通常情況下並不會這麼做。