【Rust 学习笔记】Rust 基础数据类型介绍(一)
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接
博客内容主要围绕:
5G/6G协议讲解
高级C语言讲解
Rust语言讲解
文章目录
- Rust 基础数据类型介绍(一)
- 一、固定宽度的数值类型
- 1.1 整型
- 1.1.1 无符号整型
- 1.1.2 有符号整型
- 1.1.3 整型字面量
- 1.1.4 字节字面量
- 1.2 浮点类型
- 1.3 转换运算符
- 1.4 检查算法、回绕算法、饱和算法和溢出算法
- 1.4.1 检查运算
- 1.4.2 回绕运算
- 1.4.3 饱和运算
- 1.4.4 溢出运算
Rust 基础数据类型介绍(一)
Rust中的数据类型如下所示,我会分多篇博客来介绍,下面先看一个总览:
类型 | 简要说明 |
---|---|
i8、i16、i32、i64、i128、u8、u16、u32、u64、u128 | 给定位宽的有符号整数和无符号整数 |
isize、usize | 与机器字(32bit、64bit)一样大的有符号整数和无符号整数 |
f32、f64 | 单精度IEEE浮点数和双精度IEEE浮点数 |
bool | 布尔值 |
char | Unicode字符,32位宽(4字节) |
() | 单元元组(空元组) |
(char,u8,i32) | 元组(允许混合类型) |
Box<Attend> | 指向堆中值的拥有型指针 |
&i32、&mut i32 | 共享引用和可变引用,非拥有型指针,其生命周期不能超出引用目标 |
String | UTF-8字符串,动态分配大小 |
&str | 对str的引用,指向UTF-8文本的非拥有型指针 |
[f64;4]、[u8;256] | 数组,固定长度,其元素类型都相同 |
Vec[f64] | 向量,可变长度,其元素类型都相同 |
&[u8]、*mut [u8] | 对切片(数组或向量某一部分)的引用,包含指针和长度 |
Option<&str> | 可选值,或为None(无值),或者为Some(v)(有值,其值为v) |
Result<u64, Error> | 可能失败的操作结果,或者为成功值OK(v),或者为错误值Err(e) |
struct S { x: f32, y: f32 } | 具名字段型结构体 |
struct T(i32, char); | 元组型结构体 |
struct E; | 单元型结构体,无字段 |
enum Attend { OnTime, Late(u32)} | 枚举,或代数数据类型 |
&dyn Any、&mut dyn Read | 特型(trait)对象,是对任何实现了一组给定方法的值的引用 |
fn(&str)->bool | 函数指针 |
(闭包类型没有显式书写形式) | 闭包 |
一、固定宽度的数值类型
Rust中数值类型的名称都遵循一种统一的模式,也就是位数
表面它的宽度,以前缀
表明它的用法,如下图所示:
位宽 | 无符号整数 | 有符号整数 | 浮点数 |
---|---|---|---|
8 | u8 | i8 | |
16 | u16 | i16 | |
32 | u32 | i32 | f32 |
64 | u64 | i64 | f64 |
128 | u128 | i128 | |
机器字 | usize | isize |
1.1 整型
1.1.1 无符号整型
Rust 的无符号整型会使用它们的完整范围来表示正值和 0,如下表所示:
类型 | 范围 |
---|---|
u8 | 0~28-1(0~255) |
u16 | 0~216-1(0~65535) |
u32 | 0~232-1(0~4 294 967 295) |
u64 | 0~264-1(0~18 446 744 073 709 551 615) |
u128 | 0~2128-1(0~255) |
usize | 0~232-1 或 0~264-1 |
1.1.2 有符号整型
Rust 的有符号整型会使用二进制补码表示,使用与相应的无符号类型相同的位模式来覆盖正值和负值的范围,如下表所示:
类型 | 范围 |
---|---|
i8 | -27 ~ 27-1(-128 ~ 127) |
i16 | -215 ~ 215-1(-32768 ~ 32767) |
i32 | -231 ~ 231-1(-2 147 483 648 ~ 2 147 483 647) |
i64 | -263 ~ 263-1 |
i128 | -2127 ~ 21278-1(0~255) |
isize | -231 ~ 231-1 或 -263 ~ 263-1 |
Rust会将u8
类型作为字节值。例如,从二进制文件或套接字中读取数据时会产生一个 u8 值构成的流。usize
类型和isize
类型类似于C和C++中的size_t
和ptrdiff_t
,他们的精度与目标机器上地址空间的大小一致,即在32位架构上是32位长,在64位架构上是64位长。Rust要求数组索引是usize值,用来表示数组或向量大小或数据结构中元素数量的值通常也是usize类型
。
1.1.3 整型字面量
Rust中的整型字面量
可以带上一个后缀来指示它的类型,例如,65u8是 u8类型。如果整型字面量没有携带类型后缀,Rust会延迟确定
其类型,如果有多个候选类型,且包含i32,则选择 i32,否则报告类型歧义错误。
前缀 0x
、0o
和 0b
分别表示十六进制字面量、八进制字面量和二进制字面量。为了易读性,可以在数字之间任意插入下划线
,例如,4_294_967_295。下划线的具体位置无关紧要
,因此也可以将十六进制数或二进制数按 4 位数字而非 3 位数字进行分组(如 0xffff_ffff),或分隔开数字的类型后缀(如 127_u8)。
字面量 | 类型 | 十进制数值 |
---|---|---|
116i8 | i8 | 116 |
0xcafeu32 | u32 | 51966 |
0b0010_1010 | 推断 | 42 |
0o106 | 推断 | 70 |
下面是一个很有趣的问题,当我们运行
println!("{}", (-4).abs());
Rust编译器会报错,提示无法确定数据类型:
通常情况下是不需要指明数据类型的,Rust会自行推断,但是上面的例子中没有什么方法可用于推测 -4 的类型,因此我们需要显示的告诉Rust,例如下面的代码:println!("{}", (-4_i32).abs()); println!("{}", i32::abs(-4));
另外需要注意,因为
.
运算符的优先级高于一元前缀运算符
,所以需要在 -4 周围添加括号!
1.1.4 字节字面量
Rust为 u8 类型提供了字节字面量
,例如,b’x’ 表示以字符 x 的ASCII码作为 u8的值。需要注意的是只有ASCII字符才能出现在字节字面量中
。下面几个字符是需要使用转义字符来表示的:
字符 | 字节字面量 | 等效数值 |
---|---|---|
单引号(') | b’‘’ | 39u8 |
反斜杠(\) | b’\’ | 92u8 |
换行(lf) | b’\n’ | 10u8 |
回车(cr) | b’\r’ | 13u8 |
制表符(tab) | b’\t’ | 9u8 |
1.2 浮点类型
Rust 提供了 IEEE 单精度浮点类型和 IEEE 双精度浮点类型。这些类型包括正无穷大和负无穷大、不同的正零值和负零值,以及非数值。如下表所示:
类型 | 精度 | 范围 |
---|---|---|
f32 | IEEE单精度(至少6位小数) | 大约 -3.4x1038 ~ +3.4x1038 |
f64 | IEEE双精度(至少15位小数) | 大约 -1.8x10308 ~ +1.8x10308 |
Rust 的 f32 和 f64 分别对应于 C 和 C++(在支持 IEEE 浮点的实现中)以及 Java(始终使用 IEEE 浮点)中的 float 类型和 double 类型。
如果浮点字面量缺少类型后缀,那么Rust会检查上下文以查看值的使用方式,如果发现两种浮点类型都合适,就会默认选择f64
。
1.3 转换运算符
可以使用as
运算符将一种整型类型转换为另一种整型类型。例如,
assert_eq!( 10_i8 as u16, 10_u16); // 范围内转换
assert_eq!( 2525_u16 as i16, 2525_i16); // 范围内转换assert_eq!( -1_i16 as i32, -1_i32); // 带符号扩展
assert_eq!(65535_u16 as i32, 65535_i32); // 填零扩展// 超出目标范围的转换生成的值等于原始值对2N取模的值,
// 其中N是按位算的目标宽度。有时这也称为“截断”
assert_eq!( 1000_i16 as u8, 232_u8);
assert_eq!(65535_u32 as i16, -1_i16);assert_eq!( -1_i8 as u8, 255_u8);
assert_eq!( 255_u8 as i8, -1_i8);
1.4 检查算法、回绕算法、饱和算法和溢出算法
当整型算术运算溢出时,Rust在调试
构建中会出现 panic。而在发布
构建中,运算会回绕,即它生成的值等于“数学意义上正确的结果”对“值类型范围”取模的值(在任何情况下不会出现像C和C++中那样出现“溢出未定义”的行为)。
如果这种默认行为不是你想要的,则整型提供的某些方法可以让你准确地阐明自己期望的行为。
1.4.1 检查运算
检查运算会返回结果的Option 值
:如果数学意义上正确的结果可以表示为该类型的值,那么就为 Some(v),否则为 None。
// 10与20之和可以表示为u8
assert_eq!(10_u8.checked_add(20), Some(30));// 很遗憾,100与200之和不能表示为u8
assert_eq!(100_u8.checked_add(200), None);// 做加法。如果溢出,则会出现panic
let sum = x.checked_add(y).unwrap();// 奇怪的是,在某种特殊情况下,带符号的除法也会溢出。
// 带符号的n位类型可以表示-2^(n-1),但不足以表示2^(n-1)
assert_eq!((-128_i8).checked_div(-1), None);
1.4.2 回绕运算
回绕运算会返回与“数学意义上正确的结果”对“值类型范围”取模的值相等的值。
// 第一个结果可以表示为u16,第二个则不能,所以会得到250000 对216的模
assert_eq!(100_u16.wrapping_mul(200), 20000);
assert_eq!(500_u16.wrapping_mul(500), 53392);// 对有符号类型的运算可能会回绕为负值
assert_eq!(500_i16.wrapping_mul(500), -12144);// 在移位运算中,移位距离会在值的大小范围内回绕,
// 所以在16位类型中移动17位就相当于移动了1位
assert_eq!(5_i16.wrapping_shl(17), 10);
1.4.3 饱和运算
饱和运算会返回最接近“数学意义上正确结果”的可表达值。换句话说,结果“紧贴着”该类型可表达的最大值和最小值。
assert_eq!(32760_i16.saturating_add(10), 32767);
assert_eq!((-32760_i16).saturating_sub(10), -32768);
不存在饱和除法、饱和求余法或饱和位移法
1.整数相除一般不会溢出,即使溢出也没有“数学意义上的正确结果”
2.饱和是对溢出的一种补救方式,余数不可能溢出,因此饱和也没有意义
3.饱和是对溢出的一种补救方式,移位的溢出在不同情况下补救方式不同,因此无法统一支持
1.4.4 溢出运算
溢出运算会返回一个元组 (result, overflowed)
,其中 result 是函数的回绕版本所返回的内容,而 overflowed 是一个布尔值,指示是否发生过溢出。
assert_eq!(255_u8.overflowing_sub(2), (253, false));
assert_eq!(255_u8.overflowing_add(2), (1, true));
前缀 checked_、wrapping_、saturating_ 或 overflowing_ 后面可以跟着的运算名称如下表所示:
运算 | 名称后缀 | 例子 |
---|---|---|
加法 | add | 100_i8.checked_add(27) == Some(127) |
减法 | sub | 10_u8.checked_sub(11) == None |
乘法 | mul | 128_u8.saturating_mul(3) == 255 |
除法 | div | 64_u16.wrapping_div(8) == 8 |
求余 | rem | (-32768_i16).wrapping_rem(-1) == 0 |
取负 | neg | (-128_i8).checked_neg() == None |
绝对值 | abs | (-32768_i16).wrapping_abs() == -32768 |
求幂 | pow | 3_u8.checked_pow(4) == Some(81) |
按位左移 | shl | 10_u32.wrapping_shl(34) == 40 |
按位右移 | shr | 40_u64.wrapping_shr(66) == 10 |
相关文章:
【Rust 学习笔记】Rust 基础数据类型介绍(一)
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 博客内容主要围绕: 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 Rust 基础数据类型介绍(一)一、固定宽…...
深入理解Oracle DB的锁和闩
1. 引言 本文深入介绍Oracle DB的锁和闩。 2. Oracle DB 锁的基本概念 2.1 定义与作用 锁是 Oracle 数据库用于控制并发访问的一种机制。它用于防止多个事务同时对同一数据进行不一致的操作,确保数据的完整性和一致性。例如,当一个事务正在更新一行数…...
mcu上一种利用伪随机数防止mac地址冲突的方法
一 前言 前段时间开发的一个带tcp功能的项目,出现了mac地址冲突的问题,领导让随机生成一个mac地址,因此研究了下随机数。 二 预研 1.硬随机数 硬随机数又叫真随机数,英文名称”true random number generator“,即通过硬件随机数…...
C# 索引器(Indexer)
文章目录 前言一、索引器的语法规则二、索引器的用途及与属性的对比三、索引器的重载 前言 在 C# 编程中,索引器(Indexer)是一项极具特色且实用的语言特性,它赋予了对象一种独特的访问方式,使得对象能够如同数组一般&a…...
【大数据学习 | Spark-SQL】定义UDF和DUAF,UDTF函数
1. UDF函数(用户自定义函数) 一般指的是用户自己定义的单行函数。一进一出,函数接受的是一行中的一个或者多个字段值,返回一个值。比如MySQL中的,日期相关的dateDiff函数,字符串相关的substring函数。 先…...
Springboot集成通义大模型
1.先到阿里云平台开头阿里云白炼账号,创建apiKey 2. 引入maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><version>2.8.3</version></dependency><!-- htt…...
Xilinx PCIe高速接口入门实战(一)
引言:本文对Xilinx 7 Series Intergrated Block for PCI Express PCIe硬核IP进行简要介绍,主要包括7系列FPGA PCIe硬核资源支持、三IP硬核差异、PCIe硬核资源利用等相关内容。 1. 概述 1.1 7系列FPGA PCIe硬件资源支持 7系列FPGA对PCIe接口最大支持如…...
区块链游戏的新观察:自治世界能否成为未来链游的突破口?
区块链游戏(链游)作为加密领域的创新方向,一直被寄予厚望。然而,尽管各类链游层出不穷,大多只是靠代币激励一时爆火,缺乏持久吸引力。这种现象让人对链游未来的发展充满疑虑:是否有一种全新的设…...
Linq中的投影运算 (C#):Select、SelectMany、Zip
投影是指将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性。 通过使用投影,您可以构造从每个对象生成的新类型。 可以投影属性,并对该属性执行数学函数。 还可以在不更改原始对象的情况下投影该对象。 1、Select 下面的…...
GPU 服务器厂家:怎样铸就卓越 AI 算力?
文章来源于百家号:GPU服务器厂家 今天咱来聊聊 GPU 服务器厂家那些事儿,而这其中衡量 AI 算力的因素可是关键所在哦。 先讲讲计算速度这一块。咱都知道 AI 那复杂的活儿,像训练超厉害的图像识别模型,得处理海量图像数据&#x…...
数据结构与算法——N叉树(自学笔记)
本文参考 N 叉树 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 遍历 前序遍历:A->B->C->E->F->D->G后序遍历:B->E->F->C->G->D->A层序遍历:A->B->C->D->…...
浏览器的数据六种存储方法比较 :LocalStorage vs. IndexedDB vs. Cookies vs. OPFS vs. WASM-SQLite
在构建该 Web 应用程序,并且希望将数据存储在用户浏览器中。也许您只需要存储一些小标志,或者甚至需要一个成熟的数据库。 我们构建的 Web 应用程序类型发生了显着变化。在网络发展的早期,我们提供静态 html 文件。然后我们提供动态渲染的 h…...
Rust个人认为将抢占C和C++市场,逐渐成为主流的开发语言
本人使用C开发8年、C#开发15年、中间使用JAVA开发过项目、后期在学习过程中发现了Rust语言说它是最安全的语言,能够解决C、C的痛点、于是抽出一部分时间网上买书,看网上资料进行学习,这一学习起来发现和其它语言比较起来,在编码的…...
electron-updater软件自动检测更新 +无服务器本地测试
大家好,我是小黄。 今天分享一下如何0基础实现electron自动检测更新功能。 一. 安装 electron-updater 实现自动更新 安装依赖 electron-updater npm install electron-updater 二. 修改package.josn "publish": {"provider": "generi…...
Flink在Linux系统上的安装与入门
一、Flink的引入 这几年大数据的飞速发展,出现了很多热门的开源社区,其中著名的有Hadoop、Storm,以及后来的Spark,他们都有着各自专注的应用场景。Spark 掀开了内存计算的先河,也以内存为赌注,赢得了内存计…...
鸿蒙面试---都用过哪些装饰器
必答的 State装饰器:组件内状态 State装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就可以触发其直接绑定UI组件的刷新。当状态改变时,UI会发生对应的渲染改变。Prop装饰器:父子单向同步Prop装饰的变…...
微信小游戏/抖音小游戏SDK接入踩坑记录
文章目录 前言问题记录1、用是否存在 wx 这个 API 来判断是微小平台还是抖小平台不生效2、微小支付的参数如何获取?3、iOS 平台不支持虚拟支付怎么办?微小 iOS 端支付时序图:抖小 iOS 端支付:4、展示广告时多次回调 onClose5、在使用单例时 this 引起的 bug6、使用 fetch 或…...
uniapp配置全局消息提醒
1.H5使用根标签插入dom的方式实现。 2.app端使用plus.nativeObj.View的方式绘制实现 H5端app端 H5端 创建组件orderAlert.vue <template><div class"view"><div class"content" v-if"visible"><div class"message&q…...
Docker学习
🎉Docker 简介和安装 Docker 是什么 Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要, 而普通虚拟机则是一个完整而庞大的系统,包含各…...
【Electron学习笔记(三)】Electron的主进程和渲染进程
Electron的主进程和渲染进程 Electron的主进程和渲染进程前言正文1、主进程2、渲染进程3、Preload 脚本3.1 在项目目录下创建 preload.js 文件3.2 在 main.js 文件下创建路径变量并将 preload.js 定义为桥梁3.3 在 preload.js 文件下使用 electron 提供的contextBridge 模块3.4…...
人工智能的微积分基础
目录 编辑 引言 微积分的基本概念 1. 导数 2. 积分 3. 微分方程 微积分在人工智能中的应用 1. 机器学习中的优化 2. 反向传播算法 3. 概率与统计 4. 控制理论 5. 自然语言处理中的梯度 6. 计算机视觉中的积分 7. 优化算法中的微积分 8. 微分几何在深度学习中的…...
关于BeanUtils.copyProperties是否能正常复制字段【详细版】
话不多说!先总结: 1、字段相同,类型不同(不复制,也不报错) 2、子类父类 (1)子类传给父类(可以正常复制) (2)父类传给子类(可以正常复制) 3、子类父类&#x…...
oracle将select作为字段查询
在Oracle中,如果你想将一个SELECT语句作为字段的值,你可以使用子查询或者使用WITH子句(也称为公用表表达式CTE)。以下是两种方法的示例: 方法1:使用子查询 语法如下: SELECTcolumn1,(SELECT …...
FFmpeg 简介与编译
1. ffmpeg 简介: FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移…...
qt QLinearGradient详解
1、概述 QLinearGradient是Qt框架中QGradient的一个子类,用于创建线性渐变效果。线性渐变是一种颜色沿着一条直线平滑过渡到另一种颜色的效果。QLinearGradient允许你定义渐变的起点和终点,以及在这些点之间的颜色变化。你可以使用它来为图形、背景、边…...
点击A组件跳转到B页面的tab的某一列
1、使用vuex存储点击的数据; 点击A组件里面的button按钮: <div><button click"banli(first)">已办理</button><button click"banli(second)">未办理</button><button click"banli(third)&quo…...
图像小波去噪与总变分去噪详解与Python实现
目录 图像小波去噪与总变分去噪详解与实现1. 基础概念1.1 噪声类型及去噪问题定义1.2 小波去噪算法基础1.3 总变分去噪算法基础2. 小波去噪算法2.1 理论介绍2.2 Python实现及代码详解2.3 案例分析3. 总变分去噪算法3.1 理论介绍3.2 Python实现及代码详解3.3 案例分析4. 两种算法…...
mvn-mac操作小记
1.安装brew 如果报错,Warning: /opt/homebrew/bin is not in your PATH. vim ~/.zshrc,最后一行追加 export PATH“/opt/homebrew/bin:$PATH” source ~/.zshrc 2.安装brew install maven mvn -version查看路径 Maven home: /opt/homebrew/Cellar/mav…...
【娱乐项目】基于批处理脚本与JavaScript渲染视频列表的Web页面
Demo介绍 一个简单的视频播放器应用,其中包含了视频列表和一个视频播放区域。用户可以通过点击视频列表中的项来选择并播放相应的视频,播放器会自动播放每个视频并在播放完毕后切换到下一个视频。本项目旨在通过自动化脚本和动态网页渲染,帮助…...
Faster R-CNN (目标检测)
Faster R-CNN (Faster Region-based Convolutional Neural Networks) Faster R-CNN 是一种高效的目标检测模型,它是在 R-CNN 系列(包括 R-CNN 和 Fast R-CNN)的基础上发展而来的,能够实现对图像中多个对象的检测。Faster R-CNN 引…...
Diffusion中的Unet (DIMP)
针对UNet2DConditionModel模型 查看Unet的源码,得知Unet的down,mid,up blocks的类型分别是: down_block_types: Tuple[str] ("CrossAttnDownBlock2D","CrossAttnDownBlock2D","CrossAttnDownBlock2D","DownBlock2…...
docker服务容器化
docker服务容器化 1 引言2 多个容器间网络联通2.1 单独创建关联2.2 创建时关联 3 服务搭建3.1 镜像清单3.2 容器创建 4 联合实战4.2 flink_sql之kafka到starrocks4.2 flink_sql之mysql到starrocks 5 文献借鉴 1 引言 利用docker可以很效率地搭建服务,本文在win1…...
Flink 从入门到实战
Flink中的批和流 批处理的特点是有界、持久、大量,非常适合需要访问全部记录才能完成的计算工作,一般用于离线统计。 流处理的特点是无界、实时, 无需针对整个数据集执行操作,而是对通过系统 传输的每个数据项执行操作,一般用于实…...
ffmpeg安装(windows)
ffmpeg安装-windows 前言ffmpeg安装路径安装说明 前言 ffmpeg的安装也是开箱即用的,并没有小码哥说的那么难 ffmpeg安装路径 这就下载好了! 安装说明 将上面的bin目录加入到环境变量,然后在cmd中测试一下: C:\Users\12114\Desktop\test\TaskmgrPlayer\x64\Debug>ffmpe…...
深度解析:Android APP集成与拉起微信小程序开发全攻略
目录 一、背景以及功能介绍 二、Android开发示例 2.1 下载 SDK 2.2 调用接口 2.3 获取小程序原始Id 2.4 报错提示:bad_param 2.4.1 错误日志 2.4.2 解决方案 相关推荐 一、背景以及功能介绍 需求:产品经理需要APP跳转到公司的小程序(最好指定页…...
DeSTSeg: Segmentation Guided Denoising Student-Teacher for Anomaly Detection
DeSTSeg: Segmentation Guided Denoising Student-Teacher for Anomaly Detection 清华、苹果 个人感觉 Introduction 很自然的让读者理解作者问题的提出,也有例子直接证明了这个问题的存在,值得借鉴!! Related work写的也很不…...
Xilinx Blockset Gateway In 和Gateway out模块使用及参数配置
目录 一、Gateway InSimulink数据到System Generator数据的转换Gateway BlocksBlock Parameters(模块参数)Basic选项卡参数Implementation选项卡参数 二、Gateway OutGateway BlocksBlock Parameters(模块参数)Basic选项卡参数Imp…...
set up RAGFlow on your Mac
个人思考:这些仅仅是工具,和人的思维实际还是有很大差距。 可能是我认知片面,你需要投喂大量的内容给它,它自己其实并不会思考,只是从它的认知里告诉它他知道的东西。举个不太巧当的例子,和以往的方式恰恰相…...
SSM搭建(1)——配置MyBatis
目录 一、框架概述 1.什么是JDBC? 2.JDBC基本流程 3.JDBC的缺点 二、MyBatis的入门程序 1. 创建数据库和表结构 2. MyBatis入门流程总结 3. MyBatis的入门步骤 (1) 创建maven的项目,创建Java工程即可。 &…...
SickOs: 1.1靶场学习小记
学习环境 kali攻击机:Get Kali | Kali Linux vulnhub靶场:https://download.vulnhub.com/sickos/sick0s1.1.7z 靶场描述: 这次夺旗赛清晰地模拟了在安全环境下如何对网络实施黑客策略从而入侵网络的过程。这个虚拟机与我在进攻性安全认证专…...
Flume 监控配置和实践
要解释 Flume 的监控机制,需要了解 Flume 是如何设计其监控架构的,以及如何将性能指标暴露给用户或集成工具。下面我将详细分解 Flume 的监控机制,从基础架构、实现原理到源码解析,并提供非专业人也能理解的通俗解释。 Flume 的监…...
二分法算法
提示:文章 文章目录 前言一、背景二、二分法2.2 最坏情况下冒泡排序的比较次数 三、大算法之一:分治法总结 前言 前期疑问: 本文目标: 二分法 一、背景 问题来源是一个题目,在A[N]字符串数组中匹配长度为M的字符串&…...
3.27浮点数计算
-127就是说,有8位的数来表示指数,然后给他减去127就是这八位劈半,一半表示负数的指数,一半表示整数的指数;对于移码来说,最高位为1时表示为正,为0时表示为负 对阶是要小阶向大阶对齐,…...
存储过程与自然语言处理逻辑的不同与结合
在现代软件开发中,存储过程与自然语言处理(NLP)逻辑都发挥着重要作用。存储过程是一种在数据库内部运行的预编译程序,通常用于处理与数据相关的任务,例如插入、更新、删除数据以及复杂的查询操作。而自然语言处理&…...
数据集搜集器(百科)008
对数据集搜集器(百科)007进行一下改进: 错误处理:增加更多的错误处理,比如网络请求超时、解析错误等。 用户界面:增加一些提示信息,让用户更清楚当前的操作状态。 多线程处理:确保多…...
用Pycharm安装manim
由于版本和工具的差异,manim的安装方式不尽相同。本文用Pycharm来安装manim. 一、准备工作:安装相应版本的python、pycharm和ffmpeg. 此处提供一种安装ffmpeg的方式 下载地址:FFmpeg 下载后,解压到指定目录。 配置环境变量&am…...
HTB:Love[WriteUP]
目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机开放端口进行脚本、服务扫描 使用浏览器访问靶机443端口 尝试利用该功能访问靶机自身80端口 使用ffuf对靶机80端口进行路径FUZZ 漏洞利用 使用searchsploit搜索靶机80端…...
程序设计 26种设计模式,如何分类?
1. 创建型模式 (Creational Patterns) 这些模式关注如何实例化对象。它们通过各种方式封装对象的创建过程,从而提供灵活性和可扩展性。 单例模式 (Singleton):确保某个类只有一个实例,并提供全局访问点。工厂方法模式 (Factory Method)&…...
Oracle对比表与表之间的结构
自己首先想到的就是,navicat有提供结构同步 但是有些时候情况不一样,比如我遇到的是连接不同,而且是互相同步,以最多的列的那个表为样 没有说一个固定的源 那么还可以通过导出表结构去另一个库中执行看是否报错,以此来判断结构的不同 但是我感觉有点儿麻烦 最后想到通过sql语…...
MySQL 查询 执行顺序
MySQL查询的执行顺序大致如下: FROM子句:确定要查询的表。 ON:对JOIN语句中的表进行关联条件指定。 JOIN:如果有的话,对表进行关联。 WHERE:对记录进行过滤。 GROUP BY:根据指定的列分组记录…...