2021年嗶哩嗶哩Java高級面試題及答案,京東高級Java面試

程序員uzi 2021-09-18 11:46:54 阅读数:758

java 答案 java

一、Spring Cloud微服務概念定義

提起微服務,不得不提 Spring Cloud 全家桶系列,Spring Cloud 是一個服務治理平臺,是若幹個框架的集合,提供了全套的分布式系統解决方案。包含了:服務注册與發現、配置中心、服務網關、智能路由、負載均衡、斷路器、監控跟踪、分布式消息隊列等等。

Spring Cloud 通過 Spring Boot 風格的封裝,屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、容易部署的分布式系統開發工具包。開發者可以快速的啟動服務或構建應用、同時能够快速和雲平臺資源進行對接。微服務是可以獨立部署、水平擴展、獨立訪問(或者有獨立的數據庫)的服務單元,Spring Cloud 就是這些微服務的大管家,采用了微服務這種架構之後,項目的數量會非常多,Spring Cloud 做為大管家需要管理好這些微服務,自然需要很多小弟來幫忙。

2021年嗶哩嗶哩Java高級面試題及答案,京東高級Java面試_後端

二、Spring Cloud子項目

Spring Cloud 包含很多子項目,我們重點圍繞 Netflix 和 Alibaba 兩個標准實現給大家介紹:

2021年嗶哩嗶哩Java高級面試題及答案,京東高級Java面試_程序員_02

三、Spring Cloud Netflix 第一代

2021年嗶哩嗶哩Java高級面試題及答案,京東高級Java面試_Java_03

Netflix是一家美國公司,在美國、加拿大提供互聯網隨選流媒體播放,定制DVD、藍光光碟在線出租業務。該公司成立於1997年,總部比特於加利福尼亞州洛斯蓋圖,1999年開始訂閱服務。2009年,該公司可提供多達10萬部DVD電影,並有1千萬的訂戶。2007年2月25日,Netflix宣布已經售出第10億份DVD。HIS一份報告中錶示,2011年Netflix網絡電影銷量占據美國用戶在線電影總銷量的45%。
?

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

  • Netflix Eureka:一個基於 Rest 服務的服務治理組件,包括服務注册中心、服務注册與服務發現機制的實現,實現了雲端負載均衡和中間層服務器的故障轉移。
  • Netflix Ribbon:客戶端負載均衡的服務調用組件。
  • Netflix Hystrix:容錯管理工具,實現斷路器模式,通過控制服務的節點,從而對延遲和故障提供更强大的容錯能力。
  • Netflix Feign:基於 Ribbon 和 Hystrix 的聲明式服務調用組件。
  • Netflix Zuul:微服務網關,提供動態路由,訪問過濾等服務。
  • Netflix Archaius:配置管理 API,包含一系列配置管理 API,提供動態類型化屬性、線程安全配置操作、輪詢框架、回調機制等功能。

四、Spring Cloud Alibaba 第二代

同 Spring Cloud 一樣,Spring Cloud Alibaba 也是一套微服務解决方案。Spring Cloud Alibaba 致力於提供微服務開發的一站式解决方案。此項目包含開發分布式應用微服務的必需組件,方便開發者通過 Spring Cloud 編程模型輕松使用這些組件來開發分布式應用服務。

依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以將 Spring Cloud 應用接入阿裏微服務解决方案,通過阿裏中間件來迅速搭建分布式應用系統。

這幅圖是 Spring Cloud Alibaba 系列組件,其中包含了阿裏開源組件,阿裏雲商業化組件,以及集成 Spring Cloud 組件。

?2021年嗶哩嗶哩Java高級面試題及答案,京東高級Java面試_後端_04

「阿裏開源組件」

  • Nacos:阿裏巴巴開源產品,一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。
  • Sentinel:面向分布式服務架構的輕量級流量控制產品,把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
  • RocketMQ:一款開源的分布式消息系統,基於高可用分布式集群技術,提供低延時的、高可靠的消息發布與訂閱服務。
  • Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架,用於實現服務通信。
  • Seata:阿裏巴巴開源產品,一個易於使用的高性能微服務分布式事務解决方案。

「阿裏商業化組件」

  • Alibaba Cloud ACM:一款在分布式架構環境中對應用配置進行集中管理和推送的應用配置中心產品。
  • Alibaba Cloud OSS:阿裏雲對象存儲服務(Object Storage Service,簡稱 OSS),是阿裏雲提供的海量、安全、低成本、高可靠的雲存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
  • Alibaba Cloud SchedulerX:阿裏中間件團隊開發的一款分布式任務調度產品,提供秒級、精准、高可靠、高可用的定時(基於 Cron 錶達式)任務調度服務。
  • Alibaba Cloud SMS:覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。

作為 Spring Cloud 體系下的新實現,Spring Cloud Alibaba 跟官方的組件或其它的第三方實現如 Netflix,Consul,Zookeeper 等對比,具備了更多的功能:

2021年嗶哩嗶哩Java高級面試題及答案,京東高級Java面試_後端_05

五、常用組件

  • Spring Cloud Netflix Eureka:服務注册中心。
  • Spring Cloud Zookeeper:服務注册中心。
  • Spring Cloud Consul:服務注册和配置管理中心。
  • Spring Cloud Netflix Ribbon:客戶端負載均衡。
  • Spring Cloud Netflix Hystrix:服務容錯保護。
  • Spring Cloud Netflix Feign:聲明式服務調用。
  • Spring Cloud OpenFeign(可替代 Feign):OpenFeign 是 Spring Cloud 在 Feign 的基礎上支持了 Spring MVC 的注解,如 @RequesMapping等等。OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,並通過動態代理的方式產生實現類,實現類中做負載均衡並調用其他服務。
  • Spring Cloud Netflix Zuul:API 網關服務,過濾、安全、監控、限流、路由。
  • Spring Cloud Gateway(可替代 Zuul):Spring Cloud Gateway 是 Spring 官方基於 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術開發的網關,Spring Cloud Gateway 旨在為微服務架構提供一種簡單而有效的統一的 API 路由管理方式。Spring Cloud Gateway 作為 Spring Cloud 生態系中的網關,目標是替代 Netflix Zuul,其不僅提供統一的路由方式,並且基於 Filter 鏈的方式提供了網關基本的功能,例如:安全,監控/埋點,和限流等。
  • Spring Cloud Security:安全認證。
  • Spring Cloud Config:分布式配置中心。配置管理工具,支持使用 Git 存儲配置內容,支持應用配置的外部化存儲,支持客戶端配置信息刷新、加解密配置內容等。
  • Spring Cloud Bus:事件、消息總線,用於在集群(例如,配置變化事件)中傳播狀態變化,可與 Spring Cloud Config 聯合實現熱部署。
  • Spring Cloud Stream:消息驅動微服務。
  • Spring Cloud Sleuth:分布式服務跟踪。
  • Spring Cloud Alibaba Nacos:阿裏巴巴開源產品,一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。
  • Spring Cloud Alibaba Sentinel:面向分布式服務架構的輕量級流量控制產品,把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
  • Spring Cloud Alibaba RocketMQ:一款開源的分布式消息系統,基於高可用分布式集群技術,提供低延時的、高可靠的消息發布與訂閱服務。
  • Spring Cloud Alibaba Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架,用於實現服務通信。
  • Spring Cloud Alibaba Seata:阿裏巴巴開源產品,一個易於使用的高性能微服務分布式事務解决方案。

六、總結

2021年嗶哩嗶哩Java高級面試題及答案,京東高級Java面試_Java_06

雖然 Eureka,Hystrix 等不再繼續開發或維護,但是目前來說不影響使用,不管怎麼說感謝開源,向 Netflix 公司的開源致敬。

最後

對於很多Java工程師而言,想要提昇技能,往往是自己摸索成長,不成體系的學習效果低效漫長且無助。

整理的這些資料希望對Java開發的朋友們有所參考以及少走彎路,本文的重點是你有沒有收獲與成長,其餘的都不重要,希望讀者們能謹記這一點。

再分享一波我的Java面試真題+視頻學習詳解+技能進階書籍

 CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視頻】

2021年嗶哩嗶哩Java高級面試題及答案,京東高級Java面試_Java_07

版权声明:本文为[程序員uzi]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210918114653703f.html