当前位置: 首页 > news >正文

《Rust权威指南》学习笔记(二)

枚举enum

1.枚举的定义和使用如下图所示:

定义时还可以给枚举的成员指定数据类型,例如:enum IpAddr{V4(u8, u8, u8, u8),V6(String),}。枚举的变体都位于标识符的命名空间下,使用::进行分隔。

2.一个特殊的枚举Option(在预导入模块prelude中定义),它描述了某个值可能存在(某种类型)或者不存在的情况,Rust中没有Null。

3.控制流运算符match:允许一个值与一系列模式进行匹配,并执行匹配的模式对应的代码,模式可以是字面值、变量名、通配符等等。match表达式类似于一个函数,每个分支都会有一个返回值,并且整个match表达式的返回值类型必须一致。如下图:

Match匹配必须穷举所有的可能,否则会报错,可以用通配符_(这里可以用任何一个合法标识符来捕获剩下的匹配值)替代其余没有列出的值,_需要写在最后面,也可以使用任何合法的变量名捕获其他所有情况,后续可以在分支内部使用该变量进行进一步的处理。

4.if let的用法:处理只关心一种匹配而忽略其他匹配的情况,下图中v 恰好等于Some(3) 时,条件会成立,第一个分支就会被执行。if let还可以用于简化模式匹配,用于匹配并解构Option,、Result等枚举类型的某个特定变体,并在匹配成功时执行相应代码。

Rust代码组织

1.Package:是一个Rust项目的最外层单位,它由一个或多个crate组成(至少有一个)。它通常包含一个Cargo.toml文件,用于描述包的元数据、依赖项以及构建信息。每个package至少包含一个项目,这个项目可以是一个可执行项目(由main.rs文件定义)或者一个库项目(由lib.rs文件定义)。包和项目的关系是,一个package可以包含多个可执行项目(可放在src/bin目录下),但最多只能包含一个库项目。使用cargo new project创建一个新工程时,生成的就是一个Rust包(package)。想创建一个库包而不是可执行包,可以使用--lib选项。使用cargo new my_library --lib命令时,Cargo会在src/目录下创建一个lib.rs文件,而不是main.rs文件。这个lib.rs文件是库项目的入口文件,定义了库的公共API。

2.Crate:是Rust代码的编译单元,所有的Rust代码都是在crate的上下文中进行编译的。一个crate可以是一个库,也可以是一个可执行文件。每个crate都有一个根模块,根模块对应着crate的入口文件——对于库crate,入口文件是lib.rs,对于二进制crate,默认入口文件是main.rs(这个miain.rs编译生成的可执行文件名称与package名相同)。Crate定义了一个独立的命名空间,并且可以导入其他crate来使用它们的功能。由于main.rs是二进制crate的入口点,它的内容通常不会被库crate直接引用。因此,lib.rs中不能直接使用main.rs中定义的函数或结构体。相反,库crate应该定义功能,并将这些功能公开给其他模块或crate使用,而main.rs可以引用这些功能。

3.Module:是Rust中用于组织代码的机制,它允许将代码划分为多个部分,每个部分可以在其自己的命名空间中定义。模块帮助管理代码的可读性和可维护性,一个crate的根模块可以包含其他模块,而这些模块又可以嵌套定义子模块。Rust中的模块可以通过文件系统组织,例如,一个模块可以定义在与它同名的文件中,或者作为父模块文件中的嵌套模块定义,模块之间的关系通常通过use关键字和路径来引用。

4.Path:是Rust中用于引用项(例如函数、结构体、枚举、模块等)的方式,它定义了如何从一个命名空间访问另一个命名空间的内容。路径可以是绝对路径,从crate的根模块开始(可以使用crate名或者字面值“crate”);也可以是相对路径,从当前模块开始(使用self、super或当前模块的标识符,super用来访问父级模块路径中的内容,类似于文件系统中的..),路径的标识符之间用::隔开。路径使得你能够在模块层次结构中导航,访问不同模块和它们的内容。Rust的路径系统允许你清晰、简洁地访问代码片段,即使它们位于不同的模块或crate中。

5.私有边界:模块不仅可以组织代码,还可以定义私有边界,Rust中所有的条目(函数、方法、struct、enum、模块、常量等)默认都是私有的,父模块无法访问子模块中的私有条目,子模块可以使用所有祖先模块中的条目。可以使用pub来将这些条目声明为公有的,如下图,没有声明为公有的私有条目无法被访问:

6.use关键字:可以使用use关键字将路径(可以使用相对路径或者绝对路径)导作用域内(仍然遵循私有性规则),通常习惯将函数的父级模块引入作用域,以此来区分该函数是不是在其他模块引入的,而习惯将除函数外的其他元素如struct、enum等的整个完整路径引入作用域(如果有同名struct可以引用到父级以此来区分)。可以用as关键字来为引入的路径指定本地的别名,如:use std::fmt::Result as Re。

使用use将路径导入到作用域内后,该名称在此作用域中是私有的,可以在前面加上pub,则被导入的条目就可以被其他外部代码引入到他们的作用域中。如:pub use std::fmt::Result。

7.外部包的使用:需要现在Cargo.toml文件中添加依赖,然后用use将需要的特定条目引入到作用域内。标准库(std)也被当作外部包,不用在Cargo.toml文件中添加std,但需要用use将需要使用的std中的条目引入到当前作用域。当在Rust项目中使用cargo build命令编译程序时,Cargo(Rust的包管理器和构建系统)会将所有依赖的外部包下载并解压到target/debug/deps或target/release/deps文件夹中,具体位置取决于你是进行调试编译(debug)还是发布编译(release)。对于同一个包中的不同条目,可以使用嵌套路径的方式导入:路径相同的部分::{路径差异的部分}(路径差异部分用逗号分隔),如:use std::io::{cmp::Ordering,io};,如果两个use路径之一是另一个的子路径,可使用self,如:use std::io::{self,Write};。使用通配符*可以把路径中所有的公共条目都引入到作用域,如:use std::collections::*。

8.模块定义时,如果模块名后边是;,而不是代码块,Rust会从与模块同名的文件中加载内容,模块树的结构不会变化,如下图:

常见集合

1.Vector:由标准库提供,Vec<T>可以存储多个值,但只能存储相同类型的值,值在内存中连续存放。Vector初始化一般有两种方式,用new函数会初始化一个空的vector,还可以用宏定义vec!初始化,如下图所示:

向vector添加元素可以用push方法,例如v.push(1),添加的元素会被放在vector的末尾。当vector离开其作用域时,会像其他struct一样被清理掉,他里面所有的元素也会被清理掉。可以使用索引或者get方法来访问vector中的元素,get方法返回的是Option<T>枚举类型,所以当用get方法获取元素传入的索引越界时,返回的是None,而直接通过索引访问在越界时会引起panic。

所有权和借用规则在vector中同样适用,例如不能在同一作用域中同时拥有可变和不可变引用。可以用for循环来遍历vector中元素的值,如下图(println! 宏可以直接接受引用,所以不需要解引用i,就可以打印出其指向的值):

vector只能存储同一类型的数据,可以和enum配合使用来存储不同类型的值(将enum作为vector的元素),如下图:

2.字符串:字符串本质是Byte的集合,主要包括字符串字面值(&str)和String(由标准库提供,采用UTF-8编码)两种类型,Rust标准库还提供了其他字符串类型:OsString、OsStr、CString、CStr等。创建一个新的字符串可以使用new函数(如let mut s = String::new();),to_string()方法(可用于实现了Displaying trait的类型,包括字符串字面值)或者String::from()函数,如下图:

更新字符串的方式有:push_str()方法可以把一个字符串切片附加到String,如s.push_str(“abc”);表示将abc附加到s后面;push()方法可以把单个字符附加到String,如s.push(‘a’);;可以用+连接字符串,但只能把&str类型添加到String,即左侧操作数必须是String类型(左侧String的所有权会被消耗),右侧操作数必须是&str;format!可用来连接多个字符串(这种方式不会修改参数的所有权)。

String不支持索引的访问方式,可以将String看作是字节、标量或者字形,对于标量值可以用chars()方法来遍历,对于字节可以用bytes()方法来遍历。

可以使用[ ]和一个范围来创建字符串的切片,但如果切片跨越了字符边界就会报错(字符是以UTF-8编码的,有些字符占2-4个字节,切片的开始或结束位置不能在这样的2-4字节之间)。

3.HashMap<K,V>:以键值对的形式来存储数据,一个键对应一个值,Hash函数用来决定如何在内存中存放K和V。可以用new函数创建一个新的空HashMap(如let mut map = HashMap::new();),用insert方法向其中添加键值对(如map.insert("key1", "value1");)。在同一个HashMap中,所有的K必须是同一个类型,所有的V必须是同一个类型。还可以基于collect方法在元素类型为Tuple(要求Tuple有两个值,一个作为K,另一个作为V)的Vector上创建新的HahsMap,如下图:

在HashMap中,对于实现了Copy trait的类型(如i32),值会被复制到HashMap中,对于拥有所有权的值(如String),所有权会转移给HashMap,如果将值的引用插入到HashMap中,值的所有权不会转移,但在HashMap有效期间,被引用的值必须保持有效。可以用get方法传入参数K访问HashMap中的V,返回值为Option<T>枚举类型。可以用for遍历HashMap中的键值对,如下图:

更新HashMap有以下几种情况:1.K已经存在:可以选择替换现有的V、保留现有的V忽略新的V、合并现有的V和新的V;2.K不存在:添加一对KV。如果向HashMap插入一对KV,然后再插入同样的K不同的V则原来的V会被替换。可以先用entry方法检查指定的K是都存在(该方法返回enum Entry,代表值是否存在),然后使用Entry的or_insert()方法(若K存在,返回对应值的可变引用;若K不存在,该方法将参数作为K的新值插入HashMap,而后返回这个值的可变引用),如下图所示:

错误处理

1.Rust中将错误分为可恢复错误(例如文件未找到等,可再次尝试)和不可恢复错误(bug,例如索引访问越界),可恢复错误可返回Result<T,E>枚举类型,不可恢复错误和使用panic!宏来报错,这个宏的默认处理方式为展开(unwind)、清理调用栈,即从产生错误的地方开始,逆向遍历调用栈,逐层清理每一层函数调用所分配的资源。这个过程确保了所有已经获取的资源(例如内存、文件句柄、锁等)能够被正确地释放,避免资源泄漏。在展开过程中,Rust 会自动调用每个作用域中的析构函数(也称为Drop实现)释放资源或执行其他清理操作。然后退出程序。这样的默认操作比较费时,可以将其重新设置为panic!时直接中止调用栈,而不进行任何清理操作,内存清理交由操作系统去完成,具体设置可修改Cargon.toml文件,如下图:

panic!可能发生在我们自己写的程序中,也可能发生在我们程序所依赖的代码中,可以通过设置RUST_BACKTRACE环境变量回溯错误具体信息,如在运行时设置:cargo run RUST_BACKTRACE=1,但必须保证编译时没有加--realease选项。

2.Result枚举类型原始定义如下:

和Option一样,Result也是由prelude带入作用域,Result枚举类型可以作为函数返回值或match匹配结果,如下图:

3.unwrap()方法可用于从Option或Result类型中提取值。如果调用unwrap()时包含的值是Some或Ok,它将返回内部的值;如果是None或Err,它将触发恐慌(panic),程序会终止执行。expect()方法也用于从Option或Result类型中提取值,但与unwrap() 不同的是,它允许自定义panic时的错误消息。这样,当unwrap() 触发panic时,可以得到更明确的错误信息帮助调试。

4.错误处理的一种更加简洁和快捷的方式是使用?运算符,?运算符可以用于处理返回Result或Option类型的函数或表达式,如果Result是Ok,Ok中的值就是表达式的结果,然后继续执行程序;如果Result是Err,Err就是整个函数的返回值,相当于使用了return。如下图所示,从上到下代码逐渐简洁:

Trait std::convert::From上的from函数可以用于错误类型之间的转换,被?所应用的错误,会隐式地被from函数处理,当?调用from函数时,它所接收的错误类型会被转化为当前函数返回类型所定义的错误类型,只要每个错误类型实现了转换为所返回的错误类型的from函数。

相关文章:

《Rust权威指南》学习笔记(二)

枚举enum 1.枚举的定义和使用如下图所示&#xff1a; 定义时还可以给枚举的成员指定数据类型&#xff0c;例如&#xff1a;enum IpAddr{V4(u8, u8, u8, u8),V6(String),}。枚举的变体都位于标识符的命名空间下&#xff0c;使用::进行分隔。 2.一个特殊的枚举Option&#xff0…...

Docker 远程访问完整配置教程以及核心参数理解

Docker 远程访问完整配置教程 以下是配置 Docker 支持远程访问的完整教程&#xff0c;包括参数说明、配置修改、云服务器安全组设置、主机防火墙配置&#xff0c;以及验证远程访问的详细步骤。 1. 理解 -H fd:// 参数的作用&#xff08;理解了以后容易理解后面的操作&#xff…...

在ros2 jazzy和gazebo harmonic下的建图导航(cartographer和navigation)实现(基本)

我的github分支&#xff01;&#xff01;&#xff01; 你可以在这里找到相对应的源码。 DWDROME的MOGI分支 来源于&#xff01;&#xff01; MOGI-ROS/Week-3-4-Gazebo-basics 学习分支整理日志 分支概述 这是一个用于个人学习的新分支&#xff0c;目的是扩展基本模型并添加…...

常见的显示器分辨率及其对应的像素数量

显示器的像素数量通常由其分辨率决定&#xff0c;分辨率表示为水平像素数乘以垂直像素数。 720P&#xff08;1280720&#xff09;&#xff1a; 像素数量&#xff1a;约92.16万特点&#xff1a;这是高清标准的一个分辨率&#xff0c;通常用于手机、平板电脑或小型显示器。900P&…...

浅谈分布式共识算法

分布式共识算法 基础概念1、容错2、共识3、拜占庭将军问题4、多数派5、共识算法分类6、ACID&BASE&CAP Paxos1、相关概念2、三种角色3、运行阶段4、Multi Paxos5、总结6、演化 ZAB1、相关概念2、三种角色3、成员状态4、运行阶段5、ZooKeeper流程6、总结 Raft1、相关概念…...

[Linux]redis5.0.x升级至7.x完整操作流程

1. 从官网下载最新版redis&#xff1a; 官网地址&#xff1a;https://redis.io/download 注&#xff1a;下载需要的登录&#xff0c;如果选择使用github账号登录&#xff0c;那么需要提前在github账号中取消勾选“Keep my email addresses private”&#xff08;隐藏我的邮箱…...

Vue项目中生成node_modules文件夹的两种常用方法及npm优势

在Vue项目中生成node_modules文件夹的过程非常简单,主要步骤如下: 1、使用 npm 安装依赖包; 2、使用 yarn 安装依赖包。其中,推荐使用npm安装依赖包,原因如下: 兼容性更广:npm是Node.js的默认包管理工具,具有更高的兼容性。社区支持:npm拥有更大的用户基础和社区支持,…...

(四)基于STM32通过Event Recoder实现时间测量功能

目录 1. 了解Event Recorder 2. 硬件和软件准备 硬件需求 软件需求 3. 配置STM32工程 使用STM32CubeMX初始化项目 配置Event Recorder 4. 实现时间记录功能 初始化Event Recorder 时间间隔计算 配置Debug选项 测量结果查看 5总结 在嵌入式系统开发中&#xff0c;精…...

【Linux】定时运行shell脚本

1、at命令 at命令允许指定Linux系统何时运行脚本&#xff0c;它会将作业提交到队列中&#xff0c;指定shell在什么时候运行该作业。 at 的守护进程 atd 在后台运行&#xff0c;在作业队列中检查待运行的作业。 at 守护进程会检查系统的一个特殊目录&#xff08;一般位于/var/…...

ARM 汇编基础总结

GNU 汇编语法 编写汇编的过程中&#xff0c;其指令、寄存器名等可以全部使用大写&#xff0c;也可以全部使用小写&#xff0c;但是不能大小写混用。 1. 汇编语句的格式 label: instruction comment label即标号&#xff0c;表示地址位置&#xff0c;有些指令前面可能会有标…...

L27.【LeetCode笔记】2 的幂(五种解法)

目录 1.题目 2.自解 方法1:调用log函数 代码 提交结果 方法2:循环 提交结果 3.优解 方法3:位运算n & (n-1) 0 代码 提交结果 方法4:位运算lowbit 代码 提交结果 4.投机取巧的方法 代码 提交结果 1.题目 https://leetcode.cn/problems/power-of-two/?env…...

【MyBatis-Plus】让 MyBatis 更简单高效

如果你曾经使用过 MyBatis&#xff0c;你一定知道它的强大和灵活。然而&#xff0c;随着项目规模的增长&#xff0c;手写 SQL 成为了一件既繁琐又容易出错的事。这时&#xff0c;MyBatis-Plus&#xff08;简称 MP&#xff09;应运而生&#xff0c;它为 MyBatis 增强了许多功能&…...

如何使用OpenCV进行抓图-多线程

前言 需求&#xff1a; 1、如何使用OpenCV捕抓Windows电脑上USB摄像头的流、 2、采用多线程 3、获知当前摄像头的帧率。 这个需求&#xff0c;之前就有做了&#xff0c;但是由于出现了一个问题&#xff0c;人家摄像头的帧率目前都可以达到60帧/s 了&#xff0c;而我的程序…...

解决安装pynini和WeTextProcessing报错问题

点击这里&#xff0c;访问博客 0. 背景 最近在给别人有偿部署ASR-LLM-TTS项目时遇到安装pynini和WeTextProcessing依赖报错的问题&#xff0c;报错信息如下&#xff1a; IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files…...

数据中台与数据治理服务方案[50页PPT]

本文概述了数据中台与数据治理服务方案的核心要点。数据中台作为政务服务数据化的核心&#xff0c;通过整合各部门业务系统数据&#xff0c;进行建模与加工&#xff0c;以新数据驱动政府管理效率提升与政务服务能力增强。数据治理则聚焦于解决整体架构问题&#xff0c;确保数据…...

springCloud 脚手架项目功能模块:Java分布式锁

文章目录 引言分布式锁产生的原因:集群常用的分布式锁分布式锁的三种实现方式I ZooKeeper 简介zookeeper本质上是一个分布式的小文件存储系zookeeper特性:全局数据一致性II 基于ZooKeeper 实现一个排他锁创建锁获取锁释放锁Apache ZooKeeper客户端III 分布式锁方案非公平锁方…...

一文讲清楚HTTP常见的请求头和应用

文章目录 一文讲清楚HTTP常见的请求头和应用1. 啥是个HTTP请求头2. 常见的请求头&#xff0c;作用和示例3.协商缓存4.会话状态 一文讲清楚HTTP常见的请求头和应用 1. 啥是个HTTP请求头 一句话&#xff0c;说白了就是限定HTTP传输的一些规则参数&#xff0c;比如Accept&#xf…...

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found

这个问题之前遇到过&#xff0c;没有记录&#xff0c;导致今天又花了2小时 原因是没有GLIBC——2.32 使用以下命令查一下有哪些版本&#xff1a; strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_ 我已经安装好了&#xff0c;所有有2.32版本 原因是当前的ubuntu版本…...

如何安装适配pytorch版本的torchvision

一、对照版本 版本对照pytorch/vision: Datasets, Transforms and Models specific to Computer Vision 二、下载对应版本的torchvision 下载连接1download.pytorch.org/whl/torch_stable.html 下载连接2download.pytorch.org/whl/cu110/torch_stable.html 笔者认为1会比2更…...

UE4_用户控件_3_用户控件输入数据的方法

祝愿大美兰陵越来越好&#xff01; 一、效果展示&#xff1a; 二、先制作一个角色 1、新建个父类为pawn的蓝图类。更名为BP_Image_Character。 2、这个角色只是用于观察场景&#xff0c;并与场景中的物体相碰撞用的&#xff0c;所以不需要骨骼网格体&#xff0c; 3、但是我们…...

以往博客的复习补充——part1

之前没更新是因为期末考试要复习&#xff0c;没空写博客。1月3号才考完&#xff0c;现在有空&#xff0c;打算从头看一遍&#xff0c;既是复习以前知识点&#xff0c;又是对原来的博客进行补充。刚好寒假&#xff0c;有大把时间。 一&#xff0c;希尔排序&#xff08;Shell So…...

数据挖掘——决策树分类

数据挖掘——决策树分类 决策树分类Hunt算法信息增益增益比率基尼指数连续数据总结 决策树分类 树状结构&#xff0c;可以很好的对数据进行分类&#xff1b; 决策树的根节点到叶节点的每一条路径构建一条规则&#xff1b;具有互斥且完备的特点&#xff0c;即每一个样本均被且…...

Kafka 快速实战及基本原理详解解析-01

一、Kafka 介绍 1. MQ 的作用 消息队列&#xff08;Message Queue&#xff0c;简称 MQ&#xff09;是一种用于跨进程通信的技术&#xff0c;核心功能是通过异步消息的方式实现系统之间的解耦。它在现代分布式系统中有着广泛的应用&#xff0c;主要作用体现在以下三个方面&…...

大模型在自动驾驶领域的应用和存在的问题

大模型在自动驾驶领域的应用与挑战 大模型&#xff08;如 GPT-4、BERT等&#xff09;已经在多个领域取得了突破&#xff0c;自动驾驶是其中一个受益颇多的行业。随着人工智能和深度学习的快速发展&#xff0c;自动驾驶技术正在向更加智能化、自动化和安全的方向发展。大模型在…...

【0x0014】HCI_Read_Local_Name命令详解

目录 一、命令概述 二、命令格式 三、返回事件及参数说明 3.1. HCI_Command_Complete 事件 3.2. Status 3.3. Local_Name 四、命令执行流程 4.1. 命令发送 4.2. 控制器接收并处理命令 4.3. 控制器返回结果 4.4. 主机接收并解析事件包 4.5. 示例代码 五、应用场景 …...

理解Java领域中的 DTO、PO 和 VO

在 Java 开发中&#xff0c;DTO&#xff08;Data Transfer Object&#xff09;、PO&#xff08;Persistent Object&#xff09;和 VO&#xff08;Value Object&#xff09;是在不同层面用于数据处理和传递的概念&#xff0c;它们各自有着独特的作用&#xff1a; 一、DTO&#…...

成都和力九垠科技有限公司九垠赢系统Common存在任意文件上传漏洞

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

框架模块说明 #09 日志模块_01

背景 日志模块是系统的重要组成部分&#xff0c;主要负责记录系统运行状态和定位错误问题的功能。通常&#xff0c;日志分为系统日志、操作日志和安全日志三类。虽然分布式数据平台是当前微服务架构中的重要部分&#xff0c;但本文的重点并不在此&#xff0c;而是聚焦于自定义…...

Unity热更文件比较工具类

打包出来的热更文件&#xff0c;如果每次都要全部上传到CDN文件服务器&#xff0c;不进耗费时间长&#xff0c;还浪费流量。 所以让AI写了个简单的文件比较工具类&#xff0c;然后修改了一下可用。记录一下。 路径可自行更改。校验算法这里使用的是MD5&#xff0c;如果使用SH…...

Python性能分析深度解析:从`cProfile`到`line_profiler`的优化之路

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在软件开发过程中,性能优化是提升应用质量和用户体验的关键环节。Python作为广泛应用的高级编程语言,其性能分析工具为开发者提供了强大的…...

EF Core配置及使用

Entity Framework Core是微软官方的ORM框架。 ORM&#xff1a;Object Relational Mapping。让开发者用对象操作的形式操作关系数据库。 EF Core是对于底层ADO.NET Core的封装&#xff0c;因此ADO.NET Core支持的数据库不一定被EF Core支持。 代码创建数据库Code First 建实…...

EPS32基础篇开发

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 开发 EPS32基础篇 前言一、GPIO输入输出GPIO可设置一下4种状态代码示例&#xff1a;检测按键&#xff0c;按下时&#xff1a;LED亮&#xff0c;松开时&#xff0c;LED灭 二、…...

【时时三省】(C语言基础)常见的动态内存错误2

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对非动态开辟空间内存使用free释放 示例&#xff1a; 这个arr数组是在栈上的 *p指向的就是arr 对非动态空间也用了free ferr只能在动态开辟空间使用 使用free释放一块动态开辟空间的一部分…...

Harmony OS开发-ArkUI框架速成四

程序员Feri一名12年的程序员,做过开发带过团队创过业,擅长Java相关开发、鸿蒙开发、人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴&#xff01;君志所向,一往无前&#xff01; 1.图标库 1.1 图标库概述 HarmonyOS 图标库为 HarmonyOS 开发者提供丰富的在线图…...

vulnhub Earth靶机

搭建靶机直接拖进来就行 1.扫描靶机IP arp-scan -l 2.信息收集 nmap -sS -A -T4 192.168.47.132 得到两个DNS; 在443端口处会让我们加https dirb https://earth.local/ dirb https://terratest.earth.local/ #页面下有三行数值 37090b59030f11060b0a1b4e0000000000004312170a…...

ScheduledExecutorService详解

ScheduledExecutorService 是 Java 并发工具包 (java.util.concurrent) 中的一个接口&#xff0c;用于在指定的延迟后执行任务&#xff0c;或者以固定的时间间隔周期性执行任务。它是 ExecutorService 的子接口&#xff0c;提供了更强大的调度功能。 ScheduledExecutorService…...

logback日志文件多环境配置路径

项目中遇到问题&#xff0c;springboot项目 本地jar包部署到现场后&#xff0c;经常遇到现场的日志存放的路径会更改&#xff0c;经过查阅&#xff0c;有两种方式&#xff0c;下面简单说明一下。 一、第一种 启动jar包时 添加参数 --logging.configF:\hgtest\config\logback.x…...

判断一个变量是否为NaN

1. JS代码 NaN&#xff08;不是一个数字&#xff0c;但数据类型为number&#xff09;是执行数学运算没有成功&#xff0c;返回失败的结果。 另外&#xff0c;NaN 不等于 NaN 。 //利用 NaN 是唯一一个不等于自身的特点 function _isNaN(val) {if (val ! val) {return true;}ret…...

Flask 快速入门

1. Flask 简介 1.1 什么是 Flask Flask 是一个用 Python 编写的轻量级 Web 框架&#xff0c;被誉为 微框架。它提供基础功能&#xff0c;如路由、请求处理和模板引擎&#xff0c;但不强迫开发者使用特定库或工具&#xff0c;赋予开发人员高度的自由选择权&#xff0c;以满足不…...

性能测试03|JMeter:断言、关联、web脚本录制

目录 一、断言 1、响应断言 2、json断言 3、持续时间断言 二、关联 1、正则表达式介绍 2、正则表达式提取器 3、Xpath提取器 4、JSON提取器 5、JMeter属性 三、web脚本录制 一、断言 定义&#xff1a;让程序自动判断实际的返回结果是否与预期结果保持一致 自动校验…...

微信小程序调用 WebAssembly 烹饪指南

我们都是在夜里崩溃过的俗人&#xff0c;所幸终会天亮。明天就是新的开始&#xff0c;我们会变得与昨天不同。 一、Rust 导出 wasm 参考 wasm-bindgen 官方指南 https://wasm.rust-lang.net.cn/wasm-bindgen/introduction.html wasm-bindgen&#xff0c;这是一个 Rust 库和 CLI…...

java_配置使用nacos完整示例

参考&#xff1a;49 尚上优选项目-平台管理端-整合ESMQ实现商品上下架-流程分析_哔哩哔哩_bilibili 1. 下载安装nacos https://github.com/alibaba/nacos/releases 2. 解压&#xff0c;运行 PS D:\path/to\nacos-server-2.4.3\nacos\bin> .\startup.cmd -m standalone 3.…...

Go语言性能优化-字符串格式化优化

在 Go 语言中,格式化字符串(例如使用 fmt.Sprintf、fmt.Printf 等函数)确实可能对性能产生影响,尤其是当频繁执行格式化操作时。格式化字符串涉及对格式符的解析和数据类型的转换,这会增加额外的开销。为了减少格式化字符串带来的性能影响,可以采取以下一些优化策略: 1…...

Spring源码分析之事件机制——观察者模式(二)

目录 获取监听器的入口方法 实际检索监听器的核心方法 监听器类型检查方法 监听器的注册过程 监听器的存储结构 过程总结 Spring源码分析之事件机制——观察者模式&#xff08;一&#xff09;-CSDN博客 Spring源码分析之事件机制——观察者模式&#xff08;二&#xff…...

机器学习和深度学习

机器学习&#xff08;Machine Learning&#xff0c;简称 ML&#xff09;和深度学习&#xff08;Deep Learning&#xff0c;简称 DL&#xff09;都是人工智能&#xff08;AI&#xff09;领域的重要技术&#xff0c;它们的目标是使计算机通过数据学习和自主改进&#xff0c;从而完…...

MetaGPT - 多Agent框架

文章目录 一、关于 MetaGPT功能介绍快速开始的演示视频教程 二、安装Pip安装Docker安装 一、关于 MetaGPT MetaGPT 为GPTs分配不同的角色&#xff0c;以形成一个协作实体来完成复杂的任务。 github : https://github.com/geekan/MetaGPTtwitter : https://twitter.com/MetaGP…...

Hyperbolic dynamics

http://www.scholarpedia.org/article/Hyperbolic_dynamics#:~:textAmong%20smooth%20dynamical%20systems%2C%20hyperbolic%20dynamics%20is%20characterized,semilocal%20or%20even%20global%20information%20about%20the%20dynamics. 什么是双曲动力系统&#xff1f; A hy…...

TIM的输入捕获

IC&#xff08;Input Capture&#xff09;输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存到CCR中 我们使用测周法测频率 void IC_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphCl…...

SCAU期末笔记 - 数据库系统概念往年试卷解析

数据库搞得人一头雾水&#xff0c;题型太多太杂&#xff0c;已经准备摆烂了。就刷刷往年试卷&#xff0c;挂不挂听天由命。 2019年 Question 1 选择题 1. R ∩ S R∩S R∩S等于一下哪个选项&#xff1f; 画个文氏图秒了 所以选A. R ∩ S R − ( R − S ) R∩SR-(R-S) R∩…...

黑马跟学.苍穹外卖.Day01

黑马跟学.苍穹外卖.Day01 苍穹外卖-day01课程内容1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 产品原型2.3 技术选型 3. 开发环境搭建3.1 前端环境搭建3.2 后端环境搭建3.2.1 熟悉项目结构3.2.2 Git版本控制3.2.3 数据库…...