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

来源:https://www.cnblogs.com/yichunguo/archive/2020/01/04/12150258.html
-Advertisement-
Play Games

前言 本文轉自松哥(網名:江南一點雨)的一篇實用入門文章,寫的挺好的,希望對各位有所幫助。 什麼是面霸?就是在面試中,神擋殺神佛擋殺佛,見招拆招,面到面試官自慚形穢自嘆不如!松哥希望本文能成為你面霸路上的墊腳石! 做 Java 開發,沒有人敢小覷 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 乾貨!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 慕課網-跳跳虎-圖解+仿寫 新手都能學懂的SpringBoot源碼課-366元——全方位深入解析最新版SpringBoot源碼 慕課網-跳跳虎-圖解+仿寫 新手都能學懂的SpringBoot源碼課-366元——全方位深入解析最新版SpringBoot源碼 2020年1月4號更新——聯繫老闆微信:it ...
  • 如何實現伺服器。。。socket介面是實際上是操作系統提供的系統調用。socket的使用並不局限於Python語言,你可以用C或者JAVA來寫出同樣的socket伺服器,而所有語言使用socket的方式都類似(Apache就是使用C實現的伺服器) Web框架就是提前寫好了伺服器。不能跨語言的使用框架 ...
  • 1. Spider Middleware Spider Middleware是介入到Scrapy的Spider處理機制的鉤子框架。 當Downloader生成Response之後,Response會被髮送給Spider,在發送給Spider之前,Response會首先經過Spider Middlew ...
  • 問題: 最近在部署項目的時候出現數據亂碼的情況,經過一番查看項目都是用的UTF-8編碼格式,數據也是,但是經過調用介面傳給對方就亂碼了。 由於是部署在Windows環境下,Windows預設編碼GBK,這就導致了jvm運行時編碼不一致的問題,修改也很容易。 解決辦法: Linux環境下如果使用的UT ...
  • 1.參數會作為一個 Python 表達式(從技術上說是一個條件列表)被解析並求值 2.去除字元串兩邊的引號 srting 也可以用 3.字元串轉字典 4.傳遞全局變數 5.傳遞本地變數 ...
  • 1.python中函數的工作原理 python的解釋器,也就是python.exe(c編寫)會用PyEval_EvalFramEx(c函數)運行foo()函數 首先會創建一個棧幀(stack Frame),在棧幀對象的上下文裡面去運行這個位元組碼。 可以嘗試著去列印foo的位元組碼: 關於位元組碼的解釋: ...
  • python中的多線程其實並不是真正的多線程,如果想要充分地使用多核CPU資源,在python中大部分情況需要使用多進程。python提供了非常好用的多進程包Multiprocessing,只需要定義一個函數,python會完成其它所有事情。藉助這個包,可以輕鬆完成從單進程到併發執行的轉換。mult ...
  • 1 #include"stdio.h" 2 #include"stdlib.h" 3 #include"string.h" 4 #include"conio.h" 5 typedef struct node 6 { 7 char xh[11]; //學號 8 char xm[10]; //姓名 9 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...