Spring Boot + ShardingSphere 分庫分表實戰

🚀Spring Boot + ShardingSphere 實戰:分庫分表,性能暴增的終極指南!

? 適用場景:千萬級大表、高并發、讀寫分離場景
? 核心框架:Spring Boot 3.x + ShardingSphere-JDBC 5.4.1
? 數據庫:MySQL 8.x(主從結構)
? 特色亮點:覆蓋垂直/水平分庫、分表、自定義分片、公共表、廣播表、Hint 強制路由

分庫分表 vs 讀寫分離 vs 主從配置與數據庫高可用架構區別


📚 目錄

  1. 🌟 為什么選擇 ShardingSphere?
  2. 📐 系統整體架構圖
  3. 🧰 技術選型與版本說明
  4. ?? 核心配置詳解
  5. 🚦 常用查詢效果演示
  6. 🚧 常見問題與優化建議
  7. 📎 參考資料與源碼下載

🌟 為什么選擇 ShardingSphere?

ShardingSphere 是 Apache 開源的數據庫中間件生態系統,支持 JDBC 層嵌入和獨立代理部署,擁有強大的分庫分表、讀寫分離、數據加密、彈性擴容、分布式事務等能力。相比傳統中間件,它更靈活、社區更活躍,適合大多數 Spring Boot 應用快速集成。

🔍 什么是 ShardingSphere?

ShardingSphere 是一個開源的分布式數據庫中間件生態,最早由當當網開源(Sharding-JDBC),目前由 Apache 基金會孵化。

它包含 3 大組件:

組件作用說明
ShardingSphere-JDBC輕量級 Java JDBC 層分庫分表工具(無需 Proxy)
ShardingSphere-Proxy基于 MySQL/PostgreSQL 協議的中間件代理層
ShardingSphere-Sidecar面向 Kubernetes 的數據庫 Mesh Sidecar

本項目使用 ShardingSphere-JDBC,適合嵌入 Spring Boot 項目,無需額外服務。


🌟 ShardingSphere 的核心能力

能力項說明
? 分庫分表支持標準、綁定表、廣播表、Hint 路由等
? 讀寫分離支持一主多從,負載均衡策略可配置
? 彈性擴容數據遷移過程中支持雙寫、多活等策略
? 分布式事務支持 Seata/XA/BASE 模式
? 數據加密支持字段級加密與脫敏
? 容器/K8s 支持Proxy 和 Sidecar 支持云原生部署
? SQL 顯示/日志跟蹤方便調試分片路由結果

🧠 為什么選它而不是其他?

對比項ShardingSphereMyCatVitess/Federation
📦 部署方式代碼嵌入(JDBC層)或獨立服務獨立服務(代理層)代理層(復雜度較高)
💡 配置方式YAML/Java/Registry/動態XML 配置復雜支持 SQL 路由
🧩 特性完整度高:分片+讀寫+事務+加密分片較強,其他較弱分布式強,學習成本高
🌐 社區活躍度高(Apache孵化+大廠支持)較低(更新慢)中(主要在國外)
💼 實際落地場景電商、支付、運營平臺等早期用得多,現在轉向替代海外云廠商多
🧪 分布式事務支持? Seata / BASE / XA??

📌 結論:ShardingSphere 在 兼容性、靈活性、社區支持 等方面都具備絕對優勢,適合中大型項目長期維護。


🧪 哪種場景適合使用 ShardingSphere?

場景類型是否推薦使用說明
訂單系統?支持訂單分庫分表,按用戶、時間分片都很靈活
用戶系統?(廣播表)用戶表一般較小,可廣播全庫保持一致
內容系統?文章/評論按ID、日期分表效果好
實時大數據?(不推薦)建議用 Flink + Hive/Spark
跨庫強事務需求?(結合 Seata)ShardingSphere + Seata 實現分布式事務
多租戶 SaaS?可按 tenant_id 分庫分表 + 廣播共享配置類

📌 總結一句話:

ShardingSphere 是 Java 世界中最成熟、最活躍的分庫分表中間件,適合絕大多數業務場景,尤其適合 Spring Boot 用戶接入。


📐 系統整體架構圖

🧩 用戶模塊使用廣播表,訂單模塊按 user_id 水平分庫,order 表按年月分表,日志表歸檔存儲。讀寫分離策略基于 SQL 類型自動路由到主庫或從庫。

在這里插入圖片描述

下面是一個標準的 ShardingSphere 架構圖,展示其核心組件、功能模塊和部署方式。架構可以分為三種模式:ShardingSphere-JDBC、ShardingSphere-Proxy、ShardingSphere-Sidecar(計劃中)。這里我們重點展示 ShardingSphere-JDBCShardingSphere-Proxy 的部署結構:


? 一、ShardingSphere 總體架構圖(邏輯圖)

在這里插入圖片描述


? 二、ShardingSphere 三種部署模式對比圖

模式架構位置特點說明
ShardingSphere-JDBCJava 應用內部嵌入式、輕量級,支持事務、本地運行、性能高。適合 Java 項目
ShardingSphere-Proxy數據庫代理層類似 MySQL 中間件,跨語言支持(Python、Go等),統一訪問
ShardingSphere-Sidecar(未來)Service Mesh(Istio)邊車模式云原生、K8s友好,服務間透明代理

? 三、ShardingSphere-JDBC 架構圖

在這里插入圖片描述


? 四、ShardingSphere-Proxy 架構圖

在這里插入圖片描述


? 五、組件模塊圖(ShardingSphere 功能生態)

在這里插入圖片描述


🧰 技術選型與版本說明

技術棧說明
Spring Boot3.1.5
ShardingSphere-JDBC5.2.1
MyBatis-Plus3.5.11
MySQL8.0.x,一主兩從
dynamic-datasource與 ShardingSphere 不兼容,已棄用
Lombok / HikariCP簡化開發 / 高性能連接池

?? 核心配置詳解(application.yml)

📌 一、項目整體結構預覽

sharding-demo/
├── src/
│   ├── main/
│   │   ├── java/com/example/shardingdemo/
│   │   │   ├── controller/
│   │   │   ├── entity/
│   │   │   ├── mapper/
│   │   │   ├── ShardingDemoApplication.java
│   └── resources/
│       ├── application.yml
├── pom.xml

🧱 二、核心依賴配置(pom.xml)

<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version> <!-- 使用最新版本 --></dependency><!-- MyBatis Plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.11</version></dependency><!-- ShardingSphere-JDBC --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.2.1</version></dependency><!-- MySQL Connector --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!-- Lombok & Fastjson 可選 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>

🧬 三、數據結構設計(核心表)

1?? 用戶表(廣播表)
CREATE TABLE t_user (id BIGINT PRIMARY KEY,username VARCHAR(50),phone VARCHAR(20)
);
2?? 訂單主表(分庫 + 分表)
CREATE TABLE t_order_0 (id BIGINT PRIMARY KEY,user_id BIGINT,order_no VARCHAR(64),amount DECIMAL(10,2),create_time DATETIME
);
CREATE TABLE t_order_1 (id BIGINT PRIMARY KEY,user_id BIGINT,order_no VARCHAR(64),amount DECIMAL(10,2),create_time DATETIME
);
CREATE TABLE t_order_2 (id BIGINT PRIMARY KEY,user_id BIGINT,order_no VARCHAR(64),amount DECIMAL(10,2),create_time DATETIME
);

?? 四、application.yml 配置(核心)

spring:shardingsphere:datasource:names: ds0, ds1, ds2ds0:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://mysql-master:3307/testdb?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=trueusername: rootpassword: rootds1:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://mysql-slave1:3308/testdb?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=trueusername: rootpassword: rootds2:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://mysql-slave2:3309/testdb?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=trueusername: rootpassword: rootrules:sharding:tables:t_order:actual-data-nodes: ds$->{0..2}.t_order_$->{0..2}table-strategy:standard:sharding-column: user_idsharding-algorithm-name: order-table-inline  # 使用 sharding-algorithm-namedatabase-strategy:standard:sharding-column: user_idsharding-algorithm-name: order-db-inlinebroadcast-tables:- t_userdefault-database-strategy:none:default-table-strategy:none:sharding-algorithms:order-db-inline:type: INLINEprops:algorithm-expression: ds${user_id % 3}order-table-inline:type: INLINEprops:algorithm-expression: t_order_${user_id % 3}props:sql-show: true
ShardingSphere-JDBC 配置詳解
1. 數據源配置 (datasource)

定義了 3 個 MySQL 數據源(ds0ds1ds2),分別指向主庫和從庫。

配置項說明
spring.shardingsphere.datasource.names數據源名稱列表(ds0, ds1, ds2
ds0.type數據源類型(HikariCP 連接池)
ds0.driver-class-nameJDBC 驅動類(MySQL 8.0+)
ds0.jdbc-url主庫連接 URL(mysql-master:3307
ds0.username / ds0.password數據庫登錄憑據(root/root
ds1.jdbc-url從庫 1 連接 URL(mysql-slave1:3308
ds2.jdbc-url從庫 2 連接 URL(mysql-slave2:3309

2. 分片規則 (rules.sharding)
(1) 表分片配置 (tables)

配置 t_order 表的分庫分表策略。

配置項說明
t_order.actual-data-nodes實際數據節點格式: - ds$->{0..2}.t_order_$->{0..2} 表示: - 數據源:ds0ds1ds2 - 表:t_order_0t_order_1t_order_2
t_order.table-strategy表分片策略(按 user_id 分片)
t_order.database-strategy庫分片策略(按 user_id 分庫)
(2) 分片算法 (sharding-algorithms)

定義庫和表的分片算法。

算法名稱類型算法表達式說明
order-db-inlineINLINEds${user_id % 3}根據 user_id % 3 路由到 ds0/ds1/ds2
order-table-inlineINLINEt_order_${user_id % 3}根據 user_id % 3 路由到 t_order_0/t_order_1/t_order_2
(3) 廣播表 (broadcast-tables)

配置 t_user 表為廣播表(所有庫全量同步)。

配置項說明
broadcast-tables廣播表列表(t_user
(4) 默認策略 (default-*)

顯式禁用默認分庫分表策略(僅對未配置的表生效)。

配置項說明
default-database-strategy.none默認不分庫
default-table-strategy.none默認不分表

3. 屬性配置 (props)
配置項說明
sql-show: true打印 SQL 日志(調試用)

完整配置總結
層級關鍵配置項作用
數據源datasource.names定義 3 個數據源(ds0, ds1, ds2
分片規則tables.t_order.actual-data-nodes邏輯表 t_order 映射到 3 個庫的 3 張分表(共 9 張表)
分片策略database-strategy / table-strategyuser_id 分庫分表
分片算法order-db-inline / order-table-inline通過取模運算路由數據
廣播表broadcast-tables: t_usert_user 表在所有庫中全量同步
調試sql-show: true打印實際執行的 SQL

潛在問題檢查
  1. 表名沖突
    • 確保數據庫中不存在名為 order 的表(你的配置已使用 t_order,無沖突)。
  2. 分表是否創建
    • 需手動創建所有分表(如 ds0.t_order_0, ds1.t_order_1 等)。
  3. 分片鍵類型
    • user_id 應為數值類型(否則 % 運算可能失敗)。
  4. SQL 日志驗證
    • 啟用 sql-show: true 后,觀察日志確認路由是否正確。

示例 SQL 路由結果

假設 user_id = 5

  • 分庫路由5 % 3 = 2ds2

  • 分表路由5 % 3 = 2t_order_2

  • 最終 SQL:

    INSERT INTO t_order_2 (id, user_id, ...) VALUES (?, 5, ...)
    

    執行在 ds2 數據源上。


通過以上配置,ShardingSphere 會根據 user_id 自動將數據分散到不同的庫和表中。如果仍有問題,建議檢查:

  1. 數據庫表是否已創建。
  2. 分片鍵 user_id 的值是否符合預期。
  3. 日志中輸出的實際 SQL 是否符合分片邏輯。

🧩 五、Java 實體與 DAO 層設計

實體類

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import java.math.BigDecimal;
import java.time.LocalDateTime;@Data
@TableName("t_order")
public class Order {private Long id;private Long userId;private String orderNo;private BigDecimal amount;private LocalDateTime createTime;
}

Mapper接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.shardingdemo.entity.Order;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface OrderMapper extends BaseMapper<Order> {
}

Controller接口

import cn.hutool.core.util.IdUtil;
import com.example.shardingdemo.entity.Order;
import com.example.shardingdemo.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;@RestController
@RequestMapping("/order")
public class OrderController {@Autowiredprivate OrderMapper orderMapper;@PostMapping("/create")public String createOrder() {Order order = new Order();order.setId(IdUtil.getSnowflakeNextId());order.setUserId(1001L);order.setOrderNo("ORDER_" + System.currentTimeMillis());order.setAmount(new BigDecimal("99.99"));order.setCreateTime(LocalDateTime.now());orderMapper.insert(order);return "OK";}@GetMapping("/list")public List<Order> listOrders() {return orderMapper.selectList(null);}
}

🚦 常用查詢效果演示

? 寫入數據

Logic SQL: INSERT INTO t_order  ( id, user_id, order_no, amount, create_time )  VALUES (  ?, ?, ?, ?, ?  )
Actual SQL: ds2 ::: INSERT INTO t_order_2  ( id, user_id, order_no, amount, create_time )  VALUES (?, ?, ?, ?, ?) ::: [1952250075647401984, 1001, ORDER_1754287663743, 99.99, 2025-08-04T14:07:43.743983]
計算 userId=1001 的路由結果
(1) 分庫計算
1001 % 3 = 2  // 余數為 2

目標庫:ds2(對應 ds${2})

(2) 分表計算
1001 % 3 = 2  // 余數仍為 2

目標表:t_order_2(對應 t_order_${2})

? 查詢數據

Actual SQL: ds2 ::: SELECT id,user_id,order_no,amount,create_time FROM t_order_0 WHERE id=? UNION ALL SELECT id,user_id,order_no,amount,create_time FROM t_order_1 WHERE id=? UNION ALL SELECT id,user_id,order_no,amount,create_time FROM t_order_2 WHERE id=? ::: [1952241523566383104, 1952241523566383104, 1952241523566383104]

👉 自動路由,跨表/跨庫查詢時支持 Merge 結果集


🚧 常見問題與優化建議

問題/瓶頸原因分析優化建議
跨庫查詢慢無法使用索引避免跨庫;結合分片鍵做等值過濾
寫入熱點庫慢分片策略不均勻使用雪花 ID + hash 分庫分表策略
SQL 不支持復雜 JOIN / 子查詢等拆分邏輯到應用層,使用綁定表提升性能
分布式事務處理多庫事務需要協調引入 Seata 或采用 BASE 最終一致性方案
分片表擴容麻煩表名寫死、規則不靈活使用 Hint / 時間分片表達式 / Inline 表達式

📎 參考資料與源碼下載

  • 🔗 官方文檔(ShardingSphere)

💬 如果你覺得這篇文章對你有幫助,歡迎點贊 + 收藏 + 評論,一起交流分庫分表最佳實踐!

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

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

相關文章

MaxKB 使用 MCP 連接 Oracle (免安裝 cx_Oracle 和 Oracle Instant Client)

一、背景 安裝cx_Oracle包和Oracle Instant Client來操作數據庫&#xff0c;比較繁瑣同時容易沖突&#xff0c;不同的 Oracle 版本都需要安裝不同的插件。這篇文章將介紹使用 MCP 協議的連接方法。 二、操作步驟 1、使用 1Panel 安裝 DBhub a) 數據庫類型選擇 Oracle 類型。…

基于Python的超聲波OFDM數字通信鏈路設計與實現

基于Python的超聲波OFDM數字通信鏈路設計與實現 摘要 本文詳細介紹了使用Python實現的超聲波OFDM(正交頻分復用)數字通信鏈路系統。該系統能夠在標準音響設備上運行&#xff0c;利用高于15kHz的超聲波頻段進行數據傳輸&#xff0c;采用48kHz采樣率。文章涵蓋了從OFDM基本原理、…

滑動窗口相關題目

近些年來&#xff0c;我國防沙治沙取得顯著成果。某沙漠新種植N棵胡楊&#xff08;編號1-N&#xff09;&#xff0c;排成一排。一個月后&#xff0c;有M棵胡楊未能成活。現可補種胡楊K棵&#xff0c;請問如何補種&#xff08;只能補種&#xff0c;不能新種&#xff09;&#xf…

Java 工具類的“活化石”:Apache Commons 核心用法、性能陷阱與現代替代方案

在上一篇文章中&#xff0c;我們回顧了 Apache Commons 的經典組件。但作為 Java 世界中資歷最老、影響最深遠的工具庫&#xff0c;它的價值遠不止于此。許多開發者可能只使用了它 10% 的功能&#xff0c;卻忽略了另外 80% 能極大提升代碼質量的“隱藏寶石”。本文將提供一個更…

數據結構——圖及其C++實現 多源最短路徑 FloydWarshall算法

目錄 一、前言 二、算法思想 三、代碼實現 四、測試 五、源碼 一、前言 前兩篇學習的Dijkstra算法和Bellman-Ford算法都是用來求解圖的單源最短路徑&#xff0c;即從圖中指定的一個源點出發到圖中其他任意頂點的最短路徑。Dijkstra算法不能求解帶有負權重的圖的最短路徑&…

解決微軟應用商店 (Microsoft store) 打不開,無網絡連接的問題!

很多小伙伴都會遇見微軟應用商店 (Microsoft store)打開后出現無網絡的問題&#xff0c;一般出現這種問題基本都是因為你的電腦安裝了某些銀行的網銀工具&#xff0c;因為網銀工具為了安全會關閉Internet 選項中的最新版本的TLS協議&#xff0c;而微軟商店又需要最新的TLS協議才…

Android—服務+通知=>前臺服務

文章目錄1、Android服務1.1、定義1.2、基本用法1.2.1、定義一個服務1.2.2、服務注冊1.2.3、啟動和停止服務1.2.4、活動和服務進行通信1.3、帶綁定的服務示例1.3.1、定義服務類1.3.2、客戶端&#xff08;Activity&#xff09;綁定與交互?1.3.3、AndroidManifest.xml 注冊?1.3.…

從基礎功能到自主決策, Agent 開發進階路怎么走

Agent 開發進階路線大綱基礎功能實現核心模塊構建環境感知&#xff1a;傳感器數據處理&#xff08;視覺、語音、文本等輸入&#xff09;基礎動作控制&#xff1a;API調用、硬件驅動、簡單反饋機制狀態管理&#xff1a;有限狀態機&#xff08;FSM&#xff09;或行為樹&#xff0…

《動手學深度學習》讀書筆記—9.6編碼器-解碼器架構

本文記錄了自己在閱讀《動手學深度學習》時的一些思考&#xff0c;僅用來作為作者本人的學習筆記&#xff0c;不存在商業用途。 正如我們在9.5機器翻譯中所討論的&#xff0c;機器翻譯是序列轉換模型的一個核心問題&#xff0c;其輸入和輸出都是長度可變的序列。為了處理這種類…

DocBench:面向大模型文檔閱讀系統的評估基準與數據集分析

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 一、數據集概述與核心目標 DocBench 是由研究團隊于2024年提出的首個…

Python高級排序技術:非原生可比對象的自定義排序策略詳解

引言&#xff1a;超越原生比較操作的排序挑戰在Python數據處理中&#xff0c;我們經常需要處理不原生支持比較操作的對象。根據2024年《Python開發者生態系統報告》&#xff0c;在大型項目中&#xff0c;開發者平均需處理28%的自定義對象排序需求&#xff0c;這些對象包括&…

低代碼系統的技術深度:超越“可視化操作”的架構與實現挑戰

在很多非開發者眼中&#xff0c;低代碼平臺似乎只是簡化流程、快速搭建頁面的工具。然而&#xff0c;在真實的企業級應用中&#xff0c;低代碼系統必須面對高并發請求、復雜業務規則、多角色權限、跨系統集成與持續演進等一系列工程挑戰。高效交付&#xff08;Rapid Delivery&a…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 詞云圖-微博評論詞云圖實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解詞云圖-微博評論詞云圖實現 視頻在線地址&…

Webpack核心技能:Webpack安裝配置與模塊化

一、webpack 的安裝和使用1. webpack 簡介webpack 是基于模塊化的打包 (構建)工具&#xff0c;它把一切視為模塊&#xff08;包括 JS、CSS、圖片等資源文件&#xff09;。工作原理&#xff1a;以開發時態的入口模塊為起點遞歸分析所有依賴關系經過壓縮、合并等處理最終生成運行…

數據結構---二級指針(應用場景)、內核鏈表、棧(系統棧、實現方式)、隊列(實現方式、應用)

一、二級指針的應用場景1、在被調函數中&#xff0c;想要修改主調函數中的指針變量&#xff0c;需要傳遞該指針變量的地址&#xff0c;形參用二級指針接收。2、指針數組的數組名是一個二級指針&#xff0c;指針數組的數組名作為參數傳遞時&#xff0c;可用二級指針接收。指針數…

NodeJs學習日志(1):windows安裝使用node.js 安裝express,suquelize,sqlite,nodemon

windows安裝使用node.js 安裝express&#xff0c;suquelize&#xff0c;sqlite 系統是win10&#xff0c;默認已經安裝好nodejs與npm包名作用expressWeb應用框架suquelize數據庫ORMsqlite數據庫nodemon代碼熱重載安裝express 添加express生成器 npm add express-generator4安裝e…

Cervantes:面向滲透測試人員和紅隊的開源協作平臺

Cervantes 是一個專為滲透測試人員和紅隊打造的開源協作平臺。它提供了一個集中式工作區&#xff0c;用于集中管理項目、客戶端、漏洞和報告。通過簡化數據組織和團隊協調&#xff0c;它有助于減少規劃和執行滲透測試所需的時間和復雜性。 作為 OWASP 旗下的開源解決方案&…

[Python 基礎課程]猜數字游戲

使用 Python 實現一個猜數字游戲&#xff0c;先隨機生成一個 1 到 100 之間的一個隨機整數&#xff0c;讓用戶猜測這個數是什么&#xff0c;每次都提示用戶猜大了還是猜小了&#xff0c;如果用戶猜對了&#xff0c;提示用戶猜對了&#xff0c;用了多少次&#xff0c;并且之前每…

文件加密實現

一、不依賴外部庫實現 使用自定義的XOR加密算法結合簡單的密鑰擴展。 實現說明 這個方案不依賴任何外部庫&#xff0c;僅使用C標準庫實現&#xff1a; 加密原理&#xff1a;采用XOR加密算法&#xff0c;這是一種簡單但有效的對稱加密方式&#xff0c;相同的密鑰可以用于加密和解…

Unity輕量觀察相機

一、腳本功能簡介ObserveCamera 是一個可直接掛載到任意 GameObject 上的通用攝像機控制腳本&#xff0c;支持以下功能&#xff1a;鼠標右鍵控制攝像機繞自身旋轉&#xff08;俯仰、水平&#xff09;鼠標左鍵拖拽目標對象進行平移&#xff08;局部 XY 平面移動&#xff09;鼠標…