欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java經(jīng)典面試題匯總:Java Web

 更新時間:2021年07月21日 09:47:27   作者:讓程序飛  
本篇總結的是Java Web相關的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝

1. JSP 和 servlet 有什么區(qū)別?

JSP 是 servlet 技術的擴展,本質(zhì)上就是 servlet 的簡易方式。servlet 和 JSP 最主要的不同點在于, servlet 的應用邏輯是在 Java 文件中,并且完全從表示層中的 html 里分離開來,而 JSP 的情況是 Java 和 html 可以組合成一個擴展名為 JSP 的文件。JSP 側(cè)重于視圖,servlet 主要用于控制邏輯。

2. 什么是Tomcat?

Tomcat是一個免費的Web應用服務器,Java編寫的Web項目可以部署在上面,用戶在客戶端請求時,都是將請求發(fā)到Tomcat上,Tomcat在將請求發(fā)到對應的項目上。

3. Tomcat容器是如何創(chuàng)建Servlet類實例?用到了什么原理?

當容器啟動時,會讀取在webapps目錄下所有的web應用中的web.xml文件,然后對xml文件進行解析,并讀取servlet注冊信息。然后,將每個應用中注冊的servlet類都進行加載,并通過反射的方式實例化。(有時候也是在第一次請求時實例化)在servlet注冊時加上1如果為正數(shù),則在一開始就實例化,如果不寫或為負數(shù),則第一次請求實例化。

4. 攔截器和過濾器的區(qū)別?

  • 攔截器是基于java的反射機制的,而過濾器是基于函數(shù)回調(diào)。
  • 攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
  • 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
  • 攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
  • 在action的生命周期中,攔截器可以多次被調(diào)用,而過濾器只能在容器初始化時被調(diào)用一次。

5.說一下 JSP 的 4 種作用域?

  • page:代表與一個頁面相關的對象和屬性。
  • request:代表與客戶端發(fā)出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件;需要在頁面顯示的臨時數(shù)據(jù)可以置于此作用域。
  • session:代表與某個用戶與服務器建立的一次會話相關的對象和屬性。跟某個用戶相關的數(shù)據(jù)應該放在用戶自己的 session 中。
  • application:代表與整個 Web 應用程序相關的對象和屬性,它實質(zhì)上是跨越整個 Web 應用程序,包括多個頁面、請求和會話的一個全局作用域。

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

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

  • request:封裝客戶端的請求,其中包含來自 get 或 post 請求的參數(shù);
  • response:封裝服務器對客戶端的響應;
  • pageContext:通過該對象可以獲取其他對象;
  • session:封裝用戶會話的對象;
  • application:封裝服務器運行環(huán)境的對象;
  • out:輸出服務器響應的輸出流對象;
  • config:Web 應用的配置對象;
  • page:JSP 頁面本身(相當于 Java 程序中的 this);
  • exception:封裝頁面拋出異常的對象。

7. Servlet的生命周期

servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.servlet接口中的init、service、destroy方法表達。

(1)加載和實例化

當Servlet容器啟動或客戶端發(fā)送一個請求時,Servlet容器會查找內(nèi)存中是否存在該Servlet實例,若存在,則直接讀取該實例響應請求;如果不存在,就創(chuàng)建一個Servlet實例。

(2) 初始化

實例化后,Servlet容器將調(diào)用Servlet的init()方法進行初始化(一些準備工作或資源預加載工作)。

(3)服務

初始化后,Servlet處于能響應請求的就緒狀態(tài)。當接收到客戶端請求時,調(diào)用service()的方法處理客戶端請求,HttpServlet的service()方法會根據(jù)不同的請求 轉(zhuǎn)調(diào)不同的doXxx()方法。

(4)銷毀

當Servlet容器關閉時,Servlet實例也隨時銷毀。其間,Servlet容器會調(diào)用Servlet 的destroy()方法去判斷該Servlet是否應當被釋放(或回收資源)。

8. session 和 cookie 有什么區(qū)別?

  • 存儲位置不同:session 存儲在服務器端;cookie 存儲在瀏覽器端。
  • 安全性不同:cookie 安全性一般,在瀏覽器存儲,可以被偽造和修改。
  • 容量和個數(shù)限制:cookie 有容量限制,每個站點下的 cookie 也有個數(shù)限制。
  • 存儲的多樣性:session 可以存儲在 Redis 中、數(shù)據(jù)庫中、應用程序中;而 cookie 只能存儲在瀏覽器中。

9. 說一下 session 的工作原理?

session 的工作原理是客戶端登錄完成之后,服務器會創(chuàng)建對應的 session,session 創(chuàng)建完之后, 會把 session 的 id 發(fā)送給客戶端,客戶端再存儲到瀏覽器中。這樣客戶端每次訪問服務器時,都會帶著 sessionid, 服務器拿到 sessionid 之后,在內(nèi)存找到與之對應的 session 這樣就可以正常工作了。

10. 如果客戶端禁止 cookie 能實現(xiàn) session 還能用嗎?

可以用,session 只是依賴 cookie 存儲 sessionid,如果 cookie 被禁用了, 可以使用 url 中添加 sessionid 的方式保證 session 能正常使用。

11. JSP工作原理?

(1)當用戶訪問一個JSP頁面時,會向一個Servlet容器(Tomcat)發(fā)出請求;

(2)如果是第一次請求頁面,或頁面有所改動,則servlet容器首先要把JSP頁面(假設為test.jsp)轉(zhuǎn)化為Servlet代碼(test.java),再將其轉(zhuǎn)化為(test.class文件);因為這個過程(編譯)會耗費一定時間,所以第一次訪問或jsp文件有改動時,訪問時間有些長;

(3)JSP容器負責調(diào)用從JSP轉(zhuǎn)換來的servlet,這些servlet負責提供服務相應用戶請求(比如客戶端發(fā)送表單,要求servlet:formprocessor.java來處理,則容器會建立一個線程,調(diào)用formprocessor.java來處理該請求);如果用戶有多個請求,則容器會建立多個線程處理多個請求;

(4)容器執(zhí)行字節(jié)碼文件(包括調(diào)用的servlet:formprocessor.java字節(jié)嗎),并將其結果返回到客戶端;(返回的最終方式是由servlet輸出html格式的文件流)

12. JSP中動態(tài)include和靜態(tài)include的區(qū)別?

  • 靜態(tài)include:語法:<%@ include file="文件名" %>,相當于復制,編輯時將對應的文件包含進來,當內(nèi)容變化時,不會再一次對其編譯,不易維護。
  • 動態(tài)include:語法:<jsp:include page="文件名">,能夠自動檢查被包含文件,當客戶端對JSP文件進行請求時,會重新將對應的文件包含進來,進行實時的更新。

13、JSTL是什么?優(yōu)點有哪些?

答:JSTL(JSP Standard Tag Library,JSP標準標簽庫)是一個不斷完善的開放源代碼的JSP標簽庫,由四個定制標記庫(core、format、xml、sql)和一對通用標記庫驗證器(ScriptFreeTLV和PermittedTaglibsTLV)組成。

優(yōu)點有:

  • 在應用程序服務器之間提供了一致的接口,最大程度的提高了web應用在各應用服務器之間的移植。
  • 簡化了JSP和web應用程序的開發(fā)。
  • 以一種統(tǒng)一的方式減少了JSP中scriptlet代碼數(shù)據(jù),可以達到?jīng)]有任何scriptlet代碼的代碼。在我們公司的項目中是不允許任何scriptlet出現(xiàn)在JSP中。
  • 允許JSP設計工具與web應用程序開發(fā)的進一步集成。相信不久就會有支持JSTL的IDE開發(fā)工具出現(xiàn)。

14. GET和POST的區(qū)別?

POST和GET都是向服務器提交數(shù)據(jù),并且都會從服務器獲取數(shù)據(jù)。

1、傳送方式:get通過地址欄傳輸,post通過報文傳輸。

2、傳送長度:get參數(shù)有長度限制(受限于url長度),而post無限制

3、GET和POST還有一個重大區(qū)別,簡單的說:

GET產(chǎn)生一個TCP數(shù)據(jù)包;POST產(chǎn)生兩個TCP數(shù)據(jù)包

長的說:

對于GET方式的請求,瀏覽器會把http header和data一并發(fā)送出去,服務器響應200(返回數(shù)據(jù));

而對于POST,瀏覽器先發(fā)送header,服務器響應100 continue,瀏覽器再發(fā)送data,服務器響應200 ok(返回數(shù)據(jù))。

建議:

1、get方式的安全性較Post方式要差些,包含機密信息的話,建議用Post數(shù)據(jù)提交方式;

2、在做數(shù)據(jù)查詢時,建議用Get方式;而在做數(shù)據(jù)添加、修改或刪除時,建議用Post方式;

15. 什么是 XSS 攻擊,如何避免?

XSS 攻擊:即跨站腳本攻擊,它是 Web 程序中常見的漏洞。原理是攻擊者往 Web 頁面里插入惡意的腳本代碼(css 代碼、Javascript 代碼等),當用戶瀏覽該頁面時,嵌入其中的腳本代碼會被執(zhí)行,從而達到惡意攻擊用戶的目的,如盜取用戶 cookie、破壞頁面結構、重定向到其他網(wǎng)站等。 預防 XSS 的核心是必須對輸入的數(shù)據(jù)做過濾處理。

16. 什么是 CSRF 攻擊,如何避免?

CSRF:Cross-Site Request Forgery(中文:跨站請求偽造),可以理解為攻擊者盜用了你的身份,以你的名義發(fā)送惡意請求,比如:以你名義發(fā)送郵件、發(fā)消息、購買商品,虛擬貨幣轉(zhuǎn)賬等。 防御手段: 驗證請求來源地址; 關鍵操作添加驗證碼; 在請求地址添加 token 并驗證。

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!

相關文章

  • JVM類加載器之ClassLoader的使用詳解

    JVM類加載器之ClassLoader的使用詳解

    類加載器負責讀取Java字節(jié)代碼,并轉(zhuǎn)換成java.lang.Class類的一個實例的代碼模塊。本文主要和大家聊聊JVM類加載器ClassLoader的使用,需要的可以了解一下
    2022-10-10
  • Java如何替換第一個和最后一個字符串

    Java如何替換第一個和最后一個字符串

    這篇文章主要介紹了Java如何替換第一個和最后一個字符串的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot項目開發(fā)中常用的依賴

    SpringBoot項目開發(fā)中常用的依賴

    這篇文章主要介紹了SpringBoot項目開發(fā)中常用的依賴詳解,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Java的Flowable工作流之加簽轉(zhuǎn)簽詳解

    Java的Flowable工作流之加簽轉(zhuǎn)簽詳解

    這篇文章主要介紹了Java的Flowable工作流之加簽轉(zhuǎn)簽詳解,Flowable是一個開源的工作流引擎,它提供了一套強大的工具和功能,用于設計、執(zhí)行和管理各種類型的工作流程,需要的朋友可以參考下
    2023-11-11
  • SpringBoot自動裝配Import示例詳解

    SpringBoot自動裝配Import示例詳解

    SpringBoot中@Import注解的使用可以幫助開發(fā)者將指定的Bean或配置類導入到IOC容器中,該注解支持四種用法:導入Bean、導入配置類、實現(xiàn)ImportSelector接口和實現(xiàn),感興趣的朋友一起看看吧
    2024-09-09
  • Java多線程中斷機制三種方法及示例

    Java多線程中斷機制三種方法及示例

    這篇文章主要介紹了Java多線程中斷機制三種方法及示例,向大家分享了這三種方法的介紹幾代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • java?kafka如何動態(tài)設置用戶讀寫權限

    java?kafka如何動態(tài)設置用戶讀寫權限

    這篇文章主要介紹了java?kafka如何動態(tài)設置用戶讀寫權限問題,具有很好的參考家價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 基于redis setIfAbsent的使用說明

    基于redis setIfAbsent的使用說明

    這篇文章主要介紹了基于redis setIfAbsent的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • springboot創(chuàng)建文件夾失敗的解決

    springboot創(chuàng)建文件夾失敗的解決

    這篇文章主要介紹了springboot創(chuàng)建文件夾失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java使用反射給對象屬性賦值的兩種方法

    java使用反射給對象屬性賦值的兩種方法

    JAVA反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法,下面這篇文章主要給大家介紹了關于java使用反射給對象屬性賦值的兩種方法,需要的朋友可以參考下
    2023-04-04

最新評論