[學習] 哈希碼:原理、用途與實現詳解(C代碼示例)

哈希碼:原理、用途與實現詳解

博主在《在C語言中使用字典》一文中,使用哈希來實現鍵值對的快速檢索,今天對哈希這一算法工具,進行一些深入的研究,爭取能能做到知其然亦知其所以然。

文章目錄

  • 哈希碼:原理、用途與實現詳解
    • 一、哈希碼的原理
      • 1.1 什么是哈希碼?
      • 1.2 哈希函數的特性
      • 1.3 哈希沖突
    • 二、哈希的表達式
      • 2.1 通用哈希函數表達式
      • 2.2 多項式哈希函數(Polynomial Hashing)
      • 2.3 DJB2 哈希函數
      • 2.4 SHA-256 哈希函數
        • (1) 初始化工作變量
        • (2) 主壓縮循環
        • (3) 更新哈希值
      • 2.5 MD5 哈希函數
        • (1) 初始化緩沖區
        • (2) 主循環(四組 16 輪)
        • (3) 更新緩沖區
      • 2.6 哈希沖突解決方法的顯性表達式
        • (1) 鏈地址法(拉鏈法)
        • (2) 開放定址法(線性探測)
        • (3) 雙散列函數法
      • 5. 小結
    • 三、哈希碼的用途
      • 3.1 數據檢索
      • 3.2 數據完整性驗證
      • 3.3 密碼存儲
      • 3.4 分布式系統
    • 四、哈希碼的實現
      • 4.1 C語言實現哈希碼計算
        • 代碼解析:
        • 輸出示例:
      • 4.2 哈希表實現
        • 代碼解析:
    • 五、總結

哈希碼(Hash Code)是計算機科學中的核心概念之一,廣泛應用于數據存儲、檢索、安全等領域。本文將從原理數學表達式用途實現四個方面詳細介紹哈希碼,并提供一個完整的C語言實現示例。


一、哈希碼的原理

1.1 什么是哈希碼?

哈希碼是通過哈希函數將任意長度的數據(如字符串、文件等)映射為固定長度數值的過程。其核心思想是通過數學變換,將復雜的數據結構轉換為一個唯一的標識符。

1.2 哈希函數的特性

哈希函數具有以下關鍵特性:

  1. 單向性
    從原始數據計算哈希碼是單向的,即無法通過哈希碼反推出原始數據。
    Hash ( x ) = h 但 x ≠ Hash ? 1 ( h ) \text{Hash}(x) = h \quad \text{但} \quad x \neq \text{Hash}^{-1}(h) Hash(x)=hx=Hash?1(h)

  2. 確定性
    相同的輸入數據始終生成相同的哈希碼。
    x 1 = x 2 ? Hash ( x 1 ) = Hash ( x 2 ) x_1 = x_2 \Rightarrow \text{Hash}(x_1) = \text{Hash}(x_2) x1?=x2??Hash(x1?)=Hash(x2?)

  3. 敏感性
    輸入的微小變化會導致哈希碼的顯著改變。
    x 1 ~ x 2 但 Hash ( x 1 ) ≠ Hash ( x 2 ) x_1 \sim x_2 \quad \text{但} \quad \text{Hash}(x_1) \neq \text{Hash}(x_2) x1?x2?Hash(x1?)=Hash(x2?)

  4. 均勻性
    哈希碼在輸出空間中均勻分布,減少沖突概率。
    ? x , y , Hash ( x ) ≈ UniformDistribution \forall x, y, \quad \text{Hash}(x) \approx \text{UniformDistribution} ?x,y,Hash(x)UniformDistribution

1.3 哈希沖突

哈希沖突是指不同的輸入生成相同的哈希碼。由于哈希函數的輸出空間有限,而輸入空間無限,沖突是不可避免的。常見的解決方法包括:

  • 鏈地址法:將沖突的鍵值對存儲在鏈表中。
  • 開放尋址法:通過探查算法尋找空閑位置。

二、哈希的表達式

哈希函數的顯性表達式因具體算法而異,以下是幾種常見哈希函數的顯性表達式及其數學形式:

2.1 通用哈希函數表達式

哈希函數的基本形式為:
Addr = H ( key ) \text{Addr} = H(\text{key}) Addr=H(key)
其中:

  • key \text{key} key:輸入數據(字符串、數值等)。
  • H H H:哈希函數。
  • Addr \text{Addr} Addr:輸出的哈希碼(通常為固定長度的整數或二進制串)。

2.2 多項式哈希函數(Polynomial Hashing)

多項式哈希函數通過將輸入字符串視為多項式系數,計算其模值:
H ( s ) = ( ∑ i = 0 n ? 1 a i ? x i ) m o d m H(s) = \left( \sum_{i=0}^{n-1} a_i \cdot x^i \right) \mod m H(s)=(i=0n?1?ai??xi)modm
其中:

  • s = a 0 a 1 … a n ? 1 s = a_0a_1\ldots a_{n-1} s=a0?a1?an?1?:輸入字符串,長度為 n n n
  • x x x:基數(常選質數,如 31、37)。
  • m m m:模數(通常為哈希表大小)。
  • m o d mod mod:取模(求余)運算。

示例
對于字符串 “abc”(ASCII 碼分別為 97, 98, 99),若 x = 31 x=31 x=31, m = 1000 m=1000 m=1000
H ( " a b c " ) = ( 97 ? 31 0 + 98 ? 31 1 + 99 ? 31 2 ) m o d 1000 H("abc") = (97 \cdot 31^0 + 98 \cdot 31^1 + 99 \cdot 31^2) \mod 1000 H("abc")=(97?310+98?311+99?312)mod1000

2.3 DJB2 哈希函數

DJB2 是一種簡單高效的哈希算法,其顯性表達式為:
hash = ( ( hash ? 5 ) + hash ) + c \text{hash} = ((\text{hash} \ll 5) + \text{hash}) + c hash=((hash?5)+hash)+c
其中:

  • ? \ll ?:左移運算(等價于乘以 2 5 = 32 2^5 = 32 25=32)。
  • c c c:當前字符的 ASCII 碼。
  • 初始值 hash = 5381 \text{hash} = 5381 hash=5381

等價數學形式
hash new = ( hash old × 33 ) + c \text{hash}_{\text{new}} = (\text{hash}_{\text{old}} \times 33) + c hashnew?=(hashold?×33)+c
迭代公式:
hash = ∑ i = 0 n ? 1 c i ? 33 n ? 1 ? i \text{hash} = \sum_{i=0}^{n-1} c_i \cdot 33^{n-1-i} hash=i=0n?1?ci??33n?1?i


2.4 SHA-256 哈希函數

SHA-256 是一種密碼學哈希函數,其核心步驟包括多項式運算和位操作。以下是其關鍵步驟的顯性表達式:

(1) 初始化工作變量

a = h 0 , b = h 1 , c = h 2 , d = h 3 , e = h 4 , f = h 5 , g = h 6 , h = h 7 \begin{align*} a &= h_0, \quad b = h_1, \quad c = h_2, \quad d = h_3, \\ e &= h_4, \quad f = h_5, \quad g = h_6, \quad h = h_7 \end{align*} ae?=h0?,b=h1?,c=h2?,d=h3?,=h4?,f=h5?,g=h6?,h=h7??
其中 h 0 ~ h 7 h_0 \sim h_7 h0?h7? 為固定初始值(十六進制):
h 0 = 0 x 6 a 09 e 667 , h 1 = 0 x b b 67 a e 85 , h 2 = 0 x 3 c 6 e f 372 , h 3 = 0 x a 54 f f 53 a , h 4 = 0 x 510 e 527 f , h 5 = 0 x 9 b 05688 c , h 6 = 0 x 1 f 83 d 9 a b , h 7 = 0 x 5 b e 0 c d 19 \begin{aligned} h_0 &= 0x6a09e667, \quad h_1 = 0xbb67ae85, \\ h_2 &= 0x3c6ef372, \quad h_3 = 0xa54ff53a, \\ h_4 &= 0x510e527f, \quad h_5 = 0x9b05688c, \\ h_6 &= 0x1f83d9ab, \quad h_7 = 0x5be0cd19 \end{aligned} h0?h2?h4?h6??=0x6a09e667,h1?=0xbb67ae85,=0x3c6ef372,h3?=0xa54ff53a,=0x510e527f,h5?=0x9b05688c,=0x1f83d9ab,h7?=0x5be0cd19?

(2) 主壓縮循環

對每個消息塊執行 64 輪迭代,每輪更新工作變量:
T 1 = h + Σ 1 ( e ) + Ch ( e , f , g ) + K t + W t T 2 = Σ 0 ( a ) + Maj ( a , b , c ) \begin{aligned} T_1 &= h + \Sigma_1(e) + \text{Ch}(e,f,g) + K_t + W_t \\ T_2 &= \Sigma_0(a) + \text{Maj}(a,b,c) \end{aligned} T1?T2??=h+Σ1?(e)+Ch(e,f,g)+Kt?+Wt?=Σ0?(a)+Maj(a,b,c)?
其中:

  • Σ 0 ( x ) = ROTR 2 ( x ) ⊕ ROTR 13 ( x ) ⊕ ROTR 22 ( x ) \Sigma_0(x) = \text{ROTR}^2(x) \oplus \text{ROTR}^{13}(x) \oplus \text{ROTR}^{22}(x) Σ0?(x)=ROTR2(x)ROTR13(x)ROTR22(x)
  • Σ 1 ( x ) = ROTR 6 ( x ) ⊕ ROTR 11 ( x ) ⊕ ROTR 25 ( x ) \Sigma_1(x) = \text{ROTR}^6(x) \oplus \text{ROTR}^{11}(x) \oplus \text{ROTR}^{25}(x) Σ1?(x)=ROTR6(x)ROTR11(x)ROTR25(x)
  • Ch ( x , y , z ) = ( x ∧ y ) ⊕ ( ? x ∧ z ) \text{Ch}(x,y,z) = (x \land y) \oplus (\lnot x \land z) Ch(x,y,z)=(xy)(?xz)
  • Maj ( x , y , z ) = ( x ∧ y ) ⊕ ( x ∧ z ) ⊕ ( y ∧ z ) \text{Maj}(x,y,z) = (x \land y) \oplus (x \land z) \oplus (y \land z) Maj(x,y,z)=(xy)(xz)(yz)
  • K t K_t Kt?:第 t t t 輪的常量。
  • W t W_t Wt?:消息擴展后的第 t t t 個字。
(3) 更新哈希值

每輪迭代后更新工作變量:
h = g , g = f , f = e , e = d + T 1 d = c , c = b , b = a , a = T 1 + T 2 \begin{aligned} h &= g, \quad g = f, \quad f = e, \quad e = d + T_1 \\ d &= c, \quad c = b, \quad b = a, \quad a = T_1 + T_2 \end{aligned} hd?=g,g=f,f=e,e=d+T1?=c,c=b,b=a,a=T1?+T2??


2.5 MD5 哈希函數

MD5 將輸入分塊處理,每輪進行四組非線性變換。以下是其核心步驟的顯性表達式:

(1) 初始化緩沖區

A = 0 x 67452301 , B = 0 x E F C D A B 89 , C = 0 x 98 B A D C F E , D = 0 x 10325476 A = 0x67452301, \quad B = 0xEFCDAB89, \quad C = 0x98BADCFE, \quad D = 0x10325476 A=0x67452301,B=0xEFCDAB89,C=0x98BADCFE,D=0x10325476

(2) 主循環(四組 16 輪)

每組使用不同的非線性函數 F , G , H , I F, G, H, I F,G,H,I

  • 第一組($ F(X,Y,Z) = (X \land Y) \lor (\lnot X \land Z) $):
    T = D + ? s ( A + F ( B , C , D ) + X k + T i ) , 其中? s ∈ { 7 , 12 , 17 , 22 } T = D + \lll^s (A + F(B,C,D) + X_k + T_i), \quad \text{其中 } s \in \{7,12,17,22\} T=D+?s(A+F(B,C,D)+Xk?+Ti?),其中?s{7,12,17,22}
  • 第二組($ G(X,Y,Z) = (X \land Z) \lor (Y \land \lnot Z) $):
    T = C + ? s ( D + G ( A , B , C ) + X k + T i ) , s ∈ { 5 , 9 , 14 , 20 } T = C + \lll^s (D + G(A,B,C) + X_k + T_i), \quad s \in \{5,9,14,20\} T=C+?s(D+G(A,B,C)+Xk?+Ti?),s{5,9,14,20}
  • 第三組($ H(X,Y,Z) = X \oplus Y \oplus Z $):
    T = B + ? s ( C + H ( A , B , C ) + X k + T i ) , s ∈ { 4 , 11 , 16 , 23 } T = B + \lll^s (C + H(A,B,C) + X_k + T_i), \quad s \in \{4,11,16,23\} T=B+?s(C+H(A,B,C)+Xk?+Ti?),s{4,11,16,23}
  • 第四組($ I(X,Y,Z) = Y \oplus (X \lor \lnot Z) $):
    T = A + ? s ( B + I ( A , B , C ) + X k + T i ) , s ∈ { 6 , 10 , 15 , 21 } T = A + \lll^s (B + I(A,B,C) + X_k + T_i), \quad s \in \{6,10,15,21\} T=A+?s(B+I(A,B,C)+Xk?+Ti?),s{6,10,15,21}
(3) 更新緩沖區

每組循環后更新 A , B , C , D A, B, C, D A,B,C,D
A = A + T , B = B + new?value , C = C + new?value , D = D + new?value \begin{aligned} A &= A + T, \quad B = B + \text{new value}, \\ C &= C + \text{new value}, \quad D = D + \text{new value} \end{aligned} AC?=A+T,B=B+new?value,=C+new?value,D=D+new?value?

2.6 哈希沖突解決方法的顯性表達式

(1) 鏈地址法(拉鏈法)

對于哈希表 T T T,沖突鍵值對存儲在鏈表中:
T [ index ] = LinkedList ( key 1 , key 2 , … ) T[\text{index}] = \text{LinkedList}(\text{key}_1, \text{key}_2, \ldots) T[index]=LinkedList(key1?,key2?,)
其中 index = H ( key ) m o d TABLE_SIZE \text{index} = H(\text{key}) \mod \text{TABLE\_SIZE} index=H(key)modTABLE_SIZE

(2) 開放定址法(線性探測)

沖突時按固定步長 p ( i ) = i p(i) = i p(i)=i 探查:
index i = ( H ( key ) + i ) m o d TABLE_SIZE \text{index}_i = (H(\text{key}) + i) \mod \text{TABLE\_SIZE} indexi?=(H(key)+i)modTABLE_SIZE
直到找到空閑位置。

(3) 雙散列函數法

沖突時使用第二個哈希函數 H ′ H' H
index i = ( H ( key ) + i ? H ′ ( key ) ) m o d TABLE_SIZE \text{index}_i = (H(\text{key}) + i \cdot H'(\text{key})) \mod \text{TABLE\_SIZE} indexi?=(H(key)+i?H(key))modTABLE_SIZE

5. 小結

不同哈希函數的顯性表達式反映了其設計思想和數學特性。例如:

  • 多項式哈希通過多項式展開實現均勻分布。
  • SHA-256/MD5依賴復雜的位運算和非線性函數保證安全性。
  • 沖突解決方法通過數學公式動態調整存儲位置。

在實際應用中,選擇哈希函數時需權衡 速度、均勻性、抗碰撞性 等因素。


三、哈希碼的用途

3.1 數據檢索

哈希碼通過快速定位數據位置,顯著提升檢索效率。例如:

  • 哈希表:通過哈希函數將鍵映射到數組索引,實現 O ( 1 ) O(1) O(1) 時間復雜度的查找。
  • 數據庫索引:B+樹結合哈希加速數據查詢。

3.2 數據完整性驗證

哈希碼可用于驗證數據是否被篡改。例如:

  • 文件校驗:通過比較文件的哈希碼與已知值判斷文件是否被修改。
  • 數字簽名:對文檔生成哈希碼后加密,接收方解密后驗證哈希碼一致性。

3.3 密碼存儲

哈希碼在密碼學中用于安全存儲密碼。例如:

  • 密碼哈希同步:將用戶密碼的哈希值從本地系統同步到云端。
  • 加鹽哈希:在密碼中添加隨機值(鹽),防止彩虹表攻擊。

3.4 分布式系統

哈希碼在分布式系統中用于數據分片和負載均衡。例如:

  • 一致性哈希:動態分配節點時減少數據遷移。
  • 布隆過濾器:通過多個哈希函數檢測元素是否存在。

四、哈希碼的實現

4.1 C語言實現哈希碼計算

以下是一個基于 DJB2算法 的哈希碼計算函數,該算法以低沖突率和高效性著稱。

#include <stdio.h>
#include <string.h>// 哈希碼計算函數(DJB2算法)
unsigned long hash_code(const char *str) {unsigned long hash = 5381;int c;while ((c = *str++)) {hash = ((hash << 5) + hash) + c; // hash * 33 + c}return hash;
}int main() {const char *test_str = "Hello, World!";unsigned long code = hash_code(test_str);printf("Input: %s\n", test_str);printf("Hash Code: %lu\n", code);return 0;
}
代碼解析:
  1. DJB2算法

    • 初始值 hash = 5381 是經驗值,用于優化分布。
    • 每次迭代中,hash = ((hash << 5) + hash) + c 等價于 hash * 33 + c,其中 33 是經過實測的最優系數。
    • 最終返回的哈希碼為無符號長整型。
  2. 編譯與運行
    保存為 hash_code.c,使用以下命令編譯并運行:

    gcc -o hash_code hash_code.c
    ./hash_code
    
輸出示例:
Input: Hello, World!
Hash Code: 11557940046392859113

4.2 哈希表實現

以下是基于哈希碼的簡單哈希表實現,支持插入和查找操作。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define TABLE_SIZE 100// 鍵值對結構體
typedef struct {char *key;int value;
} KeyValuePair;// 哈希表結構體
typedef struct {KeyValuePair *items[TABLE_SIZE];int size;
} HashTable;// 哈希碼計算函數
unsigned long hash_code(const char *str) {unsigned long hash = 5381;int c;while ((c = *str++)) {hash = ((hash << 5) + hash) + c;}return hash;
}// 插入鍵值對
void insert(HashTable *table, const char *key, int value) {unsigned long index = hash_code(key) % TABLE_SIZE;KeyValuePair *pair = (KeyValuePair *)malloc(sizeof(KeyValuePair));pair->key = strdup(key);pair->value = value;table->items[index] = pair;table->size++;
}// 查找鍵值對
int find(HashTable *table, const char *key) {unsigned long index = hash_code(key) % TABLE_SIZE;if (table->items[index] && strcmp(table->items[index]->key, key) == 0) {return table->items[index]->value;}return -1; // 未找到
}// 釋放哈希表
void free_table(HashTable *table) {for (int i = 0; i < TABLE_SIZE; i++) {if (table->items[i]) {free(table->items[i]->key);free(table->items[i]);}}free(table);
}int main() {HashTable table = {0};insert(&table, "apple", 10);insert(&table, "banana", 20);insert(&table, "orange", 30);printf("apple: %d\n", find(&table, "apple"));   // 輸出: 10printf("banana: %d\n", find(&table, "banana")); // 輸出: 20printf("grape: %d\n", find(&table, "grape"));   // 輸出: -1free_table(&table);return 0;
}
代碼解析:
  1. 哈希表結構

    • 使用數組 items 存儲鍵值對指針。
    • TABLE_SIZE 定義哈希表大小。
  2. 插入與查找

    • 插入時通過哈希碼取模定位數組索引。
    • 查找時直接通過哈希碼定位索引,并比較鍵值。
  3. 沖突處理

    • 當多個鍵映射到同一索引時,當前實現會覆蓋舊值。實際應用中可通過鏈地址法(鏈表)或開放尋址法解決沖突。

五、總結

哈希碼是計算機科學中不可或缺的技術,其核心價值在于高效的數據映射與快速檢索。通過合理設計哈希函數和沖突解決策略,可以顯著提升系統的性能與安全性。本文通過理論講解和代碼實現,展示了哈希碼的原理、用途及其實現方式。希望讀者能通過本文深入理解哈希碼的本質,并在實際開發中靈活應用。


研究學習不易,點贊易。
工作生活不易,收藏易,點收藏不迷茫 :)


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

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

相關文章

golang--channel的關鍵特性和行為

Go 語言 Channel 的核心特性與行為深度解析 Channel 是 Go 語言并發編程的核心組件&#xff0c;用于在不同 goroutine 之間進行通信和同步。以下是其關鍵特性和行為的全面分析&#xff1a; 一、基本特性 1. 類型安全通信管道 ch : make(chan int) // 只能傳遞整數2. 方向性…

HarmonyOS 5 鴻蒙多模態融合測試技術方案詳解

以下是針對HarmonyOS 5多模態融合測試的技術方案詳解&#xff0c;綜合交互邏輯、容錯機制及分布式驗證等核心模塊&#xff1a; ?一、多模態交互核心邏輯驗證? ?事件融合機制? 通過kit.AbilityKit監聽語音指令&#xff0c;結合ArkUI手勢系統捕獲屏幕坐標&#xff1a; import…

在AI普及的大環境下神經網絡在新能源汽車熱管理系統中的應用簡介

一、神經網絡的核心原理與結構 1. 生物啟發與基礎組成 神經網絡&#xff08;Artificial Neural Network, ANN&#xff09;受生物神經元信息處理機制啟發&#xff0c;由大量人工神經元互聯構成計算模型。每個神經元接收輸入信號&#xff08;如溫度、流量等物理量&#xff09;&a…

? CATIA V5與3DEXPERIENCE協同設計:引領無人機行業新紀元

在無人機行業蓬勃發展的今天&#xff0c;傳統設計流程正面臨前所未有的系統性挑戰。更令人擔憂的是&#xff0c;隨著無人機應用場景的不斷拓展&#xff0c;從農業植保到城市物流&#xff0c;從應急救援到軍事偵察&#xff0c;對產品性能的要求日益嚴苛。傳統設計方法已難以應對…

關于科技公司經營的一些想法

分析了一些我們公司的問題&#xff1a; 1&#xff0c;測試 重視測試&#xff0c;加大測試投入 2&#xff0c;人才 人才評判標準&#xff1a;結果論&#xff0c;主要根據該崗位問題的解決效率與質量評判。工作時長不重要 任人唯賢。盡可能錄用能解決問題的人才&#xff0c;不…

校招生成長日記(一):初來乍到

提前來了幾天&#xff0c;感受一下廣東的生活。第一印象就是悶熱&#xff01;后面嘗了潮汕火鍋&#xff0c;椰子雞&#xff0c;荔枝&#xff0c;都很不錯&#xff01;&#xff01;&#xff01;就是沒有重口味的&#xff0c;好想念我的酸辣粉&#xff0c;麻辣燙啊......y走了瞬間…

【精選】移動端學習平臺設計與開發 移動端平臺開發(含資料閱讀、時事新聞、時政答題與討論功能) 基于移動端的專題教育平臺設計與實現

博主介紹&#xff1a; ?我是阿龍&#xff0c;一名專注于Java技術領域的程序員&#xff0c;全網擁有10W粉絲。作為CSDN特邀作者、博客專家、新星計劃導師&#xff0c;我在計算機畢業設計開發方面積累了豐富的經驗。同時&#xff0c;我也是掘金、華為云、阿里云、InfoQ等平臺…

Protobuf 高級特性詳解 —— 嵌套消息、Oneof 字段與自定義選項

在前幾篇文章中&#xff0c;我們已經掌握了 Protocol Buffers&#xff08;Protobuf&#xff09;的基礎語法、.proto 文件的結構、以及如何使用 Go 和 Java 進行數據的序列化與反序列化操作。本篇文章將深入探討 Protobuf 的高級特性&#xff0c;包括&#xff1a; 嵌套消息&…

golang--數據類型與存儲

在 Go 語言中&#xff0c;理解值類型&#xff08;value types&#xff09;和引用類型&#xff08;reference types&#xff09;的區別對于編寫高效、正確的代碼至關重要。以下是主要的區別點和需要注意的特殊情況&#xff1a; 一、值類型&#xff08;Value Types&#xff09; …

uniapp——輪播圖、產品列表輪播、上一頁、下一頁、一屏三張圖

案例展示 組件封裝 <template><view><view class="showSwiperBox"><view class="topSwiper"><swiper class="swiper" :autoplay="autoplay" interval="5000" :previous-margin="margin&qu…

用Python實現安全封裝EXE文件加密保護工具

一、概述 這個Python腳本實現了一個強大的EXE文件加密保護工具,它能夠將任何Windows可執行文件封裝到一個帶密碼保護的GUI程序中。核心功能包括: 使用AES-256加密算法保護原始EXE文件 創建美觀的密碼驗證界面 支持自定義程序圖標 自動處理PyInstaller打包過程 修復Tkinter在…

vue3監聽屬性watch和watchEffect的詳解

文章目錄 1. 前言2. 常規用法3. 監聽對象和route變化4. 使用場景4.1 即時表單驗證4.2 搜索聯想功能4.3 數據變化聯動處理 5. watchEffect詳解5-1 基本概念5-2 核心用法基礎示例&#xff1a;自動響應依賴變化處理異步副作用停止監聽與清理副作用 5-3 高級場景應用監聽多個響應式…

Spring IoC核心實現揭秘

Spring IoC(控制反轉)的實現機制是Spring框架的核心,其本質是將對象的創建、依賴管理和生命周期控制權從應用程序代碼轉移到容器中。以下是其核心實現機制: ?? 一、核心實現步驟 配置元數據加載 容器啟動時讀取XML/注解/Java配置類,解析為BeanDefinition對象(包含類名、…

Solidity內部合約創建全解析:解鎖Web3開發新姿勢

合約創建基礎 new 關鍵字創建合約 在 Solidity 中&#xff0c;new關鍵字是創建合約實例的最基本方式&#xff0c;它就像是一個 “魔法鑰匙”&#xff0c;能夠在以太坊區塊鏈上生成一個全新的合約實例。使用new關鍵字創建合約的過程非常直觀&#xff0c;就像我們在其他編程語言…

OCR大模型,破解金融文檔處理困境,從文字識別到文字理解

金融機構在日常運營中處理海量文檔。這些文檔類型多樣&#xff0c;格式復雜&#xff0c;是業務運營的基礎。如何高效、準確地處理這些文檔&#xff0c;直接影響機構的運營效率與風險控制水平。新一代的OCR大模型技術為此提供了有效的解決方案。它提升了文檔處理的自動化程度與數…

2025.6.21筆記(2)

1.編寫一個程序&#xff0c;輸入一個整數&#xff0c;判斷它是奇數還是偶數 解題思路&#xff1a; 1.因為要判斷輸入的數是奇數還是偶數&#xff0c;所以要用到if判斷 2.判讀奇偶數&#xff1a;如果這個數%20&#xff0c;則它為偶數&#xff0c;如果這個數%2!0&#xff0c;則…

【Ambari3.0.0 部署】Step7—Mariadb初始化-適用于el8

如果有其他系統部署需求可以參考原文 https://doc.janettr.com/install/manual/ MariaDB 10 是 Ambari 及大數據平臺的常見數據庫方案。本文適配 Rocky Linux 8.10&#xff0c;涵蓋 MariaDB 10.11 推薦安裝、YUM 源配置、參數優化、初始化和安全設置&#xff0c;幫助你一步到位…

SpringBoot電腦商城項目--刪除收獲地址+熱銷排行

刪除收獲地址 1 刪除收獲地址-持久層 1.1 規劃sql語句 在刪除操作之前判斷該數據是否存在&#xff0c;判斷該條地址的歸屬是否是當前的用戶執行刪除收貨地址的操作 delete from t_address where aid? 如果用戶刪除的時默認地址&#xff0c;將剩下地址的某一條作為默認收貨地…

MIMIC-III 數據集文件簡介

文件簡介&#xff1a; 共26個文件 admissions.csv 患者入院信息&#xff08;入院時間、出院時間、入院類型、科室等&#xff09;。 callout.csv ICU 外科室請求 ICU 會診的呼叫記錄。 caregivers.csv 護理患者的醫護人員信息&#xff08;身份、角色等&#xff09;。…

UL/CE雙認證!光寶MOC3052-A雙向可控硅輸出光耦 智能家居/工業控制必備!

光寶MOC3052-A雙向可控硅輸出光耦詳解 1. 產品定位 MOC3052-A 是光寶科技&#xff08;Lite-On&#xff09;推出的 雙向可控硅驅動光耦&#xff0c;屬于光電隔離型半導體器件&#xff0c;主要用于交流負載的隔離控制&#xff0c;實現低壓控制電路&#xff08;如MCU&#xff09;…