Spring 全家桶:Java之Sping MVC SpringBoot常見面試題總結,附答案

image.png

Spring 全家桶100問,常見面試題總結,一共分爲三篇,本篇爲第1篇!

一,Spring boot 有哪些方式能夠實現熱部署?前端

使用 devtools 啓動熱部署,添加 devtools 庫,在配置文件中把 spring. devtools. restart. enabled 設置爲 true; 使用 Intellij Idea 編輯器,勾上自動編譯或手動從新編譯。 109.jpa 和 hibernate 有什麼區別? jpa 全稱 Java Persistence API,是 Java 持久化接口規範,hibernate 屬於 jpa 的具體實現。java

二,Spring boot 核心配置文件是什麼?面試

  1. 配置文件有 . properties 格式和 . yml 格式,它們主要的區別是書法風格不一樣。
  2. properties 配置以下: spring. RabbitMQ. port=5672
  3. yml 配置以下: spring: RabbitMQ: port: 5672
  4. yml 格式不支持 @PropertySource 註解導入。

三,爲何要用 spring boot?ajax

  1. 配置簡單
  2. 獨立運行
  3. 自動裝配
  4. 無代碼生成和 xml 配置
  5. 提供應用監控
  6. 易上手
  7. 提高開發效率

四,什麼是 spring boot?正則表達式

spring boot 是爲 spring 服務的,是用來簡化新 spring 應用的初始搭建以及開發過程的。spring

五,@Autowired 的做用是什麼?數據庫

@Autowired 它能夠對類成員變量、方法及構造函數進行標註,完成自動裝配的工做,經過@Autowired 的使用來消除 set/get 方法。編程

六,@RequestMapping 的做用是什麼?後端

將 http 請求映射到相應的類/方法上。數組

七,Spring mvc 有哪些組件?

  1. 前置控制器 DispatcherServlet。
  2. 映射控制器 HandlerMapping。
  3. 處理器 Controller。
  4. 模型和視圖 ModelAndView。
  5. 視圖解析器 ViewResolver。

八,說一下 spring mvc 運行流程?

  1. spring mvc 先將請求發送給 DispatcherServlet。
  2. DispatcherServlet 查詢一個或多個 HandlerMapping,找處處理請求的 Controller。
  3. DispatcherServlet 再把請求提交到對應的 Controller。
  4. Controller 進行業務邏輯處理後,會返回一個ModelAndView。
  5. Dispathcher 查詢一個或多個 ViewResolver 視圖解析器,找到 ModelAndView 對象指定的視圖對象。
  6. 視圖對象負責渲染返回給客戶端。

九,說一下 spring 的事務隔離?

spring 有五大隔離級別,默認值爲 ISOLATION_DEFAULT(使用數據庫的設置),其餘四個隔離級別和數據庫的隔離級別一致:

ISOLATION_DEFAULT:用底層數據庫的設置隔離級別,數據庫設置的是什麼我就用什麼;

ISOLATIONREADUNCOMMITTED:未提交讀,最低隔離級別、事務未提交前,就可被其餘事務讀取(會出現幻讀、髒讀、不可重複讀);

ISOLATIONREADCOMMITTED:提交讀,一個事務提交後才能被其餘事務讀取到(會形成幻讀、不可重複讀),SQL server 的默認級別;

ISOLATIONREPEATABLEREAD:可重複讀,保證屢次讀取同一個數據時,其值都和事務開始時候的內容是一致,禁止讀取到別的事務未提交的數據(會形成幻讀),MySQL 的默認級別;ISOLATION_SERIALIZABLE:序列化,代價最高最可靠的隔離級別,該隔離級別能防止髒讀、不可重複讀、幻讀。

髒讀 :表示一個事務可以讀取另外一個事務中還未提交的數據。好比,某個事務嘗試插入記錄 A,此時該事務還未提交,而後另外一個事務嘗試讀取到了記錄 A。

不可重複讀 :是指在一個事務內,屢次讀同一數據。

幻讀 :指同一個事務內屢次查詢返回的結果集不同。好比同一個事務 A 第一次查詢時候有 n 條記錄,可是第二次同等條件下查詢卻有 n+1 條記錄,這就好像產生了幻覺。發生幻讀的緣由也是另一個事務新增或者刪除或者修改了第一個事務結果集裏面的數據,同一個記錄的數據內容被修改了,全部數據行的記錄就變多或者變少了。

十,spring 事務實現方式有哪些?

聲明式事務:聲明式事務也有兩種實現方式,基於 xml 配置文件的方式和註解方式(在類上添加 @Transaction 註解)。

編碼方式:提供編碼的形image.png

十一,spring 自動裝配 bean 有哪些方式?
no:默認值,表示沒有自動裝配,應使用顯式 bean 引用進行裝配。

byName:它根據 bean 的名稱注入對象依賴項。

byType:它根據類型注入對象依賴項。 構造函數:經過構造函數來注入依賴項,須要設置大量的參數。

autodetect:容器首先經過構造函數使用 autowire 裝配,若是不能,則經過 byType 自動裝配。

十二,spring 支持幾種 bean 的做用域?

spring 支持 5 種做用域,以下:

singleton:spring ioc 容器中只存在一個 bean 實例,bean 以單例模式存在,是系統默認值;

prototype:每次從容器調用 bean 時都會建立一個新的示例,既每次 getBean()至關於執行 new Bean()操做;

request:每次 http 請求都會建立一個 bean; session:同一個 http session 共享一個 bean 實例;

global-session:用於 portlet 容器,由於每一個 portlet 有單獨的 session,globalsession 提供一個全局性的 http session。

注意:使用 prototype 做用域須要慎重的思考,由於頻繁建立和銷燬 bean 會帶來很大的性能開銷。

十三,spring 中的 bean 是線程安全的嗎?

spring 中的 bean 默認是單例模式,spring 框架並無對單例 bean 進行多線程的封裝處理。 實際上大部分時候 spring bean 無狀態的(好比 dao 類),全部某種程度上來講 bean 也是安全的,但若是 bean 有狀態的話(好比 view model 對象),那就要開發者本身去保證線程安全了,最簡單的就是改變 bean 的做用域,把「singleton」變動爲「prototype」,這樣請求 bean 至關於 new Bean()了,因此就能夠保證線程安全了。

有狀態就是有數據存儲功能。

無狀態就是不會保存數據。

十四,spring 經常使用的注入方式有哪些?

  1. setter 屬性注入
  2. 構造方法注入
  3. 註解方式注入

十五,spring 有哪些主要模塊?
spring core:框架的最基礎部分,提供 ioc 和依賴注入特性。

spring context:構建於 core 封裝包基礎上的 context 封裝包,提供了一種框架式的對象訪問方法。

spring dao:Data Access Object 提供了JDBC的抽象層。

spring aop:提供了面向切面的編程實現,讓你能夠自定義攔截器、切點等。

spring Web:提供了針對 Web 開發的集成特性,例如文件上傳,利用 servlet listeners 進行 ioc 容器初始化和針對 Web 的 ApplicationContext。

spring Web mvc:spring 中的 mvc 封裝包提供了 Web 應用的 Model-View-Controller(MVC)的實現。

十六,解釋一下什麼是 aop?

aop 是面向切面編程,經過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。 簡單來講就是統一處理某一「切面」(類)的問題的編程思想,好比統一處理日誌、異常等。

十七,解釋一下什麼是 ioc?

ioc:Inversionof Control(中文:控制反轉)是 spring 的核心,對於 spring 框架來講,就是由 spring 來負責控制對象的生命週期和對象間的關係。 簡單來講,控制指的是當前對象對內部成員的控制權;控制反轉指的是,這種控制權不禁當前對象管理了,由其餘(類,第三方容器)來管理。

十八,爲何要使用 spring?

spring 提供 ioc 技術,容器會幫你管理依賴的對象,從而不須要本身建立和管理依賴對象了,更輕鬆的實現了程序的解耦。

spring 提供了事務支持,使得事務操做變的更加方便。

spring 提供了面向切片編程,這樣能夠更方便的處理某一類的問題。

更方便的框架集成,spring 能夠很方便的集成其餘框架,好比 MyBatis、hibernate 等。

十九,Java Web 如何避免 SQL 注入?

使用預處理 PreparedStatement。

使用正則表達式過濾掉字符中的特殊字符。

二十,spring mvc 和 struts 的區別是什麼?

攔截級別:struts2 是類級別的攔截;spring mvc 是方法級別的攔截。

數據獨立性:spring mvc 的方法之間基本上獨立的,獨享 request 和 response 數據,請求數據經過參數獲取,處理結果經過 ModelMap 交回給框架,方法之間不共享變量;而 struts2 雖然方法之間也是獨立的,但其全部 action 變量是共享的,這不會影響程序運行,卻給咱們編碼和讀程序時帶來了必定的麻煩。

攔截機制:struts2 有以本身的 interceptor 機制,spring mvc 用的是獨立的 aop 方式,這樣致使struts2 的配置文件量比 spring mvc 大。

對 ajax 的支持:spring mvc 集成了ajax,全部 ajax 使用很方便,只須要一個註解 @ResponseBody 就能夠實現了;而 struts2 通常須要安裝插件或者本身寫代碼才行。

image.png
二十一,說一下 JSP 的 4 種做用域?

page:表明與一個頁面相關的對象和屬性。

request:表明與客戶端發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件;須要在頁面顯示的臨時數據能夠置於此做用域。

session:表明與某個用戶與服務器創建的一次會話相關的對象和屬性。跟某個用戶相關的數據應該放在用戶本身的 session 中。

application:表明與整個 Web 應用程序相關的對象和屬性,它實質上是跨越整個 Web 應用程序,包括多個頁面、請求和會話的一個全局做用域。

二十二,JSP 有哪些內置對象?做用分別是什麼?
JSP 有 9 大內置對象:

request:封裝客戶端的請求,其中包含來自 get 或 post 請求的參數;

response:封裝服務器對客戶端的響應;

pageContext:經過該對象能夠獲取其餘對象;

session:封裝用戶會話的對象;

application:封裝服務器運行環境的對象;

out:輸出服務器響應的輸出流對象;

config:Web 應用的配置對象;

page:JSP 頁面自己(至關於 Java 程序中的 this);

exception:封裝頁面拋出異常的對象。

二十三,說一下 session 的工做原理?

session 的工做原理是客戶端登陸完成以後,服務器會建立對應的 session,session 建立完以後,會把 session 的 id 發送給客戶端,客戶端再存儲到瀏覽器中。這樣客戶端每次訪問服務器時,都會帶着 sessionid,服務器拿到 sessionid 以後,在內存找到與之對應的 session 這樣就能夠正常工做了。

二十四,若是客戶端禁止 cookie 能實現 session 還能用嗎?
能夠用,session 只是依賴 cookie 存儲 sessionid,若是 cookie 被禁用了,可使用 url 中添加 sessionid 的方式保證 session 能正常使用。

二十五,什麼是 JavaConfig?

Spring JavaConfig 是 Spring 社區的產品,它提供了配置 Spring IoC 容器的純Java 方法。所以它有助於避免使用 XML 配置。使用 JavaConfig 的優勢在於:

(1)面向對象的配置。因爲配置被定義爲 JavaConfig 中的類,所以用戶能夠充分利用 Java 中的面向對象功能。一個配置類能夠繼承另外一個,重寫它的@Bean 方法等。

(2)減小或消除 XML 配置。基於依賴注入原則的外化配置的好處已被證實。可是,許多開發人員不但願在 XML 和 Java 之間來回切換。JavaConfig 爲開發人員提供了一種純 Java 方法來配置與 XML 配置概念類似的 Spring 容器。從技術角度來說,只使用 JavaConfig 配置類來配置容器是可行的,但實際上不少人認爲將JavaConfig 與 XML 混合匹配是理想的。

(3)類型安全和重構友好。JavaConfig 提供了一種類型安全的方法來配置 Spring容器。因爲 Java 5.0 對泛型的支持,如今能夠按類型而不是按名稱檢索 bean,不須要任何強制轉換或基於字符串的查找。

二十六,Spring Boot 自動配置原理是什麼?

註解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自動配置的核心,

@EnableAutoConfiguration 給容器導入META-INF/spring.factories 裏定義的自動配置類。

篩選有效的自動配置類。

每個自動配置類結合對應的 xxxProperties.java 讀取配置文件進行自動配置功能

你如何理解 Spring Boot 配置加載順序? 在 Spring Boot 裏面,可使用如下幾種方式來加載配置。

1)properties文件;

2)YAML文件;

3)系統環境變量;

4)命令行參數;

等等……

二十七,什麼是 YAML?
YAML 是一種人類可讀的數據序列化語言。它一般用於配置文件。與屬性文件相比,若是咱們想要在配置文件中添加複雜的屬性,YAML 文件就更加結構化,並且更少混淆。能夠看出 YAML 具備分層配置數據。

二十八,YAML 配置的優點在哪裏 ?
YAML 如今能夠算是很是流行的一種配置文件格式了,不管是前端仍是後端,均可以見到 YAML 配置。那麼 YAML 配置和傳統的 properties 配置相比到底有哪些優點呢?

配置有序,在一些特殊的場景下,配置有序很關鍵 支持數組,數組中的元素能夠是基本數據類型也能夠是對象 簡潔 相比 properties 配置文件,YAML 還有一個缺點,就是不支持 @PropertySource 註解導入自定義的 YAML 配置。

二十九,什麼是 Spring Boot?

Spring Boot 是 Spring 開源組織下的子項目,是 Spring 組件一站式解決方案,主要是簡化了使用 Spring 的難度,簡省了繁重的配置,提供了各類啓動器,開發者能快速上手。

多年來,隨着新功能的增長,spring變得愈來愈複雜。只需訪問 https://spring.io/projects 頁面,咱們就會看到能夠在咱們的應用程序中使用的全部Spring項目的不一樣功能。

若是必須啓動一個新的Spring項目,咱們必須添加構建路徑或添加Maven依賴關係,配置應用程序服務器,添加spring配置。

所以,開始一個新的spring項目須要不少努力,由於咱們如今必須從頭開始作全部事情。

Spring Boot是解決這個問題的方法。Spring Boot已經創建在現有spring框架之上。使用spring啓動,咱們避免了以前咱們必須作的全部樣板代碼和配置。

所以,Spring Boot能夠幫助咱們以最少的工做量,更加健壯地使用現有的Spring功能。

好了,第一篇完結!

                  (求關注,別白嫖我)三連支持一下 謝謝!

image.png

相關文章
相關標籤/搜索