面試中必須掌握的15道《Spring Boot 高頻面試題》

做 Java 開發(fā)隅很,沒有人敢小覷 Spring Boot 的重要性撞牢,現(xiàn)在出去面試,無論多小的公司 or 項目叔营,都要跟你扯一扯 Spring Boot屋彪,扯一扯微服務(wù),不會绒尊?沒用過畜挥? Sorry ,我們不合適婴谱!

今天就給大家整理了 15 道高頻 Spring Boot 面試題蟹但,希望能夠幫助到剛剛走出校門的小伙伴以及準(zhǔn)備尋找新的工作機(jī)會的小伙伴。

一谭羔、什么是 Spring Boot ?

傳統(tǒng)的 SSM/SSH 框架組合配置繁瑣臃腫华糖,不同項目有很多重復(fù)、模板化的配置瘟裸,嚴(yán)重降低了 Java 工程師的開發(fā)效率客叉,而 Spring Boot 可以輕松創(chuàng)建基于 Spring 的、可以獨立運行的话告、生產(chǎn)級的應(yīng)用程序十办。通過對 Spring 家族和一些第三方庫提供一系列自動化配置的 Starter,來使得開發(fā)快速搭建一個基于 Spring 的應(yīng)用程序超棺。

Spring Boot 讓日益臃腫的 Java 代碼又重回簡潔。在配合 Spring Cloud 使用時呵燕,還可以發(fā)揮更大的威力棠绘。

二、Spring Boot 有哪些特點 ?

Spring Boot 主要有如下特點:

(一)、為 Spring 開發(fā)提供一個更快氧苍、更廣泛的入門體驗夜矗。

(二)、開箱即用让虐,遠(yuǎn)離繁瑣的配置紊撕。

(三)、提供了一系列大型項目通用的非業(yè)務(wù)性功能赡突,例如:內(nèi)嵌服務(wù)器对扶、安全管理、運行數(shù)據(jù)監(jiān)控惭缰、運行狀況檢查和外部化配置等浪南。

(四)、絕對沒有代碼生成漱受,也不需要XML配置络凿。

三、Spring Boot 中的 starter 到底是什么 ?

首先昂羡,這個 Starter 并非什么新的技術(shù)點絮记,基本上還是基于 Spring 已有功能來實現(xiàn)的。首先它提供了一個自動化配置類虐先,一般命名為 XXXAutoConfiguration 怨愤,在這個配置類中通過條件注解來決定一個配置是否生效(條件注解就是 Spring 中原本就有的),然后它還會提供一系列的默認(rèn)配置赴穗,也允許開發(fā)者根據(jù)實際情況自定義相關(guān)配置憔四,然后通過類型安全的屬性注入將這些配置屬性注入進(jìn)來,新注入的屬性會代替掉默認(rèn)屬性般眉。正因為如此了赵,很多第三方框架,我們只需要引入依賴就可以直接使用了甸赃。

當(dāng)然柿汛,開發(fā)者也可以自定義 Starter,自定義 Starter 可以參考:徒手?jǐn)]一個 Spring Boot 中的 Starter 埠对,解密自動化配置黑魔法络断!。

四项玛、spring-boot-starter-parent 有什么用 ?

我們都知道貌笨,新創(chuàng)建一個 Spring Boot 項目,默認(rèn)都是有 parent 的襟沮,這個 parent 就是 spring-boot-starter-parent 锥惋,spring-boot-starter-parent 主要有如下作用:

(一)昌腰、定義了 Java 編譯版本為 1.8 。

(二)膀跌、使用 UTF-8 格式編碼遭商。

(三)、繼承自 spring-boot-dependencies捅伤,這個里邊定義了依賴的版本劫流,也正是因為繼承了這個依賴,所以我們在寫依賴時才不需要寫版本號丛忆。

(四)祠汇、執(zhí)行打包操作的配置。

(五)蘸际、自動化的資源過濾座哩。

(六)、自動化的插件配置粮彤。

(七)根穷、針對 application.properties 和 application.yml 的資源過濾,包括通過 profile 定義的不同環(huán)境的配置文件导坟,例如 application-dev.properties 和 application-dev.yml屿良。

關(guān)于這個問題,讀者可以參考:你真的理解 Spring Boot 項目中的 parent 嗎惫周?

五尘惧、YAML 配置的優(yōu)勢在哪里 ?

YAML 現(xiàn)在可以算是非常流行的一種配置文件格式了,無論是前端還是后端递递,都可以見到 YAML 配置喷橙。那么 YAML 配置和傳統(tǒng)的 properties 配置相比到底有哪些優(yōu)勢呢?

(一)登舞、配置有序贰逾,在一些特殊的場景下,配置有序很關(guān)鍵

(二)菠秒、支持?jǐn)?shù)組疙剑,數(shù)組中的元素可以是基本數(shù)據(jù)類型也可以是對象

(三)、簡潔

相比 properties 配置文件践叠,YAML 還有一個缺點言缤,就是不支持 @PropertySource 注解導(dǎo)入自定義的 YAML 配置。

關(guān)于 YAML 配置禁灼,要是大家還不熟悉管挟,可以參考: Spring Boot 中的 yaml 配置簡介

六、Spring Boot 中如何解決跨域問題 ?

跨域可以在前端通過 JSONP 來解決弄捕,但是 JSONP 只可以發(fā)送 GET 請求僻孝,無法發(fā)送其他類型的請求拳芙,在 RESTful 風(fēng)格的應(yīng)用中,就顯得非常雞肋皮璧,因此我們推薦在后端通過 (CORS,Cross-origin resource sharing) 來解決跨域問題分飞。這種解決方案并非 Spring Boot 特有的悴务,在傳統(tǒng)的 SSM 框架中,就可以通過 CORS 來解決跨域問題譬猫,只不過之前我們是在 XML 文件中配置 CORS 讯檐,現(xiàn)在則是通過 @CrossOrigin 注解來解決跨域問題。關(guān)于 CORS 染服,小伙伴們可以參考:Spring Boot 中通過 CORS 解決跨域問題

七别洪、比較一下 Spring Security 和 Shiro 各自的優(yōu)缺點 ?

由于 Spring Boot 官方提供了大量的非常方便的開箱即用的 Starter ,包括 Spring Security 的 Starter 柳刮,使得在 Spring Boot 中使用 Spring Security 變得更加容易挖垛,甚至只需要添加一個依賴就可以保護(hù)所有的接口,所以秉颗,如果是 Spring Boot 項目痢毒,一般選擇 Spring Security 。當(dāng)然這只是一個建議的組合蚕甥,單純從技術(shù)上來說哪替,無論怎么組合,都是沒有問題的菇怀。Shiro 和 Spring Security 相比凭舶,主要有如下一些特點:

(一)、Spring Security 是一個重量級的安全管理框架爱沟;Shiro 則是一個輕量級的安全管理框架

(二)帅霜、Spring Security 概念復(fù)雜,配置繁瑣钥顽;Shiro 概念簡單义屏、配置簡單

(三)、Spring Security 功能強(qiáng)大蜂大;Shiro 功能簡單

八闽铐、微服務(wù)中如何實現(xiàn) session 共享 ?

在微服務(wù)中,一個完整的項目被拆分成多個不相同的獨立的服務(wù)奶浦,各個服務(wù)獨立部署在不同的服務(wù)器上兄墅,各自的 session 被從物理空間上隔離開了,但是經(jīng)常澳叉,我們需要在不同微服務(wù)之間共享 session 隙咸,常見的方案就是 Spring Session + Redis 來實現(xiàn) session 共享沐悦。將所有微服務(wù)的 session 統(tǒng)一保存在 Redis 上,當(dāng)各個微服務(wù)對 session 有相關(guān)的讀寫操作時五督,都去操作 Redis 上的 session 藏否。這樣就實現(xiàn)了 session 共享,Spring Session 基于 Spring 中的代理過濾器實現(xiàn)充包,使得 session 的同步操作對開發(fā)人員而言是透明的副签,非常簡便。 session 共享大家可以參考:Spring Boot 一個依賴搞定 session 共享基矮,沒有比這更簡單的方案了淆储!

九、Spring Boot 如何實現(xiàn)熱部署 ?

Spring Boot 實現(xiàn)熱部署其實很容易家浇,引入 devtools 依賴即可本砰,這樣當(dāng)編譯文件發(fā)生變化時,Spring Boot 就會自動重啟钢悲。在 Eclipse 中点额,用戶按下保存按鍵,就會自動編譯進(jìn)而重啟 Spring Boot譬巫,IDEA 中由于是自動保存的咖楣,自動保存時并未編譯,所以需要開發(fā)者按下 Ctrl+F9 進(jìn)行編譯芦昔,編譯完成后诱贿,項目就自動重啟了。

如果僅僅只是頁面模板發(fā)生變化咕缎,Java 類并未發(fā)生變化珠十,此時可以不用重啟 Spring Boot,使用 LiveReload 插件就可以輕松實現(xiàn)熱部署凭豪。

十焙蹭、Spring Boot 中如何實現(xiàn)定時任務(wù) ?

定時任務(wù)也是一個常見的需求,Spring Boot 中對于定時任務(wù)的支持主要還是來自 Spring 框架嫂伞。

在 Spring Boot 中使用定時任務(wù)主要有兩種不同的方式孔厉,一個就是使用 Spring 中的 @Scheduled 注解,另一個則是使用第三方框架 Quartz帖努。

使用 Spring 中的 @Scheduled 的方式主要通過 @Scheduled 注解來實現(xiàn)撰豺。

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

關(guān)于定時任務(wù)這一塊,大家可以參考:Spring Boot 中實現(xiàn)定時任務(wù)的兩種方式!

十一匙监、前后端分離凡橱,如何維護(hù)接口文檔 ?

前后端分離開發(fā)日益流行小作,大部分情況下,我們都是通過 Spring Boot 做前后端分離開發(fā)稼钩,前后端分離一定會有接口文檔顾稀,不然會前后端會深深陷入到扯皮中。一個比較笨的方法就是使用 word 或者 md 來維護(hù)接口文檔坝撑,但是效率太低础拨,接口一變,所有人手上的文檔都得變绍载。在 Spring Boot 中,這個問題常見的解決方案是 Swagger 滔蝉,使用 Swagger 我們可以快速生成一個接口文檔網(wǎng)站击儡,接口一旦發(fā)生變化,文檔就會自動更新蝠引,所有開發(fā)工程師訪問這一個在線網(wǎng)站就可以獲取到最新的接口文檔阳谍,非常方便。關(guān)于 Swagger 的用法螃概,大家可以參考:SpringBoot整合Swagger2矫夯,再也不用維護(hù)接口文檔了!

十二吊洼、什么是 Spring Data ?

Spring Data 是 Spring 的一個子項目训貌。用于簡化數(shù)據(jù)庫訪問,支持NoSQL 和 關(guān)系數(shù)據(jù)存儲冒窍。其主要目標(biāo)是使數(shù)據(jù)庫的訪問變得方便快捷递沪。Spring Data 具有如下特點:

(一)、SpringData 項目支持 NoSQL 存儲:

(二)综液、MongoDB (文檔數(shù)據(jù)庫)

(三)款慨、Neo4j(圖形數(shù)據(jù)庫)

(四)、Redis(鍵/值存儲)

(五)谬莹、Hbase(列族數(shù)據(jù)庫)

SpringData 項目所支持的關(guān)系數(shù)據(jù)存儲技術(shù):

(一)檩奠、JDBC

(二)、JPA

Spring Data Jpa 致力于減少數(shù)據(jù)訪問層 (DAO) 的開發(fā)量. 開發(fā)者唯一要做的附帽,就是聲明持久層的接口埠戳,其他都交給 Spring Data JPA 來幫你完成!Spring Data JPA 通過規(guī)范方法的名字士葫,根據(jù)符合規(guī)范的名字來確定方法需要實現(xiàn)什么樣的邏輯乞而。

十三、Spring Boot 是否可以使用 XML 配置 ?

Spring Boot 推薦使用 Java 配置而非 XML 配置慢显,但是 Spring Boot 中也可以使用 XML 配置爪模,通過 @ImportResource 注解可以引入一個 XML 配置欠啤。

十四、Spring Boot 打成的 jar 和普通的 jar 有什么區(qū)別 ?

Spring Boot 項目最終打包成的 jar 是可執(zhí)行 jar 屋灌,這種 jar 可以直接通過 java -jar xxx.jar 命令來運行械蹋,這種 jar 不可以作為普通的 jar 被其他項目依賴康愤,即使依賴了也無法使用其中的類。

Spring Boot 的 jar 無法被其他項目依賴,主要還是他和普通 jar 的結(jié)構(gòu)不同停忿。普通的 jar 包,解壓后直接就是包名展鸡,包里就是我們的代碼叠蝇,而 Spring Boot 打包成的可執(zhí)行 jar 解壓后悔捶,在 \BOOT-INF\classes 目錄下才是我們的代碼,因此無法被直接引用洲鸠。如果非要引用,可以在 pom.xml 文件中增加配置淤齐,將 Spring Boot 項目打包成兩個 jar 袜匿,一個可執(zhí)行祭务,一個可引用义锥。

十五、bootstrap.properties 和 application.properties 有何區(qū)別 ?

單純做 Spring Boot 開發(fā)柱恤,可能不太容易遇到 bootstrap.properties 配置文件数初,但是在結(jié)合 Spring Cloud 時,這個配置就會經(jīng)常遇到了变屁,特別是在需要加載一些遠(yuǎn)程配置文件的時侯。

bootstrap.properties 在 application.properties 之前加載,配置在應(yīng)用程序上下文的引導(dǎo)階段生效。一般來說我們在 Spring Cloud Config 或者 Nacos 中會用到它。bootstrap.properties 被 Spring ApplicationContext 的父類加載鞠抑,這個類先于加載 application.properties 的 ApplicatonContext 啟動。

當(dāng)然,前面敘述中的 properties 也可以修改為 yaml 盐茎。

好了,本文就說到這里节槐,歡迎小伙伴留言說說你曾經(jīng)遇到過的 Spring Boot 面試題搀庶!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铜异,隨后出現(xiàn)的幾起案子哥倔,更是在濱河造成了極大的恐慌,老刑警劉巖揍庄,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咆蒿,死亡現(xiàn)場離奇詭異,居然都是意外死亡蚂子,警方通過查閱死者的電腦和手機(jī)沃测,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來食茎,“玉大人蒂破,你說我怎么就攤上這事”鹩妫” “怎么了附迷?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哎媚。 經(jīng)常有香客問我喇伯,道長,這世上最難降的妖魔是什么拨与? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任稻据,我火速辦了婚禮,結(jié)果婚禮上买喧,老公的妹妹穿的比我還像新娘攀甚。我一直安慰自己,他們只是感情好岗喉,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布秋度。 她就那樣靜靜地躺著,像睡著了一般钱床。 火紅的嫁衣襯著肌膚如雪荚斯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音事期,去河邊找鬼滥壕。 笑死,一個胖子當(dāng)著我的面吹牛兽泣,可吹牛的內(nèi)容都是我干的绎橘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼唠倦,長吁一口氣:“原來是場噩夢啊……” “哼称鳞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起稠鼻,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤冈止,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后候齿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熙暴,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年慌盯,在試婚紗的時候發(fā)現(xiàn)自己被綠了周霉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡亚皂,死狀恐怖俱箱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情孕讳,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布巍膘,位于F島的核電站厂财,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏峡懈。R本人自食惡果不足惜璃饱,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肪康。 院中可真熱鬧荚恶,春花似錦、人聲如沸磷支。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雾狈。三九已至廓潜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辩蛋。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工呻畸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悼院。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓伤为,卻偏偏與公主長得像,于是被迫代替她去往敵國和親据途。 傳聞我的和親對象是個殘疾皇子绞愚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容