Skip to content

Commit 8ca9380

Browse files
20241129
1 parent 303ecdb commit 8ca9380

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

_posts/2023-09-07-note-from-work.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ pin: false
2121

2222
7. `.gitignore` 是在文件从工作区被 **add** 到暂存区时判断是否要被忽略,对于已经在暂存区的文件,不作判断。
2323

24+
## 限流算法
25+
1. 固定窗口:借助 Redis 的 String 数据结构,每次请求 value 自增,并设置过期时间
26+
2. 滑动窗口:借助 Redis 的 Zset 数据结构,以时间戳作为 score,每次请求使用 Zcount 查找窗口内的成员数量
27+
3. 漏桶:记录上次请求时间戳、当前剩余水量和容量,每次请求计算当前剩余水量减去时间差乘以每秒处理数,判断是否小于容量,是则放行并增加水量,不是则限流
28+
4. 令牌桶:记录上次请求时间戳、当前令牌桶数量和容量,每次请求计算当前令牌数量与时间差乘以每秒放入令牌数的和,如果当前令牌数大于零,则令牌数减一并放行,否则限流
29+
2430
## 数据结构
2531

2632
### 红黑树特性
@@ -70,7 +76,7 @@ https://juejin.cn/post/6844903621495111688
7076

7177
一般来说,在分布式系统中不可避免会出现分区,因此认为 P 总是成立。因此若要实现一致性(CP),那么当出现分区问题时,就需要舍弃不一致的节点,即牺牲可用性。同理,若要实现可用性(AP),那么当出现分区问题时,就无法保证一致性。
7278

73-
Nacos集群默认支持 AP 原则(即不支持数据一致性,支持服务注册的临时实例),但也可切换至基于 Raft的 CP 原则(支持服务注册的永久实例)。
79+
Nacos集群默认是基于 Distro 协议的 AP 原则(即不支持数据一致性,支持服务注册的临时实例),但也可切换至基于 Raft 的 CP 原则(支持服务注册的永久实例)。
7480

7581
临时实例和持久化实例的区别:
7682
- 持久化实例健康检查后会被标记为不健康,而临时实例会直接从列表中删除。

_posts/2024-02-27-go.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,12 @@ func main() {
264264

265265
- 协程:是一种用户态的轻量级线程,拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。或者说,协程能保留上一次调用时的状态。并且协程的默认占用内存远比其他语言的线程要少。goroutine:2KB(官方),线程:8MB(参考网络)。适合 I/O 密集型,且 I/O 请求比较耗时的任务。
266266

267+
Q: 为什么进程切换比线程切换代价大,效率更低?
268+
269+
A: 每次进程切换时,都会涉及页表的切换,切换页表这个操作本身是不太耗时的,但在切换之后,TLB(页表缓存/快表)就失效了,所以在进行地址转化时就需要重新去查找页表,这就造成了程序运行的效率低下。
270+
而同一个进程的线程之间是共用一个页表的,所以线程之间的切换是不需要切换页表的,因此线程切换不存在上述代价大,效率低的问题。
271+
272+
267273
## Go 和 Java 的区别
268274

269275
1. 语言特性:

0 commit comments

Comments
 (0)