springcloud 面試經常被問問題

Spring Cloud 是一個基于 Spring Boot 的微服務架構解決方案,包含了許多用于構建和管理微服務的工具和框架。在面試中,與 Spring Cloud 相關的問題通常會涉及其核心概念、組件、常用模式和解決方案。以下是一些在 Spring Cloud 面試中經常被問到的問題及其解答:

1. Spring Cloud 的核心組件有哪些?

Spring Cloud 包含許多核心組件,常見的有:

  • Spring Cloud Config:分布式配置管理工具,支持配置文件的集中管理和動態刷新。
  • Spring Cloud Netflix:包括 Eureka(服務注冊與發現)、Ribbon(客戶端負載均衡)、Hystrix(熔斷器)、Zuul(API 網關)等。
  • Spring Cloud Gateway:API 網關,替代 Zuul,提供更高效的路由和過濾功能。
  • Spring Cloud Sleuth:分布式追蹤工具,集成 Zipkin 或者 Jaeger。
  • Spring Cloud Stream:消息驅動的微服務框架,支持多種消息中間件(如 Kafka、RabbitMQ)。
  • Spring Cloud Bus:事件總線,通常用于動態刷新配置。
  • Spring Cloud OpenFeign:聲明式 HTTP 客戶端,簡化了 HTTP 調用。

2. 什么是服務注冊與發現?Spring Cloud 是如何實現的?

服務注冊與發現是微服務架構中的一個關鍵概念,指的是服務實例的動態注冊和發現。一個服務注冊中心負責維護服務實例的列表,每個微服務在啟動時會將自己的地址和元數據注冊到服務注冊中心。

Spring Cloud 中常用的服務注冊與發現組件是 Netflix Eureka。

服務注冊與發現的流程

  1. 服務注冊:服務實例在啟動時向 Eureka Server 注冊自己的信息(如服務名、實例地址等)。
  2. 服務發現:客戶端在調用服務時,向 Eureka Server 查詢需要調用的服務實例列表。

示例代碼

  • 配置 Eureka Server:
 

java復制代碼

@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }

  • 配置 Eureka Client:
 

java復制代碼

@EnableEurekaClient @SpringBootApplication public class EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientApplication.class, args); } }

3. 什么是負載均衡?Spring Cloud 是如何實現的?

負載均衡是將請求分配到多個服務實例上的技術,以提高系統的可用性和性能。Spring Cloud 提供了客戶端負載均衡的解決方案,主要通過 Ribbon 實現。

Ribbon 的主要特性

  • 提供一組負載均衡策略(如輪詢、隨機、權重等)。
  • 支持動態刷新服務列表。

示例代碼

 

java復制代碼

@LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); }

4. 什么是熔斷器?Spring Cloud 是如何實現的?

熔斷器是一種保護機制,用于防止服務之間的級聯故障。它會在檢測到一個服務實例不可用時,直接返回錯誤響應,避免繼續調用該不可用實例。

Spring Cloud 使用 Netflix Hystrix 實現熔斷器。

Hystrix 的主要特性

  • 監控和隔離服務調用。
  • 提供回退機制(Fallback)。
  • 提供實時指標監控。

示例代碼

 

java復制代碼

@HystrixCommand(fallbackMethod = "fallbackMethod") public String someMethod() { // 可能會失敗的服務調用 } public String fallbackMethod() { return "Fallback response"; }

5. 什么是 API 網關?Spring Cloud 是如何實現的?

API 網關是微服務架構中的一個重要組件,用于統一管理和路由客戶端請求,提供認證、鑒權、限流、日志等功能。

Spring Cloud 提供兩種 API 網關解決方案:

  • Zuul:Netflix 提供的 API 網關解決方案,通常用于 Spring Cloud Netflix 生態系統。
  • Spring Cloud Gateway:Spring 團隊開發的 API 網關,性能更高,功能更強大,通常用于替代 Zuul。

Spring Cloud Gateway 示例代碼

 

yaml復制代碼

spring: cloud: gateway: routes: - id: some_route uri: http://some-service predicates: - Path=/some-path/** filters: - StripPrefix=1

6. 什么是 Spring Cloud Config?它的工作原理是什么?

Spring Cloud Config 是一個分布式配置管理工具,用于集中管理多個微服務的配置文件,支持動態刷新配置。

工作原理

  1. 配置存儲:配置文件存儲在一個集中式的存儲庫中(如 Git、SVN、文件系統)。
  2. 配置服務器:Spring Cloud Config Server 從集中式存儲庫中讀取配置文件,并將其提供給客戶端。
  3. 配置客戶端:Spring Cloud Config Client 在啟動時向 Config Server 請求配置文件,加載并應用配置。

示例代碼

  • 配置服務器:
 

java復制代碼

@EnableConfigServer @SpringBootApplication public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }

  • 配置客戶端(bootstrap.yml):
 

yaml復制代碼

spring: application: name: some-service cloud: config: uri: http://localhost:8888

7. 什么是分布式追蹤?Spring Cloud 是如何實現的?

分布式追蹤用于跟蹤跨多個服務的請求鏈路,幫助開發者監控和調試分布式系統。

Spring Cloud Sleuth 提供了分布式追蹤的解決方案,集成了 Zipkin 或 Jaeger。

Spring Cloud Sleuth 的主要功能

  • 自動為應用添加唯一的追蹤 ID 和跨度 ID。
  • 提供日志和追蹤數據的關聯。
  • 集成 Zipkin 或 Jaeger 進行集中式追蹤數據采集和展示。

示例代碼

 

xml復制代碼

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency>

8. 如何在 Spring Cloud 中實現服務網格(Service Mesh)?

服務網格是一種用于管理微服務間通信的基礎設施層,提供服務發現、負載均衡、故障恢復、監控和安全等功能。常見的服務網格實現包括 Istio 和 Linkerd。

雖然 Spring Cloud 本身不是服務網格解決方案,但可以與 Istio 等服務網格集成,以增強微服務架構。

集成步驟

  1. 部署 Istio:在 Kubernetes 集群中部署 Istio。
  2. 注入 Sidecar:為 Spring Cloud 服務注入 Istio Sidecar 代理(通常是 Envoy)。
  3. 配置 Istio:使用 Istio 的配置文件(如 VirtualService 和 DestinationRule)管理服務流量。

9. 如何在 Spring Cloud 中實現服務容錯和限流?

服務容錯和限流是保證系統穩定性的重要手段。Spring Cloud 提供了多種實現方式:

  • Hystrix:用于服務容錯,包括熔斷和降級機制。
  • Resilience4j:新的容錯庫,靈活且輕量,支持熔斷、限流、重試等功能。
  • Sentinel:阿里巴巴開源的流量控制、熔斷和降級組件。

Resilience4j 示例代碼

 

java復制代碼

@Bean public CircuitBreakerConfig customCircuitBreakerConfig() { return CircuitBreakerConfig.custom() .failureRateThreshold(50) .waitDurationInOpenState(Duration.ofMillis(1000)) .slidingWindowSize(2) .build(); } @Bean public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer() { return factory -> factory.configure(builder -> builder.circuitBreakerConfig(customCircuitBreakerConfig()), "backendA"); } @Autowired private Resilience4JCircuitBreakerFactory circuitBreakerFactory; public String someMethod() { CircuitBreaker circuitBreaker = circuitBreakerFactory.create("backendA"); return circuitBreaker.executeSupplier(() -> { // 可能會失敗的服務調用 return "Success"; }); }

10. 如何在 Spring Cloud 中實現分布式事務?

分布式事務是跨多個服務的一致性事務。Spring Cloud 提供了多種分布式事務解決方案:

  • TCC(Try-Confirm/Cancel):通過分布式事務協調器管理分布式事務。
  • Saga:使用補償

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42647.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42647.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42647.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux系統(Centos)下MySQL數據庫中文亂碼問題解決

問題描述&#xff1a;在進行數據庫使用過程中&#xff0c;數據庫里的數據中文都顯示亂碼。操作數據庫的時候&#xff0c;會出現中文亂碼問題。 解決方法如下&#xff1a; 第一步&#xff1a;打開虛擬機進入系統&#xff0c;啟動MySQL。 第二步&#xff1a;連接登錄MySQL輸入…

Java面試題系列 - 第4天

題目&#xff1a;深入理解Java泛型與類型擦除 背景說明&#xff1a;Java泛型是Java SE 5引入的一種新特性&#xff0c;它允許在編譯時檢查類型安全&#xff0c;并且所有的強制轉換都是自動和隱式的&#xff0c;提高了代碼的重用率。然而&#xff0c;Java泛型的實現背后有一個重…

執行力不足是因為選擇模糊

選擇模糊&#xff1a;執行力不足的根源 選擇模糊是指在面對多個選項時&#xff0c;缺乏明確的目標和方向。這種模糊感會導致猶豫不決&#xff0c;進而影響我們的執行力。 選擇模糊的表現&#xff1a; 目標不明確&#xff0c;不知道應該做什么。優先級混亂&#xff0c;不清楚…

Docker-12 Docker常用命令

一、查看docker版本信息 docker version # 查看Docker版本信息二、啟動/停止docker 服務 systemctl start docker # 啟動 docker 服務 systemctl stop docker # 停止 docker 服務三、鏡像命令 docker images # 查看鏡像 docker search 鏡像名稱 # 搜索鏡像…

分布式技術棧、微服務架構 區分

1.分布式技術棧 這些技術棧都是為了更好的開發分布式架構的項目。 &#xff08;大營銷平臺的系統框架如下圖&#xff0c;擴展的分布式技術棧&#xff09; &#xff08;1&#xff09;Dubbo——分布式技術棧 DubboNacos注冊中心是應用可以分布式部署&#xff0c;并且提供RPC接…

BOM和DOM

關于DOM、BOM和diff算法 瀏覽器對象模型&#xff08;Browser Object Model&#xff0c;簡稱BOM&#xff09;和文檔對象模型&#xff08;Document Object Model&#xff0c;簡稱DOM&#xff09;是Web開發中的兩個核心概念&#xff0c;它們都與瀏覽器和網頁的交互有關。以下是BOM…

Codeforces Round 955 E. Number of k-good subarrays【分治、記憶化】

E. Number of k-good subarrays 題意 定義 b i t ( x ) bit(x) bit(x) 為 x x x 的二進制表示下 1 1 1 的數量 一個數組的子段被稱為 k ? g o o d k-good k?good 的當且僅當&#xff1a;對于這個子段內的每個數 x x x&#xff0c;都有 b i t ( x ) ≤ k bit(x) \leq k…

鴻蒙開發管理:【@ohos.account.distributedAccount (分布式帳號管理)】

分布式帳號管理 本模塊提供管理分布式帳號的一些基礎功能&#xff0c;主要包括查詢和更新帳號登錄狀態。 說明&#xff1a; 本模塊首批接口從API version 7開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。開發前請熟悉鴻蒙開發指導文檔&#xff…

自動化設備上位機設計 四

目錄 一 設計原型 二 后臺代碼 一 設計原型 二 后臺代碼 using SimpleTCP; using SqlSugar; using System.Text;namespace 自動化上位機設計 {public partial class Form1 : Form{SqlHelper sqlHelper new SqlHelper();SqlSugarClient dbContent null;bool IsRun false;i…

C# 命名規范

開頭bool類型的變量常用縮寫 變量命名規范camelCase: 私有字段&#xff0c;局部變量&#xff0c;入參PascalCase: 命名空間、類名&#xff0c;方法名snake_ case、 kebab_case: 不使用 一般方法名稱遵守PascalCase命名規范例外情況: 異步方法異步方法例外情況 合理選擇單詞選擇…

【CSS】縮寫屬性place-items

place-items 是 CSS 中的一個簡寫屬性&#xff0c;它允許在相關的布局&#xff08;如 Grid 或 Flexbox&#xff09;中同時沿著塊級和內聯方向對齊元素。這個屬性是 align-items 和 justify-items 屬性的簡寫形式。如果未提供第二個值&#xff0c;則第一個值將作為第二個值的默認…

論文翻譯 | (DSP)展示-搜索-預測:為知識密集型自然語言處理組合檢索和語言模型

摘要 檢索增強式上下文學習已經成為一種強大的方法&#xff0c;利用凍結語言模型 (LM) 和檢索模型 (RM) 來解決知識密集型任務。現有工作將這些模型結合在簡單的“檢索-讀取”流程中&#xff0c;其中 RM 檢索到的段落被插入到 LM 提示中。 為了充分發揮凍結 LM 和 RM 的…

ARM/Linux嵌入式面經(十一):地平線嵌入式實習

地平線嵌入式實習面經 1.自我介紹 等著,在給大哥們準備了。 2.spi與iic協議可以連接多個設備嗎?最多多少個?通訊時序。 這是幾個問題,在回答的時候。不要一問就開口,花幾秒鐘沉吟思考整理一下自己的思路。 這個問題問了幾個點?每個點的回答步驟。 是我的話,我會采用以…

# Sharding-JDBC 從入門到精通(9)- 綜合案例(二)添加商品

Sharding-JDBC 從入門到精通&#xff08;9&#xff09;- 綜合案例&#xff08;二&#xff09;添加商品 一、Sharding-JDBC 綜合案例-添加商品-dao 1、在 shopping 子工程&#xff08;子模塊&#xff09;中&#xff0c;創建 dao 接口類 ProductDao.java /*** dbsharding\sh…

基于深度學習LightWeight的人體姿態之行為識別系統源碼

一. LightWeight概述 light weight openpose是openpose的簡化版本&#xff0c;使用了openpose的大體流程。 Light weight openpose和openpose的區別是&#xff1a; a 前者使用的是Mobilenet V1&#xff08;到conv5_5&#xff09;&#xff0c;后者使用的是Vgg19&#xff08;前10…

哈希表——C語言

哈希表&#xff08;Hash Table&#xff09;是一種高效的數據結構&#xff0c;能夠在平均情況下實現常數時間的查找、插入和刪除操作。 哈希表的核心是哈希函數&#xff0c;哈希函數是一個將輸入數據&#xff08;通常稱為“鍵”或“key”&#xff09;轉換為固定長度的整數的函數…

Efficient Contrastive Learning for Fast and Accurate Inference on Graphs

發表于:ICML24 推薦指數: #paper/??? 創新點一顆星,證明三顆星(證明的不錯,值得借鑒,但是思路只能說還行吧) 如圖, 本文采取的創新點就是MLP用原始節點,GCN用鄰居節點的對比學習.這樣,可以加快運算速度 L E C L ? 1 ∣ V ∣ ∑ v ∈ V 1 ∣ N ( v ) ∣ ∑ u ∈ N ( v )…

一篇文章Scala語言入門

Scala是一種現代編程語言&#xff0c;它結合了面向對象編程和函數式編程的特性&#xff0c;使得編寫簡潔、可擴展和高效的代碼成為可能。 1. 什么是Scala&#xff1f; Scala&#xff08;Scalable Language&#xff09;是一種面向對象和函數式編程語言。它運行在JVM&#xff0…

k8s 部署 springboot 項目內存持續增長問題分析解決

寫在前面 工作中遇到&#xff0c;請教公司前輩解決&#xff0c;簡單整理記憶博文內容涉及一次 GC 問題的分析以及解決理解不足小伙伴幫忙指正 &#x1f603;,生活加油 99%的焦慮都來自于虛度時間和沒有好好做事&#xff0c;所以唯一的解決辦法就是行動起來&#xff0c;認真做完…

語音識別FBank特征提取學習筆記

語音識別就是把一段語音信號轉換成對應的文本信息&#xff0c;這一過程包括四個大的模塊&#xff0c;分別是&#xff1a;特征提取、聲學模型、語言模型、字典與解碼。 本篇就來梳理一下特征提取模塊的實現思路和方法。 常用的語音特征有&#xff1a; 梅爾頻率倒譜系數&#x…