Java面試題-Spring Boot和Spring Cloud(持續更新)

Spring Boot相關模塊介紹

Spring IO platform:用於系統部署,是可集成的,構建現代化應用的版本平臺,具體來說當你使用maven dependency引入spring jar包時它就在工作了。

Spring Boot:旨在簡化創建產品級的 Spring 應用和服務,簡化了配置文件,使用嵌入式web服務器,含有諸多開箱即用微服務功能,可以和spring cloud聯合部署。

Spring Framework:即通常所說的spring 框架,是一個開源的Java/Java EE全功能棧應用程序框架,其它spring項目如spring boot也依賴於此框架。

Spring Cloud:微服務工具包,爲開發者提供了在分佈式系統的配置管理、服務發現、斷路器、智能路由、微代理、控制總線等開發工具包。

Spring XD:是一種運行時環境(服務器軟件,非開發框架),組合spring技術,如spring batch、spring boot、spring data,採集大數據並處理。

Spring Data:是一個數據訪問及操作的工具包,封裝了很多種數據及數據庫的訪問相關技術,包括:jdbc、Redis、MongoDB、Neo4j等。

Spring Batch:批處理框架,或說是批量任務執行管理器,功能包括任務調度、日誌記錄/跟蹤等。

Spring Security:是一個能夠爲基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。

Spring Integration:面向企業應用集成(EAI/ESB)的編程框架,支持的通信方式包括HTTP、FTP、TCP/UDP、JMS、RabbitMQ、Email等。

Spring Social:一組工具包,一組連接社交服務API,如Twitter、Facebook、LinkedIn、GitHub等,有幾十個。

Spring AMQP:消息隊列操作的工具包,主要是封裝了RabbitMQ的操作。

Spring HATEOAS:是一個用於支持實現超文本驅動的 REST Web 服務的開發庫。

Spring Mobile:是Spring MVC的擴展,用來簡化手機上的Web應用開發。

Spring for Android:是Spring框架的一個擴展,其主要目的在乎簡化Android本地應用的開發,提供RestTemplate來訪問Rest服務。

Spring Web Flow:目標是成爲管理Web應用頁面流程的最佳方案,將頁面跳轉流程單獨管理,並可配置。

Spring LDAP:是一個用於操作LDAP的Java工具包,基於Spring的JdbcTemplate模式,簡化LDAP訪問。

Spring Session:session管理的開發工具包,讓你可以把session保存到redis等,進行集羣化session管理。

Spring Web Services:是基於Spring的Web服務框架,提供SOAP服務開發,允許通過多種方式創建Web服務。

Spring Shell:提供交互式的Shell可讓你使用簡單的基於Spring的編程模型來開發命令,比如Spring Roo命令。

Spring Roo:是一種Spring開發的輔助工具,使用命令行操作來生成自動化項目,操作非常類似於Rails。

Spring Scala:爲Scala語言編程提供的spring框架的封裝(新的編程語言,Java平臺的Scala於2003年底/2004年初發布)。

Spring BlazeDS Integration:一個開發RIA工具包,可以集成Adobe Flex、BlazeDS、Spring以及Java技術創建RIA。

Spring Loaded:用於實現java程序和web應用的熱部署的開源工具。

Spring REST Shell:可以調用Rest服務的命令行工具,敲命令行操作Rest服務。

Spring cloud相關模塊介紹

Spring Cloud Config:配置管理開發工具包,可以讓你把配置放到遠程服務器,目前支持本地存儲、Git以及Subversion。

Spring Cloud Bus:事件、消息總線,用於在集羣(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。

Spring Cloud Netflix:針對多種Netflix組件提供的開發工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。

Netflix Eureka:雲端負載均衡,一個基於 REST 的服務,用於定位服務,以實現雲端的負載均衡和中間層服務器的故障轉移。

Netflix Hystrix:容錯管理工具,旨在通過控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。

Netflix Zuul:邊緣服務工具,是提供動態路由,監控,彈性,安全等的邊緣服務。

Netflix Archaius:配置管理API,包含一系列配置管理API,提供動態類型化屬性、線程安全配置操作、輪詢框架、回調機制等功能。

Spring Cloud for Cloud Foundry:通過Oauth2協議綁定服務到CloudFoundry,CloudFoundry是VMware推出的開源PaaS雲平臺。

Spring Cloud Sleuth:日誌收集工具包,封裝了Dapper,Zipkin和HTrace操作。

Spring Cloud Data Flow:大數據操作工具,通過命令行方式操作數據流。

Spring Cloud Security:安全工具包,爲你的應用程序添加安全控制,主要是指OAuth2。

Spring Cloud Consul:封裝了Consul操作,consul是一個服務發現與配置工具,與Docker容器可以無縫集成。

Spring Cloud Zookeeper:操作Zookeeper的工具包,用於使用zookeeper方式的服務註冊和發現。

Spring Cloud Stream:數據流操作開發包,封裝了與Redis,Rabbit、Kafka等發送接收消息。

Spring Cloud CLI:基於 Spring Boot CLI,可以讓你以命令行方式快速建立雲組件。

什麼是 Spring Boot?

        Spring Boot 是 Spring 開源組織下的子項目,是 Spring 組件一站式解決方案,主要是簡化了使用 Spring 的難度,簡省了繁重的配置,提供了各種啓動器,開發者能快速上手。

爲什麼要用 Spring Boot?

        Spring Boot 優點非常多,如:
        獨立運行
        簡化配置
        自動配置
        無代碼生成和XML配置
        應用監控
        上手容易
        …
        Spring Boot 集這麼多優點於一身,還有理由不使用它呢?

Spring Boot 的核心配置文件有哪幾個?它們的區別是什麼?

        Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。application 配置文件這個容易理解,主要用於 Spring Boot 項目的自動化配置。bootstrap 配置文件有以下幾個應用場景。
        使用 Spring Cloud Config 配置中心時,這時需要在 bootstrap 配置文件中添加連接到配置中心的配置屬性來加載外部配置中心的配置信息;一些固定的不能被覆蓋的屬性;一些加密/解密的場景;

Spring Boot 的配置文件有哪幾種格式?它們有什麼區別?

        .properties 和 .yml,它們的區別主要是書寫格式不同。另外,.yml 格式不支持@PropertySource註解導入配置。

Spring Boot 的核心註解是哪個?它主要由哪幾個註解組成的?

        啓動類上面的註解是@SpringBootApplication,它也是 Spring Boot 的核心註解,主要組合包含了以下 3 個註解:
        @SpringBootConfiguration:組合了 @Configuration 註解,實現配置文件的功能。
        @EnableAutoConfiguration:打開自動配置的功能,也可以關閉某個自動配置的選項,如關閉數據源自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
        @ComponentScan:Spring組件掃描。

開啓 Spring Boot 特性有哪幾種方式?

        1)繼承spring-boot-starter-parent項目
        2)導入spring-boot-dependencies項目依賴

Spring Boot 需要獨立的容器運行嗎?

        可以不需要,內置了 Tomcat/ Jetty 等容器。

運行 Spring Boot 有哪幾種方式?

        1)打包用命令或者放到容器中運行
        2)用 Maven/ Gradle 插件運行
        3)直接執行 main 方法運行

Spring Boot 自動配置原理是什麼?

        註解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自動配置的核心,首先它得是一個配置文件,其次根據類路徑下是否有這個類去自動配置。

Spring Boot 2.X 有什麼新特性?與 1.X 有什麼區別?

  1. 配置變更
  2. JDK 版本升級
  3. 第三方類庫升級
  4. 響應式 Spring 編程支持
  5. HTTP/2 支持
  6. 配置屬性綁定
  7. 更多改進與加強

你如何理解 Spring Boot 中的 Starters?

        Starters可以理解爲啓動器,它包含了一系列可以集成到應用裏面的依賴包,你可以一站式集成 Spring 及其他技術,而不需要到處找示例代碼和依賴包。

Spring Boot 有哪幾種讀取配置的方式?

        Spring Boot 可以通過 @PropertySource,@Value,@Environment, @ConfigurationProperties 來綁定變量,

什麼是Spring Cloud

  Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啓動和部署。通過Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式

spring cloud 的核心組件有哪些?

Eureka:服務註冊於發現。
Feign:基於動態代理機制,根據註解和選擇的機器,拼接請求 url 地址,發起請求。
Ribbon:實現負載均衡,從一個服務的多臺機器中選擇一臺。
Hystrix:提供線程池,不同的服務走不同的線程池,實現了不同服務調用的隔離,避免了服務雪崩的問題。
Zuul:網關管理,由 Zuul 網關轉發請求給對應的服務。

SpringCloud和Dubbo

  SpringCloud和Dubbo都是現在主流的微服務架構,SpringCloud是Apache旗下的Spring體系下的微服務解決方案,Dubbo是阿里系的分佈式服務治理框架。
  從技術維度上,其實SpringCloud遠遠的超過Dubbo,Dubbo本身只是實現了服務治理,而SpringCloud現在以及有21個子項目以後還會更多,所以其實很多人都會說Dubbo和SpringCloud是不公平的,但是由於RPC以及註冊中心元數據等原因,在技術選型的時候我們只能二者選其一,所以我們常常爲用他倆來對比。
  服務的調用方式Dubbo使用的是RPC遠程調用,而SpringCloud使用的是 Rest API,其實更符合微服務官方的定義。
  服務的註冊中心來看,Dubbo使用了第三方的ZooKeeper作爲其底層的註冊中心,實現服務的註冊和發現。SpringCloud使用Spring Cloud Netflix Eureka實現註冊中心,當然SpringCloud也可以使用ZooKeeper實現,但一般我們不會這樣做。
  服務網關,Dubbo並沒有本身的實現,只能通過其他第三方技術的整合,而SpringCloud有Zuul路由網關,作爲路由服務器,進行消費者的請求分發。SpringCloud還支持斷路器,與git完美集成分佈式配置文件支持版本控制,事務總線實現配置文件的更新與服務自動裝配等等一系列的微服務架構要素。

從技術選型上講

  目前國內的分佈式系統選型主要還是Dubbo畢竟國產,而且國內工程師的技術熟練程度高,並且Dubbo在其他維度上的缺陷可以由其他第三方框架進行集成進行彌補。而SpringCloud目前是國外比較流行,當然我覺得國內的市場也會慢慢的偏向SpringCloud。

Rest和RPC對比

  RPC最主要的缺陷就是服務提供方和調用方式之間依賴太強,我們需要爲每一個微服務進行接口的定義,並通過持續繼承發佈,需要嚴格的版本控制纔不會出現服務提供和調用之間因爲版本不同而產生的衝突。
  而REST是輕量級的接口,服務的提供和調用不存在代碼之間的耦合,只是通過一個約定進行規範,但也有可能出現文檔和接口不一致而導致的服務集成問題,可以通過swagger工具整合,是代碼和文檔一體化解決,所以REST在分佈式環境下比RPC更加靈活。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章