更新時間:2022-12-21 15:50:53 來源:動力節(jié)點(diǎn) 瀏覽2208次
最近小編看到不少同學(xué)都在找ssm的相關(guān)面試題,所以精心整理了這套常問到的問題出來,希望可以幫助到大家。
1、什么是有狀態(tài)登錄和無狀態(tài)登錄?
有狀態(tài)登錄:當(dāng)客戶端第一次請求服務(wù)器時(請求登錄),服務(wù)器創(chuàng)建 Session ,然后將登錄用戶身份信息保存到 Session 中,并將用戶身份信息作為 “門卡”,響應(yīng)回客戶端,客戶端將服務(wù)器響應(yīng)的 “門卡” 信息保存在本地 Cookie 中。
當(dāng)下一次客戶端再次請求服務(wù)器時,這時候就直接將客戶端的 Cookie 中存放的 “門卡” 帶到服務(wù)器端,服務(wù)器端從 Session 中拿出數(shù)據(jù)和 “門卡” 進(jìn)行對比,判斷是否可以同行。
無狀態(tài)登錄的缺點(diǎn):服務(wù)端保存大量用戶身份標(biāo)識,增加服務(wù)端壓力。
客戶端請求依賴服務(wù)端,多次請求必須訪問同一臺服務(wù)器(如果是集群,相當(dāng)于啟動了多個 Tomcat,這時候無法在多個 Tomcat 直接共享 Session 數(shù)據(jù))。
無狀態(tài)登錄:服務(wù)器不保存任何客戶端用戶的登錄信息!
客戶端的每次請求服務(wù)器必須自己具備身份信息標(biāo)識(jwt),服務(wù)器端通過身份信息標(biāo)識識別客戶端身份。
無狀態(tài)登錄的好處:客戶端請求不依賴服務(wù)端的信息,任何多次請求不需要必須訪問到同一臺服務(wù)器。
減小服務(wù)端存儲壓力。
如何實(shí)現(xiàn)無狀態(tài)登錄?
如圖所示:
當(dāng)客戶端第一次請求服務(wù)時,服務(wù)端對用戶進(jìn)行信息認(rèn)證(登錄)。認(rèn)證通過,將用戶身份信息(不包含密碼)進(jìn)行加密形成 token,返回給客戶端,作為登錄憑證。以后每次請求,客戶端都攜帶認(rèn)證的 token。服務(wù)的對 token 進(jìn)行解密,判斷是否有效。2、過濾器,攔截器,Aop區(qū)別?
過濾器和攔截器均體現(xiàn)了AOP的編程思想,都可以實(shí)現(xiàn)諸如日志記錄、登錄鑒權(quán)等功能,但二者的不同點(diǎn)也是比較多的。
1、實(shí)現(xiàn)原理不同
過濾器和攔截器 底層實(shí)現(xiàn)方式大不相同,過濾器是基于函數(shù)回調(diào)的,攔截器則是基于Java的反射機(jī)制(動態(tài)代理)實(shí)現(xiàn)的。
2、使用范圍不同
我們看到過濾器實(shí)現(xiàn)的是 javax.servlet.Filter 接口,而這個接口是在Servlet規(guī)范中定義的,也就是說過濾器Filter 的使用要依賴于Tomcat等容器,導(dǎo)致它只能在web程序中使用。
而攔截器(Interceptor) 它是一個Spring組件,并由Spring容器管理,并不依賴Tomcat等容器,是可以單獨(dú)使用的。不僅能應(yīng)用在web程序中,也可以用于Application、Swing等程序中。
3、觸發(fā)時機(jī)不同
過濾器Filter是在請求進(jìn)入容器后,但在進(jìn)入servlet之前進(jìn)行預(yù)處理,請求結(jié)束是在servlet處理完以后。
攔截器 Interceptor 是在請求進(jìn)入servlet后,在進(jìn)入Controller之前進(jìn)行預(yù)處理的,Controller 中渲染了對應(yīng)的視圖之后請求結(jié)束。
4、攔截的請求范圍不同
5、注入Bean情況不同
在實(shí)際的業(yè)務(wù)場景中,應(yīng)用到過濾器或攔截器,為處理業(yè)務(wù)邏輯難免會引入一些service服務(wù)。
6、控制執(zhí)行順序不同
實(shí)際開發(fā)過程中,會出現(xiàn)多個過濾器或攔截器同時存在的情況,不過,有時我們希望某個過濾器或攔截器能優(yōu)先執(zhí)行,就涉及到它們的執(zhí)行順序。
3、什么是SpringMvc,說一說它的幾個核心組成?
① 前端控制器(DispatcherServlet):主要用于接收客戶端發(fā)送的 HTTP 請求、響應(yīng)結(jié)果給客戶端。
② 處理器映射器(HandlerMapping):根據(jù)請求的 URL 來定位到對應(yīng)的處理器(Handler)。
③ 處理器適配器(HandlerAdapter):在編寫處理器(Handler)的時候要按照處理器適配器(HandlerAdapter) 要求的規(guī)則去編寫,通過適配器可以正確地去執(zhí)行 Handler。
④ 處理器(Handler):就是我們經(jīng)常寫的 Controller 層代碼,例如:UserController。
⑤ 視圖解析器(ViewResolver):進(jìn)行視圖的解析,將 ModelAndView 對象解析成真正的視圖(View)對象返回給前端控制器。
⑥ 視圖(View):View 是一個接口, 它的實(shí)現(xiàn)類支持不同的視圖類型(JSP,F(xiàn)reeMarker,Thymleaf 等)。
4、Springmvc執(zhí)行流程?
① 首先,用戶發(fā)送 HTTP 請求給 SpringMVC 前端控制器 DispatcherServlet。
② DispatcherServlet 收到請求后,調(diào)用HandlerMapping 處理器映射器,根據(jù)請求 URL 去定位到具體的處理器 Handler,并將該處理器對象返回給 DispatcherServlet 。
③ 接下來,DispatcherServlet 調(diào)用 HandlerAdapter 處理器適配器,通過處理器適配器調(diào)用對應(yīng)的 Handler 處理器處理請求,并向前端控制器返回一個 ModelAndView 對象。
④ 然后,DispatcherServlet 將 ModelAndView 對象交給 ViewResoler 視圖解析器去處理,并返回指定的視圖 View 給前端控制器。
⑤ DispatcherServlet 對 View 進(jìn)行渲染(即將模型數(shù)據(jù)填充至視圖中)。View 是一個接口, 它的實(shí)現(xiàn)類支持不同的視圖類型(JSP,F(xiàn)reeMarker,Thymleaf 等)。
⑥ DispatcherServlet 將頁面響應(yīng)給用戶。
以上就是“大廠常見ssm面試題大全帶答案”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動力節(jié)點(diǎn)Java官網(wǎng)。
以上就是“大廠常見ssm面試題大全帶答案”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743