202302

c

2023年2月26日
c
202302, c

类型声明 #

char** args;
char **ap, *args[max];
ap = args;

char *args[max]; args是个数组, 数组有max个元素, 元素类型是指针类型, 指向char类型元素

...

csapp

2023年2月26日
csapp
202302, csapp

信息的表示 # 整数 # 有无符号转换 # 二进制形式不变, 解释改变 运算规则 有符号转无符号: x < 0 -> 2^k + x; x >= 0 -> x 无符号转有符号: x <= 2^(k-1) - 1 -> x; x > 2^(k-1) - 1 -> x - 2^k 正负切换 # 取反+1 小类型转大类型 # int转long, 无符号补0, 有符号补符号位 大类型转小类型 # long转int, 有符号无符号都是以二进制表示运算, 二进制截断即mod(2^k)再解释为有符号或无符号int类型 整数运算 # 无符号数加法溢出: 2^k - (x + y) 判断溢出: sum < x 有符号数 正溢出: (x + y) - 2^k 负溢出: (x + y) + 2^k 判断溢出 x >=0, y>=0, sum < 0 x <=0, y<= 0, sum > 0 乘法 二进制乘法截断后再解释为无符号数或有符号数 乘法转换为+/-, 例如 x * 14 -> x<<4 - x<<1 除法 无符号数逻辑右移, 有符号数算数右移 向0舍入 有符号数 x<0 ? ...

go

2023年2月26日
go
202302, go

负数除法 # 余数的符号和被除数的符号一致 -5 % 3 = -2 5 % 3 = 2 -5 % -3 = -2 5 % -3 = 2

java

2023年2月26日
java
202302, java

num »>= 1 与 num »= 1 # num »>= 1 表示将 num 右移一位,并将结果赋值给 num。它使用的是“无符号右移位运算符”,即对于移出的最高位补0,因此它适用于处理无符号数,即大于或等于0的整数。 num »= 1 表示将 num 右移一位,并将结果赋值给 num。它使用的是“带符号右移位运算符”,即对于移出的最高位,用原来的符号位填充,因此它适用于处理带符号整数 假设 num 的初始值为 -8(二进制补码表示为 11111000),那么执行 num »>= 1 时,结果为 2147483644(二进制表示为 01111100),而执行 num »= 1 时,结果为 -4(二进制表示为 11111100)

python

2023年2月26日
python
202302, python

contextvar # Python 3.7 引入了 contextvars 模块,该模块提供了一种新的协程上下文变量机制,来代替之前的 threading.local()。相比于 threadlocal,contextvar 有以下区别: 范围:threadlocal 是在线程范围内存储变量,而 contextvar 是在协程范围内存储变量,因此 contextvar 可以在一个线程内有多个协程使用。 自动传播:contextvar 的值可以在协程之间自动传播。在协程中设置一个 contextvar 的值后,后续创建的协程都可以访问该值,即使它们在不同的异步任务中运行。 线程安全性:threadlocal 依赖于线程本地存储机制,不适用于异步编程,而 contextvar 可以安全地在异步程序中使用。 性能:contextvar 的性能通常优于 threadlocal,尤其在有大量协程的情况下,contextvar 的性能更卓越。 总之,contextvar 在协程的异步编程中更加安全、方便,具有更好的性能表现,并且可以跨越异步任务之间自动传播值,因此更适用于现代 Python 异步编程模式 import asyncio import contextvars client_addr_var = contextvars.ContextVar('client_addr') client_addr_var.set("niuniu") def render_goodbye(): # The address of the currently handled client can be accessed # without passing it explicitly to this function. client_addr = client_addr_var.get() return f'Good bye, client @ {client_addr}\n'. ...

rust

2023年2月26日
rust
202302, rust

struct 和 enum 类型 # 分支 # 项目组织结构 # 单元测试 # 一般放在和被测试代码相同的文件中, 使用条件编译,只在测试环境下编译 #[cfg(test)] mod tests { #[test] fn it_works() { assert_eq!(2 + 2, 4); } } 集成测试一般放在 tests 目录下,和 src 平行。 和单元测试不同,集成测试只能测试 crate 下的公开接口,编译时编译成单独的可执行文件。 关联类型与泛型 # 关联类型和泛型参数都可以用来定义trait中的未指定类型。但是它们的作用和使用方式是不同的。 泛型参数是在定义trait的时候就指定的,而关联类型是在实现trait的时候才会确定具体的类型。泛型参数的类型必须在trait定义中已经确定,而关联类型的类型可以在实现trait的时候才确定。这使得关联类型更加灵活,可以用于更多的场景。 此外,泛型参数用于指定方法参数和返回值的类型,而关联类型用于指定trait内部的类型关系。这两个特性的作用和使用方式是不同的。 在一些特定的情况下,使用泛型参数可以替代关联类型。比如,如果一个trait只有一个方法,那么可以直接使用泛型参数来指定方法参数和返回值的类型。但是在复杂的trait中,使用关联类型可以使得代码更加通用和灵活。 因此,虽然泛型参数和关联类型都可以用来定义trait中的未指定类型,但它们的作用和使用方式是不同的,需要根据具体的情况来选择使用哪种特性 clone和copy # 在 Rust 中,Copy 和 Clone 是用于实现数据类型复制的 trait。它们是 Rust 语言中的两个核心 trait,都位于标准库的预定义 trait 中。 Copy trait表示该类型的值可以通过简单的内存复制来进行赋值操作,而不需要转移所有权。因此,当一个Copy类型的值被赋值给另一个变量时,它的值会被完整地复制到新的变量中,并且原来的变量仍然可以使用它的值。Copy trait通常适用于基本数据类型(如整数和布尔值)以及简单的数据结构(如元组和结构体),并且不能手动实现该trait。 ...

tcp相关概念

2023年2月26日
tcp
202302, tcp

协议 #

ARP: ip换mac地址
RARP: mac地址换ip

socket #

本质是内核维护的读写缓冲区形成的伪文件,与管道类似,管道是本地进程间通信,socket用于网络

字节序 #


网络字节序采用大端方式,主机根据需要自行转换

...

Mysql With Hierarchical Data

2023年2月25日
system design
202302, mysql

像知乎这样的评论回复模式,数据库应该怎么设计比较好,考虑性能、可扩展性等? - HD SUPERMAN的回答 - 知乎 https://www.zhihu.com/question/38959595/answer/2200636383 https://www.mysqltutorial.org/mysql-adjacency-list-tree/ https://github.com/WAWLixiong/MultipleComments/blob/master/pom.xml