自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 rust 初探 -- 枚举和模式匹配

【代码】rust 初探 -- 枚举和模式匹配。

2024-07-24 18:21:28 168

原创 rust 初探 -- struct

方法和函数类似:fn 关键字、名称、参数、返回值方法和函数不同之处:方法是在 struct 的上下文中定义第一个参数是 self,表示方法被调用的 struct 实例每个 struct 可以有多个 impl// impl 声明块,在块里面定义方法// 上下文// self 会自动推断为 Rectangle// 可以是 &self,也可以获得其所有权或可变借用// 这样会有更好的代码组织width: 20,println!println!("{:#?}", rec);

2024-07-24 11:27:32 221

原创 rust 初探 -- 切片

rust 切片,不改变所有权

2024-07-24 10:28:46 142

原创 rust 初探 -- 引用和借用

在 rust 中,编译器可保证引用永远都不是悬空引用:如果你引用了某些数据,编译器会保证在引用离开作用域之前数据不会离开作用域。:一个指针引用了内存中的某个地址,而这块内存可能已经释放并分配给其他人使用了。如果需要改变借用的变量,需要将其定义为可变的,否则会报错。定义:把引用作为函数参数这个行为就叫借用。

2024-07-09 18:44:34 360

原创 rust 初探 -- 所有权

所有程序在运行时都必须管理它们使用计算机内存的方式有些语言有垃圾回收机制,在程序运行时,它们会不断地寻找不再使用的内存在其他语言中,程序员必须显式地分配和释放内存rust 采用了第三种方式:内存是通过一个所有权系统来管理的,其中包含一组编译器在编译时检查的规则当程序运行时,所有权特性不会减慢程序的运行速度。

2024-07-09 09:44:28 1010

原创 rust 初探 -- 通用编程概念

复合类型可以将多个值放到一个类型里面,rust 中提供了两种基础的复合类型:元组(Tuple),数组。使用索引访问即可,如果访问的索引超过了数组的范围,编译不会通过,运行也会报错。可以使用模式匹配来解构一个 Tuple 来获取元素的值。一个标量类型代表一个单个的值。

2024-07-04 17:49:01 643

原创 rust 初探 -- Hello Cargo

基本内容如下,package 下包含项目名、项目版本、作者、rust 版本。dependencies 是项目的依赖项。

2024-07-04 11:50:14 223

原创 rust 初探 -- 安装和配置

因为我是在自己的 mac 上面安装使用,这里主要介绍下 mac 和 linux 上的操作方法,两者几乎一致。

2024-07-02 10:38:28 192

原创 Go 的并发机制(4)

应该以通信作为手段来共享内存” 的最直接和最重要的体现: channel。它提供了一种机制,既可以同步两个并发执行的函数,也可以让这两个函数通过相互传递特定类型的值来通信。

2024-06-12 17:02:25 596

原创 Go 的并发机制(3)

(之前是for 循环的变量只创建一次,在每次循环的时候都会更新,而闭包在访问 name 的时候实际都访问的是同一个内存地址,所以最终打印都是同一个值。Go 运行时系统对 go 语句中的函数的执行时并发的,更确切地说,当 go 语句执行的时候,其中的 go 函数会被单独放入一个 goroutine 中。调用表达式所表达的就是针对函数或方法的调用,其中的函数可以是命名的,也可以是匿名的。一旦 main 函数执行结束,就意味着 Go 程序运行的结束,但这个时候运行 go 函数的 G 可能还没来得及执行。

2024-06-06 18:18:43 743

原创 【分布式协议与算法】一致哈希算法

问题:节点数量从3变成4,那么之前的hash(KEY)%3=1,就变成了hash(KEY)%4=0。所以这时候再查询,KEY对应的数据,存储在节点A上,而不是节点B上。增加一个节点:受影响的数据仅仅是,会寻址到新节点和前一节点之间的数据,其它数据也不会受到影响。一个节点故障:只影响寻址到节点B和节点C之间的数据,寻址到其他哈希环空间的数据不会受到影响。然后,从这个位置沿着哈希环顺时针“行走”,遇到的第一节点就是 key 对应的节点。解决方案:迁移数据,3节点增加一个节点,需要迁移75%的数据。

2024-06-04 17:54:44 150

原创 【分布式协议与算法】Raft

1.跟随者在等待领导者心跳信息超时后,推举自己成为候选人时,会增加自己的任期号2.如果一个服务器节点,发现自己的任期编号比其他节点小,那么他会更新自己的编号到较大的编号值3.如果一个候选者或者领导者,发现自己的任期编号比其他节点小,那么他会立即恢复成跟随者状态4.如果一个节点接收到一个包含较小任期编号的请求,那么他会直接拒绝这个请求。

2024-06-04 17:11:59 741

原创 Go 的并发机制(2)

两级线程模型中的一部分调度任务会由操作系统内核之外的程序承担,在 Go 语言中,调度器就负责这一部分调度任务,调度的主要对象就是 M、P 和 G 的实例。在 Go 的线程实现模型中,P 起到承上启下的重要作用,P最大数量的变更就意味着要改变 G 运行的上下文环境,也直接影响 Go 程序的并发性能。(1)除了本地 P 还有非空闲的 P,因为空闲的 P 的可运行 G 队列必定为空,如果除了本地 P 之外的所有 P 都是空闲的,就没必要去偷了。同样的,针对系统监测任务,也需要先暂停,然后再执行串行运行时任务。

2024-06-03 18:23:34 967

原创 【协议和算法篇】Paxos

Basic Paxos是通过二阶段提交的方式来达成共识的除了共识Basic Paxos还实现了容错,在少于一半的节点出现故障时,集群也能正常工作(大多数)提案编号的大小代表着优先级:a. 准备阶段,接受者不再接受小于等于已经响应的准备请求的提案编号b.接受阶段,接受者不再接受小于已经响应的准备请求的提案编号。

2024-05-31 11:13:27 590

原创 【分布式协议与算法】理论篇

如何在可能有误导信息的情况下,采用合适的通讯机制,让多个将军达成共识,制定一致性的作战计划?

2024-05-31 11:08:45 666

原创 Go 的并发机制(1)

一般来说,创建一个 M,都是因为没有足够的 M 来关联 P 并运行其中可运行的 G。不过,在运行时系统执行系统监控或者垃圾回收等任务的时候,也会导致 M 的创建。因为操作系统内核对进程的虚拟内存的布局控制以及大小限制,一般难以共存如此量级的线程。本节,我们一直是将实现和操纵 Go 的线程实现模型的内部程序笼统地称为“运行时系统”。系统停止 M 的时候,会把它放入调度器的空闲 M 列表(运行时系统会优先从这个列表获取)Go 其实时在操作系统提供的内核线程之上,搭建了一个特有的两级线程模型。

2024-05-31 10:56:48 938

原创 【Go语音核心编程】-- 闭包

阅读《Go语音核心编程》一书的时候,看到闭包这个概念,觉得文中讲解的不是很容易理解。因此,想自己结合网上可以查找到的资料,对其进行一次梳理。

2024-05-11 18:29:59 201 1

原创 蓄水池抽样算法

蓄水池抽样算法算法简介基本原理算法正确性证明算法的实现运行结果如下算法的局限性算法简介蓄水池抽样算法是随机算法的一种,用来从 N 个样本中随机选择 m 个样本,其中 N 非常大(以至于 N 个样本不能同时放入内存),且 N 是一个未知数。请问如何在只遍历一遍数据(O(N))的情况下,能够随机选取出m个不重复的数据。综上,可以提炼出以下三点:数据流长度N很大且不可知,所以不能一次性存入内存;时间复杂度为O(N);随机选取m个数,每个数被选中的概率为m/N;第1点限制了不能直接取N内的m个随机

2021-05-19 20:35:36 168

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除