1. 程式人生 > >15 道 Spring Boot 高頻面試題,看完直接當面霸【入門實用】

15 道 Spring Boot 高頻面試題,看完直接當面霸【入門實用】

前言
本文轉自鬆哥(網名:江南一點雨)的一篇實用入門文章,寫的挺好的,希望對各位有所幫助。

什麼是麵霸?就是在面試中,神擋殺神佛擋殺佛,見招拆招,面到面試官自慚形穢自嘆不如!鬆哥希望本文能成為你麵霸路上的墊腳石!

做 Java 開發,沒有人敢小覷 Spring Boot 的重要性,現在出去面試,無論多小的公司 or 專案,都要跟你扯一扯 Spring Boot,扯一扯微服務,不會?沒用過? Sorry ,我們不合適!

今天鬆哥就給大家整理了 15 道高頻 Spring Boot 面試題,希望能夠幫助到剛剛走出校門的小夥伴以及準備尋找新的工作機會的小夥伴。

    ##
  • 1.什麼是 Spring Boot ?

傳統的 SSM/SSH 框架組合配置繁瑣臃腫,不同專案有很多重複、模板化的配置,嚴重降低了 Java 工程師的開發效率,而 Spring Boot 可以輕鬆建立基於 Spring 的、可以獨立執行的、生產級的應用程式。通過對 Spring 家族和一些第三方庫提供一系列自動化配置的 Starter,來使得開發快速搭建一個基於 Spring 的應用程式。

Spring Boot 讓日益臃腫的 Java 程式碼又重回簡潔。在配合 Spring Cloud 使用時,還可以發揮更大的威力。

    ##
  • 2.Spring Boot 有哪些特點 ?

Spring Boot 主要有如下特點:

  1. 為 Spring 開發提供一個更快、更廣泛的入門體驗。
  2. 開箱即用,遠離繁瑣的配置。
  3. 提供了一系列大型專案通用的非業務性功能,例如:內嵌伺服器、安全管理、執行資料監控、執行狀況檢查和外部化配置等。
  4. 絕對沒有程式碼生成,也不需要XML配置。
    ##
  • 3.Spring Boot 中的 starter 到底是什麼 ?

首先,這個 Starter 並非什麼新的技術點,基本上還是基於 Spring 已有功能來實現的。首先它提供了一個自動化配置類,一般命名為 XXXAutoConfiguration ,在這個配置類中通過條件註解來決定一個配置是否生效(條件註解就是 Spring 中原本就有的),然後它還會提供一系列的預設配置,也允許開發者根據實際情況自定義相關配置,然後通過型別安全的屬性注入將這些配置屬性注入進來,新注入的屬性會代替掉預設屬性。正因為如此,很多第三方框架,我們只需要引入依賴就可以直接使用了。

當然,開發者也可以自定義 Starter,自定義 Starter 可以參考:徒手擼一個 Spring Boot 中的 Starter ,解密自動化配置黑魔法!。

    ##
  • 4.spring-boot-starter-parent 有什麼用 ?

我們都知道,新建立一個 Spring Boot 專案,預設都是有 parent 的,這個 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:

  1. 定義了 Java 編譯版本為 1.8 。
  2. 使用 UTF-8 格式編碼。
  3. 繼承自 spring-boot-dependencies,這個裡邊定義了依賴的版本,也正是因為繼承了這個依賴,所以我們在寫依賴時才不需要寫版本號。
  4. 執行打包操作的配置。
  5. 自動化的資源過濾。
  6. 自動化的外掛配置。
  7. 針對 application.properties 和 application.yml 的資源過濾,包括通過 profile 定義的不同環境的配置檔案,例如 application-dev.properties 和 application-dev.yml。

關於這個問題,讀者可以參考:你真的理解 Spring Boot 專案中的 parent 嗎?

    ##
  • 5.YAML 配置的優勢在哪裡 ?

YAML 現在可以算是非常流行的一種配置檔案格式了,無論是前端還是後端,都可以見到 YAML 配置。那麼 YAML 配置和傳統的 properties 配置相比到底有哪些優勢呢?

  1. 配置有序,在一些特殊的場景下,配置有序很關鍵
  2. 支援陣列,陣列中的元素可以是基本資料型別也可以是物件
  3. 簡潔

相比 properties 配置檔案,YAML 還有一個缺點,就是不支援 @PropertySource 註解匯入自定義的 YAML 配置。

關於 YAML 配置,要是大家還不熟悉,可以參考: Spring Boot 中的 yaml 配置簡介

    ##
  • 6.Spring Boot 中如何解決跨域問題 ?

跨域可以在前端通過 JSONP 來解決,但是 JSONP 只可以傳送 GET 請求,無法傳送其他型別的請求,在 RESTful 風格的應用中,就顯得非常雞肋,因此我們推薦在後端通過 (CORS,Cross-origin resource sharing) 來解決跨域問題。這種解決方案並非 Spring Boot 特有的,在傳統的 SSM 框架中,就可以通過 CORS 來解決跨域問題,只不過之前我們是在 XML 檔案中配置 CORS ,現在則是通過 @CrossOrigin 註解來解決跨域問題。關於 CORS ,小夥伴們可以參考:Spring Boot 中通過 CORS 解決跨域問題

    ##
  • 7.比較一下 Spring Security 和 Shiro 各自的優缺點 ?

由於 Spring Boot 官方提供了大量的非常方便的開箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 變得更加容易,甚至只需要新增一個依賴就可以保護所有的介面,所以,如果是 Spring Boot 專案,一般選擇 Spring Security 。當然這只是一個建議的組合,單純從技術上來說,無論怎麼組合,都是沒有問題的。Shiro 和 Spring Security 相比,主要有如下一些特點:

  1. Spring Security 是一個重量級的安全管理框架;Shiro 則是一個輕量級的安全管理框架
  2. Spring Security 概念複雜,配置繁瑣;Shiro 概念簡單、配置簡單
  3. Spring Security 功能強大;Shiro 功能簡單
    ##
  • 8.微服務中如何實現 session 共享 ?

在微服務中,一個完整的專案被拆分成多個不相同的獨立的服務,各個服務獨立部署在不同的伺服器上,各自的 session 被從物理空間上隔離開了,但是經常,我們需要在不同微服務之間共享 session ,常見的方案就是 Spring Session + Redis 來實現 session 共享。將所有微服務的 session 統一儲存在 Redis 上,當各個微服務對 session 有相關的讀寫操作時,都去操作 Redis 上的 session 。這樣就實現了 session 共享,Spring Session 基於 Spring 中的代理過濾器實現,使得 session 的同步操作對開發人員而言是透明的,非常簡便。 session 共享大家可以參考:Spring Boot 一個依賴搞定 session 共享,沒有比這更簡單的方案了!

    ##
  • 9.Spring Boot 如何實現熱部署 ?

Spring Boot 實現熱部署其實很容易,引入 devtools 依賴即可,這樣當編譯檔案發生變化時,Spring Boot 就會自動重啟。在 Eclipse 中,使用者按下儲存按鍵,就會自動編譯進而重啟 Spring Boot,IDEA 中由於是自動儲存的,自動儲存時並未編譯,所以需要開發者按下 Ctrl+F9 進行編譯,編譯完成後,專案就自動重啟了。

如果僅僅只是頁面模板發生變化,Java 類並未發生變化,此時可以不用重啟 Spring Boot,使用 LiveReload 外掛就可以輕鬆實現熱部署。

    ##
  • 10.Spring Boot 中如何實現定時任務 ?

定時任務也是一個常見的需求,Spring Boot 中對於定時任務的支援主要還是來自 Spring 框架。

在 Spring Boot 中使用定時任務主要有兩種不同的方式,一個就是使用 Spring 中的 @Scheduled 註解,另一個則是使用第三方框架 Quartz。

使用 Spring 中的 @Scheduled 的方式主要通過 @Scheduled 註解來實現。

使用 Quartz ,則按照 Quartz 的方式,定義 Job 和 Trigger 即可。

關於定時任務這一塊,大家可以參考:Spring Boot 中實現定時任務的兩種方式!

    ##
  • 11.前後端分離,如何維護介面文件 ?

前後端分離開發日益流行,大部分情況下,我們都是通過 Spring Boot 做前後端分離開發,前後端分離一定會有介面文件,不然會前後端會深深陷入到扯皮中。一個比較笨的方法就是使用 word 或者 md 來維護介面文件,但是效率太低,介面一變,所有人手上的文件都得變。在 Spring Boot 中,這個問題常見的解決方案是 Swagger ,使用 Swagger 我們可以快速生成一個介面文件網站,介面一旦發生變化,文件就會自動更新,所有開發工程師訪問這一個線上網站就可以獲取到最新的介面文件,非常方便。關於 Swagger 的用法,大家可以參考:SpringBoot整合Swagger2,再也不用維護介面文件了!

    ##
  • 12.什麼是 Spring Data ?

Spring Data 是 Spring 的一個子專案。用於簡化資料庫訪問,支援NoSQL 和 關係資料儲存。其主要目標是使資料庫的訪問變得方便快捷。Spring Data 具有如下特點:

  1. SpringData 專案支援 NoSQL 儲存:
  2. MongoDB (文件資料庫)
  3. Neo4j(圖形資料庫)
  4. Redis(鍵/值儲存)
  5. Hbase(列族資料庫)

SpringData 專案所支援的關係資料儲存技術:

  1. JDBC
  2. JPA

Spring Data Jpa 致力於減少資料訪問層 (DAO) 的開發量. 開發者唯一要做的,就是宣告持久層的介面,其他都交給 Spring Data JPA 來幫你完成!Spring Data JPA 通過規範方法的名字,根據符合規範的名字來確定方法需要實現什麼樣的邏輯。

    ##
  • 13.Spring Boot 是否可以使用 XML 配置 ?

Spring Boot 推薦使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通過 @ImportResource 註解可以引入一個 XML 配置。

    ##
  • 14.Spring Boot 打成的 jar 和普通的 jar 有什麼區別 ?

Spring Boot 專案最終打包成的 jar 是可執行 jar ,這種 jar 可以直接通過 java -jar xxx.jar 命令來執行,這種 jar 不可以作為普通的 jar 被其他專案依賴,即使依賴了也無法使用其中的類。

Spring Boot 的 jar 無法被其他專案依賴,主要還是他和普通 jar 的結構不同。普通的 jar 包,解壓後直接就是包名,包裡就是我們的程式碼,而 Spring Boot 打包成的可執行 jar 解壓後,在 \BOOT-INF\classes 目錄下才是我們的程式碼,因此無法被直接引用。如果非要引用,可以在 pom.xml 檔案中增加配置,將 Spring Boot 專案打包成兩個 jar ,一個可執行,一個可引用。

    ##
  • 15.bootstrap.properties 和 application.properties 有何區別 ?

單純做 Spring Boot 開發,可能不太容易遇到 bootstrap.properties 配置檔案,但是在結合 Spring Cloud 時,這個配置就會經常遇到了,特別是在需要載入一些遠端配置檔案的時侯。

bootstrap.properties 在 application.properties 之前載入,配置在應用程式上下文的引導階段生效。一般來說我們在 Spring Cloud Config 或者 Nacos 中會用到它。bootstrap.properties 被 Spring ApplicationContext 的父類載入,這個類先於載入 application.properties 的 ApplicatonContext 啟動。

當然,前面敘述中的 properties 也可以修改為 yaml 。

好了,本文就說到這裡,歡迎小夥伴留言說說你曾經遇到過的 Spring Boot 面試題!

關注公眾號【江南一點雨】,專注於 Spring Boot+微服務以及前後端分離等全棧技術,定期視訊教程分享,關注後回覆 Java ,領取鬆哥為你精心準備的 Java 乾貨!

相關推薦

15 Spring Boot 高頻試題直接當面入門實用

前言 本文轉自鬆哥(網名:江南一點雨)的一篇實用入門文章,寫的挺好的,希望對各位有所幫助。 什麼是麵霸?就是在面試中,神擋殺神佛擋殺佛,見招拆招,面到面試官自慚形穢自嘆不如!鬆哥希望本文能成為你麵霸路上的墊腳石! 做 Java 開發,沒有人敢小覷 Spring Boot 的重要性,現在出去面試,無論多小的公

鬆哥整理了 15 Spring Boot 高頻試題當面

什麼是麵霸?就是在面試中,神擋殺神佛擋殺佛,見招拆招,面到面試官自慚形穢自嘆不如!鬆哥希望本文能成為你麵霸路上的墊腳石! 做 Java 開發,沒有人敢小覷 Spring Boot 的重要性,現在出去面試,無論多小的公司 or 專案,都要跟你扯一扯 Spring Boot,扯一扯微服務,不會?沒用過? Sor

運維工程師分享7經典試題輕鬆拿Offer

首先,獵頭或者公司人資會把公司的介紹及崗位要求發到你郵箱(或者QQ、微信),下面這份是獵頭髮給我的崗位說明,為了職業道德操守,公司的介紹和麵試通知資訊我就不貼出來了,我就把崗位要求貼出來:職位描述:1、 負責應用伺服器的安裝、配置、優化與維護;2、 負責應用系統的日誌資訊備份

直接影響你薪資的一套大資料企業試題記得收藏轉發哦!

經歷了水深火熱的大資料學習,終於撥開雲霧見天明瞭,但你離成功總是還差了一步,那就是拿到大資料工程師的Offer。 在電腦旁奮鬥了無數個日夜,程式碼敲了無數遍,專案整改了無數遍,只為了得到一份自己滿意的高薪資高待遇的Offer。但這個收穫不僅僅需要你學到嫻熟的大資料技術,還需要在面試之前精心準備,瞭解自己要應

直接影響你薪資的一套大數據企業試題記得收藏轉發哦!

直接 hdfs proc 是什麽 奮鬥 等等 投放 cto 遇到的問題 經歷了水深火熱的大數據學習,終於撥開雲霧見天明了,但你離成功總是還差了一步,那就是拿到大數據工程師的Offer。 在電腦旁奮鬥了無數個日夜,代碼敲了無數遍,項目整改了無數遍,只為了得到一份自己滿意的高薪

軟體測試 Python自動化全網最全大廠試題以後你就是面試官!

前言 為了讓大家更好的理解和學習投入到Python自動化來找到一份好的資料也是學習過程中,非常重要的一個點。你的檢索能力越強,你就會越容易找到最合適你的資料。 有需要的小夥伴可以複製群號 313782132 這裡可免費領取! 暗號:部落格。 一、什麼是相容性測試?相容性測試側重哪些方面? 參考答案:

熟悉這幾 Redis 高頻試題面試不用愁

1、說說 Redis 都有哪些應用場景? 快取:這應該是 Redis 最主要的功能了,也是大型網站必備機制,合理地使用快取不僅可以加 快資料的訪問速度,而且能夠有效地降低後端資料來源的壓力。 共享Session:對於一些依賴 session 功能的服務來說,如果需要從單機變成叢集的話,可以選擇 redis

分享:15大資料崗位試題

你認為哪個更好:是好的資料還是好模型?同時你是如何定義“好”?存在所有情況下通用的模型嗎?有你沒有知道一些模型的定義並不是那麼好?1、你處理過的最大的資料量?你是如何處理他們的?處理的結果。2、告訴我二個分析或者電腦科學相關專案?你是如何對其結果進行衡量的?3、什麼是:提升值、關鍵績效指標、強壯性、模型按合度

分享:15大數據崗位試題

的區別 協同過濾 分享 模糊 str 基礎 sas 得到 reduce 你認為哪個更好:是好的數據還是好模型?同時你是如何定義“好”?存在所有情況下通用的模型嗎?有你沒有知道一些模型的定義並不是那麽好?1、你處理過的最大的數據量?你是如何處理他們的?處理的結果。2、告訴我二

96常考Java試題分享給大家含答案

轉自:搜雲庫 Java常考面試題,整理自牛客網和程式設計師面試寶典,有的題不太好。   1. 什麼是Java虛擬機器?為什麼Java被稱作是“平臺無關的程式語言”? 答:Java虛擬機器是一個可以執行Java位元組碼的虛擬機器程序。Java原始檔被編譯成能被Java虛

最容易犯錯的8 java試題你會不會踩雷?

0x0. static 和 final 的用法 static 的作用從三個方面來談,分別是靜態變數、靜態方法、靜態類。 靜態變數:宣告為 static 的靜態變數實質上就是全域性變數,當宣告一個物件時,並不產生static 變數的拷貝,而是該類所有例項變數共用同一個

75 BAJT 中高階 Java 試題你能答上幾

整理了下 BATJ 關於 JAVA 的面試題目,大家參考下吧,希望對大家有所幫助,可以幫大家查漏不缺。 答對這些面試題,PASS 掉 80 % 的求職競爭者。 1.hashcode相等兩個類一定相等嗎?equals呢?相反呢? 2.介紹一下集合框架? 3.hash

46 阿里巴巴 Java 試題你會幾

做技術的有一種資歷,叫做通過了阿里的面試。 這些阿里Java相關問題,都是之前通過不斷優秀人才的鋪墊總結的,先自己弄懂了再去阿里面試,不然就是去丟臉,被虐。 希望對大家幫助,祝面試成功,有個更好的職業規劃。 1 面試常見問題 1、微信紅包怎麼實現。 2、海量資料分析。 3

36Java經典基礎試題面試可不能栽在這上面!

在我們日常找工作的過程中,面試絕對是必不可少的,所以要想進到自己想去的那家公司,必須首先把面試做好,這裡小編精選了一些基礎的java面試題,供正在找工作的,或者準備找工作的程式設計師們使用。 1.”static”關鍵字是什麼意思?Java中是否可以覆蓋(override)一個privat

精選八多執行緒試題來看看你會幾個?

Java是一種可以撰寫跨平臺應用軟體的面向物件的程式設計語言。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用於PC、資料中心、遊戲控制檯、科學超級計算機、行動電話和網際網路,同時擁有全球最大的開發者專業社群。 一、多執行緒有幾種實現方案,分別是哪幾種? 三種。 1.

struts、hibernate、spring、 mybatis、 spring boot試題彙總

1、談談你對Struts的理解。 答: 1. struts是一個按MVC模式設計的Web層框架,其實它就是一個大大的servlet,這個Servlet名為ActionServlet,或是ActionServlet的子類。我們可以在web.xml檔案中將符合某種特徵的所有請

25多執行緒試題附帶答案(一)

1.什麼是程序? 是一個具有一定獨立功能的程式在一個數據集上的一次動態執行的過程,是作業系統進行資源分配和排程的一個獨立單位,

「建議心心」要就來15多執行緒試題一次爽到底(1.1w字用心整理)

、 本文是給「建議收藏」200MB大廠面試文件,整理總結2020年最強面試題庫「CoreJava篇」寫的答案,所有相關文章已經收錄在碼雲倉庫:https://gitee.com/bingqilinpeishenme/Java-interview 千上萬水總是情,先贊後看行不行,奧力給 本文為多執行緒面

Java長見到的試題你能答出幾題就知道自己有多菜了

作者:Java3y 前言 只有光頭才能變強 Redis目前還在看,今天來分享一下我在秋招看過(遇到)的一些面試題(相對比較常見的) 0、final關鍵字 簡要說一下final關鍵字,final可以用來修飾什麼? 這題我是在真實的面試中遇到的,當時答得不太好,現在來整理一

使用Eclipse除錯Spring boot工程的時候總是會直接進入SilentExitExceptionHandler中

使用Eclipse除錯Spring boot工程的時候,總是會直接進入SilentExitExceptionHandler中,無法正常的debug,嚴重影響效率,在部落格上看到了別人的參考方案,在此記憶一下,方便檢視。     解決方案:Window-->Pre