1. 程式人生 > 其它 >不是吧阿sir,真香

不是吧阿sir,真香

不是吧阿sir,真香
  1. SERIALIZABLE(序列化) 這是花費最高代價但是最可靠的事務隔離級別,事務被處理為順序執行。除了防止髒讀、不可重複讀外,還避免了幻像讀。

Spring事務傳播屬性(Propagation):

  1. REQUIRED(預設屬性) 如果存在一個事務,則支援當前事務。如果沒有事務則開啟一個新的事務。 被設定成這個級別時,會為每一個被呼叫的方法建立一個邏輯事務域。如果前面的方法已經建立了事務,那麼後面的方法支援當前的事務,如果當前沒有事務會重新建立事務。

  2. MANDATORY 支援當前事務,如果當前沒有事務,就丟擲異常。

  3. NEVER 以非事務方式執行,如果當前存在事務,則丟擲異常。

  4. NOT_SUPPORTED 以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。

  5. REQUIRES_NEW 新建事務,如果當前存在事務,把當前事務掛起。

  6. SUPPORTS 支援當前事務,如果當前沒有事務,就以非事務方式執行。

  7. 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,可以避免不需要的查詢,提高系統性能;

物件管理比對

最後

光給面試題不給答案不是我的風格。這裡面的面試題也只是鳳毛麟角,還有答案的話會極大的增加文章的篇幅,減少文章的可讀性,因此僅以截圖展示,需要的小夥伴可以點選這裡即可免費獲取!

Java面試寶典2021版

最常見Java面試題解析(2021最新版)

2021企業Java面試題精選