Cwww3's Blog

Record what you think

0%

二分查找

等于目标元素的索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func getTarget(nums []int, target int) int {
left := 0
right := len(nums) - 1
for left <= right {
mid := left + (right-left)>>2
if nums[mid] == target {
return mid
} else if nums[mid] > target {
right = mid - 1
} else {
left = mid + 1
}
}
return -1
}
阅读全文 »

域名系统 DNS(domain name system)是因特网使用的命名系统,用于把便于人们记忆的机器名字(域名)转换成 ip 地址。

域名分级

image-20220910153820132

阅读全文 »

CDN 是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率

阅读全文 »

GO 1.3 标记清除

flowchart LR
    id1(start STW) --> Mark --> Sweep --> id2(stop SWT)
flowchart LR
    id1(start STW) --> Mark --> id2(stop SWT) --> Sweep

将清除操作置后,缩短了 SWT 时间

Go 1.5 三色标记法

flowchart LR
    id1(所有对象标记白色) --> id2(根对象标记灰色) --> id3(灰色对象标记为黑色, 灰色对象的子节点标记为灰色)
    id3 -->|还有灰色对象| id3
    id3 -->|没有灰色对象| id4(清除剩余的白色对象)

三色标记需要借助 STW,如果没有 STW,在标记过程中可能会出现 :

  • 灰色对象删除了子对象的引用(灰色丢失了白色)
  • 黑色对象引用了被删除的子对象(白色对象被挂在黑色下)

当上述两个条件同时满足,虽然黑色对象引用着白色对象,但是白色对象最终还是会被清除。

阅读全文 »

内存管理

TCMalloc

TCMalloc 为每个 Thread 预分配一块缓存,每个 Thread 在申请内存时首先会先从这个缓存区 ThreadCache 申请,且所有 ThreadCache 缓存区还共享一个叫 CentralCache 的中心缓存。这里假设目前 Golang 的内存管理用的是原生 TCMalloc 模式,那么线程与内存的关系将如图所示。

img

阅读全文 »