Mybatis 源碼解讀-SqlSession 會話源碼和Executor SQL操作執行器源碼

作者源碼閱讀筆記主要采用金山云文檔記錄的,所有的交互圖和代碼閱讀筆記都是記錄在云文檔里面,本平臺的文檔編輯實在不方便,會導致我梳理的交互圖和文檔失去原來的格式,所以整理在文檔里面,供大家閱讀交流.

【金山文檔 | WPS云文檔】 SqlSession 會話源碼和Executor SQL操作執行器源碼

SqlSession 是框架與數據庫交互的核心接口。

核心功能

  1. ?SQL 操作執行

?提供 insert()update()delete()select() 等方法直接執行 SQL 語句,支持參數綁定與結果映射?

  1. ?事務管理

?通過 commit()rollback() 控制事務提交與回滾,需手動調用(非自動提交模式)?

  1. ?Mapper 接口代理

通過 getMapper(Class<T> type) 動態生成 Mapper 接口實現類,實現面向對象式數據庫操作?

  1. ?緩存管理

?默認啟用一級緩存(會話級),緩存相同 SQL 查詢結果,通過 clearCache() 可手動清空?。?

Executor 包是 MyBatis 執行 SQL 操作的核心引擎,位于 org.apache.ibatis.executor 包下,負責協調 SQL 執行全流程(包括緩存管理、事務控制、參數處理、結果映射等)

Executor 包是 MyBatis 的 ?SQL 執行中樞?,通過多態實現支持基礎操作、緩存優化、批量處理等場景,并協調四大組件完成從 SQL 解析到結果映射的全鏈路操作?

?核心接口與實現

Executor 接口

定義 SQL 執行的標準方法:

public interface Executor {int update(MappedStatement ms, Object parameter);         // 執行更新操作<E> List<E> query(...);                                  // 執行查詢操作void commit(boolean required);                           // 提交事務void rollback(boolean required);                         // 回滾事務CacheKey createCacheKey(...);                            // 創建緩存鍵boolean isCached(MappedStatement ms, CacheKey key);      // 檢查緩存
}

基礎實現類(BaseExecutor 子類)

類型

?特點?

?適用場景?

SimpleExecutor?

默認執行器,每次執行創建新 Statement,執行后立即關閉

常規單條 SQL 操作

ReuseExecutor?

復用 Statement 對象,緩存相同 SQL 的 Statement 以減少重復編譯開銷

高頻重復 SQL

BatchExecutor?

批量執行 SQL,通過 addBatch() 緩存操作,調用 flushStatements() 統一提交

批量插入/更新

增強實現類 CachingExecutor?

  • ?二級緩存代理?:裝飾器模式,在基礎執行器外層添加二級緩存邏輯?
  • 工作流程?:
  1. 優先查詢二級緩存(MappedStatement 級別);
  2. 緩存未命中時委托底層執行器(如 SimpleExecutor)查詢數據庫

?協作組件

Executor 通過組合模式調用其他三大組件:

?組件?

?職責?

?依賴關系?

?StatementHandler?

處理 Statement 創建與參數綁定

Executor 調用其執行 SQL

ParameterHandler?

轉換參數類型并填充到 PreparedStatement

StatementHandler 調用

ResultSetHandler?

封裝結果集到 Java 對象

StatementHandler 調用

相關重要類介紹說明

SqlSessionManager 類

名稱

描述

默認值

sqlSessionFactory

?核心作用?

  • 作為底層工廠實例,用于創建原生 SqlSession 對象(通過 openSession() 方法)?
  • 代理模式下(調用 startManagedSession() 后),通過動態代理自動管理會話生命周期,此時 sqlSessionFactory 負責在后臺創建線程綁定的 SqlSession?

sqlSessionProxy

sqlSessionProxy 字段是一個關鍵動態代理對象

核心功能

  • ?動態代理攔截?

作為 SqlSession 的代理實例,攔截所有 Mapper 方法調用,并路由到當前線程綁定的 SqlSession 或新建會話

?通過 InvocationHandler 實現方法調用的統一處理(如事務提交、異常回滾)?

  • ?線程安全會話管理

?優先從 ThreadLocallocalSqlSession)獲取會話,避免重復創建,確保線程隔離?

若未綁定會話(未調用 startManagedSession()),則臨時創建并自動關閉會話(非托管模式)?

localSqlSession

localSqlSession 字段是一個關鍵線程安全控制組件

核心作用

  • 線程隔離存儲

通過 ThreadLocal<SqlSession> 實現線程綁定的會話管理,確保每個線程操作獨立的 SqlSession 實例

避免多線程環境下會話沖突(如事務交叉)??

  • ?托管模式標志

當調用 startManagedSession() 后,新創建的 SqlSession 會存入此字段,標記當前線程進入托管模式?

?未調用時字段值為 null,代理對象每次臨時創建新會話?

  • sqlSessionProxy代理對象創建:
this.sqlSessionProxy = (SqlSession) Proxy.newProxyInstance(SqlSessionFactory.class.getClassLoader(),new Class[] { SqlSession.class }, new SqlSessionInterceptor());
  • SqlSessionInterceptor 攔截器

每次調用代理對象 sqlSessionProxy 方法都會去執行invoke方法

private class SqlSessionInterceptor implements InvocationHandler {public SqlSessionInterceptor() {// Prevent Synthetic Access}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {final SqlSession sqlSession = SqlSessionManager.this.localSqlSession.get();if (sqlSession != null) {try {return method.invoke(sqlSession, args);} catch (Throwable t) {throw ExceptionUtil.unwrapThrowable(t);}}try (SqlSession autoSqlSession = openSession()) {try {final Object result = method.invoke(autoSqlSession, args);autoSqlSession.commit();return result;} catch (Throwable t) {autoSqlSession.rollback();throw ExceptionUtil.unwrapThrowable(t);}}}}

SqlSessionFactory sqlSession 工廠類

負責創建和管理 SqlSession 實例?

名稱

描述

默認值

configuration

全局配置實例

DefaultSqlSession 默認會話類

名稱

描述

默認值

configuration

全局配置實例

executor

sql執行器

autoCommit

控制事務提交機制的核心參數

默認值為 false(需手動提交事務)?

dirty

用于標記當前會話是否存在未提交數據變更的關鍵狀態標識

核心功能

  • 更新操作觸發:執行 insert/update/delete 操作時自動置為 true,表示有未提交的修改?
  • ?事務提交后重置:調用 commit()rollback() 后重置為 false,標識數據已同步?
  • ?連接關閉兜底處理:若未提交事務時關閉會話(close()),自動觸發回滾并重置 dirty?

cursorList

用于管理流式查詢游標的關鍵資源集合

所有具體執行器父類 BaseExecutor抽象類

名稱

描述

默認值

transaction

管理數據庫事務的核心組件

wrapper

BaseExecutorwrapper 字段是其自身實例的引用,核心作用在于?實現裝飾器模式?,為執行器提供動態擴展能力。

若未配置裝飾器,wrapper 指向自身,直接執行 BaseExecutor 的邏輯;若配置裝飾器(如 CachingExecutor),則調用裝飾器的增強方法?

deferredLoads

BaseExecutor 的 ?deferredLoads? 字段是實現 MyBatis ?延遲加載(懶加載)? 機制的核心組件,用于管理需要延遲加載的關聯對象

deferredLoads 字段通過封裝延遲加載任務隊列,實現了 MyBatis 高效的懶加載機制,是優化復雜對象查詢性能的關鍵組件?

localCache

BaseExecutor 的 ?localCache? 字段是 MyBatis ?一級緩存(本地緩存)? 的核心實現。

localCache 是 MyBatis 一級緩存的核心載體,通過會話級緩存優化重復查詢性能。

典型問題與使用建議

  1. ?臟讀風險

?對于不同的sqlsession A與B,A做update操作,只能刷新A自己的一級緩存,無法刷新B的一級緩存。所以如果A與B操作同一條記錄,就會有臟讀。

SqlSessionB第一查詢時進行了緩存,第二次查詢時從緩存獲取數據(臟數據),之后進行邏輯處理以及更新

?

localOutputParameterCache

BaseExecutor 的 ?localOutputParameterCache? 字段是 MyBatis 用于?存儲過程輸出參數緩存?的核心組件

configuration

全局配置

queryStack

控制嵌套查詢與延遲加載?的關鍵計數器

典型場景示例

  1. ?嵌套查詢?:

主查詢 User 觸發關聯對象 Order 的懶加載時,queryStack 會從 0→1→0 變化,確保關聯查詢僅在頂層觸發?

  1. ?循環依賴規避?:

UserOrder 互相引用,queryStack 機制會阻斷循環加載,避免棧溢出

closed

標識執行器(Executor)是否已被關閉?的關鍵狀態標記

基于SQL語句復用的執行器 ReuseExecutor 類

通過內部維護的 Map<String, Statement> 緩存(鍵為 SQL 語句,值為對應的 Statement 對象),避免相同 SQL 的重復編譯與創建開銷。適用于高頻執行?相同結構 SQL?(如循環中參數化查詢)的場景

名稱

描述

默認值

statementMap

statementMap? 字段是其實現 ?Statement 對象復用的核心緩存容器?,通過減少 JDBC 語句編譯與創建開銷提升高頻重復 SQL 的執行效率

批量操作執行器 ?BatchExecutor 類

BatchExecutor 是 MyBatis 中?專為批量數據庫操作優化的執行器實現?,通過延遲執行與批量提交機制顯著提升大批量數據操作的性能

名稱

描述

默認值

statementList

statementList? 字段是其實現批量操作的核心數據結構,用于緩存待執行的 Statement 對象以實現批量提交優化

工作流程

  1. ?緩存階段
  • 執行增刪改操作時,將相同 SQL 結構的 Statement 存入 statementList,并通過 addBatch() 添加參數?
  • 若 SQL 結構變化(如切換表或操作類型),則創建新 Statement 并加入列表?
  1. ?批量提交
  • 調用 flushStatements() 或事務提交時,遍歷 statementList 執行批量操作?
  • 提交后清空列表并關閉所有 Statement?

batchResultList

batchResultList? 字段是其實現批量操作結果跟蹤的核心數據結構,用于記錄每條批量操作的執行狀態和參數信息

currentSql

currentSql? 字段是其實現 SQL 批量優化的關鍵標識,用于動態跟蹤當前正在處理的 SQL 語句以實現批量操作的智能分組

currentStatement

currentStatement? 字段是用于跟蹤當前批量操作關聯的 MappedStatement 對象的核心標識,其設計旨在實現 SQL 執行的上下文一致性管理

二級緩存執行器 CachingExecutor 類

CachingExecutor是一個基于裝飾者模式實現的執行器類,主要用于增強二級緩存功能

名稱

描述

默認值

delegate

delegate 字段是其實現裝飾器模式的關鍵組件,用于承載實際的數據庫操作執行器

delegateCachingExecutor 連接具體執行器的橋梁,使緩存功能可疊加于不同執行策略之上,體現了裝飾器模式在 MyBatis 中的靈活應用

tcm

tcm 字段是實現二級緩存事務性提交的核心組件,全稱為 TransactionalCacheManager

核心職責

  1. ?事務性緩存管理

?確保二級緩存的數據僅在事務成功提交后生效,避免臟讀問題。當執行寫操作(如 update)時,緩存變更不會立即同步到二級緩存,而是暫存在 TransactionalCache 中,直至事務提交?

  1. ?多命名空間協調

?管理多個映射語句(MappedStatement)對應的 TransactionalCache 實例,維護不同 Cache 對象的隔離性與一致性

這一設計解決了多 SqlSession 并發場景下二級緩存的數據一致性問題。?

TransactionalCacheManager 二級緩存事務管理器

MyBatis 的 TransactionalCacheManager 是二級緩存事務管理的核心組件,主要負責在事務提交時協調多個 TransactionalCache 的緩存同步操作

核心職責

  • ?事務性緩存控制

?管理多個 TransactionalCache 實例,確保二級緩存的更新僅在事務提交后生效,避免事務未提交時其他會話讀取到臟數據?

  • ?多緩存空間隔離

?通過 Map<String, TransactionalCache> 結構維護不同命名空間(namespace)的緩存實例,實現緩存區域的隔離與協同?

名稱

描述

默認值

transactionalCaches

維護底層真實緩存(如 PerpetualCache)與事務緩存代理(TransactionalCache)的映射關系,確保每個 Cache 對象都有獨立的事務暫存區?

Map<Cache, TransactionalCache>

TransactionalCache 二級事務緩存類

TransactionalCache 是二級緩存事務管理的核心代理類,負責在事務提交前攔截緩存操作,確保數據一致性

核心職責

  • ?事務暫存區

?代理真實的 Cache 對象(如 PerpetualCache),在事務提交前將寫操作(putObject)暫存于內存,避免未提交事務污染二級緩存?

  • ?臟數據隔離

通過 entriesToAddOnCommit(待提交數據)和 entriesMissedInCache(未命中記錄)兩個集合,隔離事務內外的緩存狀態

?

名稱

描述

默認值

delegate

delegate 字段是二級緩存實現的核心代理對象,其設計體現了裝飾器模式的應用

delegate 字段是 MyBatis 二級緩存事務機制與底層存儲的橋梁,其設計完美體現了?裝飾器模式?和?單一職責原則

?核心職責

1、?真實緩存代理?:持有底層緩存實現(如 PerpetualCache),所有緩存操作最終委托給該對象執行?

2、?功能擴展基礎?:通過裝飾器模式(如 LruCacheScheduledCache)對基礎緩存增強,而 delegate 是裝飾鏈的最終執行者???

clearOnCommit

用于控制事務提交時是否清空底層緩存

默認值為 false,可通過特定操作(如更新語句)動態修改狀態?

entriesToAddOnCommit

entriesToAddOnCommit 字段是二級緩存事務管理的核心數據結構,其設計實現了?事務隔離性?與?批量提交優化

核心職責

  • ?事務暫存區?:臨時存儲事務內所有 putObject 操作的數據,直到事務提交時批量寫入底層緩存(delegate)?
  • ?臟寫隔離?:避免未提交事務的中間狀態污染二級緩存,確保其他會話讀取的數據一致性?

Map<Object, Object> entriesToAddOnCommit

entriesMissedInCache

用于追蹤?二級緩存未命中記錄?的關鍵字段,其設計目的主要在于優化并發場景下的緩存一致性與阻塞控制;

記錄事務執行過程中?緩存查詢未命中的鍵(Key)

該字段是 MyBatis 二級緩存應對?高并發穿透問題?的核心設計組件之一。

Set<Object> entriesMissedInCache

?CacheKey 緩存key類

緩存key生成邏輯代碼:

@Overridepublic CacheKey createCacheKey(MappedStatement ms, Object parameterObject, RowBounds rowBounds, BoundSql boundSql) {if (closed) {throw new ExecutorException("Executor was closed.");}CacheKey cacheKey = new CacheKey();cacheKey.update(ms.getId());cacheKey.update(rowBounds.getOffset());cacheKey.update(rowBounds.getLimit());cacheKey.update(boundSql.getSql());List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();TypeHandlerRegistry typeHandlerRegistry = ms.getConfiguration().getTypeHandlerRegistry();// mimic DefaultParameterHandler logicMetaObject metaObject = null;for (ParameterMapping parameterMapping : parameterMappings) {if (parameterMapping.getMode() != ParameterMode.OUT) {Object value;String propertyName = parameterMapping.getProperty();if (parameterMapping.hasValue()) {value = parameterMapping.getValue();} else if (boundSql.hasAdditionalParameter(propertyName)) {value = boundSql.getAdditionalParameter(propertyName);} else if (parameterObject == null) {value = null;} else {ParamNameResolver paramNameResolver = ms.getParamNameResolver();if (paramNameResolver != null&& typeHandlerRegistry.hasTypeHandler(paramNameResolver.getType(paramNameResolver.getNames()[0]))|| typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {value = parameterObject;} else {if (metaObject == null) {metaObject = configuration.newMetaObject(parameterObject);}value = metaObject.getValue(propertyName);}}cacheKey.update(value);}}if (configuration.getEnvironment() != null) {// issue #176cacheKey.update(configuration.getEnvironment().getId());}return cacheKey;}

影響key生成的因素:

  1. Mapper的Id,即Mapper命名空間與<select|update|insert|delete>標簽的Id組成的全局限定名
  2. 查詢結果的偏移量及查詢的條數
  3. 具體的SQL語句及SQL語句中需要傳遞的所有參數
  4. MyBatis主配置文件中,通過<environment>標簽配置的環境信息對應的Id屬性值

相關流程圖整理

元數據簡略圖

執行流程圖

一級緩存、二級緩存設計與查詢流程分析圖

  • 一級緩存設計-類圖

  • 一級緩存工作流程圖

  • 二級緩存設計-類圖

  • 二級緩存工作流程圖

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

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

相關文章

Java集合類綜合練習題

代碼 import java.util.*; class ScoreRecord {private String studentId;private String name;private String subject;private int score;public ScoreRecord(String studentId, String name, String subject, int score) {this.studentId studentId;this.name name;this.s…

秒懂邊緣云|1分鐘了解邊緣安全加速 ESA

普通開發者如何搭建安全快速的在線業務才能性價比最高 &#xff1f;阿里云現已為開發者推出免費版邊緣安全加速 ESA&#xff0c;1 個產品就能把 CDN 緩存 API 加速 DNS WAF DDoS 防護全部搞定&#xff0c;還支持邊緣函數快速部署網站和 AI 應用&#xff0c;性價比拉滿。 1…

數據結構:串、數組與廣義表

&#x1f4cc;目錄&#x1f524; 一&#xff0c;串的定義&#x1f330; 二&#xff0c;案例引入場景1&#xff1a;文本編輯器中的查找替換場景2&#xff1a;用戶手機號驗證&#x1f4da; 三&#xff0c;串的類型定義、存儲結構及其運算&#xff08;一&#xff09;串的抽象類型定…

服務器路由相關配置Linux和Windows

服務器路由相關配置Linux和Windowscentos路由系統核心概念傳統工具集(命令)iproute2 工具集&#xff08;推薦&#xff09;NetworkManager 工具路由配置文件體系高級路由功能策略路由多路徑路由路由監控工具系統級路由配置啟用IP轉發路由守護進程路由問題診斷流程Windows 路由Wi…

Spring Boot啟動事件詳解:類型、監聽與實戰應用

1. Spring Boot啟動事件概述1.1 什么是Spring Boot啟動事件在Spring Boot的應用生命周期中&#xff0c;從main方法執行到應用完全就緒&#xff0c;期間會發生一系列事件&#xff08;Event&#xff09;。這些事件由Spring Boot框架在特定時間點觸發&#xff0c;用于通知系統當前…

Python閉包詳解:理解閉包與可變類型和不可變類型的關系

一、定義閉包&#xff08;Closure&#xff09; 指的是一個函數對象&#xff0c;即使其外部作用域的變量已經不存在了&#xff0c;仍然能訪問這些變量。簡單來說&#xff0c;閉包是由函數及其相關的環境變量組成的實體。def outer():x 10def inner():print(x)return innerf ou…

BotCash:GPT-5發布觀察 工程優化的進步,還是技術突破的瓶頸?

BotCash&#xff1a;GPT-5發布觀察 工程優化的進步&#xff0c;還是技術突破的瓶頸&#xff1f; 在GPT-4以多模態能力震撼業界的一年后&#xff0c;GPT-5的亮相顯得有些“平靜”。當人們期待著又一場顛覆性技術革命時&#xff0c;這場發布會更像是給大模型技術按下了“精細打磨…

AJAX學習(2)

目錄 一.XMLHttpRequest 二.XMLHttpRequest——查詢參數 三.案例——地區查詢 四.XMLHttpRequest_數據提交 五.Promise 六.Promise三種狀態 七.PromiseeeXHR獲取省份列表&#xff08;案例&#xff09; 八.封裝-簡易axios-獲取省份列表 九.封裝-簡易axios-獲取地區列表 …

解決 pip 安裝包時出現的 ReadTimeoutError 方法 1: 臨時使用鏡像源(單次安裝)

解決 pip 安裝包時出現的 ReadTimeoutError 當您在使用 pip 安裝 Python 包時遇到 pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(hostfiles.pythonhosted.org, port443): Read timed out. 錯誤時&#xff0c;這通常是由于網絡問題導致的連接超時。P…

Linux下使用Samba 客戶端訪問 Samba 服務器的配置(Ubuntu Debian)

在 Linux 系統中&#xff0c;Samba 提供了與 Windows 系統文件共享的便利方式。本文將詳細介紹在 Ubuntu 和 Debian 系統下如何安裝 Samba 客戶端、訪問共享資源&#xff0c;并實現遠程目錄掛載和開機自動掛載。 文章參考自&#xff08;感謝分享&#xff09;&#xff1a;https…

解決dedecms文章默認關鍵字太短的問題

在管理文章或軟件的時候&#xff0c;大家在添加關鍵字和內容摘要的時候&#xff0c;是不是對這樣的情況感到比較的郁悶&#xff0c;我的關鍵字設定的明明非常的好&#xff0c;可是添加或修改后&#xff0c;會被無緣無故的截去很多&#xff0c;想必大家也都非常的明白&#xff0…

K8s-kubernetes(二)資源限制-詳細介紹

K8s如何合理規定對象資源使用 基本概念 Kubernetes中&#xff0c;占用資源的最小單元為單個PodKubernetes中&#xff0c;資源占用主要針對服務器的CPU、內存 為什么要做資源限制 對于Kubernetes集群而言&#xff0c;所有Pod都會占用K8s集群所在服務器的資源&#xff0c;如果不做…

量子神經網絡:從NISQ困境到邏輯比特革命的破局之路

——解析2025千比特時代開發者的機遇與行動框架 引言:量子計算的“20比特魔咒”與千比特悖論 當開發者被建議“避免在>20量子比特電路訓練”時,富士通卻宣布2025年實現10,000物理比特系統。這一矛盾揭示了量子計算從NISQ時代向FTQC時代躍遷的核心邏輯:千比特突破非為直接…

react+vite-plugin-react-router-generator自動化生成路由

前言&#xff1a;react項目實際使用中有很多提升性能與功能的插件&#xff0c;今天來說一說vite里面提供的vite-plugin-react-router-generator&#xff0c;他主要提供了自動生成路由的功能&#xff0c;配合我們的loadable/component可以實現路由的懶加載與統一管理。1、實現效…

服務器查看 GPU 占用情況的方法

在 Linux 系統中查看 GPU 占用情況&#xff0c;主要取決于你的 GPU 類型&#xff08;NVIDIA/AMD&#xff09;&#xff0c;以下是常用方法&#xff1a; 一、NVIDIA GPU&#xff08;最常用&#xff0c;如 RTX 系列、Tesla 系列&#xff09; 使用 NVIDIA 官方工具 nvidia-smi&…

【Docker實戰進階】Docker 實戰命令大全

Docker 實戰命令大全 Docker 實戰場景&#xff0c;以 Nginx 為核心示例&#xff0c;梳理容器生命周期、鏡像管理、網絡配置、數據持久化及 Compose 編排的核心命令與最佳實踐。 一、容器生命周期管理 1. 基礎生命周期命令 docker run - 創建并啟動容器 核心功能&#xff1a;基于…

PyCharm 2025.2:面向工程師的 AI 工具

引言 隨著人工智能技術的快速發展&#xff0c;AI 工程師對開發工具的需求也在不斷提升。PyCharm 2025.2 版本帶來了革命性的 AI 工具包&#xff0c;將 AI 開發所需的實驗、調試、評估和部署功能原生集成到 IDE 中。這一重大更新不僅提升了開發效率&#xff0c;也為 AI 工程師提…

爬蟲逆向--Day15--核心逆向案例2(Python逆向實現請求加密、請求堆棧、攔截器關鍵字)

一、逆向案例之Python逆向實現請求加密//具體代碼如下 function l(t, e) {return t.toString().toUpperCase() > e.toString().toUpperCase() ? 1 : t.toString().toUpperCase() e.toString().toUpperCase() ? 0 : -1}function u(t) {for (var e Object.keys(t).sort(l)…

時序數據庫市場前景分析

1. 引言隨著物聯網&#xff08;IoT&#xff09;、工業互聯網、金融科技、智慧城市等領域的快速發展&#xff0c;數據呈現爆發式增長&#xff0c;其中時間序列數據&#xff08;Time-Series Data&#xff09;占據了重要地位。時序數據庫&#xff08;Time-Series Database, TSDB&a…

【網絡安全測試】Burp Suite使用指導、配置及常見問題介紹(有關必回)

Burp Suite 是**滲透測試領域事實上的標準工具**&#xff0c;尤其擅長Web應用與API安全測試。針對AI系統&#xff0c;它主要用于測試模型API、管理后臺等Web接口。以下是專業級使用指南&#xff1a;---### **一、 核心模塊與功能概覽**| **模塊** | **核心功能** | **AI測試重點…