青少年编程与数学 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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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文件可以抽取出…