- 博客(72)
- 收藏
- 关注

原创 Rust 各类智能指针、所有权转移和内存区域关系,值得你看!
发这篇博客的原因就是在学习`Rust`过程中,涉及到很多**栈、堆和所有权**的问题,导致我开始不清楚一些变量**到底**是分配**在栈上**还是**堆上**,还有从哪到哪,是否发生了内存区域的移动等等
2024-05-08 17:44:21
1621
原创 prometheus索引文件
Prometheus 的索引磁盘格式通过组织符号表、标签值索引、时间序列索引和倒排索引,使得大规模时序数据的存储和查询变得高效。希望这个详细的解释和例子能帮助你更好地理解 Prometheus 的索引磁盘格式!如果有更多问题,欢迎继续提问。
2024-05-26 23:39:50
436
原创 Rust多线程交叉打印
使得在Rust的多线程编程中变得很难管理。的场景也是非常常见的,因为Rust提出了一个。在Rust中,有一个很重要的机制就是。的类型可以在线程间安全的传递其所有权。第一部分代码中,可以看到我们需要实现。特征,这是因为锁的值,我们其实是想让。,值的赋值行为,很有可能导致一个值。,可以共享使用Mutex。使用(拥有一个所有权),那必然线程之间是要。一个锁,是另一个特征。
2024-05-17 17:34:09
897
原创 Rust lib.rs 有什么用,看这一篇就够了
那每一个模块和模块条目,能否被别的模块使用,我们就**需要在lib.rs**文件中进行**定义引入**,这样**才,才,才可以**使用引用的模块(文件)和模块条目(函数)
2024-05-01 14:43:14
2954
原创 Rust HashMap
HashMap 也是 Rust 标准库中提供的集合类型,但是又与动态数组不同,HashMap 中存储的是一一映射的,并提供了平均时间复杂度为。
2024-04-29 14:10:41
841
原创 Rust 动态数组Vector
哪怕只是拿了某个元素的可变引用,也不能再获得Vector整体的不可变引用。表示,可以看成java的集合吧,和Golang的切片还是有点区别。v.get(2) 也是访问第三个元素,但是有所不同的是,它返回了。从安全性出发,get更安全,get在内部做了处理,,因此 v.get 的使用方式非常安全。,如果不想自己写,可以使用派生的比较特征。其实如果你想放不同类型的数据,可以考虑。如果是特征对象,得保证不同类型都。动态数组允许你存储多个值,分为下标访问和get访问。,访问效率高,但是只能。
2024-04-28 22:29:13
1037
1
原创 Rust特征对象
特征对象指向实现了 某种特征的类型的实例,这种映射关系是存储在一张表中,可以在运行时通过特征对象找到具体调用的类型方法可以通过或者的方式来。这个说法太抽象了,我们来看一点例子。
2024-04-28 15:43:39
1329
原创 Rust特征
pub trait Summary {//Summary 是特征名称//和接口类似,不需要具体实现方法体带有默认实现的特征定义这样使得实现了该特征的类型,自动具备了默认的特征行为,当然也可以覆盖重写优先调用覆盖重写的特征行为。
2024-04-28 14:32:57
677
原创 Rust 模式匹配中的& 和 ref
按照正常思路的话(假设),按道理应该是两个可变引用,是违背借用原则的,会不会是match{}框住了value的作用域导致,其实只有一个可变引用?除了使用&引用借用来避免交出所有权的问题,在模式匹配中,我们可以使用**&或ref**来避免交出所有权,ref不遵循借用的那一套规则,在match的模式匹配中,ref也可以是不拿所有权的一种引用方法。匹配变量,也就是value,那么**&mut 是肯定不能用**的,其实第一版修改,我们可以改成。这里说了,&mut v的所有权被value拿走了。其实这里你可能会问,
2024-04-22 23:04:20
1598
原创 Rust基本数据类型-字符串
先说明一下,在Rust中,字符是UniCode编码占4个字节,字符串类型的字符是UTF-8编码的,字节大小为1~3。这样会报错,因为字符串编码是可变长编码,通过简单的下标,很难界定你输入的下标是否正确切割了字符。来获取,但是我们的下标要注意,要整好取得字符字节大小的整数。在Rust中,可以分为&Str和String类型。由于字符串追加操作要修改原来的字符串,则该。的 UTF-8 编码字符串。的,即字符串变量必须由。类型是不可修改的字符串。在字符串尾部可以使用。
2024-04-21 17:37:04
1232
原创 Rust基本数据类型-切片
则可以正常通过编译。因此,当你需要对字符串做切片索引操作时,需要格外小心这一点。但是需要注意的是,切片取索引下标的时候,要将。如何正确便利这种UTF-8字符串,给几个方法。,因此没有落在边界处,也就是连 中 字都。切片并不是 Rust 独有的概念,在。,此时程序会直接崩溃退出,如果改成。,它看起来像这样,记得是。就非常流行,它允许你。
2024-04-21 16:27:23
470
原创 设计模式代码实战-责任链模式
小明所在的公司请假需要在OA系统上发布申请,整个请求流程包括多个处理者,每个处理者负责处理不同范围的请假天数,如果一个处理者不能处理请求,就会将请求传递给下一个处理者,请你实现责任链模式,可以根据请求天数找到对应的处理者。审批责任链由主管(Supervisor), 经理(Manager)和董事(Director)组成,他们分别能够处理3天、7天和10天的请假天数。如果超过10天,则进行否决。其实就是单链表数据结构,一个个递归向后处理,当前节点能处理就返回。
2024-04-19 17:21:06
708
原创 Rust入门-引用借用
的地方,这个跟变量的作用域有所不同,变量的作用域从创建持续到某一个花括号 }给大家一段代码看看,Rust真好玩(手动狗头)
2024-04-19 15:47:36
759
原创 Rust入门-所有权
这里可以给出一个通用的规则: 任何基本类型的组合可以 Copy ,不需要分配内存或某种形式资源的类型是可以 Copy 的。可以理解成,所有权移交之后,就可以大胆放心的抛弃先前的拥有者。,栈和堆的结构特性决定了一些值适合放在哪些位置,能够有更好的性能和空间效率。,不会把旧值的所有权给新变量(新拥有者),没有发生所有权变化的现象。的,因为你需要复制一份数据,万一你这个数据非常大,复制起来非常耗时耗资源。,该结构体就是字符串结构,保存了堆中数据的地址、长度、容量等数据。,即在堆中生成一份相同的数据,赋给新变量。
2024-04-18 23:36:25
1296
原创 设计模式代码实战-模版方法模式
小明喜欢品尝不同类型的咖啡,她发现每种咖啡的制作过程有一些相同的步骤,他决定设计一个简单的咖啡制作系统,使用模板方法模式定义咖啡的制作过程。系统支持两种咖啡类型:美式咖啡(American Coffee)和拿铁(Latte)。方法模版类:定义了模版方法有哪些抽象方法,该抽象方法等具体的算法实现。具体方法:实现模版类的抽象方法。
2024-04-17 17:45:46
673
原创 设计模式代码实战-中间者模式
小明正在设计一个简单的多人聊天室系统,有多个用户和一个聊天室中介者,用户通过中介者进行聊天,请你帮他完成这个系统的设计。代理:包含中间者引用,消息都是发送给中间者,中间者再掉用自己的发送信息方法。中间者:持有所有代理,负责发送和接收代理的信息(包含两个方法)
2024-04-17 17:23:49
369
原创 Rust 入门-更换镜像源(MAC)
cargo debug模式,为了提高开发速度,编译会非常快,但是相对里说运行速度比较慢。首先,创建一个新的镜像源 [source.ustc],然后将默认的 crates-io 替换成新的镜像源: replace-with = ‘ustc’。只要这样配置后,以往需要去 crates.io 下载的包,会全部从科大的镜像地址下载,速度刷刷的…当项目大了后,cargo run 和 cargo build 不可避免的会变慢,那么有没有更快的方式来验证代码的正确性呢?因此该命令速度会非常快,能。
2024-04-16 20:47:31
1350
原创 Rust入门-Hello World
创建一个新项目,cargo是Rust的包管理工具。看到Hello world!千里之行,始于足下,加油!上安装 rustup。
2024-04-16 20:20:40
1075
原创 设计模式代码实战-策略模式
类似代理模式,Context是那个代理,一个Context只包含了一个策略接口的引用,Context包含不同策略的引用,在Context中处理掉用哪种策略。小明家的超市推出了不同的购物优惠策略,你可以根据自己的需求选择不同的优惠方式。
2024-04-16 15:43:08
591
原创 设计模式代码实战-观察者模式
小明所在的学校有一个时钟(主题),每到整点时,它就会通知所有的学生(观察者)当前的时间,请你使用观察者模式实现这个时钟通知系统。主要逻辑是在主题中,负责观察者的增删改和通知,在主题中的通知方法中,通知所有的观察者。注意点:时间从 0 开始,并每隔一个小时更新一次。
2024-04-16 15:19:16
717
原创 设计模式代码实战-组合模式
请你设计一个组合模式来管理这些部门和员工,实现对公司组织结构的统一操作。部门和员工都具有一个通用的接口,可以获取他们的名称以及展示公司组织结构。类似树形结构,能够通过树形结构获取树中所有节点的信息。所有节点都有实现相同的接口。它将对象组合成树状结构来表示“部分-整体”的层次关系。组合模式使得客户端可。小明所在的公司内部有多个部门,每个部门下可能有不同的子部门或者员工。以统⼀处理单个对象和对象的组合,⽽⽆需区分它们的具体类型。
2024-04-15 14:41:19
402
原创 设计模式代码实战-桥接模式
它通过将【抽象部分】与【实现部分】分离,使它们可以独⽴变化,从⽽达到降低系统耦合度的⽬的。桥接模式的主要⽬的是通过组合建⽴两个类之间的联系,⽽不是继承的⽅式。小明家有一个万能遥控器,能够支持多个品牌的电视。每个电视可以执行开机、关机和切换频道的操作,请你使用桥接模式模拟这个操作。,实现扩展功能的目的。
2024-04-14 14:19:58
574
原创 设计模式代码实战-外观模式
举个例⼦,假设你正在编写的⼀个模块⽤来处理⽂件读取、解析、存储,我们可以将这个过程拆成三部分,然后创建⼀个外观类,将⽂件系统操作、数据解析和存储操作封装在外观类中,为客户端提供⼀个简化的接⼝,如果后续需要修改⽂件处理的流程或替换底层⼦系统,也只需在外观类中进⾏调整。小明家的电源总开关控制了家里的三个设备:空调、台灯和电视机。每个设备都有独立的开关密码,分别用数字1、2和3表示。即输入1时,空调关闭,输入2时,台灯关闭,输入3时,电视机关闭,当输入为4时,表示要关闭所有设备。作者认为和代理模式类似,只是。
2024-04-14 13:37:15
509
原创 设计模式代码实战-装饰者模式
小明喜欢品尝不同口味的咖啡,他发现每种咖啡都可以加入不同的调料,比如牛奶、糖和巧克力。他决定使用装饰者模式制作自己喜欢的咖啡。
2024-04-13 13:17:34
444
原创 设计模式代码实战-代理模式
小明想要购买一套房子,他决定寻求一家房屋中介来帮助他找到一个面积超过100平方米的房子,只有符合条件的房子才会被传递给小明查看。前后添加一些自己的逻辑,避免修改真实对象的代码。代理模式是⼀种结构型设计模式,⽤于。,通过代理对象,可以在访问。
2024-04-13 12:52:16
680
原创 设计模式代码实战-适配器模式
小明购买了一台新电脑,该电脑使用 TypeC 接口,他已经有了一个USB接口的充电器和数据线,为了确保新电脑可以使用现有的USB接口充电器和数据线,他购买了一个TypeC到USB的扩展坞。请你使用适配器模式设计并实现这个扩展坞系统,确保小明的新电脑既可以通过扩展坞使用现有的USB接口充电线和数据线,也可以使用TypeC接口充电。在调用方和被调用方之间,加个中间者(适配器)
2024-04-12 16:19:32
356
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人