Rust 数据类型详解
一、标量类型(Scalar Types)
标量类型代表一个单独的值。Rust 中有四大基本标量类型:整数(integer)、浮点数(floating-point number)、布尔(boolean)和字符(character)。这几种类型在大多数编程语言中都很常见。
1. 整数类型(Integer Types)
整数(integer)是没有小数部分的数字。在之前的猜数字游戏教程里,我们用到了 u32
。这个类型声明表示该值是一个无符号(unsigned)32 位整数(如果是有符号类型,会以 i
开头,例如 i32
)。
下表展示了 Rust 中所有内置的整数类型,每个类型要么是有符号(signed),要么是无符号(unsigned),并且有明确的位数大小。
长度 | 有符号 | 无符号 |
---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
128-bit | i128 | u128 |
arch | isize | usize |
- 有符号(signed)表示数值可能为正也可能为负,所以存储时需要符号位;
- 无符号(unsigned)则只表示非负数(0 或正数),不需要符号位。
对于有符号整数,如果类型是 i8
,它可以存储从 -128 到 127 的数值;若是 i16
,则范围会相应扩大,以此类推。无符号类型则从 0 起算。例如 u8
能表示 0 到 255。
isize
和 usize
根据系统架构的不同而变化:在 64 位架构上是 64 位,在 32 位架构上是 32 位。这些类型常用于根据系统架构进行索引或内存大小计算等场景。
1.1 整数字面量
在 Rust 中可以使用多种形式来表达整数字面量(literal),如下表所示:
数字字面量形式 | 示例 |
---|---|
十进制 | 98_222 |
十六进制 | 0xff |
八进制 | 0o77 |
二进制 | 0b1111_0000 |
字节(仅限 u8 ) | b'A' |
注意:
- 可以在数字中使用下划线
_
作为分隔符来提高可读性,例如1_000
与1000
等价。- 如果需要指定类型,可以在数字后面加上类型后缀,比如
57u8
。
通常如果不确定该用什么整数类型,Rust 默认使用 i32
。若需要根据系统架构进行索引等场景时,才考虑使用 isize
或 usize
。
1.2 整数溢出(Integer Overflow)
假设我们有一个 u8
类型的变量,它能表示的数值范围是 [0, 255]
。如果尝试将其赋值为 256,就会发生整数溢出(integer overflow),导致以下两种行为之一:
- 调试(debug)模式编译:Rust 会执行溢出检查,一旦发现溢出,就会在运行时 panic(程序崩溃并退出)。
- 发布(release)模式编译:Rust 不做溢出检查,而是进行二补码环绕(two’s complement wrapping)。换言之,超出最大可表示值时会“环绕”回最小值。例如,对于
u8
类型,256 会变成 0,257 会变成 1,等等。不会出现 panic,但是结果往往与期望不符。
在实际开发中,不应依赖整数溢出的环绕行为,这被认为是错误的做法。若需要显式处理溢出,可以使用标准库里为整数提供的以下方法族:
wrapping_*
:如wrapping_add
,始终进行环绕运算;checked_*
:如checked_add
,若溢出则返回None
;overflowing_*
:如overflowing_add
,返回一个元组(结果, bool)
,其中bool
指示是否发生溢出;saturating_*
:如saturating_add
,在溢出时结果会自动“饱和”到对应类型的最小或最大值。
2. 浮点数类型(Floating-Point Types)
Rust 提供了两种原生的浮点数类型:f32
(32 位)和 f64
(64 位)。默认使用 f64
,因为在现代 CPU 上,f64
与 f32
速度几乎相当,但精度更高。所有浮点类型都是有符号数。
fn main() {let x = 2.0; // f64let y: f32 = 3.0; // f32println!("x = {}, y = {}", x, y);
}
Rust 的浮点数遵循 IEEE-754 标准。
3. 数值运算(Numeric Operations)
Rust 支持常见的数值运算:加法、减法、乘法、除法和取余。需要注意的是,整数除法会向零方向取整(截断小数部分)。示例:
fn main() {// 加法let sum = 5 + 10;// 减法let difference = 95.5 - 4.3;// 乘法let product = 4 * 30;// 除法let quotient = 56.7 / 32.2;// 取余let remainder = 43 % 5;println!("sum = {}", sum);println!("difference = {}", difference);println!("product = {}", product);println!("quotient = {}", quotient);println!("remainder = {}", remainder);
}
如果需要查看 Rust 提供的所有运算符,可以参考 附录 B。
4. 布尔类型(Boolean Type)
布尔类型(bool
)只有两个可能的值:true
和 false
。它所占的大小是 1 个字节。例如:
fn main() {let t = true;let f: bool = false;println!("t = {}, f = {}", t, f);
}
布尔常常用于条件判断(如 if
表达式),后面会在“控制流”一节详述。
5. 字符类型(Character Type)
Rust 的 char
类型是最基础的字母类型,用单引号包裹,支持 Unicode Scalar Value。这意味着它可以表示除 ASCII 之外更多的字符,比如带重音的拉丁字符、中文、日文、韩文、emoji、零宽空格等。例如:
fn main() {let c = 'z';let z = 'ℤ';let heart_eyed_cat = '😻';println!("{}, {}, {}", c, z, heart_eyed_cat);
}
Rust 的 char
类型占 4 个字节,对应 Unicode Scalar Value 范围:U+0000
~ U+D7FF
和 U+E000
~ U+10FFFF
。需要注意的是,Unicode 的“字符”概念可能与人们直觉中的“字符”不完全一致。详情可参考第 8 章关于字符串的讨论。
二、复合类型(Compound Types)
复合类型可以将多个值组合成一个类型。Rust 提供了两种原生的复合类型:元组(tuple)和数组(array)。
1. 元组类型(Tuple Type)
元组(tuple)可以将多个类型各异的值组合到一个复合类型中,长度固定,不可增长或缩短。使用小括号 ()
包含并用逗号分隔不同的值。例如:
fn main() {let tup: (i32, f64, u8) = (500, 6.4, 1);println!("tup = {:?}", tup);
}
1.1 解构(Destructuring)元组
要获取元组中的单独值,可以使用模式匹配(pattern matching)进行解构:
fn main() {let tup = (500, 6.4, 1);let (x, y, z) = tup;println!("y = {}", y);
}
执行后,y
的值就是 6.4
。这里 tup
被“拆解”成了 x
, y
, z
三个变量的过程,称为解构。
1.2 使用索引访问元组
也可以直接用点号加索引来访问元组的指定元素:
fn main() {let x: (i32, f64, u8) = (500, 6.4, 1);let five_hundred = x.0;let six_point_four = x.1;let one = x.2;println!("{}, {}, {}", five_hundred, six_point_four, one);
}
需要注意,索引从 0 开始。
1.3 单元类型(Unit Type)
如果元组不包含任何元素,则被称为单元元组(unit)。它写作 ()
,表示一种空值或空的返回类型。若一个表达式没有返回任何其他值,默认会返回单元元组。
2. 数组类型(Array Type)
数组(array)也是一种把多个值组合在一起的方式,但它与元组有两个主要区别:
- 数组中所有元素类型相同;
- 数组长度固定,一旦声明,长度就无法改变。
例如:
fn main() {let a = [1, 2, 3, 4, 5];println!("{:?}", a);
}
数组通常存储在栈上(stack)而不是堆上(heap),这在 第 4 章 会详细解释。若需要一个可伸缩的序列,则使用标准库提供的 向量(vector,Vec<T>
)。如果你需要一个长度固定的序列,数组就非常合适。比如月份名称:
let months = ["January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", "December"
];
2.1 数组的类型注解
声明数组类型时,需要在方括号里写元素类型、分号、元素个数:
let a: [i32; 5] = [1, 2, 3, 4, 5];
这里 i32
是每个元素的类型,5
表示数组长度。
2.2 初始化为相同元素
如果想让数组的所有元素都相同,可以使用如下语法:
let a = [3; 5];
// 等价于 let a = [3, 3, 3, 3, 3];
2.3 访问数组元素
可以使用索引来访问数组元素:
fn main() {let a = [1, 2, 3, 4, 5];let first = a[0];let second = a[1];println!("first = {}, second = {}", first, second);
}
2.4 越界访问与运行时错误
如果索引超出了数组的长度,Rust 会在运行时检查到错误并 panic:
fn main() {let a = [1, 2, 3, 4, 5];println!("请输入一个数组索引。");let mut index = String::new();std::io::stdin().read_line(&mut index).expect("读取失败");let index: usize = index.trim().parse().expect("输入的索引不是数字");let element = a[index];println!("你选择的元素是:{}", element);
}
如果你输入了超出 [0..4]
范围的索引,比如 10,就会引发 panic,显示类似:
thread 'main' panicked at 'index out of bounds: the len is 5 but the index is 10', src/main.rs:19:19
程序因此退出并不会执行后续的 println!
。这是 Rust 保证内存安全的体现:许多低级语言在越界索引时可能会访问非法内存地址,引发不可预料的后果,而 Rust 直接在运行时检测并退出以保证安全。
小结
在本篇文章中,我们介绍了 Rust 最常用的两种数据类型子集:标量类型和复合类型。标量类型包括整数、浮点数、布尔和字符,它们各自有不同的表示和范围;复合类型包括元组和数组,可以用于将多个值组合到一个类型中,并且在长度是否可变和类型一致性方面有所区别。
-
标量类型:
- 整数:如
i32
,u32
,i8
,u8
等,不同字长和有符号/无符号选择; - 浮点数:
f32
和f64
,默认使用f64
; - 布尔:
bool
,仅有true
和false
; - 字符:
char
,占 4 字节,可表示 Unicode Scalar Value。
- 整数:如
-
复合类型:
- 元组:可含多种类型,长度固定;可用解构或索引方式访问;
- 数组:同类型元素的集合,长度固定,存储于栈上。
对于新手而言,遇到无法自动推断类型的情形时,需要加上类型注解,尤其是在使用 parse
或其他需要指明具体数值类型的场景下。随着实践的深入,Rust 提供的多种安全检查机制(如整数溢出检查、数组越界检查等)会给予你更多信心和安全感,同时也需要你熟悉这些机制以写出高效且安全的代码。
在后续章节中,我们将会不断深入 Rust 的特性,包括所有权、引用与切片、集合类型(向量、字符串、哈希映射)以及错误处理等,希望你能继续保持对 Rust 的探索与学习。
参考与致谢
- The Rust Programming Language - By Steve Klabnik and Carol Nichols, CC BY 4.0
- 本文部分内容基于其翻译和改写,如需了解更多细节,请阅读官方文档。
相关文章:
Rust 数据类型详解
一、标量类型(Scalar Types) 标量类型代表一个单独的值。Rust 中有四大基本标量类型:整数(integer)、浮点数(floating-point number)、布尔(boolean)和字符(…...
(十四)WebGL纹理坐标初识
纹理坐标是 WebGL 中将 2D 图像(纹理)应用到 3D 物体表面的重要概念。在 WebGL 中,纹理坐标通常使用一个二维坐标系,称为 uv 坐标,它们决定了纹理图像如何映射到几何体上。理解纹理坐标的核心就是明白它们如何将二维纹…...
青少年CTF练习平台 EasyMD5解题思路
题目 EasyMD5 PHP弱类型/弱等于的判断 翻译 上传之后网页提示:Not a PDF! angry!!! get out from my page 修改文件后缀为pdf 再次上传,答案出来了 s878926199a s155964671a 成功获取flag...
二叉搜索树(TreeMapTreeSet)
文章目录 1.概念2.二叉搜索树的底层代码实现(1)首先构建二叉树(2)实现插入功能;(3)实现查找(4)删除(重点) 3.TreeMap 1.概念 TreeMap&TreeSet都是有序的集合都是基于二叉搜索树来实现的 二叉搜索树:是一种特殊的二叉树 若左子…...
鸿蒙动态路由实现方案
背景 随着CSDN 鸿蒙APP 业务功能的增加,以及为了与iOS、Android 端统一页面跳转路由,以及动态下发路由链接,路由重定向等功能。鸿蒙动态路由方案的实现迫在眉睫。 实现方案 鸿蒙版本动态路由的实现原理,类似于 iOS与Android的实…...
matlab实现一个雷达信号处理的程序,涉及到对原始图像的模拟、加权、加噪以及通过迭代算法对图像进行恢复和优化处理
clc clear close all load scene3.mat %加载原始图像,自己设计 设计为一个300*400的矩阵 300是距离向长度,400是方位向长度 Map_ori = scene3; [M,N_K] = size(Map_ori);figure imagesc(scene3) v = 100; %机载速度,单位m/s bandwidth = 30*1e6; …...
设置 Git 默认推送不需要输入账号和密码【Ubuntu、SSH】
如何设置 Git 默认推送不需要输入账号和密码 在使用 Git 管理代码时,许多开发者会遇到每次推送(push)或拉取(fetch)代码时都需要输入 GitHub 或 GitLab 等远程仓库的账号和密码的情况。虽然设置了用户名和电子邮件信息…...
【深度学习】Pytorch:导入导出模型参数
PyTorch 是深度学习领域中广泛使用的框架,熟练掌握其模型参数的管理对于模型训练、推理以及部署非常重要。本文将全面讲解 PyTorch 中关于模型参数的操作,包括如何导出、导入以及如何下载模型参数。 什么是模型参数 模型参数是指深度学习模型中需要通过…...
ABP - 缓存模块(1)
ABP - 缓存模块(1) 1. 与 .NET Core 缓存的关系和差异2. Abp 缓存的使用2.1 常规使用2.2 非字符串类型的 Key2.3 批量操作 3. 额外功能 1. 与 .NET Core 缓存的关系和差异 ABP 框架中的缓存系统核心包是 Volo.Abp.Caching ,而对于分布式缓存…...
【unity进阶篇】unity如何实现跨平台及unity最优最小包体打包方式(.NET、Mono和IL2CPP知识介绍)
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、…...
5-1 创建和打包AXI Interface IP
创建和打包AXI Interface IP的前流程和后流程 step 1 : 选择类型 1: 将当前的工程打包成IP 2: 将当前的BD工程打包成IP 3: 将指定的源码打包成IP 4: 创建一个新的AXI 接口IP 其中3和4是比较常用的,本次…...
【C++】如何从源代码编译红色警戒2地图编辑器
【C】如何从源代码编译红色警戒2地图编辑器 操作视频视频中的代码不需要下载三方库,已经包含三方库。 一、运行效果:二、源代码来源及编程语言:三、环境搭建:安装红警2安装VS2022下载代码,源代码其实不太多,…...
HRNet,Deep High-Resolution Representation Learning for Visual Recognition解读
论文、代码和ppt地址:HRNet。代码地址: hrnet 本文通过paper解读和代码实例以及onnx模型的分析,来说明hrnet模型。 摘要——高分辨率表征对于诸如人体姿态估计、语义分割和目标检测等对位置敏感的视觉问题至关重要。现有的最先进框架首先通过一个子网&…...
Rust Actix Web 项目实战教程 mysql redis swagger:构建用户管理系统
Rust Actix Web 项目实战教程:构建用户管理系统 项目概述 本教程将指导你使用 Rust 和 Actix Web 构建一个完整的用户管理系统,包括数据库交互、Redis 缓存和 Swagger UI 文档。 技术栈 Rust 编程语言Actix Web 框架SQLx (MySQL 数据库)Redis 缓存Uto…...
# 爬楼梯问题:常见数列的解法总结
爬楼梯问题:常见数列的解法总结 在编程中,爬楼梯问题(Climbing Stairs Problem)是一个经典的动态规划问题,常常作为入门学习动态规划和递推的重要例题。这个问题看似简单,但背后包含了多种解决方式&#x…...
速通Docker === 常用命令
目录 Docker命令 镜像操作 容器操作 基础操作 启动参数 容器内部操作 打包成指定文件 发布镜像 总结 镜像操作 容器操作 启动容器参数 容器内部操作 打包镜像 启动指定镜像的容器 发布镜像 Docker命令 启动一个nginx,并将它的首页改为自己的页面,发布…...
AWS S3 跨账户访问 Cross Account Access
进入S3对应的存储桶,上面选项选权限,存储桶策略 -- 编辑,输入对应的policy。 完全控制,包含上传删除权限,policy如下: {"Version": "2012-10-17","Statement": [{"Si…...
C#中常见的锁以及用法--18
目录 一.C#中存在的锁 二.锁的作用 三.锁的概念和定义 关于锁的完整代码示例 代码逐层剖析: 全局变量与同步变量 Lock(锁)关键字示例 Monitor(监视器锁)示例 Mutex(互斥量)示例(支持跨进程同步) SemaphoreSlim(信号量)示例 ReadWriterLockSlim(读写锁)示例 SpinLock…...
【数据分享】1929-2024年全球站点的逐年平均气温数据(Shp\Excel\无需转发)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据!本次我们为大家带来的就是具体到气象监…...
Docker部署MySQL 5.7:持久化数据的实战技巧
在生产环境中使用Docker启动MySQL 5.7时,需要考虑数据持久化、配置文件管理、安全性等多个方面。以下是一个详细的步骤指南。 1. 准备工作 (1)创建挂载目录 在宿主机上创建用于挂载的目录,以便持久化数据和配置文件。 sudo mkdi…...
二叉树和堆
树概念及结构(了解) 树的概念(看看就行) 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树,也就是…...
Zookeeper(15)Zookeeper的ZooKeeper API包含哪些主要操作?
Zookeeper 的 ZooKeeper API 提供了一系列操作来管理 Zookeeper 的数据节点(znodes)。这些操作主要包括创建节点、删除节点、读取节点数据、设置节点数据、列出子节点、检查节点是否存在,以及注册 Watcher 等。以下是这些操作的详细介绍和代码…...
深入浅出:Go语言os包中的API使用指南
深入浅出:Go语言os包中的API使用指南 引言 Go语言以其简洁、高效和强大的生态系统著称,是现代编程中不可或缺的一部分。其中,os包作为Go标准库的一部分,提供了丰富的API来与操作系统进行交互。本文将深入探讨os包中的核心功能,并通过实际案例帮助读者更好地理解和应用这些…...
【云岚到家】-day02-客户管理-认证授权
第二章 客户管理 1.认证模块 1.1 需求分析 1.基础概念 一般情况有用户交互的项目都有认证授权功能,首先我们要搞清楚两个概念:认证和授权 认证: 就是校验用户的身份是否合法,常见的认证方式有账号密码登录、手机验证码登录等 授权:则是该用…...
vben5 admin ant design vue如何使用时间范围组件RangePicker
本文参考:https://pusdn-dev.feishu.cn/wiki/VF4hwBAUliTE6TkUPKrcBNcZn9f?fromfrom_copylink 由PUSDN整理发行,收录时请保留PUSDN。 前端组件专题 年月日时间范围表单回显RangePicker 推荐使用多个字段存储,不推荐用英文逗号拼接时间&am…...
安全策略配置实验
安全策略配置实验 1.拓扑 2.需求 2、办公区PC在工作日时间(周一至周五,早8到晚6)可以正常访问OA srver,其他时间不允许 3、办公区PC可以在任意时刻访问web server 4、生产区PC可以在任意时刻访问OA Server,但是不能访问Web server 5、特…...
Win10安装WebODM和操作全流程
效果 以下是在 Windows 10 上安装和部署 WebODM 的详细教程: 一、安装 Docker Desktop for Windows 1、访问 Docker 官方网站:https://www.docker.com/products/docker-desktop 。 2、下载 Docker Desktop for Windows 的安装程序。 3、运行安装程序: 双击下载的安装程序,…...
wireshark抓路由器上的包 抓包路由器数据
文字目录 抓包流程概述设置抓包配置选项 设置信道设置无线数据包加密信息设置MAC地址过滤器 抓取联网过程 抓包流程概述 使用Omnipeek软件分析网络数据包的流程大概可以分为以下几个步骤: 扫描路由器信息,确定抓包信道;设置连接路由器的…...
第8章:Python TDD处理货币类代码重复问题
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
C#,入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程
通过本课程的学习,你可以掌握C#编程的重点,享受编程的乐趣。 在本课程之前,你无需具备任何C#的基础知识,只要能操作电脑即可。 不过,希望你的数学不是体育老师教的。好的程序是数理化的实现与模拟。没有较好的数学基础…...
Agent Laboratory: Using LLM Agents as Research Assistants 论文简介
加速机器学习研究的智能实验室——Agent Laboratory 1. 引言 随着人工智能技术的飞速发展,机器学习领域正以前所未有的速度推进科学发现和技术创新。然而,传统的科学研究模式往往受到时间、资源和专业知识限制,阻碍了研究者们探索新想法的能…...
cuda + cudnn安装
1.安装CUDA Toolkit 在设备管理器(此电脑–右键–属性)的显示适配器中可以查看自己的显卡型号,去下载对应的CUDA Toolkit 。或者输入以下命令查看Driver Version ,cuda Version:12.2代表12.2版本以下兼容可以进行安装 …...
Next.js 实战 (八):使用 Lodash 打包构建产生的“坑”?
前言 最近一直在折腾 Nextjs15 ,也在断断续续地写《Next.js15 实战系列》的文章,后来总感觉文章如果没有线上效果预览差点意思,所以就想着先把目前做的项目先部署上线,后续再慢慢添加新功能。 因为之前没有部署过 Nextjs15 工程…...
owasp SQL 注入-03 (原理)
1: 先看一下注入界面: 点submit 后,可以看到有语法报错,说明已经起作用了: 报如下的错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near at line 1 2:…...
wireshark工具简介
目录 1 wireshark介绍 2 wireshark抓包流程 2.1 选择网卡 2.2 停止抓包 2.3 保存数据 3 wireshark过滤器设置 3.1 显示过滤器的设置 3.2 抓包过滤器 4 wireshark的封包列表与封包详情 4.1 封包列表 4.2 封包详情 参考文献 1 wireshark介绍 wireshark是非常流行的网络…...
队列的基本用法
以下是关于 C 语言中队列的详细知识,包括队列的生成、相关函数使用以及其他重要概念: 一、队列的概念 队列是一种线性数据结构,它遵循先进先出(First In First Out,FIFO)的原则,就像日常生活中…...
OpenHarmony-7.IDL工具
IDL 工具 1.openharmony IDL工具 在OpenHarmony中,当应用/系统服务的客户端和服务端进行IPC(Inter-Process Communication)跨线程通信时,需要定义双方都认可的接口,以保障双方可以成功通信,OpenHarmony ID…...
封装Redis工具类
基于StringRedisTemplate封装一个缓存工具类,满足以下需求: 方法1:将任意Java对象序列化为json并存储在string类型的key中,并且可以设置TTL过期时间 方法2:将任意Java对象序列化为json并存储在string类型的key中,并且可以设置TTL过期时间,用于处理缓存击穿问题 方法3:根据指定的…...
将n变为一个可以被表示为2^{a}+2^{b}的正整数m
给出一个正整数n,需要将n变为一个可以被表示为的正整数m,其中a和b都是非负整数且a!b,你可以进行两种操作: 1.令n加1 2.令n减1 请你求出最少需要多少次操作才能将n变成满足条件的m。 输入格式 输入一个整数,代表n。…...
第2章:Python TDD构建Dollar类基础
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
搭建一个基于Spring Boot的校园台球厅人员与设备管理系统
搭建一个基于Spring Boot的校园台球厅人员与设备管理系统可以涵盖多个功能模块,例如用户管理、设备管理、预约管理、计费管理等。以下是一个简化的步骤指南,帮助你快速搭建一个基础的系统。 — 1. 项目初始化 使用 Spring Initializr 生成一个Spring …...
JavaScript系列(33)--微前端架构详解
JavaScript微前端架构详解 🏗️ 今天,让我们深入了解JavaScript的微前端架构,这是一种用于构建和管理大型前端应用的现代架构模式。 微前端基础概念 🌟 💡 小知识:微前端是一种将前端应用分解成更小、更易…...
第6章:Python TDD实例变量私有化探索
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
Ubuntu 24.04 LTS 服务器折腾集
目录 Ubuntu 更改软件源Ubuntu 系统语言英文改中文windows 远程链接 Ubuntu 图形界面Windows 通过 openssh 连接 UbuntuUbuntu linux 文件权限Ubuntu 空闲硬盘挂载到 文件管理器的 other locationsUbuntu 开启 SMB 服务,并通过 windows 访问Ubuntu安装Tailscale&am…...
物联网在烟草行业的应用
物联网技术在烟草行业的应用 物联网技术在烟草行业的应用主要体现在以下几个方面: 智能制造 :物联网技术可以实现对生产过程中的关键参数进行实时监测,确保产品的质量稳定可靠。同时,通过对设备的远程维护和故障诊断,…...
2024年度总结:从后端Java到全栈成长的蜕变
目录 前言1. 用数据与实践书写成长篇章2. 技术与生活的双重蜕变3. 技术的进阶与生活的绽放 前言 今年是我入行的第十年,也是记录在CSDN平台上的第五年。这五年来,我始终坚持记录成长的点滴,将个人事业与博客创作紧密相连。一路走来࿰…...
详解构造函数和析构函数
⼀个类,我们不写的情况下编译器会默认⽣成以下6个默认成员函数。 下面我们详细介绍的是构造函数和析构函数,它们的主要作用分别是初始化工作和清理工作。 构造函数 1、构造函数的概念 构造函数虽名里带着“构造”但是其实际上并不是说开辟空间创建对…...
npm操作大全:从入门到精通
引言 在现代前端开发中,npm(Node Package Manager)是不可或缺的工具。无论是安装依赖、管理项目,还是发布自己的包,npm都扮演着重要的角色。本文将带你从npm的基础操作开始,逐步深入到高级用法,…...
ChatGPT 写作系列
ChatGPT 辅助写作 | 专栏 1 写作核心 先讲一下 ChatGPT 写作的核心。核心就是需要有文章大纲,而且文章大纲要足够细致。 具体怎么做呢? 提前准备多级标题大纲,刚开始有两个级别的标题就行,等用熟练了再细化。分一级标题&…...
kubernetes 集群搭建(kubeadm方式)
随着容器技术的日益普及,Kubernetes 作为最受欢迎的容器编排平台之一,已经成为现代云原生应用部署不可或缺的一部分。对于想要快速构建和管理 Kubernetes 集群的人来说,kubeadm 提供了一种简单而强大的工具。本文将详细介绍如何使用 kubeadm …...