摘要:
VScode配置 1. 开发 1. Ctrl + P:显示搜索栏以搜索文件 (Mac: Cmd + P) 我们经常在多个文件进行切换,这个快捷键可以帮助我们快速找到我们想到的文件。 2. Ctrl + Shift + P:显示命令面板 (Mac: Cmd + Shift + P) 这个快捷键显示可以 阅读全文
摘要:
总览: 概述: 一个可执行文件是存放在磁盘中的可执行文件有个程序头表的区域 程序头表:描述了可执行文件的区域与虚拟空间的一个区域之间的映射关系 可执行文件装入系统执行时,会生成一个进程,进程的每一个vm_area_struct的节点描述了虚拟地址空间的一个区域 通过程序头表,建立了可执行文件的区域和 阅读全文
摘要:
作者:萧萧 链接:https://www.zhihu.com/question/19732473/answer/241673170 来源:知乎 IO 概念区分 四个相关概念: 同步(Synchronous) 异步( Asynchronous) 阻塞( Blocking ) 非阻塞( Nonblock 阅读全文
摘要:
快速排序 func sortArray(nums []int) []int { var quick_sort func(nums []int,l,r int) quick_sort=func(nums []int,l,r int){ if l>=r{ return } //这x取l、r、(l+r)> 阅读全文
摘要:
CAS机制 CAS(Compare and Swap)是乐观锁思想的一种典型实现 乐观锁与悲观锁 悲观锁: 悲观锁更新的方式认为:在更新数据的时候大概率会有其他线程去争夺共享资源,所以悲观锁的做法是:第一个获取资源的线程会将资源锁定起来,其他没争夺到资源的线程只能进入阻塞队列,等第一个获取资源的线程 阅读全文
摘要:
Redis 的 zset 是一个复合结构,一方面它需要一个 hash 结构来存储 value 和 score 的对应关系,另一方面需要提供按照 score 来排序的功能,还需要能够指定 score 的范围来获取 value 列表的功能,这就需要另外一个结构「跳跃列表」。 zset 的内部实现是一个 阅读全文
摘要:
sync.Map 众所周知,golang的map只读是线程安全的,同时写线程不安全,虽然加锁可以解决并发写的问题,但是加锁往往会有效率问题,为了提升效率,官方在go的1.9版本推出了sync.Map。 sync.map 是线程安全的,读取,插入,删除也都保持着常数级的时间复杂度。 sync.map 阅读全文
摘要:
Redis-HyperLoglog 概览 HyperLogLog作为一个实现基数统计的高效数据结构,被用在计算日活数据等应用领域,每个键占用的内容都是12k,但因为不存储实际的数据,因此可以统计2^64个值。 关于 Redis HyperLogLog 在说明 HyperLogLog 之前,我们需要先 阅读全文
摘要:
golang实现hashmap 思路:数组+链表->HashMap 先看一下go里的map是怎么实现的 go实现map采用拉链法的实现,如下图所示,键值对中的键会经过一个哈希函数,哈希函数会帮我们找到一个桶,对应我们用数组加链表的实现方式,就是映射到数组数组的一个位置,若该位置已经有数据了,那么就会 阅读全文
摘要:
golang采用三色标记法进行垃圾清理 GC过程分为标记过程和清理过程 产生错误的情况: 黑色对象引用白色对象 灰色对象到白色对象的引用被破坏 破坏这两个条件之一就可以避免错误情况的出现 可能的解决方法: 整个过程STW,浪费资源,且对用户程序影响较大,由此引入了屏障机制; 插入屏障解决的是第一种情 阅读全文