青少年編程與數學 02-019 Rust 編程基礎 08課題、字面量、運算符和表達式

青少年編程與數學 02-019 Rust 編程基礎 08課題、字面量、運算符和表達式

  • 一、字面量
    • 1. 字面量的分類
      • 1.1 整數字面量
      • 1.2 浮點數字面量
      • 1.3 字符字面量
      • 1.4 字符串字面量
      • 1.5 布爾字面量
      • 1.6 字節數組字面量
    • 2. 字面量的類型推斷
    • 3. 字面量的用途
    • 4. 字面量的限制
    • 字面量總結
  • 二、運算符
    • 1. 算術運算符
    • 2. 邏輯運算符
    • 3. 比較運算符
    • 4. 位運算符
    • 5. 賦值運算符
    • 6. 范圍運算符
    • 7. 條件運算符
    • 8. 運算符重載
    • 注意事項
  • 三、表達式
    • 1. 表達式的定義
    • 2. 表達式的類型
        • 字面量表達式
        • 變量表達式
        • 運算符表達式
        • 函數調用表達式
        • 方法調用表達式
        • 條件表達式
        • 循環表達式
        • 塊表達式
    • 3. 表達式的值
    • 4. 表達式的優先級
    • 5. 表達式與語句的區別
    • 6. 表達式的應用場景
        • 函數返回值
        • 條件分支
        • 循環控制
    • 7. 示例代碼
    • 表達式總結
  • 四、綜合示例
      • 運行結果
      • 示例代碼說明
  • 總結
      • 字面量(Literals)
      • 運算符(Operators)
      • 表達式(Expressions)

課題摘要:
在 Rust 中,字面量、運算符和表達式是構建程序的基礎組件,它們共同構成了 Rust 語言的核心語法。本文介紹Rust中的字面量、運算符和表達式。

關鍵詞:字面量、運算符、表達式


一、字面量

在 Rust 中,字面量(Literals)是指直接在代碼中表示的值,它們是程序中最基本的表達形式。字面量可以是數字、字符、字符串、布爾值等。以下是對 Rust 中字面量的詳細解析:

1. 字面量的分類

Rust 中的字面量可以分為以下幾類:

1.1 整數字面量

整數字面量可以表示整數類型(如 i32u32i64 等)。它們可以有以下幾種形式:

  • 十進制:直接寫數字,如 42
  • 十六進制:以 0x 開頭,如 0x2A(等同于十進制的 42)。
  • 八進制:以 0o 開頭,如 0o52(等同于十進制的 42)。
  • 二進制:以 0b 開頭,如 0b101010(等同于十進制的 42)。
  • 下劃線分隔:可以在數字中使用下劃線 _ 來分隔數字,提高可讀性,如 1_000_000

示例:

let decimal = 42;
let hex = 0x2A;
let octal = 0o52;
let binary = 0b101010;
let large_number = 1_000_000;

1.2 浮點數字面量

浮點數字面量用于表示浮點數,可以是 f32f64 類型。它們可以有以下幾種形式:

  • 十進制表示:直接寫數字和小數點,如 3.14
  • 科學計數法:使用 eE 表示指數部分,如 1.23e4(等同于 12300.0)。
  • 類型后綴:可以顯式指定類型后綴,如 1.23f324.56f64

示例:

let float = 3.14;
let scientific = 1.23e4;
let f32_value = 4.56f32;
let f64_value = 7.89f64;

1.3 字符字面量

字符字面量用于表示單個字符,用單引號 ' 包裹。它可以表示:

  • 普通字符:如 'a'
  • Unicode 字符:如 '中'
  • 轉義字符:如 '\n'(換行符)、'\t'(制表符)、'\\'(反斜杠)等。
  • Unicode 轉義:使用 \u{} 表示 Unicode 碼點,如 '\u{4E2D}'(等同于 '中')。

示例:

let letter = 'a';
let chinese_char = '中';
let newline = '\n';
let unicode_escape = '\u{4E2D}';

1.4 字符串字面量

字符串字面量用于表示字符串,用雙引號 " 包裹。它可以包含:

  • 普通字符:如 "Hello, world!"

  • 轉義字符:如 "\n"(換行符)、"\t"(制表符)、"\\"(反斜杠)等。

  • 原始字符串:使用 r#""# 包裹,可以包含任意字符,包括換行符和雙引號,而無需轉義。例如:

    let raw_string = r#"C:\Users\Alice\Documents"#;
    

示例:

let greeting = "Hello, world!";
let multiline_string = "This is a\nmultiline string.";
let raw_string = r#"C:\Users\Alice\Documents"#;

1.5 布爾字面量

布爾字面量只有兩個值:truefalse

示例:

let is_active = true;
let is_disabled = false;

1.6 字節數組字面量

字節數組字面量用于表示字節數組,用 b"" 包裹。它可以包含:

  • 普通字符:如 b"Hello"
  • 轉義字符:如 b"\n"(換行符)、b"\t"(制表符)、b"\\"(反斜杠)等。

示例:

let bytes = b"Hello";

2. 字面量的類型推斷

Rust 是一種強類型語言,但在某些情況下,字面量的類型可以由編譯器推斷。例如:

  • 如果上下文明確指定了類型,編譯器會根據上下文推斷字面量的類型。
  • 如果沒有明確指定類型,編譯器會使用默認類型:
    • 整數默認為 i32
    • 浮點數默認為 f64

示例:

let x = 42; // 默認類型為 i32
let y = 3.14; // 默認類型為 f64let z: i64 = 123; // 顯式指定類型為 i64
let w: f32 = 4.56; // 顯式指定類型為 f32

3. 字面量的用途

字面量在 Rust 中的用途非常廣泛,主要用于以下場景:

  • 初始化變量:為變量賦初始值。
  • 函數參數:作為函數的參數傳遞。
  • 數組和元組的元素:作為數組或元組的元素。
  • 條件表達式:在 ifwhile 等條件表達式中使用。

4. 字面量的限制

  • 類型必須明確:雖然編譯器可以推斷某些字面量的類型,但在某些情況下,必須顯式指定類型。
  • 轉義字符的使用:在字符串和字符字面量中,特殊字符需要使用轉義序列。
  • 原始字符串的限制:原始字符串不能使用轉義字符,但可以通過 r#""# 包裹來包含任意字符。

字面量總結

字面量是 Rust 中最基本的數據表示形式,它用于直接在代碼中表示值。Rust 支持多種類型的字面量,包括整數、浮點數、字符、字符串、布爾值和字節數組。通過合理使用字面量,可以簡化代碼的編寫,并提高代碼的可讀性。

二、運算符

在 Rust 中,運算符用于執行各種操作,包括算術運算、邏輯運算、比較運算等。Rust 提供了豐富的運算符,涵蓋了幾乎所有常見的操作。以下是對 Rust 中運算符的詳細解析:

1. 算術運算符

算術運算符用于執行基本的數學運算。

運算符描述示例結果
+加法let a = 1 + 2;a = 3
-減法let b = 5 - 3;b = 2
*乘法let c = 4 * 3;c = 12
/除法let d = 10 / 2;d = 5
%取模(余數)let e = 10 % 3;e = 1

2. 邏輯運算符

邏輯運算符用于執行布爾邏輯運算。

運算符描述示例結果
&&邏輯與let a = true && false;a = false
``邏輯或
!邏輯非let c = !true;c = false

3. 比較運算符

比較運算符用于比較兩個值,并返回布爾值。

運算符描述示例結果
==等于let a = 1 == 2;a = false
!=不等于let b = 1 != 2;b = true
>大于let c = 2 > 1;c = true
<小于let d = 1 < 2;d = true
>=大于等于let e = 2 >= 2;e = true
<=小于等于let f = 1 <= 2;f = true

4. 位運算符

位運算符用于對整數的二進制位進行操作。

運算符描述示例結果
&位與let a = 5 & 3;a = 1
``位或`let b = 5
^位異或let c = 5 ^ 3;c = 6
!位非let d = !5;d = -6
<<左移let e = 5 << 1;e = 10
>>右移let f = 5 >> 1;f = 2

5. 賦值運算符

賦值運算符用于將值賦給變量。

運算符描述示例結果
=簡單賦值let a = 5;a = 5
+=加法賦值let mut a = 5; a += 3;a = 8
-=減法賦值let mut b = 5; b -= 3;b = 2
*=乘法賦值let mut c = 5; c *= 3;c = 15
/=除法賦值let mut d = 10; d /= 2;d = 5
%=取模賦值let mut e = 10; e %= 3;e = 1
&=位與賦值let mut a = 5; a &= 3;a = 1
`=`位或賦值`let mut b = 5; b
^=位異或賦值let mut c = 5; c ^= 3;c = 6
<<=左移賦值let mut e = 5; e <<= 1;e = 10
>>=右移賦值let mut f = 5; f >>= 1;f = 2

6. 范圍運算符

范圍運算符用于創建范圍。

運算符描述示例結果
..范圍(不包括上界)for i in 0..5 { ... }i = 0, 1, 2, 3, 4
..=范圍(包括上界)for i in 0..=5 { ... }i = 0, 1, 2, 3, 4, 5

7. 條件運算符

Rust 還提供了一個三元條件運算符,用于根據條件選擇值。

運算符描述示例結果
?條件運算符let a = if condition { x } else { y };根據條件返回 xy

8. 運算符重載

Rust 允許通過實現特定的特質(traits)來重載運算符。例如,可以通過實現 std::ops::Add 特質來重載 + 運算符。

use std::ops::Add;struct Point {x: i32,y: i32,
}impl Add for Point {type Output = Point;fn add(self, other: Point) -> Point {Point {x: self.x + other.x,y: self.y + other.y,}}
}fn main() {let p1 = Point { x: 1, y: 2 };let p2 = Point { x: 3, y: 4 };let p3 = p1 + p2; // 使用重載的 + 運算符println!("p3: ({}, {})", p3.x, p3.y); // 輸出:p3: (4, 6)
}

注意事項

  • 優先級:Rust 的運算符有優先級,例如乘法和除法的優先級高于加法和減法。可以通過括號改變優先級。
  • 短路邏輯:邏輯與(&&)和邏輯或(||)運算符具有短路行為,即如果第一個條件已經決定了結果,第二個條件不會被計算。
  • 溢出:整數運算可能會導致溢出。在調試模式下,Rust 會檢查溢出并報錯;在發布模式下,溢出行為是未定義的。

通過合理使用這些運算符,可以編寫出高效且可讀性強的 Rust 代碼。

三、表達式

在 Rust 中,表達式(Expression)是程序中執行某些操作并產生值的語法構造。與語句(Statement)不同,表達式總是返回一個值,而語句則不返回值。理解表達式是掌握 Rust 編程的基礎。以下是對 Rust 中表達式的詳細解析。

1. 表達式的定義

表達式是 Rust 程序的基本構建塊,它可以執行操作并產生一個值。表達式可以非常簡單,如一個字面量或變量,也可以是復雜的,包含多個操作符和子表達式。

2. 表達式的類型

Rust 中的表達式可以分為以下幾類:

字面量表達式

字面量是直接表示值的表達式,例如數字、字符串或布爾值。

let x = 42; // 整數字面量
let y = "Hello"; // 字符串字面量
let z = true; // 布爾字面量
變量表達式

變量表達式是通過變量名引用變量的值。

let a = 10;
let b = a; // 使用變量 a 的值
運算符表達式

運算符表達式是通過運算符對值進行操作的表達式。

let sum = 1 + 2; // 加法運算符
let product = 3 * 4; // 乘法運算符
let is_equal = 5 == 5; // 比較運算符
函數調用表達式

函數調用表達式是通過函數名和參數列表調用函數的表達式。

fn add(a: i32, b: i32) -> i32 {a + b
}let result = add(3, 4); // 調用函數
方法調用表達式

方法調用表達式是通過對象調用其方法的表達式。

let mut vec = Vec::new();
vec.push(1); // 調用 Vec 的 push 方法
條件表達式

條件表達式是根據條件選擇不同值的表達式。Rust 中的 if 表達式是一個典型的條件表達式。

let number = 5;
let is_positive = if number > 0 { true } else { false };
循環表達式

循環表達式是通過循環語句執行重復操作的表達式。Rust 中的 loopwhilefor 都是循環表達式。

let mut counter = 0;
let result = loop {counter += 1;if counter == 10 {break counter * 2;}
};
println!("Result: {}", result); // 輸出:Result: 20
塊表達式

塊表達式是通過花括號 {} 包裹的一組語句和表達式。塊表達式返回其最后一個表達式的值。

let x = {let y = 3;y + 1
};
println!("x: {}", x); // 輸出:x: 4

3. 表達式的值

每個表達式都有一個值,這個值可以被賦值給變量,也可以作為其他表達式的一部分。例如:

let x = 5 + 3; // 表達式 5 + 3 的值是 8
let y = {let z = 10;z + 2 // 塊表達式的值是 z + 2 的結果,即 12
};

4. 表達式的優先級

Rust 中的表達式遵循一定的優先級規則,這些規則決定了表達式中各個部分的計算順序。例如,乘法和除法的優先級高于加法和減法。

let result = 5 + 3 * 2; // 先計算 3 * 2,再計算 5 + 6

如果需要改變優先級,可以使用括號明確指定計算順序:

let result = (5 + 3) * 2; // 先計算 5 + 3,再計算 8 * 2

5. 表達式與語句的區別

在 Rust 中,表達式和語句是不同的概念:

  • 表達式:總是返回一個值。
  • 語句:不返回值,通常用于執行某些操作,如變量聲明或函數調用。

例如,以下是一個語句:

let x = 5; // 這是一個語句,它聲明了一個變量 x

而以下是一個表達式:

let y = { 5 }; // 這是一個塊表達式,它的值是 5

6. 表達式的應用場景

表達式在 Rust 中的應用非常廣泛,以下是一些常見的應用場景:

函數返回值

函數的返回值是一個表達式的結果。例如:

fn add(a: i32, b: i32) -> i32 {a + b // 表達式
}
條件分支

ifmatch 表達式用于根據條件選擇不同的值。例如:

let number = 5;
let is_positive = if number > 0 { true } else { false };let message = match number {0 => "zero",1 => "one",_ => "other",
};
循環控制

loopwhilefor 表達式用于執行重復操作。例如:

let mut counter = 0;
let result = loop {counter += 1;if counter == 10 {break counter * 2;}
};

7. 示例代碼

以下是一個完整的示例代碼,展示了 Rust 中表達式的多種用法:

fn main() {// 字面量表達式let x = 42;// 變量表達式let y = x;// 運算符表達式let sum = x + y;// 函數調用表達式let product = multiply(x, y);// 條件表達式let is_positive = if sum > 0 { true } else { false };// 塊表達式let z = {let temp = 10;temp + 2};// 循環表達式let mut counter = 0;let result = loop {counter += 1;if counter == 10 {break counter * 2;}};println!("x: {}", x);println!("y: {}", y);println!("sum: {}", sum);println!("product: {}", product);println!("is_positive: {}", is_positive);println!("z: {}", z);println!("result: {}", result);
}fn multiply(a: i32, b: i32) -> i32 {a * b
}

表達式總結

Rust 中的表達式是程序的核心組成部分,它們用于執行操作并產生值。表達式可以非常簡單,也可以非常復雜,涵蓋了字面量、變量、運算符、函數調用、條件分支、循環控制等多種形式。通過合理使用表達式,可以編寫出高效且可讀性強的 Rust 代碼。

四、綜合示例

以下是一個綜合示例代碼,展示了 Rust 中字面量、運算符及表達式的用法:

fn main() {// 字面量的使用// 整數字面量let decimal = 42;let hex = 0x2A;let octal = 0o52;let binary = 0b101010;let large_number = 1_000_000;// 浮點數字面量let float = 3.14;let scientific = 1.23e4;let f32_value = 4.56f32;let f64_value = 7.89f64;// 字符字面量let letter = 'a';let chinese_char = '中';let newline = '\n';let unicode_escape = '\u{4E2D}';// 字符串字面量let greeting = "Hello, world!";let multiline_string = "This is a\nmultiline string.";let raw_string = r#"C:\Users\Alice\Documents"#;// 布爾字面量let is_active = true;let is_disabled = false;// 字節數組字面量let bytes = b"Hello";// 輸出字面量的值println!("整數字面量:decimal = {}, hex = {}, octal = {}, binary = {}, large_number = {}", decimal, hex, octal, binary, large_number);println!("浮點數字面量:float = {}, scientific = {}, f32_value = {}, f64_value = {}", float, scientific, f32_value, f64_value);println!("字符字面量:letter = {}, chinese_char = {}, newline = {:?}, unicode_escape = {}", letter, chinese_char, newline, unicode_escape);println!("字符串字面量:greeting = {}, multiline_string = {}", greeting, multiline_string);println!("原始字符串:raw_string = {}", raw_string);println!("布爾字面量:is_active = {}, is_disabled = {}", is_active, is_disabled);println!("字節數組字面量:bytes = {:?}", bytes);// 運算符的使用// 算術運算符let sum = 1 + 2;let difference = 5 - 3;let product = 4 * 3;let quotient = 10 / 2;let remainder = 10 % 3;// 邏輯運算符let and_result = true && false;let or_result = true || false;let not_result = !true;// 比較運算符let equal = 1 == 2;let not_equal = 1 != 2;let greater_than = 2 > 1;let less_than = 1 < 2;let greater_than_or_equal = 2 >= 2;let less_than_or_equal = 1 <= 2;// 位運算符let bitwise_and = 5 & 3;let bitwise_or = 5 | 3;let bitwise_xor = 5 ^ 3;let bitwise_not = !5;let left_shift = 5 << 1;let right_shift = 5 >> 1;// 賦值運算符let mut a = 5;a += 3;let mut b = 5;b -= 3;let mut c = 5;c *= 3;let mut d = 10;d /= 2;let mut e = 10;e %= 3;// 輸出運算符的結果println!("算術運算符:sum = {}, difference = {}, product = {}, quotient = {}, remainder = {}", sum, difference, product, quotient, remainder);println!("邏輯運算符:and_result = {}, or_result = {}, not_result = {}", and_result, or_result, not_result);println!("比較運算符:equal = {}, not_equal = {}, greater_than = {}, less_than = {}, greater_than_or_equal = {}, less_than_or_equal = {}", equal, not_equal, greater_than, less_than, greater_than_or_equal, less_than_or_equal);println!("位運算符:bitwise_and = {}, bitwise_or = {}, bitwise_xor = {}, bitwise_not = {}, left_shift = {}, right_shift = {}", bitwise_and, bitwise_or, bitwise_xor, bitwise_not, left_shift, right_shift);println!("賦值運算符:a = {}, b = {}, c = {}, d = {}, e = {}", a, b, c, d, e);// 表達式的使用// 字面量表達式let x = 42;// 變量表達式let y = x;// 運算符表達式let sum = x + y;// 函數調用表達式let product = multiply(x, y);// 條件表達式let is_positive = if sum > 0 { true } else { false };// 塊表達式let z = {let temp = 10;temp + 2};// 循環表達式let mut counter = 0;let result = loop {counter += 1;if counter == 10 {break counter * 2;}};// 輸出表達式的結果println!("字面量表達式:x = {}", x);println!("變量表達式:y = {}", y);println!("運算符表達式:sum = {}", sum);println!("函數調用表達式:product = {}", product);println!("條件表達式:is_positive = {}", is_positive);println!("塊表達式:z = {}", z);println!("循環表達式:result = {}", result);
}// 定義一個簡單的函數
fn multiply(a: i32, b: i32) -> i32 {a * b
}

運行結果

整數字面量:decimal = 42, hex = 42, octal = 42, binary = 42, large_number = 1000000
浮點數字面量:float = 3.14, scientific = 12300, f32_value = 4.56, f64_value = 7.89
字符字面量:letter = a, chinese_char = 中, newline = '\n', unicode_escape = 中
字符串字面量:greeting = Hello, world!, multiline_string = This is a
multiline string.
原始字符串:raw_string = C:\Users\Alice\Documents
布爾字面量:is_active = true, is_disabled = false
字節數組字面量:bytes = [72, 101, 108, 108, 111]
算術運算符:sum = 3, difference = 2, product = 12, quotient = 5, remainder = 1
邏輯運算符:and_result = false, or_result = true, not_result = false
比較運算符:equal = false, not_equal = true, greater_than = true, less_than = true, greater_than_or_equal = true, less_than_or_equal = true
位運算符:bitwise_and = 1, bitwise_or = 7, bitwise_xor = 6, bitwise_not = -6, left_shift = 10, right_shift = 2
賦值運算符:a = 8, b = 2, c = 15, d = 5, e = 1
字面量表達式:x = 42
變量表達式:y = 42
運算符表達式:sum = 84
函數調用表達式:product = 1764
條件表達式:is_positive = true
塊表達式:z = 12
循環表達式:result = 20進程已結束,退出代碼為 0

示例代碼說明

  1. 字面量的使用

    • 展示了各種類型的字面量(整數、浮點數、字符、字符串、布爾值、字節數組)的定義和輸出。
    • 包括不同進制的整數字面量(十進制、十六進制、八進制、二進制)和字符串的轉義字符。
  2. 運算符的使用

    • 展示了算術運算符、邏輯運算符、比較運算符、位運算符和賦值運算符的用法。
    • 每個運算符的結果都被打印出來,便于觀察。
  3. 表達式的使用

    • 展示了字面量表達式、變量表達式、運算符表達式、函數調用表達式、條件表達式、塊表達式和循環表達式的用法。
    • 每個表達式的結果都被打印出來,展示了表達式的多樣性和靈活性。

通過這個示例代碼,可以全面了解 Rust 中字面量、運算符和表達式的用法。

總結

在 Rust 中,字面量、運算符和表達式是構建程序的基礎組件,它們共同構成了 Rust 語言的核心語法。

字面量(Literals)

字面量是直接表示值的語法構造,它們是表達式的最基本形式。Rust 支持多種類型的字面量,包括:

  • 整數字面量:如 420xFF(十六進制)、0b1010(二進制)。
  • 浮點數字面量:如 3.142.0f64(顯式指定類型)。
  • 字符字面量:如 'a''中'(UTF-8 編碼)。
  • 字符串字面量:如 "Hello",存儲為 UTF-8 編碼的字符串。
  • 布爾字面量truefalse
  • 數組和元組字面量:如 [1, 2, 3](數組)、(1, "a")(元組)。

字面量是不可變的,它們的值在編譯時就已經確定。

運算符(Operators)

運算符是用于對字面量或變量進行操作的符號。Rust 提供了多種運算符,包括:

  • 算術運算符+-*/%
  • 邏輯運算符&&(邏輯與)、||(邏輯或)、!(邏輯非)。
  • 比較運算符==!=><>=<=
  • 位運算符&|^!<<>>
  • 賦值運算符=+=-=*=/=%= 等。
  • 范圍運算符..(不包括上界)、..=(包括上界)。

運算符用于組合字面量和變量,形成更復雜的表達式。

表達式(Expressions)

表達式是由字面量、變量、運算符和函數調用等組成的語法構造,它們可以執行操作并返回一個值。表達式是 Rust 程序的基本構建塊,例如:

  • 簡單表達式1 + 2x * y
  • 函數調用表達式add(3, 4)
  • 條件表達式if x > 0 { 1 } else { -1 }
  • 塊表達式{ let y = 3; y + 1 }
  • 循環表達式loop { break 42; }

表達式可以嵌套,形成復雜的邏輯結構。Rust 的表達式遵循優先級規則,可以通過括號明確指定計算順序。

總之,字面量是表達式的最基本形式,表示具體的值;運算符用于對字面量和變量進行操作;表達式則是由字面量、變量和運算符組合而成的語法構造,用于執行操作并產生值。它們共同構成了 Rust 程序的基礎,是編寫 Rust 代碼的核心語法元素。

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

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

相關文章

危化品安全員職業發展方向的優劣對比

以下是危化品安全員不同職業發展方向的優劣對比&#xff1a; 縱向晉升 優勢 職業路徑清晰&#xff1a;從危化品安全員逐步晉升為安全主管、安全經理、安全總監等管理職位&#xff0c;層級明確&#xff0c;有較為清晰的上升通道。管理能力提升&#xff1a;隨著職位上升&#x…

談AI/OT 的融合

過去的十幾年間&#xff0c;工業界討論最多的話題之一就是IT/OT 融合&#xff0c;現在&#xff0c;我們不僅要實現IT/OT 的融合&#xff0c;更要面向AI/OT 的融合。看起來不太靠譜&#xff0c;卻留給我們無限的想象空間。OT 領域的專家們不要再當“九斤老太”&#xff0c;指責這…

計算機網絡核心技術解析:從基礎架構到應用實踐

計算機網絡作為現代信息社會的基石&#xff0c;承載著全球數據交換與資源共享的核心功能。本文將從網絡基礎架構、核心協議、分層模型到實際應用場景&#xff0c;全面解析計算機網絡的核心技術&#xff0c;并結合行業最新趨勢&#xff0c;為讀者構建系統的知識體系。 一、計算機…

大規模數據并行排序策略(Parallel Sample Sort)

大規模數據并行排序策略 對于上億條大型記錄的并行排序&#xff0c;基于MPI的多節點環境&#xff0c;可以采用以下策略來充分利用內存和網絡資源&#xff1a; 推薦算法&#xff1a;樣本排序(Sample Sort) 樣本排序是大規模并行排序的高效算法&#xff0c;特別適合MPI環境&am…

o.redisson.client.handler.CommandsQueue : Exception occured. Channel

1&#xff0c; 版本 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>2.15.2</version> </dependency>2&#xff0c;問題 2025-05-12 10:46:47.436 ERROR 27780 --- [sson-netty-5-…

Kotlin跨平臺Compose Multiplatform實戰指南

Kotlin Multiplatform&#xff08;KMP&#xff09;結合 Compose Multiplatform 正在成為跨平臺開發的熱門選擇&#xff0c;它允許開發者用一套代碼構建 Android、iOS、桌面&#xff08;Windows/macOS/Linux&#xff09;和 Web 應用。以下是一個實戰指南&#xff0c;涵蓋核心概念…

【Jenkins簡單自動化部署案例:基于Docker和Harbor的自動化部署流程記錄】

摘要 本文記錄了作者使用Jenkins時搭建的一個簡單自動化部署案例&#xff0c;涵蓋Jenkins的Docker化安裝、Harbor私有倉庫配置、Ansible遠程部署等核心步驟。通過一個SpringBoot項目 (RuoYi) 的完整流程演示&#xff0c;從代碼提交到鏡像構建、推送、滾動更新&#xff0c;逐步實…

【Git】GitHub上傳圖片遇到的問題

一開始我直接在網頁上拖拽上傳&#xff0c;會說“網頁無法正常運作”。 采用git push上去&#xff1a; git clone https://github.com/your-username/your-repo-name.git cd your-repo-name git add . git commit -m "Add large images" git push origin main報錯&…

【落羽的落羽 C++】stack和queue、deque、priority_queue、仿函數

文章目錄 一、stack和queue1. 概述2. 使用3. 模擬實現 二、deque三、priority_queue1. 概述和使用2. 模擬實現 四、仿函數 一、stack和queue 1. 概述 我們之前學習的vector和list&#xff0c;以及下面要認識的deque&#xff0c;都屬于STL的容器&#xff08;containers&#x…

用生活例子通俗理解 Python OOP 四大特性

讓我們用最生活化的方式&#xff0c;結合Python代碼&#xff0c;來理解面向對象編程的四大特性。 1. 封裝&#xff1a;像使用自動售貨機 生活比喻&#xff1a; 你只需要投幣、按按鈕&#xff0c;就能拿到飲料 不需要知道機器內部如何計算找零、如何運送飲料 如果直接打開機…

軟件安全(三)實現后門程序

如下是一個經典的后門程序 #define _WINSOCK_DEPRECATED_NO_WARNINGS 1 #include<WinSock2.h> #include<windows.h> #include<iostream> #pragma comment(lib, "ws2_32.lib")int main() {//初始化網絡環境WSADATA wsaData;int result WSAStartup…

深入理解高性能網絡通信:從內核源碼到云原生實踐

深入理解高性能網絡通信&#xff1a;從內核源碼到云原生實踐 前言 隨著互聯網業務規模的高速增長&#xff0c;服務端網絡通信能力成為系統性能的核心瓶頸。如何支撐百萬級連接、在極限場景下實現低延遲高吞吐&#xff1f;本篇博客將圍繞Linux通信機制內核剖析、性能調優實戰、…

從實戰看軟件測試與質量管理:方法、過程與質量的全景解讀

作為一名高級軟件測試工程師&#xff0c;在過往多個大型系統項目的測試工作中&#xff0c;我深刻體會到&#xff1a;軟件測試不僅是產品質量的“守門員”&#xff0c;更是項目成功的“加速器”。今天這篇文章&#xff0c;我將站在實戰角度&#xff0c;結合具體案例&#xff0c;…

Megatron系列——流水線并行

內容總結自&#xff1a;bilibili zomi 視頻大模型流水線并行 注&#xff1a;這里PipeDream 1F1B對應時PP&#xff0c;Interleaved 1F1B對應的是VPP 1、樸素流水線并行 備注&#xff1a; &#xff08;1&#xff09;紅色三個圈都為空泡時間&#xff0c;GPU沒有做任何計算 &am…

在Web應用中集成Google AI NLP服務的完整指南:從Dialogflow配置到高并發優化

在當今數字化客服領域,自然語言處理(NLP)技術已成為提升用戶體驗的關鍵。Google AI提供了一系列強大的NLP服務,特別是Dialogflow,能夠幫助開發者構建智能對話系統。本文將詳細介紹如何在Web應用中集成這些服務,解決從模型訓練到高并發處理的全套技術挑戰。 一、Dialogflow…

Wi-Fi網絡角色及功能詳解

在 Wi-Fi 網絡中&#xff0c;不同的角色和組件協同工作以實現無線通信。以下是 Wi-Fi 中的主要角色及其功能&#xff1a; 1. 基礎設施模式&#xff08;Infrastructure Mode&#xff09; 這是最常見的 Wi-Fi 網絡架構&#xff0c;包含以下核心角色&#xff1a; 接入點&#xff…

密碼學--希爾密碼

一、實驗目的 1、通過實現簡單的古典密碼算法&#xff0c;理解密碼學的相關概念 2、理解明文、密文、加密密鑰、解密密鑰、加密算法、解密算法、流密碼與分組密碼等。 二、實驗內容 1、題目內容描述 ①定義分組字符長度 ②隨機生成加密密鑰&#xff0c;并驗證密鑰的可行性 …

[C++] 一個線程打印奇數一個線程打印偶數

要求開辟兩個線程打印從0-100的數&#xff0c;一個線程打印奇數一個線程打印偶數&#xff0c;要求必須按照1,2,3,4,5,6…100這種按照順序打印 使用std::shared_mutex的版本 #ifndef PrintNumber2_H_ #define PrintNumber2_H_#include <shared_mutex>class PrintNumber2…

MySQL全量、增量備份與恢復

目錄 數據備份 一、數據備份類型 二、常見備份方法 擴展&#xff1a;GTID與XtraBackup ?一、GTID&#xff08;全局事務標識符&#xff09;? ?1. 定義與核心作用? ?2. GTID在備份恢復中的意義? ?3. GTID配置與啟用? ?二、XtraBackup的意義與核心價值? ?1. 定…

木馬查殺篇—Opcode提取

【前言】 介紹Opcode的提取方法&#xff0c;并探討多種機器學習算法在Webshell檢測中的應用&#xff0c;理解如何在實際項目中應用Opcode進行高效的Webshell檢測。 Ⅰ 基本概念 Opcode&#xff1a;計算機指令的一部分&#xff0c;也叫字節碼&#xff0c;一個php文件可以抽取出…