這30個Spring Boot知識點,你很有必要學一下


前言


Spring Boot 是一套快速開發框架,隨着微服務架構應用不斷普及,Spring Boot的研發技術的掌握已經成爲研發人員必會技能。 與此同時,Spring Boot 開源生態建設能力非常強大,提供了很多應用組件,讓Spring Boot 有豐富的三方開源軟件的使用。


基於上面的情況,Spring Boot 基本上成爲了大中型互聯網公司面試的必考題。

本文根據公司的一些面試題庫的梳理,將核心的知識提供分享給大家。

本文主要包含知識點 30 道,基本可以覆蓋常見的 Spring Boot 面試題目。

希望對大家接下來的面試有全面的幫助。

今天我們就不客套了,直接開始!


30個知識點


1、什麼是 Spring Boot?

2、Spring Boot 有哪些優點?

3、SpringBoot啓動方式

4、SpringBoot中用那些註解

5、SpringBoot熱部署使用什麼?

6、熱部署原理與熱加載區別是什麼?

7、SpringBoot如何實現打包

8、SpringBoot性能如何優化

9、SpringBoot2.0新特性

10、SpringBoot執行流程

11、如何使用 Spring Boot 實現分頁和排序?

12、什麼是 Swagger? 你用 Spring Boot 實現了它嗎?

13、什麼是 Spring Profiles?

14、什麼是 Spring Batch?

15、什麼是 FreeMarker 模板?

16、如何使用 Spring Boot 實現異常處理?

17、你使用了哪些 starter maven 依賴項?

18、什麼是 CSRF 攻擊?

19、什麼是 WebSockets?

20、什麼是 AOP?

21、什麼是 Apache Kafka?

22、我們如何監視所有 Spring Boot 微服務?

23、Spring Boot、Spring MVC 和 Spring 有什麼區別?

24、什麼是自動配置?

25、什麼是 Spring Boot Stater ?

26、你能否舉一個例子來解釋更多 Staters 的內容?

27、創建一個 Spring Boot Project 的最簡單的方法是什麼?

28、配置文件的需求是什麼?

29、你能否舉一個以 ReadOnly 爲事務管理的例子?

30、發佈 Spring Boot 用戶應用程序自定義配置的最好方法是什麼?


1、什麼是 Spring Boot?

多年來,隨着新功能的增加,spring 變得越來越複雜。 只需訪問 https://spring.io/projects 頁面,我們就會看到可以在我們的應用程序中使用的所有 Spring 項目的不同功能。


如果必須啓動一個新的 Spring 項目,我們必須添加構建路徑或添加 Maven 依賴關係,配置應用程序服務器,添加 spring 配置。 因此,開始一個新的 spring 項目需要很多努力,因爲我們現在必須從頭開始做所有事情。


Spring Boot 是解決這個問題的方法。 Spring Boot 已經建立在現有 spring 框架之上。 使用spring 啓動,我們避免了之前我們必須做的所有樣板代碼和配置。 因此,Spring Boot 可以幫助我們以最少的工作量,更加健壯地使用現有的 Spring 功能。


2、Spring Boot 有哪些優點?


Spring Boot 的優點有:


減少開發,測試時間和努力。

使用 JavaConfig 有助於避免使用 XML。

避免大量的 Maven 導入和各種版本衝突。

提供意見發展方法。  

通過提供默認值快速開始開發。

沒有單獨的 Web 服務器需要。 這意味着你不再需要啓動 Tomcat,Glassfish 或其他任何東西。 需要更少的配置 因爲沒有 web.xml 文件。 只需添加用@ Configuration 註釋的類,然後添加用@Bean 註釋的方法,Spring 將自動加載對象並像以前一樣對其進行管理。


你甚至可以將@Autowired 添加到 bean 方法中,以使 Spring 自動裝入需要的依賴關係中。 基於環境的配置 使用這些屬性,您可以將您正在使用的環境傳遞到應用程序: - Dspring.profiles.active = {enviornment}。 在加載主應用程序屬性文件後,Spring 將在 (application{environment} .properties)中加載後續的應用程序屬性文件。


3、SpringBoot啓動方式


IDE 運行Application這個類的main方法
在springboot的應用的根目錄下運行mvn spring-boot:run
使用mvn install 生成jar後運行



4、SpringBoot中用那些註解


@SpringBootApplication
@Component:
@RestController


5、SpringBoot熱部署使用什麼?


Spring Loaded
spring-boot-devtools



6、熱部署原理與熱加載區別是什麼?


部署方式


熱部署在服務器運行時重新部署項目
熱加載在運行時重新加載class


實現原理


熱部署直接重新加載整個應用
熱加載在運行時重新加載class


使用場景


熱部署更多的是在生產環境使用
熱加載則更多的實在開發環境使用


7、SpringBoot如何實現打包?


pom文件中主要針對不同的環境設置對應的profile,其中默認激活的是dev環境的配置


然後配置需要包含和過濾的application.properties


然後使用maven的打包命令實現不同環境打包即可


8、SpringBoot性能如何優化


tomcat內存調優 ,更改文件(catalina.sh),啓動部分的優化可以移除 @SpringBootApplication 和 @ComponentScan 兩個註解來禁用組件自動掃描,然後在我們需要的 bean 上進行顯式配置


9、SpringBoot2.0新特性



Spring Boot 2是完全基於java8,http請求方面, 引入了Webflux, 他是基於Spring Webflux, 它是一個新的非堵塞函數式 Reactive Web 框架,

可以用來建立異步的,非阻塞,事件驅動的服務,並且擴展性非常好。

性能對比於之前的同步方式有了一定的提高


db方面,默認引入了HikariCP


替代了之前的tomcat-pool作爲底層的數據庫連接池, 對比於tomcat-pool,HikariCP擁有更好的性能,總而言之就是提高了db的訪問速度。


redis方面


默認引入了Lettuce, 替代了之前的jedis作爲底層的redis鏈接方式, 

同樣Lettuce底層基於netty框架,使用異步的方式,訪問redis,並且如果結合之前的Webflux, 可以達成請求的全異步, 同樣對比於之前的jedis,統一了redis和redis-cluster的訪問方式,簡化了開發人員的使用方式,同時也提高了redis的訪問速度


es方面


默認也從之前的支持es2升級到了es5+, es5也出來了一段時間, 大部分的人應該也是通過自己實現來完成es5的對接, 現在springboot2也是進行了es5的支持。


metrics方面


Spring Boot 2引入了Micrometer,來統一metrics的規範,

使得開發人員更好的理解和使用metrics的模塊,而不需要關心對接的具體存儲是什麼東西。



10、SpringBoot執行流程



1)開始請求


2)收集各種條件和回調接口


3)通知started()


4)創建並準備Environment


5)通告environmentPrepared()


6) 創建並初始化ApplicationContext


7) 通告contextPrepare(),通告contextLoaded()


8) 調用ApplicationContext的refresh()方法,完成最終程序啓動


9)執行ApplicationRunner和CommandlineRunner通告finished()


10)結束



11、如何使用 Spring Boot 實現分頁和排序?


使用 Spring Boot 實現分頁非常簡單。 使用 Spring Data-JPA 可以實現將可分頁的

org.springframework.data.domain.Pageable 傳遞給存儲庫方法。


12、什麼是 Swagger? 你用 Spring Boot 實現了它嗎?


Swagger 廣泛用於可視化 API,使用 Swagger UI 爲前端開發人員提供在線沙箱。 Swagger 是用於生成 RESTful Web 服務的可視化表示的工具,規範和完整框架實現。 它使文檔能夠以與服務器相同的速度更新。


當通過 Swagger 正確定義時,消費者可以使用最少量的實現邏輯來理解遠程服務並與其進行交互。 因此,Swagger 消除了調用服務時的猜測。


13、什麼是 Spring Profiles?


Spring Profiles 允許用戶根據配置文件(dev,test,prod 等)來註冊bean。 因此,當應用程序在開發中運行時,只有某些 bean 可以加載,而在 PRODUCTION 中,某些其他 bean 可以加載。


假設我們的要求是 Swagger 文檔僅適用於 QA環境,並且禁用所有其他文檔。 這可以使用配置文件來完成。 Spring Boot 使得使用配置文件非常簡單。


14、什麼是 Spring Batch?


Spring Boot Batch 提供可重用的函數,這些函數在處理大量記錄時非常重要,包括日誌/跟蹤,事務管理,作業處理統計信息,作業重新啓動,跳過和資源管理。 它還提供了更先進的技術服務和功能,通過優化和分區技術,可以實現極高批量和高性能批處理作業。 簡單以及複雜的大批量批處理作業可以高度可擴展的方式利用框架處理重要大量的信息。

15、什麼是 FreeMarker 模板?


FreeMarker 是一個基於 Java 的模板引擎,最初專注於使用 MVC 軟件架構進行動態網頁生成。 使用 Freemarker 的主要優點是表示層和業務層的完全分離。 程序員可以處理應用程序代碼,而設計人員可以處理 html 頁面設計。 最後使用 freemarker 可以將這些結合起來,給出最終的輸出頁面。


16、如何使用 Spring Boot 實現異常處理?


Spring 提供了一種使用 ControllerAdvice 處理異常的非常有用的方法。 我們通過實現一個ControlerAdvice 類,來處理控制器類拋出的所有異常。


17、你使用了哪些 starter maven 依賴項?


使用了下面的一些依賴項

spring-boot-starter-activemq


spring-boot-starter-security


spring-boot-starter-web


這有助於增加更少的依賴關係,並減少版本的衝突。


18、什麼是 CSRF 攻擊?


CSRF 代表跨站請求僞造。 這是一種攻擊,迫使最終用戶在當前通過身份驗證的 Web 應用程序上執行不需要的操作。 CSRF 攻擊專門針對狀態改變請求,而不是數據竊取,因爲攻擊者無法查看對僞造請求的響應。


19、什麼是 WebSockets?


WebSocket 是一種計算機通信協議,通過單個 TCP 連接提供全雙工通信信道。

  • WebSocket 是雙向的 -使用 WebSocket 客戶端或服務器可以發起消息發送。

  • WebSocket 是全雙工的 -客戶端和服務器通信是相互獨立的。


  • 單個 TCP 連接 -初始連接使用 HTTP,然後將此連接升級到基於套接字的連接。 然後這個單一連接用於所有未來的通信

  • Light -與 http 相比,WebSocket 消息數據交換要輕得多。


20、什麼是 AOP?


在軟件開發過程中,跨越應用程序多個點的功能稱爲交叉問題。 這些交叉問題與應用程序的主要業務邏輯不同。 因此,將這些橫切關注與業務邏輯分開是面向方面編程(AOP)的地方。


21、什麼是 Apache Kafka?


Apache Kafka 是一個分佈式發佈 - 訂閱消息系統。


它是一個可擴展的,容錯的發佈 - 訂閱消息系統,它使我們能夠構建分佈式應用程序。 這是一個 Apache 頂級項目。 Kafka 適合離線和在線消息消費。


22、我們如何監視所有 Spring Boot 微服務?


SpringBoot提供監視器端點以監控各個微服務的度量。 這些端點對於獲取有關應用程序的信息(如它們是否已啓動)以及它們的組件( 如數據庫等)是否正常運行很有幫助。


但是,使用監視器的一一個主要缺點或困難是,我們必須單獨打開應用程序的知識點以瞭解其狀態或健康狀況。 想象- -下涉及50個應用程序的微服務,管理員將不得不擊中所有50個應用程序的執行終端。


23、Spring Boot、Spring MVC 和 Spring 有什麼區別?


1、Spring


Spring最重要的特徵是依賴注入。 所有 SpringModules 不是依賴注入就是 IOC 控制反轉。


當我們恰當的使用 DI 或者是 IOC 的時候,我們可以開發鬆耦合應用。 鬆耦合應用的單元測試可以很容易的進行。


2、Spring MVC


Spring MVC 提供了一種分離式的方法來開發 Web 應用。 通過運用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些簡單的概念,開發 Web 應用將會變的非常簡單。


3、SpringBoot


Spring 和 SpringMVC 的問題在於需要配置大量的參數。


Spring Boot 通過一個自動配置和啓動的項來目解決這個問題。 爲了更快的構建產品就緒應用程序,Spring Boot 提供了一些非功能性特徵。


24、什麼是自動配置?


Spring 和 SpringMVC 的問題在於需要配置大量的參數。


我們能否帶來更多的智能? 當一個 MVC JAR 添加到應用程序中的時候,我們能否自動配置一些 beans?


Spring 查看(CLASSPATH 上可用的框架)已存在的應用程序的配置。 在此基礎上,Spring Boot 提供了配置應用程序和框架所需要的基本配置。 這就是自動配置。


25、什麼是 Spring Boot Stater ?


啓動器是一套方便的依賴沒描述符,它可以放在自己的程序中。 你可以一站式的獲取你所需要的 Spring 和相關技術,而不需要依賴描述符的通過示例代碼搜索和複製黏貼的負載。

例如,如果你想使用 Sping 和 JPA 訪問數據庫,只需要你的項目包含 spring-boot-starter-data-jpa 依賴項,你就可以完美進行。


26、你能否舉一個例子來解釋更多 Staters 的內容?


讓我們來思考一個 Stater 的例子 -Spring Boot Stater Web。

如果你想開發一個 web 應用程序或者是公開 REST 服務的應用程序。 Spring Boot Start Web 是首選。 讓我們使用 Spring Initializr 創建一個 Spring Boot Start Web 的快速項目。

Spring Boot Start Web 的依賴項



下面的截圖是添加進我們應用程序的不同的依賴項



依賴項可以被分爲:

  • Spring - core,beans,context,aop

  • Web MVC - (Spring MVC)

  • Jackson - for JSON Binding

  • Validation - Hibernate,Validation API

  • Enbedded Servlet Container - Tomcat

  • Logging - logback,slf4j

任何經典的 Web 應用程序都會使用所有這些依賴項。 Spring Boot Starter Web 預先打包了這些依賴項。

作爲一個開發者,我不需要再擔心這些依賴項和它們的兼容版本。


27、創建一個 Spring Boot Project 的最簡單的方法是什麼?


Spring Initializr是啓動 Spring Boot Projects 的一個很好的工具。


就像上圖中所展示的一樣,我們需要做一下幾步:


  • 登錄 Spring Initializr,按照以下方式進行選擇:

  • 選擇 com.in28minutes.springboot 爲組

  • 選擇 studet-services 爲組件

  • 選擇下面的依賴項

  • Web

  • Actuator

  • DevTools

  • 點擊生 GenerateProject

  • 將項目導入 Eclipse。 文件 - 導入 - 現有的 Maven 項目


28、配置文件的需求是什麼?


企業應用程序的開發是複雜的,你需要混合的環境:

  • Dev

  • QA

  • Stage

  • Production 在每個環境中,你想要不同的應用程序配置。

配置文件有助於在不同的環境中進行不同的應用程序配置。

Spring 和 Spring Boot 提供了你可以制定的功能。

  • 不同配置文件中,不同環境的配置是什麼?

  • 爲一個制定的環境設置活動的配置文件。

Spring Boot 將會根據特定環境中設置的活動配置文件來選擇應用程序的配置。


29、你能否舉一個以 ReadOnly 爲事務管理的例子?


當你從數據庫讀取內容的時候,你想把事物中的用戶描述或者是其它描述設置爲只讀模式,以便於 Hebernate 不需要再次檢查實體的變化。 這是非常高效的。


30、發佈 Spring Boot 用戶應用程序自定義配置的最好方法是什麼?


@Value 的問題在於,您可以通過應用程序分配你配置值。 更好的操作是採取集中的方法。

你可以使用 @ConfigurationProperties 定義一個配置組件。



你可以在 application.properties 中配置參數。

basic.value: true basic.message: Dynamic Message basic.number: 100

好了各位, 本文到這裏就結束了!


如果本文有任何錯誤,請批評指教,不勝感激 !


最後

看到這裏了,你真的很牛,給你點個贊,你也給我點個讚唄。 嘿嘿

整理了 1000 道 2019 年多家公司 java 面試題 400 多頁 pdf 文檔,還有幾百頁的Java核心知識點PDF。

歡迎大家領取,點擊:789650498加入。驗證:CSDN,即可免費領取。

也求個關注,嘿嘿!

發佈了17 篇原創文章 · 獲贊 70 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章