天天看點

沖擊大廠第六天:SpringMVC、Spring、Mybatis面試題

在這裡記錄一下我面試甲方和外包遇到的SSM相關的面試題。

SpringMVC面試題:

1、說一下MVC的執行流程(請求流程或者一個request要經過哪些類)?(高頻)

使用者發起請求到前端控制器(DispatchServlet);

前端控制器接到請求後會調用HandlerMapping處理映射器;

HandlerMapping根據url,查找該url對應方法的反射對象(具體的處理器),生成處理器執行鍊HandlerExecutionChain(包括處理器對象和處理器攔截器)一并傳回給DispatcherServlet;

DispatcherServlet根據處理器Handler擷取處理器擴充卡HandlerAdapter;

擴充卡執行handler,通過反射調用controller中的業務方法(處理一系列的操作,如:參數封裝,資料格式轉換,資料驗證等操作);

handler執行完成後傳回一個ModelandView對象給前端控制器;

前端控制器将modelanview傳給viewReslover視圖解析器;

視圖解析器解析後傳回具體的view;

前端控制器根據view進行視圖的渲染(将模型資料填充到視圖中);

DispatcherServlet響應使用者;

2、說一說SSM常用的注解?

3、說一說一個客戶請求,從前端到背景的整個流程(一個http請求的會經過哪些流程)?

Spring面試題點選此處。

Mybatis面試題:

1、Mybatis中#{},${}的差別?

#{}會被預編譯成占位符,可以防止SQL注入問題,不需要資料類型的手動轉換,一個參數時可以使用任意的參數名接收參數。

${}非預編譯,直接SQL拼接,不可以防止SQL注入,需要關注資料類型的轉換(如字元串類型’ ${id} '),一個參數時預設必須是value接收。

2、怎麼防止SQL注入?

代碼層防止SQL注入攻擊方式的最佳方案就是SQL預編譯(原始使用preparement,mybatis使用#{})。

确認每種資料的類型,比如是數字,資料庫則必須使用int類型來存儲。

規定資料長度,能在一定程度上防止SQL注入。

嚴格限制資料庫權限,能最大程度減少SQL注入的危害。

避免直接響應一些SQL異常資訊,SQL發生異常後,自定義異常進行響應。

過濾參數中含有的一些資料庫關鍵詞(前後端都可以進行,正規表達式。)

3、Mybatis的動态SQL,常用的動态标簽?

動态sql,常見标簽

choose(when,otherwise), trim(where,set),foreach,sql片段。

4、Mybatis的優缺點?

Mybatis的優缺點

5、說一下Mybatis的一級緩存和二級緩存?

一級緩存是SqlSession級别的緩存。在操作資料庫時需要構造sqlSession對象,在對象中有一個資料結構(HashMap)用于存儲緩存資料。不同的sqlSession之間的緩存資料區域(HashMap)是互相不影響的。

二級緩存是mapper級别的緩存,多個SqlSession去操作同一個Mapper的sql語句,多個SqlSession可以共用二級緩存,二級緩存是跨SqlSession的。

緩存的使用順序(二級緩存需要手動開啟,使用二級緩存可能引起髒讀問題,這個出現的原因是因為不同的Mapper查詢隔離分别使用不同的存儲空間,那麼當兩個Mapper操作同一張表時就出現髒讀的問題,解決方案使緩存區共享):

當mybatis執行一個查詢的時候,會先去二級緩存中查詢資料。有就直接傳回。

如果二級緩存中沒有資料,再到一級緩存中擷取,有就直接傳回。

如果二級,一級都沒有要查的資料,則發sql語句到資料庫查詢。

查到結果後會馬上放到一級緩存中。

當SqlSession關閉的時候,會把一級緩存中的資料同步到二級緩存中。

6、mybatis和mybatis-plus的差別?

Mybatis-Plus是一個Mybatis的增強工具,它在Mybatis的基礎上做了增強,卻不做改變。我們在使用Mybatis-Plus之後既可以使用Mybatis-Plus的特有功能,又能夠正常使用Mybatis的原生功能。Mybatis-Plus簡稱MP是為簡化開發、提高開發效率而生,但它也提供了一些很有意思的插件,比如SQL性能監控、樂觀鎖、執行分析等。

專注和簡單一直是我的秘訣之一。簡單可能比複雜更難做到:你必須努力思路理清,進而使其變得簡單。但最終這是值得的,因為一旦你做到了,便可以創造奇迹。