實時反欺詐:基于 Spring Boot 與 Flink 構建信用卡風控系統

在金融科技飛速發展的今天,信用卡欺詐手段日益高明和快速。傳統的基于批處理的事后分析模式已難以應對實時性要求極高的欺詐場景。本文將詳細介紹如何利用
Spring Boot 和 Apache Flink 這對強大的組合,構建一個高性能、可擴展的實時信用卡反欺詐系統。

一、 核心思想:從“單點”到“模式”

傳統的反欺詐規則可能只關注單筆交易的某個特征,比如“金額是否過大”。而現代的欺詐行為往往是一種模式 (Pattern),在短時間內通過一系列看似正常的交易來達成目的。例如:

  • 高頻交易: 1分鐘內,在不同商戶連續交易超過5次。
  • 異地消費: 10分鐘內,在兩個物理上不可能到達的城市(如北京和廣州)都有消費記錄。
  • 短時大額: 5分鐘內,累計消費金額超過正常閾值(如2萬元)。
  • 深夜異常: 在用戶歷史睡眠時段(如凌晨3點),突然發生多筆交易。

這些模式的核心在于時間狀態。我們需要一個能夠跨多筆事件、在特定時間窗口內、為每個用戶維持狀態并進行復雜計算的引擎。這正是 Apache Flink 的用武之地。

好的,這是一個非常經典且有價值的場景。使用 Spring Boot + Flink 來實現實時信用卡反欺詐檢測,思路清晰的話,實現起來會非常高效。

下面是實現這個功能的整體思路,分為 數據流部分(Flink)查詢服務部分(Spring Boot)

調用方 (API Consumers)
API服務層 (Serving Layer)
高速狀態存儲 (State Store)
實時計算引擎 (Real-time Computing)
數據總線 (Data Bus)
業務系統 (Transaction Producers)
1. 發送交易事件
1. 發送交易事件
2. 持續消費交易流
3. 計算風險特征
4. 將結果寫入Redis
6. 查詢風險狀態 (毫秒級)
5. 調用API判斷風險
5. 調用API查詢用戶
7. 返回判斷結果
7. 返回判斷結果
支付網關
內部風控后臺
Spring Boot
反欺詐API服務
Redis
用戶風險狀態
Flink 集群
Kafka Topic
'transactions'
Web/App 應用
線下POS機

二、 實現思路

第一部分:實時特征計算 (Flink)

這部分是反欺詐系統的大腦,它不直接對外提供服務,而是持續不斷地在后臺消費交易數據,計算出能夠反映用戶行為模式的“實時特征”。

1. 數據源 (Source):

  • 目標: 獲取實時的信用卡交易流水。
  • 實現: 生產環境中,這通常是一個 Kafka Topic。每一筆交易(刷卡、線上支付)完成后,業務系統會立即發送一條消息到這個Topic。
    • 消息格式(JSON)應包含:transactionId, userId, amount, timestamp, merchantId, location (經緯度或城市代碼)等。

2. 數據流處理 (Flink Job):

  • 步驟1:數據解析與預處理

    • 從 Kafka Source 讀取原始JSON數據。
    • 將JSON字符串解析成 Transaction Java對象。
    • userId 進行 keyBy,確保同一個用戶的所有交易都在同一個處理線程上。
  • 步驟2:定義欺詐規則并計算特征 (核心)

    • 規則1:高頻交易檢測

      • 使用滑動窗口 (SlidingProcessingTimeWindows),比如 window(Time.minutes(1), Time.seconds(10)),表示窗口長度為1分鐘,每10秒滑動一次。
      • 在窗口函數中,計算窗口內的交易次數 count()
      • 如果 count > 5,則生成一個“高頻交易”的告警(Alert)事件。
    • 規則2:異地消費檢測

      • 使用滾動窗口 (TumblingProcessingTimeWindows),比如 window(Time.minutes(10))
      • 在窗口函數中,獲取該窗口內所有的交易記錄。
      • 檢查交易記錄中的 location 列表。如果發現地理位置變化異常(比如10分鐘內,在北京和廣州都有消費),則生成“異地消費”告警事件。
    • 規則3:短時大額消費

      • 使用滑動窗口,比如 window(Time.minutes(5), Time.seconds(30))
      • 在窗口函數中,對交易金額進行 sum()
      • 如果 sum > 20000 (比如2萬),則生成“短時大額”告警事件。
    • …可以定義更多、更復雜的規則。

  • 步驟3:特征/告警的輸出 (Sink)

    • 目標: 將計算出的實時特征或告警事件存儲起來,以便查詢。
    • 實現: 最理想的存儲是高速鍵值數據庫,如 Redis
      • 為什么用Redis? 查詢速度極快(毫秒級),非常適合用于在線服務的實時查詢。
      • 存儲什么?
        • 用戶狀態: 可以為每個userId在Redis中維護一個HASH。例如:KEY: user_status:{userId}
        • 特征值: FIELD: last_1min_tx_count, VALUE: 7
        • 告警標記: FIELD: has_high_freq_alert, VALUE: true
        • FIELD: last_alert_time, VALUE: 2023-10-27T14:30:00Z
      • Flink 作業的最后一步就是一個 FlinkRedisSink,它會把計算出的特征實時更新到 Redis 中。
第二部分:欺詐判斷服務 (Spring Boot)

這部分是反欺詐系統的“門面”,它接收外部請求,并給出“是否欺詐”的判斷。

1. 創建API接口:

  • 在 Spring Boot 中創建一個 RestController,例如 FraudDetectionController
  • 定義一個接口,比如 GET /api/fraud/check/{userId}

2. 接口實現邏輯:

  • 當這個接口被調用時,它會去查詢 Redis
  • 它會根據 userId 從 Redis 中獲取該用戶的實時狀態和特征(就是 Flink 作業計算后存入的那些)。
  • 判斷邏輯:
    • IF redis.get("user_status:{userId}", "has_high_freq_alert") == true
    • OR redis.get("user_status:{userId}", "has_geo_anomaly_alert") == true
    • THEN return "欺詐風險: 高"
    • 你還可以設計更復雜的評分卡模型,根據不同的特征和告警組合,計算出一個風險分數,然后根據分數返回不同的風險等級(高、中、低)。
  • 接口將最終的判斷結果(或風險分數)返回給調用方。

整體流程串聯

  1. 用戶的信用卡產生一筆交易。
  2. 業務系統將交易信息發送到 Kafka。
  3. Flink 作業實時消費 Kafka 中的交易數據。
  4. Flink 根據定義的規則(如1分鐘內交易次數)在內存中進行計算。
  5. 一旦某個規則被觸發(如交易次數 > 5),Flink 就會將一個告警或更新后的特征(如 last_1min_tx_count = 6)寫入 Redis
  6. 此時,另一個系統(如在線支付網關)在處理該用戶的下一筆支付前,調用 Spring Boot 提供的API /api/fraud/check/{userId}
  7. Spring Boot 應用從 Redis 中查詢該用戶的狀態,發現has_high_freq_alerttrue
  8. API 接口立即返回“高風險”的判斷。
  9. 支付網關收到高風險提示,可以選擇拒絕本次交易或要求用戶進行二次驗證。

這個架構將計算密集型的實時分析任務(Flink)和低延遲查詢服務任務(Spring Boot + Redis)完美地結合并解耦,是實現這類系統的標準且高效的模式。

二、 系統架構:計算與服務分離

為了構建一個健壯的系統,我們采用計算與服務分離的經典架構。

  1. 數據總線 (Message Bus) - Kafka:

    • 角色: 系統的“主動脈”。所有交易流水作為事件(Event)被實時發送到 Kafka 的特定主題(Topic)中。
    • 優點: 解耦了交易系統(生產者)和風控系統(消費者),提供了削峰填谷的數據緩沖能力和高容錯性。
  2. 實時計算引擎 (Computing Engine) - Apache Flink:

    • 角色: 系統的大腦。它持續消費 Kafka 中的交易數據,基于預設的欺詐規則進行實時計算。
    • 職責: 它不直接對外服務,唯一的任務就是計算出用戶的“實時風險特征”,如“最近1分鐘交易次數”、“是否存在異地消費告警”等。
  3. 高速狀態存儲 (State Store) - Redis:

    • 角色: Flink 與服務層之間的橋梁。
    • 職責: Flink 將計算出的實時特征和告警狀態高速寫入 Redis。我們為每個用戶維護一個鍵值對,例如一個 Hash 存儲該用戶的所有風險指標。
  4. API 服務層 (Serving Layer) - Spring Boot:

    • 角色: 系統的“門面”。它提供一個低延遲的 HTTP 接口,供其他業務系統(如支付網關)調用。
    • 職責: 當需要判斷一筆交易的風險時,外部系統調用此接口。接口的核心邏輯就是查詢 Redis,獲取指定用戶的實時風險狀態,并立即返回判斷結果。

三、 實現詳解

第一部分:Flink 實時特征計算

這是我們風控邏輯的核心。一個 Flink 作業通常包含 Source、Transformation、Sink 三個部分。

1. 數據源 (Source)
我們配置 Flink 從 Kafka 的 transactions 主題中消費數據。

// 交易數據模型
public class Transaction {Long userId;Double amount;Long timestamp;String location;// ... getters and setters
}// Flink 作業中創建Kafka數據源
KafkaSource<String> source = KafkaSource.<String>builder().setBootstrapServers(KAFKA_BROKERS).setTopics("transactions-topic").setGroupId("fraud-detection-group").setStartingOffsets(OffsetsInitializer.latest()).setValueOnlyDeserializer(new SimpleStringSchema()).build();DataStream<Transaction> transactionStream = env.fromSource(source, WatermarkStrategy.noWatermarks(), "Kafka Source").map(jsonString -> new ObjectMapper().readValue(jsonString, Transaction.class)); // JSON -> Object

2. 核心處理 (Transformation)
這是定義各種欺詐規則的地方。核心是先用 keyBy(userId) 將數據流按用戶ID進行分區,然后應用窗口邏輯。

示例:實現“1分鐘內高頻交易”檢測

我們使用滑動窗口 (Sliding Window),窗口長度為1分鐘,每10秒滑動一次。這意味著每10秒,我們都會檢查過去1分鐘的數據。

DataStream<FraudAlert> highFreqAlerts = transactionStream.keyBy(Transaction::getUserId).window(SlidingProcessingTimeWindows.of(Time.minutes(1), Time.seconds(10))).process(new ProcessWindowFunction<Transaction, FraudAlert, Long, TimeWindow>() {@Overridepublic void process(Long userId, Context context, Iterable<Transaction> elements, Collector<FraudAlert> out) {long count = 0;for (Transaction element : elements) {count++;}if (count > 5) { // 規則:1分鐘內交易超過5次out.collect(new FraudAlert(userId, "HIGH_FREQUENCY_ALERT", "1分鐘內交易次數: " + count));}}});

3. 結果輸出 (Sink)
計算出的告警事件需要被寫入 Redis,供 API 層查詢。

// 告警事件寫入Redis
// 實際中會使用 Flink 官方或第三方的 Redis Sink 連接器
highFreqAlerts.addSink(new MyCustomRedisSink()); // Redis Sink 偽代碼邏輯
public class MyCustomRedisSink extends RichSinkFunction<FraudAlert> {public void invoke(FraudAlert alert, Context context) {// 使用 Jedis 或 Lettuce 客戶端// KEY: user_status:{userId}, FIELD: has_high_freq_alert, VALUE: trueredisClient.hset("user_status:" + alert.getUserId(), "has_high_freq_alert", "true");redisClient.expire("user_status:" + alert.getUserId(), 300); // 設置5分鐘過期,自動降級}
}
第二部分:Spring Boot 欺詐判斷服務

API 服務層的實現非常輕量級。

@RestController
@RequestMapping("/api/fraud")
public class FraudDetectionController {@Autowiredprivate StringRedisTemplate redisTemplate;@GetMapping("/check/{userId}")public ResponseEntity<Map<String, Object>> checkFraud(@PathVariable String userId) {Map<String, Object> response = new HashMap<>();String key = "user_status:" + userId;// 直接從Redis查詢Flink計算好的狀態Boolean isHighFrequency = redisTemplate.opsForHash().hasKey(key, "has_high_freq_alert");// ...可以查詢更多由Flink計算的風險標簽...if (Boolean.TRUE.equals(isHighFrequency)) {response.put("riskLevel", "HIGH");response.put("reason", "檢測到高頻交易模式");return ResponseEntity.ok(response);}response.put("riskLevel", "LOW");return ResponseEntity.ok(response);}
}

四、 關鍵挑戰:如何處理數據延遲?

讀者可能會提出一個至關重要的問題:“我的API接口會不會出現,查詢Redis的時候,Flink還沒把數據處理完的情況?

答案是:會的,這正是異步系統的固有特性,我們必須正視它。

從一筆交易產生,到被 Flink 計算完成并寫入 Redis,存在一個端到端延遲(通常是毫秒級到秒級)。在這個延遲窗口期內,API 查詢到的可能是“過時”的狀態。

我們的解決思路不是消滅延遲,而是管理它。

  1. 接受最終一致性: 我們的首要目標不是100%攔截住觸發規則的第一筆欺詐交易,而是快速識別出欺詐模式,并立即阻斷后續的連續攻擊
  2. 快速止損策略: 也許我們放過了第6筆欺詐交易,但當第7筆交易發生時(可能僅在1-2秒后),Flink 極大概率已經完成了計算并更新了 Redis。此時我們的 API 就能成功攔截第7、8、9筆交易,實現了快速止損。
  3. 架構的優勢: 正是這種計算與服務的分離,保證了 API 接口始終有毫秒級的超低響應延遲,不會被復雜的 Flink 計算所拖慢,從而保障了核心交易鏈路的性能。
    您提的這個問題非常關鍵,直擊了這類異步處理系統的核心!

答案是:是的,完全可能出現這種情況。 這是這類架構的一個固有特性,也是設計時必須考慮的一點。

讓我為您詳細拆解一下為什么會發生,以及業界是如何應對這個問題的。

為什么會發生“數據延遲”?

我們可以把一筆交易從發生到被 Flink 處理完成的整個過程想象成一條流水線,每個環節都需要時間:

  1. 交易產生 (T0): 用戶完成刷卡。
  2. 數據發送 (T1): 業務系統將交易數據發送到 Kafka (網絡延遲)。
  3. Flink 拉取 (T2): Flink 的消費者從 Kafka 拉取到這條數據 (取決于 Flink 的內部調度,通常是毫秒級)。
  4. Flink 處理 (T3): 數據在 Flink 內部流轉,進行 keyBy,進入對應的計算窗口。
  5. Flink 窗口計算 (T4): 窗口可能還沒到觸發計算的時間點。比如,你設置了1分鐘的窗口,那么 Flink 需要“攢”夠1分鐘的數據才會進行計算。
  6. Flink 輸出 (T5): 窗口計算完成后,Flink 將結果寫入 Redis (網絡 + Redis 命令延遲)。

整個 T0 -> T5 的過程,我們稱之為**“端到端延遲” (End-to-End Latency)**。這個延遲在負載正常的情況下可能是幾百毫秒到幾秒。

現在,設想一個欺詐場景:

  • 14:00:01: 騙子發起了第5次交易(觸發了“1分鐘5次”的規則)。
  • 14:00:02: 在這筆交易的特征還沒來得及被 Flink 計算完并寫入 Redis 的時候,騙子立刻發起了第6次交易。
  • 此時,支付網關調用你的 API 接口來檢查第6次交易的風險。
  • 你的 API 查詢 Redis,但 Redis 里的狀態還是基于前4次交易的,是“安全的”。
  • 于是你的 API 返回“低風險”,導致第6次欺詐交易被放行。
  • 幾秒鐘后,Flink 處理完了第5次交易,更新 Redis 狀態為“高風險”。但為時已晚,第6次交易已經完成了。

上述問題的本質是數據最終一致性 (Eventual Consistency)。我們無法做到絕對的實時,但我們可以設計系統來管理和減小風險。主要有以下幾種策略:

策略一:接受延遲,快速止損 (最常用)
  • 思路: 我們承認無法100%阻止觸發規則的那一筆交易以及緊隨其后的少數幾筆。我們的首要目標是快速響應,阻止后續更大規模的欺詐
  • 說明: 在上面的例子中,我們可能放過了第6筆交易,但當第7筆交易在 14:00:05 發生時,Flink 極有可能已經將 Redis 狀態更新了。這時我們的 API 就能成功攔截第7、8、9…筆交易。我們用極小的損失(一兩筆交易)換取了對整個欺詐模式的封堵。
  • 優點:
    • 系統架構清晰、簡單。
    • API 接口響應極快(Redis 查詢非常快)。
    • Flink 可以從容地處理復雜的計算邏輯,不用擔心阻塞 API。
  • 這是業界最主流、最標準的做法,因為它在性能、成本和風險控制之間取得了最佳平衡。
策略二:API同步檢查 + Flink異步分析 (混合模式)
  • 思路: 對于某些極其簡單的規則,可以在 API 層面做一個同步的、補充性的檢查。
  • 實現:
    1. API 接口收到請求后,首先查詢 Redis (由 Flink 提供的復雜特征)。
    2. 如果 Redis 返回“低風險”,API 再做一個快速的同步查詢。這個查詢通常是針對一個準實時的數據庫(比如把最近幾分鐘的交易流水也存放在一個高性能SQL數據庫或另一個Redis Set里)。
    3. 例如,API可以自己去查:“該用戶在過去1分鐘內,在交易流水表里有幾條記錄?”
    4. 綜合 Flink 的結果和 API 自己同步查的結果,共同做出決策。
  • 優點: 可以彌補 Flink 的延遲,理論上能攔截住觸發規則的那一筆交易。
  • 缺點:
    • API 響應變慢: 引入了額外的數據庫查詢,接口性能下降。
    • 架構變復雜: 反欺詐的規則邏輯被分散在了 Flink 和 API 后端兩個地方,維護成本變高。
    • 數據庫壓力大: 交易主庫可能會被高頻的欺詐查詢拖垮。
結論與建議

對于您正在設計的系統,我強烈建議從 策略一 開始:

  1. 明確系統的目標: 我們的目標不是杜絕100%的欺詐,而是在欺詐行為發生時,近乎實時地識別出模式,并阻斷后續的連續攻擊
  2. 信任異步架構: 接受數據會有秒級的延遲,并圍繞這個前提來設計風控策略和響應機制。
  3. 優化 Flink 任務: 盡可能地降低 Flink 處理的端到端延遲。比如優化窗口大小、合理配置資源、使用更高性能的硬件等。

只有在業務要求非常苛刻,且愿意為之付出更高的架構復雜度和性能成本時,才考慮引入策略二作為補充。

總結

通過結合 Spring Boot 的快速開發和 API 服務能力,以及 Flink 強大的實時流計算能力,我們可以構建一個架構清晰、可擴展、高性能的實時反欺詐系統。該架構的核心在于將重度的、有狀態的模式計算任務交由 Flink 異步處理,而將輕量級的、無狀態的服務查詢交由 Spring Boot 同步處理,并通過 Redis 作為高速緩存進行解耦。理解并接受這種異步架構帶來的最終一致性,是設計和實施此類系統的關鍵。

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

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

相關文章

通過apache共享文件

有時候&#xff0c;vmware虛擬機的vmware tools總是安裝失敗&#xff0c;這樣就不能在虛擬機和主機之間共享文件。此時可以利用apache通過文件上傳和下載共享文件。 通過下面的php文件&#xff0c;虛擬機作為客戶端訪問此php&#xff0c;可以在虛擬機和主機之間共享文件。當然…

Maven生命周期,測試

測試 Junit入門 單元測試 單元測試&#xff1a;就是針對最小的功能單元(方法)&#xff0c;編寫測試代碼對其正確性進行測試。 JUnit&#xff1a;最流行的Java測試框架之一&#xff0c;提供了一些功能&#xff0c;方便程序進行單元測試&#xff08;第三方公司提供&#xff09…

H5調試工具vconsole和Eruda對比

VConsole與Eruda對比分析 VConsole和Eruda是兩款主流的移動端JavaScript調試工具&#xff0c;它們在功能定位、使用場景和技術實現上有諸多差異。以下從多個維度進行對比&#xff0c;幫助你選擇更適合的工具&#xff1a; 一、核心功能對比 功能維度VConsoleEruda基礎日志輸出…

Java經典編程題

題目 1&#xff1a;斐波那契數列 題目要求&#xff1a;編寫一個方法&#xff0c;輸入正整數n&#xff0c;輸出斐波那契數列的第n項。斐波那契數列的定義是&#xff1a;F(0)0&#xff0c;F(1)1, 當n > 1時&#xff0c;F(n)F(n - 1)F(n - 2)。 答案&#xff1a; public cla…

BUG調試案例五十:“低級”設計BUG案例篇(持續更新中.........)

引言 回頭看這些年硬件路,總有一些“低級Bug”一次次地在給我上課。它們不是復雜的架構設計,不是玄妙的信號完整性問題,而是最基礎、最應該避免、卻又最容易忽略的小細節。 每一次Bug的背后,都是教訓,有的甚至讓整個項目差點“翻車”。寫下這篇文章記錄那些“看似簡單實…

DeepSeek中的提示庫及其用法示例

《DEEPSEEK原生應用與智能體開發實踐 圖書》【摘要 書評 試讀】- 京東圖書 為了深入探索DeepSeek提示詞樣例的豐富內涵&#xff0c;充分挖掘其背后潛藏的無限可能&#xff0c;同時致力于為用戶打造更為卓越、便捷且高效的使用體驗&#xff0c;DeepSeek官網的API文檔匠心獨運地…

Node.js特訓專欄-實戰進階:7.Express模板引擎選型與使用

&#x1f525; 歡迎來到 Node.js 實戰專欄&#xff01;在這里&#xff0c;每一行代碼都是解鎖高性能應用的鑰匙&#xff0c;讓我們一起開啟 Node.js 的奇妙開發之旅&#xff01; Node.js 特訓專欄主頁 專欄內容規劃詳情 Express模板引擎選型與使用全解析&#xff1a;打造動態We…

uniapp評價組件

組件目錄 components/Evaluation.vue <template><view class"evaluation-container"><!-- 綜合評價 --><view class"evaluation-item" tap"parentTap"><text class"label label-1">綜合評價</text&…

SQL Server2022版詳細安裝教程(Windows)

一&#xff0c;下載SQL Server 可以瀏覽器自己搜索一下 2、安裝 安裝前需要先將防火墻和帶殺毒軟件的先退出關閉掉&#xff08;防止安裝不成功&#xff09; 2.1、選擇自定義安裝 2.2、更改位置進行安裝 2.3、等待安裝 3、進行安裝配置 當安裝好后會彈出一個這樣的頁面 3.1、…

【圖像】ubuntu中圖像處理

一、環境設置 1、查看視頻源 ls /dev/video* 2、查看攝像頭的分辨率等參數 v4l2-ctl --device/dev/video0 --list-formats-ext 若未安裝v4l-utils sudo apt install v4l-utils 3、測試攝像頭能否正常工作 cheese

架構總結記錄

1、架構模型解決的共同問題 1.1、高內聚低耦合&#xff1a;解耦外部依賴&#xff0c;分離業務復雜度和技術復雜度等。 1.2、信息孤島和數據壁壘&#xff1a;單體架構垂直&#xff0c;沒有相互調用和復用。邏輯抽象、能力下沉、多系統復用問題 1.3、熵增 2、?單體架構與分布…

Python: file: encode: ‘gbk‘ codec can‘t encode character ‘\xe5‘ in position

錯誤 response requests.get(url, timeout5) # 請求一個網頁 with open(‘response.txt’, ‘w’) as file: # 打開一個文件 file.write(response.text) # 向文件寫入response 提示錯&#xff1a; UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xe5’ in po…

PyTorch深度學習框架60天進階學習計劃 - 第59天模型魯棒性(一):對抗樣本生成機理與PGD攻擊詳解

PyTorch深度學習框架60天進階學習計劃 - 第59天模型魯棒性&#xff08;一&#xff09;&#xff1a;對抗樣本生成機理與PGD攻擊詳解 &#x1f3af; 第一部分&#xff1a;對抗樣本的魔法世界 哈嘍各位"反黑客"學員&#xff01;歡迎來到第59天的課程&#xff01;今天我…

kibana和elasticsearch安裝

1、elasticsearch 6.8.23 安裝包下載地址&#xff1a; Elasticsearch 6.8.23 | Elastic 通過網盤分享的文件&#xff1a;elasticsearch-6.8.23.zip 鏈接: https://pan.baidu.com/s/1D2SrJ8nVBlqC1QNswmMJXg?pwd1234 提取碼: 1234 2、kibana 6.8.23 安裝包下載地址&#xff…

vue3 el-table row-class-name 行字體顏色失效

在使用 Vue 3 中的 el-table 組件時&#xff0c;如果你遇到了 row-class-name 屬性設置的行顏色失效&#xff0c;并被 el-table 的默認樣式覆蓋的問題&#xff0c;通常是因為 CSS 優先級或者樣式沖突導致的。這里有幾個方法可以幫助你解決這個問題&#xff1a; 1. 增加 CSS 優…

【跨界新視野】信號處理遇上VR/AR:下一代沉浸體驗的核心技術與您的發表藍海

導語&#xff1a; 元宇宙概念雖經歷起伏&#xff0c;但其底層支撐技術——信號處理&#xff08;Signal Processing&#xff09;與虛擬/增強現實&#xff08;VR/AR&#xff09; 的融合創新正蓬勃發展。從高保真音效定位、腦機接口信號解析&#xff0c;到實時三維重建與交互渲染&…

VMware 2025安裝教程(附安裝包)VMware 2025下載詳細安裝圖文教程

文章目錄 引言第A部分&#xff1a;vmware虛擬機安裝包的獲取與準備第1步&#xff1a;下載VMware虛擬機安裝程序 第B部分&#xff1a;VMware虛擬機安裝步驟第3步&#xff1a;啟動安裝向導第4步&#xff1a;同意軟件許可協議第5步&#xff1a;設定程序安裝路徑第6步&#xff1a;配…

wsl2 用橋接方式連網

安裝 Hyper-V windows 家庭版怎么安裝 Hyper-V-CSDN博客 用管理員打開 PowerShell 執行 Get-NetAdapter 出系統所有的網卡&#xff0c;記住想要橋接的網卡名稱 無線網名稱一般為 WLAN&#xff0c;有線網名稱一般為 以太網&#xff0c;我的是 以太網 2 執行 Get-VMSwitch 查…

<tauri><threejs><rust><GUI>基于tauri和threejs,實現一個3D圖形瀏覽程序

前言 本專欄是基于rust和tauri&#xff0c;由于tauri是前、后端結合的GUI框架&#xff0c;既可以直接生成包含前端代碼的文件&#xff0c;也可以在已有的前端項目上集成tauri框架&#xff0c;將前端頁面化為桌面GUI。 發文平臺 CSDN 環境配置 系統&#xff1a;windows 10 …

C++基礎之指針

文章目錄 指針介紹 C指針的定義與用法指針的定義指針的基本操作指針的常見用法1. 動態內存分配2. 指針與數組3. 指針作為函數參數&#xff08;傳址調用&#xff09;4. 函數返回指針 特殊指針類型智能指針&#xff08;C11起&#xff09;2.入門代碼3.總結 指針介紹 C指針的定義與…