【Java架構師面試網(wǎng)】收集整理了幾乎整個架構師學習途中會遇到的面試題,希望大家都能早日圓自己的架構師夢~
公眾號:Java架構師面試網(wǎng)宪躯,關注回復“資料”即可領取精美整理的面試資料一份哦~
1训堆、什么是springboot
- 用來簡化spring應用的初始搭建以及開發(fā)過程 使用特定的方式來進行配置(properties或yml文件)
- 創(chuàng)建獨立的spring引用程序 main方法運行
- 嵌入的Tomcat 無需部署war文件
- 簡化maven配置
2蹂午、什么是 JavaConfig坷襟?
Spring JavaConfig 是 Spring 社區(qū)的產(chǎn)品撤嫩,它提供了配置 Spring IoC 容器的純 Java 方法裁眯。因此它有助于避免使用 XML 配置鹉梨。
使用 JavaConfig 的優(yōu)點在于:
面向對象的配置。由于配置被定義為 JavaConfig 中的類穿稳,因此用戶可以充分利用 Java 中的面向對象功能存皂。一個配置類可以繼承另一個,重寫它的@Bean 方法等逢艘。
減少或消除 XML 配置旦袋。基于依賴注入原則的外化配置的好處已被證明它改。但是疤孕,許多開發(fā)人員不希望在 XML 和 Java 之間來回切換。 JavaConfig 為開發(fā)人員提供了一種純 Java 方法來配置與 XML 配置概念相似的 Spring 容器搔课。從技術角度來講胰柑,只使用 JavaConfig 配置類來配置容器是可行的,但實際上很多人認為將 JavaConfig 與 XML 混合匹配是理想的爬泥。
類型安全和重構友好柬讨。 JavaConfig 提供了一種類型安全的方法來配置 Spring 容器。由于Java 5.0 對泛型的支持袍啡,現(xiàn)在可以按類型而不是按名稱檢索 bean踩官,不需要任何強制轉換或基于字符串的查找。
3境输、Spring Boot有哪些優(yōu)點蔗牡?
答:
- 快速創(chuàng)建獨立運行的spring項目與主流框架集成
- 使用嵌入式的servlet容器,應用無需打包成war包
- starters自動依賴與版本控制
- 大量的自動配置嗅剖,簡化開發(fā)辩越,也可修改默認值
- 準生產(chǎn)環(huán)境的運行應用監(jiān)控
- 與云計算的天然集成
4、Spring Boot 提供了哪些核心功能信粮?
- 獨立運行 Spring 項目
- 內嵌 Servlet 容器
Spring Boot 可以選擇內嵌 Tomcat黔攒、Jetty 或者 Undertow,這樣我們無須以 war 包形式部署項目。 - 提供 Starter 簡化 Maven 配置
例如督惰,當你使用了 spring-boot-starter-web 不傅,會自動加入如下依賴:spring-boot-starter-web
的 pom 文件 - 自動配置 Spring Bean
Spring Boot 檢測到特定類的存在,就會針對這個應用做一定的配置赏胚,進行自動配置 Bean 访娶,這樣會極大地減少我們要使用的配置。 - 準生產(chǎn)的應用監(jiān)控
Spring Boot 提供基于 HTTP觉阅、JMX崖疤、SSH 對運行時的項目進行監(jiān)控。 - 無代碼生成和 XML 配置
Spring Boot 沒有引入任何形式的代碼生成留拾,它是使用的 Spring 4.0 的條件 @Condition 注解以實現(xiàn)根據(jù)條件進行配置戳晌。同時使用了 Maven /Gradle 的依賴傳遞解析機制來實現(xiàn) Spring 應用里面的自動配置。
5痴柔、如何重新加載Spring Boot上的更改,而無需重新啟動服務器疫向?
這可以使用DEV工具來實現(xiàn)咳蔚。通過這種依賴關系,您可以節(jié)省任何更改搔驼,嵌入式tomcat將重新啟動谈火。
Spring Boot有一個開發(fā)工具(DevTools)模塊,它有助于提高開發(fā)人員的生產(chǎn)力舌涨。Java開發(fā)人員面臨的一個主要挑戰(zhàn)是將文件更改自動部署到服務器并自動重啟服務器糯耍。
開發(fā)人員可以重新加載Spring Boot上的更改,而無需重新啟動服務器囊嘉。這將消除每次手動部署更改的需要温技。Spring Boot在發(fā)布它的第一個版本時沒有這個功能。
這是開發(fā)人員最需要的功能扭粱。DevTools模塊完全滿足開發(fā)人員的需求舵鳞。該模塊將在生產(chǎn)環(huán)境中被禁用。它還提供H2數(shù)據(jù)庫控制臺以更好地測試應用程序琢蛤。
6蜓堕、創(chuàng)建一個 Spring Boot Project 的最簡單的方法是什么?
Spring Initializer 是創(chuàng)建 Spring Boot Projects 的一個很好的工具
7博其、運行 Spring Boot 有哪幾種方式套才?
- 打包成 Fat Jar ,直接使用 java -jar 運行慕淡。目前主流的做法背伴,推薦。
- 在 IDEA 或 Eclipse 中,直接運行應用的 Spring Boot 啟動類的 #main(String[] args) 啟動挂据。適用于開發(fā)調試場景以清。
- 如果是 Web 項目,可以打包成 War 包崎逃,使用外部 Tomcat 或 Jetty 等容器掷倔。
8、Spring Boot中的監(jiān)視器是什么个绍?
Spring boot actuator是spring啟動框架中的重要功能之一勒葱。Spring boot監(jiān)視器可幫助您訪問生產(chǎn)環(huán)境中正在運行的應用程序的當前狀態(tài)。
有幾個指標必須在生產(chǎn)環(huán)境中進行檢查和監(jiān)控巴柿。即使一些外部應用程序可能正在使用這些服務來向相關人員觸發(fā)警報消息凛虽。監(jiān)視器模塊公開了一組可直接作為HTTP URL訪問的REST端點來檢查狀態(tài)。
9广恢、什么是starter?
Starter主要是用來簡化maven依賴
10凯旋、Spring Boot 常用的 Starter 有哪些?
spring-boot-starter-web :提供 Spring MVC + 內嵌的 Tomcat 钉迷。
spring-boot-starter-data-jpa :提供 Spring JPA + Hibernate 至非。
spring-boot-starter-data-redis :提供 Redis 。
mybatis-spring-boot-starter :提供 MyBatis 糠聪。
11荒椭、什么是YAML?
YAML是一種人類可讀的數(shù)據(jù)序列化語言舰蟆。它通常用于配置文件趣惠。
與屬性文件相比,如果我們想要在配置文件中添加復雜的屬性身害,YAML文件就更加結構化味悄,而且更少混淆√庠欤可以看出YAML具有分層配置數(shù)據(jù)傍菇。
12、如何集成Spring Boot和ActiveMQ界赔?
對于集成Spring Boot和ActiveMQ丢习,我們使用spring-boot-starter-activemq依賴關系。 它只需要很少的配置淮悼,并且不需要樣板代碼咐低。
13、springboot常用的starter有哪些袜腥?
spring-boot-starter-web 嵌入tomcat和web開發(fā)需要servlet與jsp支持
spring-boot-starter-data-jpa 數(shù)據(jù)庫支持
spring-boot-starter-data-redis redis數(shù)據(jù)庫支持
spring-boot-starter-data-solr solr支持
mybatis-spring-boot-starter 第三方的mybatis集成starter
14见擦、springboot自動配置的原理
在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration
會自動去maven中讀取每個starter中的spring.factories文件 該文件里配置了所有需要被創(chuàng)建spring容器中的bean
15钉汗、springboot讀取配置文件的方式
springboot默認讀取配置文件為application.properties或者是application.yml
16、Spring Boot 需要獨立的容器運行嗎鲤屡?
可以不需要损痰,內置了 Tomcat/ Jetty 等容器。
17酒来、運行 Spring Boot 有哪幾種方式卢未?
1)打包用命令或者者放到容器中運行
2)用 Maven/ Gradle 插件運行
3)直接執(zhí)行 main 方法運行
18、Spring Boot 的核心配置文件有哪幾個堰汉?它們的區(qū)別是什么辽社?
Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。
application 配置文件這個容易了解翘鸭,主要用于 Spring Boot 項目的自動化配置滴铅。
bootstrap 配置文件有以下幾個應用場景。
使用 Spring Cloud Config 配置中心時就乓,這時需要在 bootstrap 配置文件中增加連接到配置中心的配置屬性來加載外部配置中心的配置信息汉匙;
少量固定的不能被覆蓋的屬性;
少量加密/解密的場景档址;
19盹兢、Spring Boot 的核心注解是哪個?它主要由哪幾個注解組成的守伸?
啟動類上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解浦妄,主要組合包含了以下 3 個注解:
@SpringBootConfiguration:組合了 @Configuration 注解尼摹,實現(xiàn)配置文件的功能。
@EnableAutoConfiguration:打開自動配置的功能剂娄,也可以關閉某個自動配置的選項蠢涝,如關閉數(shù)據(jù)源自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring組件掃描
20阅懦、為什么我們需要 spring-boot-maven-plugin?
spring-boot-maven-plugin 提供了一些像 jar 一樣打包或者運行應用程序的命令和二。
spring-boot:run 運行你的 SpringBooty 應用程序。
spring-boot:repackage 重新打包你的 jar 包或者是 war 包使其可執(zhí)行
spring-boot:start 和 spring-boot:stop 管理 Spring Boot 應用程序的生命周期(也可以說是為了集成測試)耳胎。
spring-boot:build-info 生成執(zhí)行器可以使用的構造信息惯吕。
21、如何使用Spring Boot實現(xiàn)分頁和排序怕午?
使用Spring Boot實現(xiàn)分頁非常簡單废登。使用Spring Data-JPA可以實現(xiàn)將可分頁的
org.springframework.data.domain.Pageable
傳遞給存儲庫方法。
22郁惜、什么是Swagger堡距?你用Spring Boot實現(xiàn)了它嗎?
Swagger廣泛用于可視化API,使用Swagger UI為前端開發(fā)人員提供在線沙箱羽戒。Swagger是用于生成RESTful Web服務的可視化表示的工具缤沦,規(guī)范和完整框架實現(xiàn)。它使文檔能夠以與服務器相同的速度更新易稠。當通過Swagger正確定義時缸废,消費者可以使用最少量的實現(xiàn)邏輯來理解遠程服務并與其進行交互。因此缩多,Swagger消除了調用服務時的猜測呆奕。
23、什么是Spring Profiles衬吆?
Spring Profiles允許用戶根據(jù)配置文件(dev梁钾,test,prod等)來注冊bean逊抡。因此姆泻,當應用程序在開發(fā)中運行時,只有某些bean可以加載冒嫡,而在PRODUCTION中拇勃,某些其他bean可以加載。假設我們的要求是Swagger文檔僅適用于QA環(huán)境孝凌,并且禁用所有其他文檔方咆。這可以使用配置文件來完成。Spring Boot使得使用配置文件非常簡單蟀架。
24瓣赂、什么是Spring Batch?
Spring Boot Batch提供可重用的函數(shù)片拍,這些函數(shù)在處理大量記錄時非常重要煌集,包括日志/跟蹤,事務管理捌省,作業(yè)處理統(tǒng)計信息苫纤,作業(yè)重新啟動,跳過和資源管理纲缓。它還提供了更先進的技術服務和功能卷拘,通過優(yōu)化和分區(qū)技術,可以實現(xiàn)極高批量和高性能批處理作業(yè)色徘。簡單以及復雜的大批量批處理作業(yè)可以高度可擴展的方式利用框架處理重要大量的信息恭金。
25、什么是FreeMarker模板褂策?
FreeMarker是一個基于Java的模板引擎横腿,最初專注于使用MVC軟件架構進行動態(tài)網(wǎng)頁生成颓屑。使用Freemarker的主要優(yōu)點是表示層和業(yè)務層的完全分離。程序員可以處理應用程序代碼耿焊,而設計人員可以處理html頁面設計揪惦。最后使用freemarker可以將這些結合起來,給出最終的輸出頁面罗侯。
26器腋、什么是JavaConfig?
Spring JavaConfig是Spring社區(qū)的產(chǎn)品钩杰,它提供了配置Spring IoC容器的純Java方法纫塌。因此它有助于避免使用XML配置。使用JavaConfig的優(yōu)點在于:
面向對象的配置讲弄。由于配置被定義為JavaConfig中的類措左,因此用戶可以充分利用Java中的面向對象功能。一個配置類可以繼承另一個避除,重寫它的@Bean方法等怎披。
減少或消除XML配置∑堪冢基于依賴注入原則的外化配置的好處已被證明凉逛。但是,許多開發(fā)人員不希望在XML和Java之間來回切換群井。
JavaConfig為開發(fā)人員提供了一種純Java方法來配置與XML配置概念相似的Spring容器状飞。
從技術角度來講,只使用JavaConfig配置類來配置容器是可行的书斜,但實際上很多人認為將JavaConfig與XML混合匹配是理想的昔瞧。
類型安全和重構友好。JavaConfig提供了一種類型安全的方法來配置Spring容器菩佑。由于Java 5.0對泛型的支持,現(xiàn)在可以按類型而不是按名稱檢索bean凝化,不需要任何強制轉換或基于字符串的查找
27稍坯、啟動類注解:
@SpringBootConfiguration:Spring Boot的配置類; 標注在某個類上,表示這是一個Spring Boot的配置類; @Configuration:配置類上來標注這個注解;配置類 ----- 配置文件;配置類也是容器中的一個組件;@Component
@EnableAutoConfiguration:開啟自動配置功能;
以前我們需要配置的東西搓劫,Spring Boot幫我們自動配置;@EnableAutoConfiguration告訴SpringBoot開啟自動配置功能;這樣自動配置才能生效;
Spring Boot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值瞧哟,將這些值作為自動配置類導入到容器中,自動配置類就失效枪向,幫我們進行自動配置工作
28勤揩、配置文件的加載順序
由jar包外向jar包內進行尋找;
優(yōu)先加載帶profile
jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
再來加載不帶profile
jar包外部的application.properties或application.yml(不帶spring.profile)配置文件
jar包內部的application.properties或application.yml(不帶spring.profile)配置文件
29、自動配置原理
1)秘蛔、SpringBoot啟動的時候加載主配置類陨亡,開啟了自動配置功能 @EnableAutoConfiguration
2)傍衡、@EnableAutoConfiguration 作用:
將類路徑下 META-INF/spring.factories 里面配置的所有EnableAutoConfiguration的值加入到了容器中;
每一個這樣的 xxxAutoConfiguration類都是容器中的一個組件,都加入到容器中;用他們來做自動配置;
3)负蠕、每一個自動配置類進行自動配置功能;
根據(jù)當前不同的條件判斷蛙埂,決定這個配置類是否生效;
4)遮糖、一但這個配置類生效;這個配置類就會給容器中添加各種組件;這些組件的屬性是從對應的properties類中獲取 的绣的,這些類里面的每一個屬性又是和配置文件綁定的;
5)、所有在配置文件中能配置的屬性都是在xxxxProperties類中封裝者‘;配置文件能配置什么就可以參照某個功 能對應的這個屬性類
30欲账、怎么用好自動配置屡江,精髓:
1)、SpringBoot啟動會加載大量的自動配置類
2)赛不、我們看我們需要的功能有沒有SpringBoot默認寫好的自動配置類;
3)惩嘉、我們再來看這個自動配置類中到底配置了哪些組件;(只要我們要用的組件有,我們就不需要再來配置了)
4)俄删、給容器中自動配置類添加組件的時候宏怔,會從properties類中獲取某些屬性。我們就可以在配置文件中指定這 些屬性的值;
31畴椰、日志框架:
SpringBoot選用 SLF4j和logback;
如何讓系統(tǒng)中所有的日志都統(tǒng)一到slf4j;
1臊诊、將系統(tǒng)中其他日志框架先排除出去;
2、用中間包來替換原有的日志框架;
3斜脂、我們導入slf4j其他的實現(xiàn)
SpringBoot能自動適配所有的日志抓艳,而且底層使用slf4j+logback的方式記錄日志
32、Spring Boot帚戳、Spring MVC 和 Spring 有什么區(qū)別
Spring 是一個“引擎”玷或,
Spring MVC是基于Spring的一個 MVC 框架,
Spring Boot是基于 Spring的一套快速開發(fā)整合包
33片任、我們如何監(jiān)視所有 Spring Boot 微服務偏友?
Spring Boot 提供監(jiān)視器端點以監(jiān)控各個微服務的度量。這些端點對于獲取有關應用程序的信息(如它們是否已啟動)以及它們的組件(如數(shù)據(jù)庫等)是否正常運行很有幫助对供。但是位他,使用監(jiān)視器的一個主要缺點或困難是,我們必須單獨打開應用程序的知識點以了解其狀態(tài)或健康狀況产场。想象一下涉及 50 個應用程序的微服務鹅髓,管理員將不得不擊中所有 50 個應用程序的執(zhí)行終端。
嗨京景,你好呀窿冯,未來的架構師,本文由Java架構師面試網(wǎng)www.javajiagoushi.com收集整理并進行編輯發(fā)布确徙,謝謝大家的支持~