不是吧阿sir,真香
- SERIALIZABLE(序列化) 這是花費最高代價但是最可靠的事務隔離級別,事務被處理為順序執行。除了防止髒讀、不可重複讀外,還避免了幻像讀。
Spring事務傳播屬性(Propagation):
-
REQUIRED(預設屬性) 如果存在一個事務,則支援當前事務。如果沒有事務則開啟一個新的事務。 被設定成這個級別時,會為每一個被呼叫的方法建立一個邏輯事務域。如果前面的方法已經建立了事務,那麼後面的方法支援當前的事務,如果當前沒有事務會重新建立事務。
-
MANDATORY 支援當前事務,如果當前沒有事務,就丟擲異常。
-
NEVER 以非事務方式執行,如果當前存在事務,則丟擲異常。
-
NOT_SUPPORTED 以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
-
REQUIRES_NEW 新建事務,如果當前存在事務,把當前事務掛起。
-
SUPPORTS 支援當前事務,如果當前沒有事務,就以非事務方式執行。
-
NESTED 支援當前事務,新增Savepoint點,與當前事務同步提交或回滾。 巢狀事務一個非常重要的概念就是內層事務依賴於外層事務。外層事務失敗時,會回滾內層事務所做的動作。而內層事務操作失敗並不會引起外層事務的回滾。
6、Spring以及Spring MVC常見註解
Spring部分:
? 宣告bean的註解
? @Component 通?的註解,可標註任意類為 Spring 元件
? @Service 在業務邏輯層使用(service層)
? @Repository 在資料訪問層使用(dao層)
? @Controller 在展現層使用,控制器的宣告(controller層)
? 注入bean的註解
? @Autowired:可以對類成員變數、方法、構造方法進行標註
? 預設按照型別注入,若要按照名稱注入,需要搭配**@Qualifier**註解一起使用
? @Resource:預設按照名稱來裝配注入
Spring MVC部分:
? @Controller 宣告該類為SpringMVC中的Controller
? @RequestMapping 用於對映Web請求
? @ResponseBody 支援將返回值放在response內,而不是一個頁面,通常使用者返回json資料
? @RequestBody 允許request的引數在request體中,而不是在直接連線在地址後面。
? @PathVariable 用於接收路徑引數,比如@RequestMapping("/hello/{name}")申明的路徑,將註解放在引數中前,即可獲取該值,通常作為Restful的介面實現方法。
7、@autowired和@resource的區別?
@Autowired:可以對類成員變數、方法、構造方法進行標註
? 預設按照型別注入,若要按照名稱注入,需要搭配**@Qualifier**註解一起使用
@Resource:預設按照名稱來裝配注入
8、mybatis如何防止sql注入?$和#的區別是什麼?傳入表名用哪個?
防止sql注入:
? 在編寫mybatis的對映語句時,儘量採用“#{xxx}”這樣的格式
和$區別:
| # | $ |
| --- | --- |
| 相當於對資料加上雙引號 | 相當於直接顯示資料 |
| 很大程度上防止SQL注入 | 無法防止SQL注入 |
| #{xxx},使用的是PreparedStatement,會有型別轉換,比較安全 | ${xxx},使用字串拼接,容易SQL注入 |
? 簡單的說就是#{}是經過預編譯的,是安全的,${}是未經過預編譯的,僅僅是取變數的值,是非安全的,存在SQL注入。
要實現動態傳入表名、列名,需要做如下修改:
新增屬性statementType=“STATEMENT”,同時sql裡的屬有變數取值都改成${xxxx}
9、Spring MVC工作原理
客戶端(瀏覽器)傳送請求,直接請求到 DispatcherServlet 。
DispatcherServlet 根據請求資訊調? HandlerMapping ,解析請求對應的 Handler 。
解析到對應的 Handler (也就是 Controller 控制器)後,開始由HandlerAdapter 介面卡處理。
HandlerAdapter 會根據 Handler 來調?真正的處理器開處理請求,並處理相應的業務邏輯。
處理器處理完業務後,會返回?個 ModelAndView 物件, Model 是返回的資料物件
ViewResolver 會根據邏輯 View 查詢實際的 View 。
DispaterServlet 把返回的 Model 傳給 View (檢視渲染)。
把 View 返回給請求者(瀏覽器)
10、SpringBoot自動配置的原理是什麼?介紹SpringBootApplication註解.
啟動類:
@SpringBootApplication
public class JpaApplication {
public static void main(String[] args) {
SpringApplication.run(JpaApplication.class, args);
}
}
它主要載入了@SpringBootApplication註解主配置類,這個@SpringBootApplication註解主配置類裡邊最主要的功能就是SpringBoot開啟了一個@EnableAutoConfiguration註解的自動配置功能。
@EnableAutoConfiguration作用:
它主要利用了一個
EnableAutoConfigurationImportSelector選擇器給Spring容器中來匯入一些元件。
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration
@SpringBootApplication註解等同於下面三個註解:
@SpringBootConfiguration: 底層是Configuration註解,說白了就是支援JavaConfig的方式來進行配置
@EnableAutoConfiguration:開啟自動配置功能
@ComponentScan:就是掃描註解,預設是掃描當前類下的package
其中@EnableAutoConfiguration是關鍵(啟用自動配置),內部實際上就去載入META-INF/spring.factories檔案的資訊,然後篩選出以EnableAutoConfiguration為key的資料,載入到IOC容器中,實現自動配置功能!
11、Mybatis和Hibernate的區別
Hibernate 框架:
? Hibernate是一個開放原始碼的物件關係對映框架,它對JDBC進行了非常輕量級的物件封裝,建立物件與資料庫表的對映。是一個全自動的、完全面向物件的持久層框架。
Mybatis框架:
? Mybatis是一個開源物件關係對映框架,原名:ibatis,2010年由谷歌接管以後更名。是一個半自動化的持久層框架。
區別:
開發方面
? 在專案開發過程當中,就速度而言:
? hibernate開發中,sql語句已經被封裝,直接可以使用,加快系統開發;
? Mybatis 屬於半自動化,sql需要手工完成,稍微繁瑣;
? 但是,凡事都不是絕對的,如果對於龐大複雜的系統專案來說,複雜語句較多,hibernate 就不是好方案。
sql優化方面
? Hibernate 自動生成sql,有些語句較為繁瑣,會多消耗一些效能;
? Mybatis 手動編寫sql,可以避免不需要的查詢,提高系統性能;
物件管理比對
最後
光給面試題不給答案不是我的風格。這裡面的面試題也只是鳳毛麟角,還有答案的話會極大的增加文章的篇幅,減少文章的可讀性,因此僅以截圖展示,需要的小夥伴可以點選這裡即可免費獲取!