File tree Expand file tree Collapse file tree 2 files changed +13
-1
lines changed Expand file tree Collapse file tree 2 files changed +13
-1
lines changed Original file line number Diff line number Diff line change @@ -21,6 +21,12 @@ pin: false
2121
22227 . ` .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- 持久化实例健康检查后会被标记为不健康,而临时实例会直接从列表中删除。
Original file line number Diff line number Diff 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
2692751 . 语言特性:
You can’t perform that action at this time.
0 commit comments