Rust标准库中集合类型用法详解
文章目录
- Vec<T> 动态数组
- 创建动态数组
- 增加删除元素
- 访问元素
- 遍历Vec
- 控制容量
- 修改元素
- 元素排序
- HashMap<K, V>哈希表
- 创建 HashMap
- 插入和更新元素
- 访问元素
- 删除元素
- 遍历HashMap
- 使用默认值
- HashSet<T>哈希集合
- 创建 HashSet
- 插入和删除元素
- 查找元素
- 遍历HashSet
- 使用集合的并集、交集等操作
在Rust中Vec、HashMap和HashSet是非常常用的集合类型,它们是通过标准库std::vec和std::collections模块提供的。
Vec: 用于存储动态数组,支持增、删、查、改等操作,适用于元素顺序访问。
HashMap<K, V>: 存储键值对的哈希表,提供高效的查找、插入、删除操作,适用于映射关系。
HashSet: 不允许重复元素的哈希集合,支持高效的插。
这里介绍一下这三个集合类型的用法。
Vec 动态数组
Vec是Rust中用于存储可变大小、同类型元素的集合类型。Vec是一个堆分配的数据结构,允许动态添加或删除元素。
创建动态数组
使用Vec::new()来创建一个空的Vec。
使用vec![]宏来创建并初始化一个Vec。
//创建一个空的Vec
let mut v: Vec<i32> = Vec::new();
//使用宏创建并初始化Vec
let v2 = vec![1, 2, 3, 4]; // 类型推导为 Vec<i32>
增加删除元素
push(): 将元素添加到 Vec 的末尾。
pop(): 从 Vec 中移除并返回最后一个元素。
insert(): 在指定位置插入元素。
remove(): 移除指定位置的元素。
drain(): 删除指定范围的元素。
split_off(): 以指定位置索引为标志,分割数组。
//添加和移除元素
let mut v = Vec::new();
//向Vec添加元素
v.push(1);
v.push(2);
//移除最后一个元素
println!("Last element: {:?}", v.pop());
println!("Vec after pop: {:?}", v);
//在位置1插入元素10
v.insert(1, 10);
println!("Vec after insert: {:?}", v);
//移除索引为0的元素
v.remove(0); let mut v1 = vec![11, 22, 33, 44, 55];
//删除指定范围的元素,同时获取被删除元素的迭代器
let mut m: Vec<_> = v1.drain(1..=3).collect();
//指定索引处切分成两个 vec, m: [22], v2: [33, 44]
let v2 = m.split_off(1);
访问元素
使用索引或切片来访问Vec中的元素。
使用get()方法来安全地访问元素,避免数组越界。
let v = vec![10, 20, 30, 40];
println!("First element: {}", v[0]); // 使用索引访问
//使用get方法它返回一个 Option
match v.get(1) {Some(value) => println!("Second element: {}", value),None => println!("No element at this index"),
}
遍历Vec
可以使用for循环、iter()方法等来遍历Vec。
let v = vec![1, 2, 3, 4];
for val in &v {println!("{}", val); // 值的借用
}for val in v.iter() {println!("{}", val); // 使用 iter()
}
控制容量
调整动态数组的容量大小。
//指定空间
let mut v = Vec::with_capacity(10);
v.extend([1, 2, 3]);
//调整空间
v.reserve(100);
//释放剩余的容量,一般情况下,不会主动去释放容量
v.shrink_to_fit();
修改元素
可以通过索引或iter_mut()来修改元素。
let mut v = vec![1, 2, 3, 4];
//使用索引修改元素
v[2] = 30;
println!("Vec after modification: {:?}", v);
//使用iter_mut()修改元素
for val in &mut v {*val *= 2; // 通过引用修改值
}
println!("Vec after multiplying by 2: {:?}", v);
元素排序
在rust里实现了两种排序算法,分别为稳定的排序sort和sort_by,以及非稳定排序sort_unstable和sort_unstable_by。
非稳定并不是指排序算法本身不稳定,而是指在排序过程中对相等元素的处理方式。在稳定排序算法里,对相等的元素,不会对其进行重新排序。而在不稳定的算法里则不保证这点。总体而言非稳定排序的算法的速度会优于稳定排序算法,同时稳定排序还会额外分配原数组一半的空间。
//整数元素排序
fn main() {let mut vec = vec![1, 5, 10, 2, 15]; vec.sort_unstable(); assert_eq!(vec, vec![1, 2, 5, 10, 15]);
}
在浮点数当中存在一个NAN值,这个值无法与其他的浮点数进行对比,因此浮点数类型并没有实现全数值可比较Ord的特性,而是实现了部分可比较的特性PartialOrd。如此,如果我们确定在我们的浮点数数组当中,不包含NAN值,那么我们可以使用partial_cmp来作为大小判断的依据。
fn main() {let mut vec = vec![1.0, 5.6, 10.3, 2.0, 15f32]; vec.sort_unstable_by(|a, b| a.partial_cmp(b).unwrap()); assert_eq!(vec, vec![1.0, 2.0, 5.6, 10.3, 15f32]);
}
定义自定义排序方法对结构体进行排序
//实现 Ord、Eq、PartialEq、PartialOrd 这些属性 便可以使用默认排序 不需要自定义了
/*
#[derive(Debug, Ord, Eq, PartialEq, PartialOrd)]
struct Person {name: String,age: u32,
}*/
#[derive(Debug)]
struct Person {name: String,age: u32,
}
impl Person {fn new(name: String, age: u32) -> Person {Person { name, age }}
}
fn main() {let mut people = vec![Person::new("Zoe".to_string(), 25),Person::new("Al".to_string(), 60),Person::new("John".to_string(), 1),];//定义一个按照年龄倒序排序的对比函数people.sort_unstable_by(|a, b| b.age.cmp(&a.age));
}
HashMap<K, V>哈希表
HashMap是一个存储键值对(key-value)的集合类型,提供了通过键(key)高效查找、插入和删除值(value)的能力。
创建 HashMap
使用HashMap::new()创建一个空的HashMap。
使用hashmap![]宏来创建并初始化一个HashMap。
use std::collections::HashMap;let mut map = HashMap::new();
map.insert("name", "Alice");
map.insert("age", "30");// 使用宏创建并初始化 HashMap
// 如果你希望使用hashmap!宏,确保你导入了maplit库,并在代码中使用#[macro_use]来启用宏。
let mut map2 = hashmap! {"name" => "Bob","age" => "25",
};
插入和更新元素
insert(key, value): 将键值对插入到HashMap中,如果键已存在则更新对应的值。
let mut map = HashMap::new();
map.insert("name", "Alice");
map.insert("age", "30");// 插入一个已存在的键,值会被更新
map.insert("age", "31");
println!("Updated map: {:?}", map);
访问元素
使用get()方法安全地查找键对应的值返回Option。
使用索引语法map[key]会在键不存在时panic。
let map = HashMap::from([("name", "Alice"), ("age", "30")]);// 使用 get() 方法返回 Option
match map.get("name") {Some(value) => println!("Name: {}", value),None => println!("No value found for key 'name'"),
}// 使用索引访问元素(可能会 panic)
println!("Age: {}", map["age"]);
删除元素
remove(): 根据键删除键值对,返回被删除的值。
let mut map = HashMap::new();
map.insert("name", "Alice");
map.insert("age", "30");map.remove("age");
println!("After removal: {:?}", map);
遍历HashMap
可以使用for循环来遍历HashMap。
let map = HashMap::from([("name", "Alice"), ("age", "30")]);for (key, value) in &map {println!("Key: {}, Value: {}", key, value);
}
使用默认值
可以使用entry()方法与or_insert()方法来为不存在的键插入默认值。
let mut map = HashMap::new();
map.entry("name").or_insert("Alice");
map.entry("age").or_insert("30");
println!("{:?}", map);
HashSet哈希集合
HashSet是一个不允许重复元素的集合类型,基于哈希表实现。它提供了高效的插入、删除和查找操作。
创建 HashSet
使用 HashSet::new() 创建一个空的 HashSet。
使用 hashset![] 宏来创建并初始化一个 HashSet。
use std::collections::HashSet;let mut set = HashSet::new();
set.insert(1);
set.insert(2);
set.insert(3);// 使用宏创建并初始化 HashSet
let set2: HashSet<_> = [1, 2, 3].iter().cloned().collect();
插入和删除元素
insert(): 向集合中插入元素,如果该元素已存在,则不会插入。
remove(): 从集合中移除元素。
let mut set = HashSet::new();
set.insert(1);
set.insert(2);
set.insert(2); // 重复的元素不会被插入set.remove(&1);
println!("Set after removal: {:?}", set);
查找元素
使用contains()方法检查集合中是否包含某个元素。
let set: HashSet<_> = [1, 2, 3].iter().cloned().collect();if set.contains(&2) {println!("Set contains 2");
} else {println!("Set does not contain 2");
}
遍历HashSet
可以使用for循环来遍历HashSet。
let set: HashSet<_> = [1, 2, 3].iter().cloned().collect();for val in &set {println!("{}", val);
}
使用集合的并集、交集等操作
HashSet提供了集合运算的方法如并集、交集、差集等。
use std::collections::HashSet;let set1: HashSet<_> = [1, 2, 3].iter().cloned().collect();
let set2: HashSet<_> = [3, 4, 5].iter().cloned().collect();// 并集
let union: HashSet<_> = set1.union(&set2).cloned().collect();
println!("Union: {:?}", union);// 交集
let intersection: HashSet<_> = set1.intersection(&set2).cloned().collect();
println!("Intersection: {:?}", intersection);
相关文章:
Rust标准库中集合类型用法详解
文章目录 Vec<T> 动态数组创建动态数组增加删除元素访问元素遍历Vec控制容量修改元素元素排序 HashMap<K, V>哈希表创建 HashMap插入和更新元素访问元素删除元素遍历HashMap使用默认值 HashSet<T>哈希集合创建 HashSet插入和删除元素查找元素遍历HashSet使用…...
软件测试面试之数据库部分
1.取第 4 到5 条记录 --按ID从小到大,查询第到第条数据 select top4 *from(select top5 * from qicheorder by ID asc ) as TA order by ID desc--按ID从小到大,查询第到第条数据 select top 2*from(select top 4 *from qicheorder by ID asc )as TA o…...
Gitee markdown 使用方法(持续更新)
IPKISS 获取仿真器件的名称 引言正文标题换行第一种------在行末尾手动键入两个空格第二种------额外换行一次,即两行中间留一个空行 缩进与反缩进代码块行内代码添加图片添加超链接 加粗,倾斜,加粗倾斜 引言 有些保密性的文件或者教程&…...
水库大坝安全监测之量水堰计应用
量水堰计是水库大坝安全监测系统中的一种关键设备,主要用于测量水库水位、流量等水力参数。以下是量水堰计在水库大坝安全监测中的应用及注意事项: 一、量水堰计的工作原理 量水堰计是一种专门用于测量水流流量的仪器,其工作原理主要基于水流…...
Mouser EDI 需求分析
为了提高供应链的自动化水平,贸泽电子(Mouser Electronics)使用EDI技术更好地管理与其全球合作伙伴之间的业务数据往来。对接Mouser EDI,对于企业而言,需要在本地部署EDI软件,建立与Mouser之间的EDI连接通道…...
51单片机快速入门之中断的应用 2024/11/23 串口中断
51单片机快速入门之中断的应用 基本函数: void T0(void) interrupt 1 using 1 { 这里放入中断后需要做的操作 } void T0(void): 这是一个函数声明,表明函数 T0 不接受任何参数,并且不返回任何值。 interrupt 1: 这是关键字和参…...
电脑显示器拔插DVI线后副屏不显示
问题:台式机副屏显示器插拔DVI线后副屏无法检测到,不显示 其他现象:电脑设备管理器“显示适配器”中只有独显,未显示集显。 尝试方法: 1、 重新插拔并拧紧DVI线、更换DVI线、将DVI线替换为VGA线、调换DVI线及VGA线两…...
git分支管理:release分支内容重置为master
背景:公司项目存在release和master分支,一直是release合并到master分支;由于历史总总原因导致release和master分支内容相差很大。某个夜晚,leader悄悄改了master分支的内容(不走合并流程),然后通…...
python之poetry 安装、创建项目、修改源、创建虚拟环境等操作
CentOs7.5下安装python3,修改源,创建虚拟环境 python 虚拟环境的搭建 使用pyenv 管理多个版本的python 安装 pyenv curl https://pyenv.run | bash pyenv install 3.10 pyenv local 3.10 # 当前项目激活Python3.10 pyenv global 3.10 # 当前全部激活P…...
一个高度可扩展的 Golang ORM 库【GORM】
GORM 是一个功能强大的 Golang 对象关系映射(ORM)库,它提供了简洁的接口和全面的功能,帮助开发者更方便地操作数据库。 1. 完整的 ORM 功能 • 支持常见的关系模型: • Has One(一对一) • …...
hadoop_HA高可用
秒懂HA HA概述HDFS-HA工作机制工作要点元数据同步参数配置手动故障转移自动故障转移工作机制相关命令 YARN-HA参数配置自动故障转移机制相关命令 附录Zookeeper详解 HA概述 H(high)A(avilable): 高可用,意味着必须有容错机制,不能因为集群故障…...
23种设计模式-工厂方法(Factory Method)设计模式
文章目录 一.什么是工厂方法设计模式?二. 工厂方法模式的特点三.工厂方法模式的结构四.工厂方法模式的优缺点五.工厂方法模式的 C 实现六.工厂方法模式的 Java 实现七.代码解析八.总结 类图: 工厂方法设计模式类图 一.什么是工厂方法设计模式࿱…...
论文笔记 SliceGPT: Compress Large Language Models By Deleting Rows And Columns
欲买桂花同载酒,终不似,少年游。 数学知识 秩: 矩阵中最大线性无关的行/列向量数。行秩与列秩相等。 线性无关:对于N个向量而言,如果任取一个向量 v \textbf{v} v,不能被剩下的N-1个向量通过线性组合的方式…...
构建 LLM (大型语言模型)应用程序——从入门到精通(第七部分:开源 RAG)
通过检索增强生成 (RAG) 应用程序的视角学习大型语言模型 (LLM)。 本系列博文 简介数据准备句子转换器矢量数据库搜索与检索大语言模型开源 RAG(本帖)评估服务LLM高级 RAG 1. 简介 我们之前的博客文章广泛探讨了大型语言模型 (LLM),涵盖了其…...
快速理解倒排索引在ElasticSearch中的作用
一.基础概念 定义: 倒排索引是一种数据结构,用来加速文本数据的搜索和检索,和传统的索引方式不同,倒排索引会被每个词汇项与包含该词汇项的文档关联起来,从而去实现快速的全文检索。 举例: 在传统的全文…...
彻底理解微服务配置中心的作用
常见的配置中心有SpringCloudConfig、Apollo、Nacos等,理解它的作用,无非两点,一是配置中心能做什么,不使用配置中心会出现什么问题。 作用:配置中心是用来集中管理服务的配置,它是用来提高系统配置的维护…...
基于YOLOv8深度学习的智慧农业棉花采摘状态检测与语音提醒系统(PyQt5界面+数据集+训练代码)
智慧农业在现代农业中的应用日益广泛,其核心目标是通过智能化手段实现农业生产的自动化、精准化和高效化,而精准采摘技术作为智慧农业的重要组成部分,正受到越来越多的关注。棉花作为一种经济作物,其采摘过程传统上依赖于人工劳作…...
自动控制原理——BliBli站_DR_CAN
自动控制 2 稳定性分析 极点在左半平面 输入为单位冲击,而拉普拉斯变换为1;因此,开环和闭环系统,研究其传递函数的稳定性就可以了 2.5_非零初始条件下的传递函数_含有初始条件的传递函数 如果一个系统的初始条件不为0࿰…...
使用phpStudy小皮面板模拟后端服务器,搭建H5网站运行生产环境
一.下载安装小皮 小皮面板官网下载网址:小皮面板(phpstudy) - 让天下没有难配的服务器环境! 安装说明(特别注意) 1. 安装路径不能包含“中文”或者“空格”,否则会报错(例如错误提示:Cant cha…...
vue2 pinia 安装与入门
安装 本体 npm install pinia vue2特定 npm install vue/composition-api 持久化存本地 npm install pinia-plugin-persistvue.config.js 不加的话会报错 configureWebpack: { // 在configureWebpack里加上以下modulemodule: {rules: [{test: /\.mjs$/,include: /node_mo…...
路由传参、搜索、多选框勾选、新增/编辑表单复用
前言: 记录添加运动员页面功能的具体实现 ①由赛事管理页面跳转时路由传参(携带该页面表格中莫某条数据对应的赛事id到另一个页面); ②搜索框实时搜索; ③多选框勾选搜索; ④新增表单和编辑表单复用&a…...
内网不出网上线cs
一:本地正向代理目标 如下,本地(10.211.55.2)挂好了基于 reGeorg 的 http 正向代理。代理为: Socks5 10.211.55.2 1080python2 reGeorgSocksProxy.py -l 0.0.0.0 -p 1080 -u http://10.211.55.3:8080/shiro/tunnel.jsp 二:虚拟机配置proxifer 我们是…...
防止按钮被频繁点击
在做开发的时候,不希望按钮被用户频繁点击,给后端服务器增加负担,这个时候,可以在按钮的触发函数加上如下代码: // 禁用按钮 const fetchButton document.querySelector(.btn-fetch); fetchButton.disabled true; // 延时61秒后重新启用按钮 setTimeout(() > { fetchBut…...
Zariski交换代数经典教材Commutative Algebra系列(pdf可复制版)
Zariski的名字估计学代数几何的人都耳熟能详,先是入门时期的交换代数教材,然后就是深入研究时期随处可见的Zariski拓扑。本帖我们分享的便是著名的Zariski交换代数教材。 Oscar Zariski & Pierre Samuel写的交换代数经典教材Commutative Algebra&am…...
【C++】数据类型(上)
C规定在创建一个变量或一个常量时,必须要指定出相应的数据类型,否则无法给变量分配内存 数据类型存在意义:给变量分配合适的内存空间。 1.1 整型 整型作用:整型变量表示的整数类型的数据。 C中能够表示整型类型的有以下几种…...
(C语言) 8大翻译阶段
(C语言) 8大翻译阶段 文章目录 (C语言) 8大翻译阶段⭐前言🗃️8大阶段🗂️1. 字符映射🗂️2. 行分割🗂️3. 标记化🗂️4. 预处理🗂️5. 字符集映射🗂️6. 字符串拼接🗂️7. 翻译&…...
QT QHBoxLayout控件 全面详解
本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…...
生成式 AI 应用创新引擎dify.ai部署并集成ollama大模型详细图文教程
引言 Dify 是一个开源 LLM 应用开发平台,拥有直观的界面结合了 AI 工作流、RAG 管道、代理功能、模型管理、可观察性功能等,可以快速从原型开发到生产。 Ollama 是一个本地推理框架,允许开发人员轻松地在本地部署和运行 LLMÿ…...
MySQL闪回恢复:轻松应对数据误删,数据安全有保障
在数据库管理中,数据误删是一个常见且棘手的问题。传统的数据恢复方法可能涉及复杂的操作,如全量备份和增量备份的恢复。MySQL的闪回恢复功能提供了一种更为简便、高效的数据恢复手段。本文将详细介绍MySQL闪回恢复的原理、配置和使用方法,帮…...
面经-综合面/hr面
面经-综合面/hr面 概述1.大学期间遇到的困难,怎么解决的2. 大学期间印象最深/最难忘的是什么3. 大学里面担任了什么职务没?做了什么工作?4. 大学最大的遗憾是什么?5. 对自己的未来规划6. 对自己的评价7. 自己的优缺点8. 对公司的认…...
利用Java爬虫获取阿里巴巴中国站跨境属性的详细指南
在全球化贸易的浪潮中,跨境电商正成为连接全球买家和卖家的重要桥梁。阿里巴巴中国站作为全球领先的B2B电子商务平台,提供了海量的商品信息,其中跨境属性信息对于跨境电商尤为重要。本文将详细介绍如何使用Java编写爬虫,从阿里巴巴…...
Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?
Vue 3.0 引入的 Composition API 和 Vue 2.x 中的 Options API 是两种不同的开发方式。它们在组织和管理组件代码的方式上有很大的差异。虽然两者都能实现相同的功能,但 Composition API 提供了更好的灵活性和可维护性,特别是对于复杂的组件和大型项目。 以下是对比这两种 A…...
电脑中的vcruntime140_1.dll文件有问题要怎么解决?一键修复vcruntime140_1.dll
遇到“vcruntime140_1.dll无法继续执行代码”的错误通常表明电脑中的vcruntime140_1.dll文件有问题。这个文件属于Visual C Redistributable,对很多程序的运行至关重要。本文将提供几个步骤,帮助你迅速修复这一错误,使电脑恢复正常工作状态。…...
【网络安全 | 漏洞挖掘】绕过SAML认证获得管理员面板访问权限
未经许可,不得转载。 文章目录 什么是SAML认证?SAML是如何工作的?SAML响应结构漏洞结果什么是SAML认证? SAML(安全断言标记语言)用于单点登录(SSO)。它是一种功能,允许用户在多个服务之间切换时无需多次登录。例如,如果你已经登录了facebook.com,就不需要再次输入凭…...
技能之发布自己的依赖到npm上
目录 开始 解决 步骤一: 步骤二: 步骤三: 运用 一直以为自己的项目在github上有了(之传了github)就可以进行npm install下载,有没有和我一样萌萌的同学。没事,萌萌乎乎的不犯罪。 偶然的机…...
python+django5.1+docker实现CICD自动化部署springboot 项目前后端分离vue-element
一、开发环境搭建和配置 # channels是一个用于在Django中实现WebSocket、HTTP/2和其他异步协议的库。 pip install channels#channels-redis是一个用于在Django Channels中使用Redis作为后台存储的库。它可以用于处理#WebSocket连接的持久化和消息传递。 pip install channels…...
GitHub仓库的README添加视频播放链接和压缩视频网站推荐
想在github的README里面添加视频,有限制,不能超过10MB,所以需要压缩,推荐一个超级厉害的压缩工具,我一个30的视频最后压缩到了3M不到,而且清晰度没有变化,视频压缩网站地址:在线减小…...
PHP学习_1
一.PHP基本语法 1.变量 <?php header("Content-type:text/html;charsetutf-8"); $name1"yanxiao"; $age"3";echo "$name1 今年 $age <br>"; echo "$name1 喜欢 xtf <br>"; echo "$name1 不喜欢英语&…...
深入解析 MySQL 启动方式:`systemctl` 与 `mysqld` 的对比与应用
目录 前言1. 使用 systemctl 启动 MySQL1.1 什么是 systemctl1.2 systemctl 启动 MySQL 的方法1.3 应用场景1.4 优缺点优点缺点 2. 使用 mysqld 命令直接启动 MySQL2.1 什么是 mysqld2.2 mysqld 启动 MySQL 的方法2.3 应用场景2.4 优缺点优点缺点 3. 对比分析结语 前言 MySQL …...
Wordcloud也能生成一个,带html的词云图文件吗??
-------------词云图集合------------- 用WordcloudPyQt5写个词云图生成器1.0 WordCloud去掉停用词(fit_wordsgenerate)的2种用法 通过词频来绘制词云图(jiebaWordCloud) Python教程95:去掉停用词词频统计jieba.tok…...
D2545电动工具调速专用控制电路芯片介绍【青牛科技】
概述: D2545 是一块频率、占空比可调的脉冲控制电路。可通过调节外接的电阻和电容大小来控制输出频率和占空比,达到控制电机转速的作用。 主要特点: ● 电源电压范围宽 ● 占空比可调 ● 静态功耗小 ● 抗干扰能力强 应用: ● …...
【大数据测试之:RabbitMQ消息列队测试-发送、接收、持久化、确认、重试、死信队列并处理消息的并发消费、负载均衡、监控等】详细教程---保姆级
RabbitMQ消息列队测试教程 一、环境准备1. 安装 RabbitMQ2. 安装 Python 依赖 二、基本消息队列中间件实现1. 消息发送模块2. 消息接收模块 三、扩展功能1. 消息持久化和队列持久化2. 消息优先级3. 死信队列(DLQ) 四、并发处理和负载均衡1. 使用 Python …...
Nuclei-快速漏洞扫描器
Nuclei-快速漏洞扫描器 声明 学习内容来自 B 站UP主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 ✍Ἷ…...
【MySQL】事务
【MySQL】事务 文章目录 【MySQL】事务前言一、事务的简介二、事务操作三、事务四大特性四、 并发事务问题五、事务隔离级别总结 前言 本篇文章将讲到事务的简介,事务操作,事务四大特性,并发事务问题,事务隔离级别。 一、事务的简…...
Vue 路由回退页面不刷新?深度剖析及实用解决方案汇总
在 Vue 开发过程中,常常会碰到这样一种情形:从页面 A 跳转到页面 B 后,点击浏览器回退按钮返回页面 A 时,页面数据却未刷新,依旧保持之前的状态。这一情况可能会给用户带来困扰,对用户体验产生不良影响。本…...
【JavaEE初阶 — 网络编程】TCP流套接字编程
TCP流套接字编程 1. TCP & UDP 的区别 TCP 的核心特点是面向字节流,读写数据的基本单位是字节 byte 2 API介绍 2.1 ServerSocket 定义 ServerSocket 是创建 TCP 服务端 Socket 的API。 构造方法 方法签名 方法说明 ServerS…...
I.MX6U 裸机开发20. DDR3 内存知识
I.MX6U 裸机开发20. DDR3 内存知识 一、DDR3内存简介1. DDR发展历程SRAMSDRAMDDR1DDR2DDR3DDR4DDR5 2. 开发板资源3. DDR3的时间参数1. 传输速率2. tRCD3. CL 参数作用取值范围工作原理4. tRC参数原理单位与取值5. tRAS重要性及作用 二、I.MX6U MMDC 控制器1. MMDC简介…...
微信小程序常用全局配置项及窗口组成部分详解
微信小程序常用全局配置项及窗口组成部分详解 引言 微信小程序作为一种新兴的应用形态,凭借其轻量级、便捷性和丰富的功能,已成为开发者和用户的热门选择。在开发小程序的过程中,了解全局配置项和窗口组成部分是至关重要的。本文将详细介绍微信小程序的常用全局配置项及窗…...
DVWA 在 Windows 环境下的部署指南
目录预览 一、靶场介绍二、前置准备1. 环境准备2.靶场下载 三、安装步骤1.配置Phpstudy2.配置数据库3.配置DVWA4.登入DVWA靶场 四、参考链接 一、靶场介绍 DVWA 一共包含了十个攻击模块,分别是: Brute Force(暴力(破解ÿ…...
JVM:即时编译器,C2 Compiler,堆外内存排查
1,即时编译器 1.1,基本概念 常见的编译型语言如C,通常会把代码直接编译成CPU所能理解的机器码来运行。而Java为了实现“一次编译,处处运行”的特性,把编译的过程分成两部分,首先它会先由javac编译成通用的…...