(Java實習(xí)生)每日10道面試題打卡——JavaWeb篇
臨近秋招,備戰(zhàn)暑期實習(xí),祝大家每天進步億點點!==打卡 Day05==!
本篇總結(jié)的是javaweb相關(guān)的面試題,后續(xù)會每日更新~
劇透:明日更新 JVM 面試題,相關(guān)知識不牢固的先去補一補哦 O(∩_∩)O~

1、JSP 和 Servlet 有什么區(qū)別?
JSP 經(jīng)編譯后就變成了Servlet(JSP 的本質(zhì)就是 Servlet,JVM只能識別 Java 的類,不能識別 JSP 的代碼,Web 容器將JSP 的代碼編譯成 JVM 能夠識別的 Java 類)。
JSP 更擅長表現(xiàn)于頁面顯示,Servlet 更擅長于邏輯控制。
Servlet 中沒有內(nèi)置對象,JSP 中的內(nèi)置對象都是必須通過 HttpServletRequest 對象,HttpServletResponse 對象以及HttpServlet 對象得到。
JSP 是Servlet 的一種簡化,使用Jsp只需要完成程序員需要輸出到客戶端的內(nèi)容,JSP 中的 Java 腳本如何鑲嵌到一個類中,由 JSP 容器完成。而Servlet 則是個完整的 Java 類,這個類的 Service 方法用于生成對客戶端的響應(yīng)。
==注:JSP 現(xiàn)在公司用的少了,面試不作為重點,但是 Servlet 還是要了解一些東西的!==
2、說一下 jsp 的 4 種作用域?
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、請說一下 session 的工作原理?
Session 是一個存在服務(wù)器上的類似于一個散列表格式的文件。里面存有我們需要的信息,在我們需要用的時候可以從里面取出來。類似于一個大號的 map (服務(wù)器端的一個集合),里面的 鍵(key) 存儲的是用戶的 sessionid,用戶向服務(wù)器發(fā)送請求的時候會帶上這個sessionid,這時就可以從中取出對應(yīng)的值了。
4、session 和 cookie 有什么區(qū)別?
Cookie 和 Session 的區(qū)別?
Cookie 的概念:客戶端會話技術(shù),服務(wù)器端將數(shù)據(jù)保存到客戶端。
Session 的概念:服務(wù)器端會話技術(shù),在一次會話的多次請求間共享數(shù)據(jù),(客戶端)將數(shù)據(jù)保存在服務(wù)器端的對象中(HttpSession)。
存儲位置不同:Cookie 存儲在客戶端瀏覽器,Session 存儲在服務(wù)器端。
存儲容量不同:Cookie 存儲數(shù)據(jù)的容量很小(通常為 4KB 左右),對同一個域名下的總 Cookie 數(shù)量也有限制(20個),而 Session 的存儲容量較大。
安全性不同:Cookie 的安全性較低,而 Session 安全性較高。
Cookie 和 Session 的生命周期不同:
當瀏覽器關(guān)閉后,Cookie 數(shù)據(jù)被銷毀。
當服務(wù)器關(guān)閉時,Session 數(shù)據(jù)被銷毀?;蛘?Session 對象調(diào)用invalidate() 主動銷毀,也可以設(shè)置定時銷毀 Session對象。
Cookie 和 Session 的使用案例:
Cookie :
記住上一次訪問時間。
在不登錄的情況下,完成服務(wù)器對客戶端的身份識別。
存少量的不太敏感的數(shù)據(jù)。
Session:
存儲登錄驗證碼。
用戶登錄的信息。
5、如果客戶端禁止 cookie 能實現(xiàn) session 還能用嗎?
Cookie 與 Session,一般認為是兩個獨立的東西,Session 采用的是在服務(wù)器端保持狀態(tài)的方案,而 Cookie 采用的是在客戶端保持狀態(tài)的方案。但為什么禁用 Cookie 就不能得到Session呢?
因為 Session 是用Session ID 來確定當前對話所對應(yīng)的服務(wù)器 Session,而Session ID 是通過 Cookie 來傳遞的,禁用 Cookie 相當于失去了Session ID,也就得不到服務(wù)器端的 Session了。
6、forward 和 redirect 的區(qū)別?
forward 請求轉(zhuǎn)發(fā)是一次請求,redirect 重定向是兩次請求;
重定向的第二個請求一定是 GET 請求;
請求轉(zhuǎn)發(fā)的目標只能是本應(yīng)用中的資源,重定向的目標可以是其他應(yīng)用;
請求轉(zhuǎn)發(fā)后瀏覽器地址欄不會有變化,而重定向會有變化,因為重定向是兩個請求;
請求轉(zhuǎn)發(fā)對Servlet01和Servlet02的請求方法是相同的,即要么都是GET,要么都是POST,因為請求轉(zhuǎn)發(fā)是一個請求;
直接上圖更好對比區(qū)別:
7、什么是 XSS 攻擊,如何避免?
XSS 攻擊,即跨站腳本攻擊(Cross Site Scripting),它是 web 程序中常見的漏洞。
原理:
攻擊者往 web 頁面里插入惡意的 HTML 代碼(JavaScript、Css、Html 標簽等),當某個用戶瀏覽該頁面時,嵌入其中的 HTML 代碼會被執(zhí)行,從而達到惡意攻擊用戶的目的。如盜取用戶 cookie 執(zhí)行一系列操作,破壞頁面結(jié)構(gòu)、重定向到其他網(wǎng)站等。
案例:惡意的在某個網(wǎng)站的登錄頁面加 HTML 代碼(JavaScript、Css、Html 標簽等),當用戶輸入賬號密碼登錄后,這段惡意的 HTML 代碼會被執(zhí)行,從而獲取用戶的賬號密碼信息。
預(yù)防思路 :
web 頁面中可由用戶輸入的地方,對輸入的數(shù)據(jù)轉(zhuǎn)義、過濾處理。
后臺輸出頁面的時候,也需要對輸出內(nèi)容進行轉(zhuǎn)義、過濾處理(因為攻擊者可能通過其他方式把惡意腳本寫入數(shù)據(jù)庫)。
前端對 html 標簽屬性、css 屬性賦值的地方進行校驗。
參考文章:什么是 XSS 攻擊,如何避免?
8、什么是 CSRF 攻擊,如何避免?
CSRF:Cross Site Request Forgery(跨站點請求偽造)。
CSRF 攻擊者在用戶已經(jīng)登錄目標網(wǎng)站之后,誘使用戶訪問一個攻擊頁面,利用目標網(wǎng)站對用戶的信任,以用戶身份在攻擊頁面對目標網(wǎng)站發(fā)起偽造用戶操作的請求,達到攻擊目的。
案例:就好比用戶A,在自己電腦上通過自己的賬號密碼登錄了 B 網(wǎng)站(登錄用戶身份標識被 XX 網(wǎng)站信任),當 A 在瀏覽網(wǎng)頁時候,不經(jīng)意間打開了釣魚網(wǎng)站 X,這時候 X 就可借著 B 網(wǎng)站對用戶 A 的信任標識,以用戶 A 的身份去訪問 B 網(wǎng)站,并對其進行攻擊!
預(yù)防方法:
添加并驗證 token
添加自定義 http 請求頭
使用 post 請求
敏感操作添加驗證碼
參考文章:什么是 CSRF 攻擊,如何避免?
9、說下原生 jdbc 操作數(shù)據(jù)庫流程?
第一步: Class.forName()加載數(shù)據(jù)庫連接驅(qū)動;
第二步: DriverManager.getConnection()獲取數(shù)據(jù)連接對象;
第三步:根據(jù) SQL 獲取 sql 會話對象,有 2 種方式 Statement、 PreparedStatement ;
第四步:執(zhí)行 SQL 處理結(jié)果集,執(zhí)行 SQL 前如果有參數(shù)值就設(shè)置參數(shù)值 setXxx();
第五步:關(guān)閉結(jié)果集、關(guān)閉會話、關(guān)閉連接。
10、如何避免 sql 注入?
預(yù)編譯 SQL(使用 PreparedStatement),參數(shù)化查詢方式,避免 SQL 拼接。
校驗參數(shù)的數(shù)據(jù)格式是否合法(可以使用正則或特殊字符的判斷)。
對進入數(shù)據(jù)庫的特殊字符進行轉(zhuǎn)義處理,或編碼轉(zhuǎn)換。
總結(jié)的面試題也挺費時間的,文章會不定時更新,有時候一天多更新幾篇,如果幫助您復(fù)習(xí)鞏固了知識點,還請三連支持一下,后續(xù)會億點點的更新!
Java
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。