自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Rust的特征详解Trait

注意 dyn 不能单独作为特征对象的定义,例如下面的代码编译器会报错,原因是特征对象可以是任意实现了某个特征的类型,编译器在编译期不知道该类型的大小,不同的类型大小是不同的。另外一种情况,如果想要一个数组中存放不同的对象,但是这些对象都实现了相同的特征的话,那也得用到特征对象。如果要实现这种返回不同对象的话,就得使用如下的代码。也就是说作为返回值的时候,不能够返回两个不同类型的对象。如果想返回一个对象,这个对象实现了某一个特征。Rust中的特征和其他语言的接口非常相似。存放实现了相同特征的不同对象的数组。

2024-09-13 14:56:49 242

原创 Rust的所有权和借用

什么样子的数据才会有所有权Rust中数据可以分为基本类型和非基本类型。可以通过以下两个方面来理解这些东西的所有权。就不会发生所有权的转化。也就是说所有权是针对于堆上分配的来说的。所有权转移是怎么样的每一个变量都是有作用域的。并且在离开这个作用域的时候,会调用Drop方法来释放这个变量所指代的内存。那么在这个作用域中,如果内存的所属权从一个变量转移到了另外一个变量。那就是发生了所有权的转移。所以,这也得出了以下的先决条件。这三条是所有权的规则。那在实际发生所有权转移的时候,内存中发生了什么事情呢。

2024-09-12 16:33:21 804 5

原创 Rust模式匹配

这段代码会报错,因为s的所有权转移到了_s上面,但是如果不用_s而是使用_的话,就不会报错了。当我们需要获取到这个T的时候,就可以用到模式绑定的语法特性。这个if let是只用于匹配match中单一的某一种类型的时候用的。在rust模式匹配中,单纯的下划线和下划线开头的变量有什么区别呢?上面这种情况汇总,if是不能解构出i的值的,只能是一个确定的值。每一个分支的最后一句话必须是一个语句,代表要返回的东西。在这个代码中,Option中的T被绑定到了i上面。在和这个例子中,所有分支的返回值类型都是相同的。

2024-09-12 14:49:47 175

原创 Rust泛型

我发现Rust的泛型的一个特性,就是它可以约束参数的类型,比Java更加严格。这里面notify2这句代码会报错。

2024-09-09 11:56:04 240

原创 Rust泛型

在 Rust 中,如果你想编写一个方法,将结构体中某个字段的所有权转移出去,你不可以使用 &mut self 作为参数,因为 &mut self 是一个可变借用,而不是所有权的转移。为了转移所有权,你需要使用 self 作为方法的接收者。在这段代码中为什么value函数要返回val的引用呢?不返回引用换句话说,就是要把val的所有权给转移出去。在这个代码中,val的所有权被转移了。那么要实现这一点要怎么做呢?可不可以不返回引用。

2024-09-06 16:21:46 253

原创 Rust中的方法和关联函数

只要在 impl 块中的都叫 associated functions,其中,有 self 参数的是 methods。Rust中跟struct有关的函数都叫关联函数。如果这个关联函数第一个参数是self的话,那么这个函数就是方法。可以看出,对于一个方法来说,第一个参数的类型很重要。

2024-09-06 15:46:28 288

原创 Rust中的match和模式匹配和解构

也就是说如果match匹配里面只想关注其中一个分支的话,那么就可以简写为上面这种形式。如果给age赋值给None,那么就不会匹配成功。就会进入else分支。这段代码的上半部分,我认为是既用到了解构,又用到了模式匹配。并且有人觉得这种等效的写法是没有意义的,其实是有意义的。所以if let语法也可以看成是一种简写。是把这两合并到了一起。这里的这种语法就是·

2024-09-05 11:17:31 341

原创 Go语言syscall.Mmap和unix.MmapPtr函数

go语言mmap机制

2024-08-19 10:39:04 408 1

原创 【计算机网络】TCP全连接队列和半连接队列

在内核中维护了两个队列,全连接队列,半连接队列。他们在下图中表示。可以看到在收到客户端的SYN包之后,就会将这个socket放入半连接队列。在服务端收到最后一个ack的时候,放入全连接队列。

2024-02-22 09:37:08 415 1

原创 为什么epoll需要将socket设置为非阻塞

clientfd和listenfd设置为非阻塞的行为

2024-02-20 10:57:06 1128

原创 水平触发和边缘触发

为什么要使用非阻塞的socket?当多个进程监听同一个fd的时候,如果这个fd发生了三次握手,建立了连接,那么所有的进程都会收到通知。但是只有一个进程能够read到东西。如果此时不使用非阻塞的socket的话,那么一不小心就会阻塞进程了。

2024-02-18 11:54:54 142

原创 关于阻塞与非阻塞fd,和select的阻塞与非阻塞

io多路复用,阻塞,非阻塞

2024-02-18 11:35:09 229

原创 6.s081 lab1

6.s081 操作系统

2023-02-06 15:09:03 188

原创 关于RESTful风格的一些思考

REST风格和面向过程面向对象的设计方式有什么区别?从更高的层次上看,他们是抽象的层次或者说是角度不同。REST重点是抽象资源。面向过程编程时,为什么要以算法和处理过程为中心,输入数据,输出结果?当然是为了符合计算机世界中主流的交互方式。

2022-12-02 11:48:31 121

原创 go语言应该用指针还是值

go语言方法,函数究竟要用值还是指针?

2022-09-18 11:36:22 655

原创 Kryo序列化

register方法究竟啥用?刚开始使用的时候根本不知道这玩意啥用。原来必须要配合kryo.writeClassAndObject(output,obj);一起使用才行。单独注册但是如果使用kryo.writeObject(output, obj);那么是没用的。

2021-08-20 11:27:43 152

原创 tcp,http队头阻塞

这里有两种队头阻塞,是不一样的。tcp 队头阻塞TCP数据包是有序传输,中间一个数据包丢失,会等待该数据包重传,造成后面的数据包的阻塞。http队头阻塞http1.x采用长连接(Connection:keep-alive),可以在一个TCP请求上,发送多个http请求。有非管道化和管道化,两种方式。非管道化,完全串行执行,请求->响应->请求->响应…,后一个请求必须在前一个响应之后发送。管道化,请求可以并行发出,但是响应必须串行返回。后一个响应必须在前一个响应之后。

2021-07-29 10:13:59 663

原创 Leetcode 17.电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。解法一class Solution { public List<String> ret = new ArrayList<>(); public static Map<Character, String> phoneMap = new HashMap<Character

2021-06-28 12:42:11 88

原创 Leetcode合并区间

合并区间以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].解法:可以将给定的intervals数组中的数字..

2021-06-25 21:32:29 165

原创 静态代理与动态代理

本文不讲概念,主要讲代码实现。静态代理从 JVM 层面来说, 静态代理在编译时就将接口、实现类、代理类这些都变成了一个个实际的 class 文件。1.定义发送短信的接口// 定义一个必须要去实现的接口public interface SmsService { String send(String message);}2.实现发送短信的接口public class SmsServiceImpl implements SmsService { public String s

2021-06-23 11:32:56 143

原创 枚举与单例模式

枚举枚举的用法:enum Weekday { MON("1",1){ @Override public String toString() { return super.toString(); } // 注意这里重写了 @Override public boolean isOrdered() { return true; } },

2021-06-23 10:39:06 257

原创 快速幂算法思路

这里写自定义目录标题的的欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入的的欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何

2021-06-16 11:45:56 230

原创 gethash的实现

geohash算法介绍首先得到某一个点的经度和纬度(比如说 34.1° , 115° ),这个是能够精确得到的。然后,先从经度开始判断。比如说经度115 > (-180 和 180 的中间值)0° ,所以生成1,然后继续切分 (在剩下的 0 - 180)之间。在90的右边,继续生成 1,就这样不断地向下切分。得到一个二进制串,比如说01000111001… 当然可以无限切分。经度也是一样。然后按照经度为偶数位,纬度为奇数位进行合并。再用base32 编码进行编码。最后得到一串字符串。注意事

2020-11-26 16:43:11 981

原创 布隆过滤器基本使用

布隆过滤器基本原理:​ 原理就是维护一个很大的位数组。这个位数组的大小直接关系了最后判断的结果是否精确。确定好位数组之后,在确定几个hash函数。当添加一个值的时候,将这个值来进行hash运算,得到的结果对数组长度取余。并标记数组为1 。代表访问过。这样的话,如果判断一个元素是否存在,就按照上面的方法进行hash,如果有一个hash函数对应的数组位置上没有为1 ,那么这个元素一定不存在,如果所有hash的位置上都为1,也有可能 不存在,因为是别的元素放上去的1。所以还是有误差的。只不过这个误差可

2020-11-26 15:46:38 360

转载 SQL窗口函数详解

1.窗口函数语法<窗口函数>over(partitionby<用于分组的列名>orderby<用于排序的列名>)<窗口函数>的位置,可以放以下两种函数:1) 专用窗口函数,比如rank, dense_rank, row_number等2) 聚合函数,如sum. av...

2020-04-04 18:07:14 304

空空如也

空空如也

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

TA关注的人

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