面試經驗!Java經典面試題詳解

一年一度畢業季,為啥還不學IT?好啦~~ IT本來就很熱了,也不用浙江優就業

再添一把火了。言歸正傳今天小U老師為大家帶來的是Java乾貨喲,一起來看看吧。

面試經驗!Java經典面試題詳解

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

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

- page代表與一個頁面相關的對象和屬性。

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

- session代表與某個用戶與服務器建立的一次會話相關的對象和屬性。跟某個用戶相關的數據應該放在用戶自己的session中。

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

2、JSP和Servlet是什麼關係?

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

面試經驗!Java經典面試題詳解

3、如何實現JSP或Servlet的單線程模式?

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

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

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

4、實現會話跟蹤的技術有哪些?

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

①URL 重寫:在URL中添加用戶會話的信息作為請求的參數,或者將唯一的會話ID添加到URL結尾以標識一個會話。

②設置表單隱藏域:將和會話跟蹤相關的字段添加到隱式表單域中,這些信息不會在瀏覽器中顯示但是提交表單時會提交給服務器。

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

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

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

補充:HTML5中可以使用Web Storage技術通過Java來保存數據,例如可以使用localStorage和sessionStorage來保存用戶會話的信息,也能夠實現會話跟蹤。


分享到:


相關文章: