摘要: CAS机制 CAS(Compare and Swap)是乐观锁思想的一种典型实现 乐观锁与悲观锁 悲观锁: 悲观锁更新的方式认为:在更新数据的时候大概率会有其他线程去争夺共享资源,所以悲观锁的做法是:第一个获取资源的线程会将资源锁定起来,其他没争夺到资源的线程只能进入阻塞队列,等第一个获取资源的线程 阅读全文
posted @ 2022-11-20 21:58 XiaojunW 阅读(31) 评论(0) 推荐(0) 编辑
摘要: Redis 的 zset 是一个复合结构,一方面它需要一个 hash 结构来存储 value 和 score 的对应关系,另一方面需要提供按照 score 来排序的功能,还需要能够指定 score 的范围来获取 value 列表的功能,这就需要另外一个结构「跳跃列表」。 zset 的内部实现是一个 阅读全文
posted @ 2022-11-20 21:45 XiaojunW 阅读(76) 评论(0) 推荐(0) 编辑
摘要: sync.Map 众所周知,golang的map只读是线程安全的,同时写线程不安全,虽然加锁可以解决并发写的问题,但是加锁往往会有效率问题,为了提升效率,官方在go的1.9版本推出了sync.Map。 sync.map 是线程安全的,读取,插入,删除也都保持着常数级的时间复杂度。 sync.map 阅读全文
posted @ 2022-11-20 21:25 XiaojunW 阅读(149) 评论(0) 推荐(0) 编辑
摘要: Redis-HyperLoglog 概览 HyperLogLog作为一个实现基数统计的高效数据结构,被用在计算日活数据等应用领域,每个键占用的内容都是12k,但因为不存储实际的数据,因此可以统计2^64个值。 关于 Redis HyperLogLog 在说明 HyperLogLog 之前,我们需要先 阅读全文
posted @ 2022-11-20 21:23 XiaojunW 阅读(110) 评论(0) 推荐(0) 编辑
摘要: golang实现hashmap 思路:数组+链表->HashMap 先看一下go里的map是怎么实现的 go实现map采用拉链法的实现,如下图所示,键值对中的键会经过一个哈希函数,哈希函数会帮我们找到一个桶,对应我们用数组加链表的实现方式,就是映射到数组数组的一个位置,若该位置已经有数据了,那么就会 阅读全文
posted @ 2022-11-20 21:19 XiaojunW 阅读(220) 评论(0) 推荐(0) 编辑
摘要: golang采用三色标记法进行垃圾清理 GC过程分为标记过程和清理过程 产生错误的情况: 黑色对象引用白色对象 灰色对象到白色对象的引用被破坏 破坏这两个条件之一就可以避免错误情况的出现 可能的解决方法: 整个过程STW,浪费资源,且对用户程序影响较大,由此引入了屏障机制; 插入屏障解决的是第一种情 阅读全文
posted @ 2022-11-20 21:18 XiaojunW 阅读(76) 评论(0) 推荐(0) 编辑
摘要: Go-Netpoller模型 Go netpoll 核心 Go netpoll 通过在底层对 epoll/kqueue/iocp 的封装,从而实现了使用同步编程模式达到异步执行的效果。总结来说,所有的网络操作都以网络描述符 netFD 为中心实现。netFD 与底层 PollDesc 结构绑定,当在 阅读全文
posted @ 2022-11-20 19:20 XiaojunW 阅读(124) 评论(0) 推荐(0) 编辑
摘要: Defer 主要应用场景: 资源释放 流程控制 异常处理 三个行为规则: 延迟函数的参数在defer语句出现之时就已经确定了 先出现的defer最后执行 延迟参数可能操作主函数的具名返回值 关键在于理解return是分为两部的,第一步确定ret的值,再return 原理: 每个_defer实例实际上 阅读全文
posted @ 2022-11-20 19:16 XiaojunW 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 编译过程: 编译前端 词法分析与语法分析 类型检查(别的语言中的语义分析,这时候有语法错误才会被找出来) 编译后端 中间代码生成 机器码生成 我们一一来看各个过程都做了什么事 1. 词法分析与语法分析 词法分析 将源代码翻译成token 语法分析 将token序列变成抽象语法树(AST) 所谓的语法 阅读全文
posted @ 2022-11-20 18:45 XiaojunW 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 拥塞的指证 超时 拥塞 收到三个冗余的ACK 轻微拥塞 发送方如何控制向网络中发送的速率 发送方在对方未经确认的情况下,可以向网络中发送多少字节:min(发送方拥塞窗口大小,接收方接收窗口的大小) 以reno算法为例介绍: 超时情况与收到三个冗余ACK的情况对于拥塞窗口大小设置的策略是不同,超时情况 阅读全文
posted @ 2022-11-20 17:49 XiaojunW 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 前言 选的腾讯的云服务器,非双11,当时60多一年,还挺划算的,系统选的 centos 7.9-docker版(已经预装docker了) 安装 打开VSCode软件,点击最左侧活动栏内的 “扩展” 小图标,然后搜索 Remote SSH 并安装即可。安装完成后在 “扩展” 的下方会多出一个类似电脑屏 阅读全文
posted @ 2022-11-20 17:12 XiaojunW 阅读(264) 评论(0) 推荐(0) 编辑
摘要: github ssh 或者 ssh连接云服务器都需要进行ssh配置 首先都会cd 到~/.ssh目录下,目录下有下述几个文件 ├── config #设置ssh ├── id_rsa # 服务器上经过rsa算法生成的私钥,与公钥是一对的密钥对,用于连接其他服务器用(在我这个mac上是用于连接gith 阅读全文
posted @ 2022-11-20 17:06 XiaojunW 阅读(322) 评论(0) 推荐(0) 编辑