golang
文章平均质量分 55
冰释物语
C 开发工程师
展开
-
归并排序-Golang
归并排序golang实现原创 2022-07-24 10:59:37 · 571 阅读 · 2 评论 -
sync.map源码解析
golang浅谈sync.mapgo语言原生的map并不是线程安全的一种数据结果,如果想要达到安全则需要使用锁,如果map比较大,则加锁解锁代价相对比较大,常见的做法拆分map,使用key值hash的方式进行小规模的锁操作,前者性能影响较大,后者使用锁较多,容易出错go在1.9之后提供了sync.Map,一种并发安全的map数据结构操作方式跟常见的map大同小异,只是在遍历的时候操作不太一样func main() { var m sync.Map // 1. 写入 m.Store("te原创 2021-01-04 15:45:41 · 463 阅读 · 0 评论 -
Redis持久化机制
Redis常见持久化方式盖题RDB优点缺点AOFAOF 缓冲区文件同步策略AOF同步流程盖题Redis提供常见的两种数据持久化方式AOF和RDB方式,目的是在于防止进程退出之后造成数据丢失问题RDBRDB持久化方式是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化的过程一般分为手动持久化和自动触发持久化优点1、RDB是一个紧凑的二进制文件,代表Redis在某一个时间点的数据写照,非常适合备份和全量复制等场景。2、Redis加载RDB恢复数据远快于AOF方式。缺点1、RDB方式无法做原创 2020-10-18 22:10:50 · 182 阅读 · 0 评论 -
Redis常见五种数据对象详解
五种常见数据对象字符串对象列表对象哈希对象集合对象有序集合对象Redis中每个对象都有一个RedisObject结构表示,该结构具体如下:typedef struct redisObject { // 对象的类型,字符串/列表/集合/哈希表 unsigned type:4; // 未使用的两个位 unsigned notused:2; /* Not used */ // 编码的方式,Redis 为了节省空间,提供多种方式来保存一个数据 u原创 2020-08-30 10:56:16 · 224 阅读 · 0 评论 -
Redis与跳跃表
redis与跳跃表盖题跳跃表的基本思路skiplist数据结构简介盖题跳跃表是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的,跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找Redis使用跳跃表作为有序集合键的底层实现之一跳跃表的基本思路表处理的是有序的链表(一般是双向链表,下图未表示双向),如下:这个链表中,如果要搜索一个数,需要从头到尾比较每个元素是否匹配,直到找到匹配的数为止,即时间复杂度是 O(n)。同理,插入一个数并保持链表有序,原创 2020-08-09 21:12:53 · 204 阅读 · 0 评论 -
Go语言内存逃逸分析
go语言内存逃逸分析什么是逃逸逃逸分析过程指针逃逸动态类型逃逸逃逸常见情况如何避免总结什么是逃逸逃逸分析是编译器用于决定变量分配到堆上还是栈上的一种行为。函数的运行都是在栈上面运行的,在栈上面生命临时变量,分配内存,函数运行完毕之后,回收内存,每个函数的栈空间都是独立的,其他函数是无法进行访问,但是在默写情况下栈上面的数据需要在函数结束之后还能被访问,这时候就会设计到内存逃逸了,什么是逃逸,就是抓不住如果数据从栈上面逃逸,会跑到堆上面,栈上面的数据在函数结束的时候回自动回收,回收代价比较小,栈的原创 2020-08-06 17:36:47 · 1045 阅读 · 0 评论 -
Go语言GMP模型
前言线程的代价如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入帝国时代线程的代价使用过C++/Java的同学应该都知道在做服务端开发的时候,对于多线程的使用,繁琐程度,以及对于多线程情况下异常情况的分析,是何等头疼,如果线上流量过大,对于这种多线程的操作更是得慎重,当原创 2020-08-04 17:19:33 · 3915 阅读 · 0 评论 -
Go语言内存回收机制GC
前言文章有点长,如果是刚接触GC建议耐心看完所谓内存回收,便是指当前内存使用完毕,释放当前存储器,以供后续继续使用,如果没有进行及时的释放,则会造成内存泄漏常见的GC方式有如下三种引用计数:对每一个对象维护一个引用计数,当引用该对象的对象被销毁的时候,引用计数减1,当引用计数为0的时候,怎回收该对象,比如c++的shared_ptr优点 :对象可以很快的被回收,不会出现内存耗尽或达到某个阀值时才回收。缺点:不能很好的处理循环引用,而且实时维护引用计数,有也一定的代价。代表语言:Pytho原创 2020-07-16 17:37:02 · 2197 阅读 · 1 评论 -
Go语言Channel数据结构详解
golang channel数据结构详解不要通过共享内存来通信,而通过通信来共享内存\color{#00868B}{不要通过共享内存来通信,而通过通信来共享内存}不要通过共享内存来通信,而通过通信来共享内存channel的内存布局使用make的方式进行初始化,make函数会在堆上面进行分配一个runtime.hchan的数据结构,ch是存在于函数f栈上面的一个指针,指向堆上面的hchan数据结构func f() { ch := make(chan int) ...}至于为什么是原创 2020-07-14 16:04:21 · 2677 阅读 · 0 评论 -
go dial tcp 216.58.200.49:443: i/o timeout问题解决-proxy设置
在Go 1.13中,我们可以通过GOPROXY来控制代理,以及通过GOPRIVATE控制私有库不走代理。设置GOPROXY代理:go env -w GOPROXY=https://goproxy.cn,direct设置GOPRIVATE来跳过私有库,比如常用的Gitlab或Gitee,中间使用逗号分隔:go env -w GOPRIVATE=.gitlab.com,.gitee.com如果在运行go mod vendor时,提示Get https://sum.golang.org/look原创 2020-07-14 10:47:39 · 29047 阅读 · 3 评论 -
Go语言函数参数传递类型详解
go语言函数参数传递类型详解到底是值传递还是引用传递?什么是值传递什么是传引用(引用传递)到底是值传递还是引用传递?golang默认都是值传递引用,无论参数是指针还是普通参数传递,默认都是值拷贝传递什么是值传递函数传递的总是原来这个东西的一个副本,一副拷贝。比如我们传递一个int类型的参数,传递的其实是这个参数的一个副本;传递一个指针类型的参数,其实传递的是这个该指针的一份拷贝,而不是这个指针指向的值。在网上看了一篇帖子,自己实际操作了进行验证,以int类型的数据进行验证,代码如下func mo原创 2020-06-30 15:22:05 · 1710 阅读 · 0 评论 -
如何判断一个元素在亿级数据中是否存在?布隆过滤器
如何判断一个元素在亿级数据中是否存在?常规实现哈希函数布隆过滤器介绍布隆过滤器原理布隆过滤器添加元素布隆过滤器查询元素常规实现1、数组2、链表3、树、平衡二叉树4、Map(红黑树)5、哈希表上面的使用方式在结合常见的排序方式比如二分,可以快速的查找数据是否存在,但当集合数据元素非常大,比如1亿条,这个时候,数据结构问题就会凸显出来,数组,链表等 ,就会非常吃内存,内存的消耗会成指数级增长,最终达到瓶颈。对于哈希表,其实也是很占用内存,哈希表的常规做法是key值映射成一个8个字节的信息指纹,对于原创 2020-06-17 16:35:31 · 376 阅读 · 0 评论 -
Kafka分区分配策略-RangeAssignor、RoundRobinAssignor、StickyAssignor
按照Kafka默认的消费逻辑设定,一个分区只能被同一个消费组(ConsumerGroup)内的一个消费者消费。假设目前某消费组内只有一个消费者C0,订阅了一个topic,这个topic包含7个分区,也就是说这个消费者C0订阅了7个分区,参考下图(1)此时消费组内又加入了一个新的消费者C1,按照既定的逻辑需要将原来消费者C0的部分分区分配给消费者C1消费,情形上图(2),消费者C0和C1各自负责消费所分配到的分区,相互之间并无实质性的干扰。接着消费组内又加入了一个新的消费者C2,如此消费者C.原创 2020-06-15 15:35:25 · 460 阅读 · 0 评论 -
curl 命令详解(转载)
curl 命令详解(转载)常用参数详解参数 描述 -I/--head 只显示传输文档,经常用于测试连接本身 -o/--output 把输出写到该文件中,必须输入保存文件名 -O/--remote-name 把输出写到该文件中,保留远程文件的文件名 -F/--form 模拟表单提交 -s/--silent 静默模式,不输出任何东西 ...原创 2020-04-20 15:20:44 · 594 阅读 · 0 评论