布隆过滤器(Bloom Filter)

Jankeyfu

如何判断一个数是否在某个集合中,我们最简单的方式是遍历集合判断是否存在这样一个元素,更高级一点的方式是使用哈希表,可以以 O(1) 的时间复杂度判断一个元素是否在集合中,但是当数据量达到亿级别的时候,再采用这种方式就会出现问题,那IPV4来说,现有ip数量为 256^4个(假设每一个不同的都算),以 map 存储的话,假如key是字符串,占用15字节,val是布尔型1个字节,一个k-v 占16个字节,至少也得占用2^36个字节,折算下来就是 2^36/1024/1024/1024 = 2^6 = 64G,这么大内存肯定是放不下的,因此需要一种特殊的算法来进行处理,接下来所要介绍的算法就是解决大数据下,元素是否存在于集合中这么一个问题的。

Sync.Pool 对象重用利器

Jankeyfu

最近在看 zap 相关的源码,里面用到了很多的 sync.Pool 来优化内存使用,于是花了点时间研究了下。

sync.Pool 是一组可以单独保存和检索的临时对象,之所以称其保存的是临时对象是因为在下一次 GC 的时候,池中对象会被清理,且被清理时不会得到任何通知,因此池中不适合存放数据库连接等持久对象。sync.Pool 的主要用途是存储已分配内存但却不再使用的对象,以供后续重用此对象,减少内存分配产生的碎片垃圾回收,提升性能。

Prometheus + Grafana 配置系统监控

Jankeyfu

最近上线系统出了一些问题,但是上完线之后都没有发现,直到外围报出问题去定位才解决。因此想着是不是应该给系统加上监控和报警,以便能够在系统出现问题的第一时间去解决。于是去研究了一波prometheus + grafana相关的资料。

Linux 进阶命令

Jankeyfu

除了前面提到的基本的 linux 命令之外,还有一些功能强大的其它命令,学习这些命令,能够有效提升我们的开发效率。

Linux 基础命令

Jankeyfu

对于刚学习开发的同学,了解一些基本的Linux命令还是很有必要的,下面都是都是日常开发过程中使用的基本命令。

排序算法集合

Jankeyfu

排序算法可以说是算法中最基础的,但是一直以来都没有系统地去整理过,而且其中有些细节还是值得好好推敲的,因此把遇到过的排序算法进行整理了一下。目前整理地还不够全面,后续会继续慢慢完善。

刻意练习

Jankeyfu

最近公司部门总监弄了个书架,就去看了看,然后看中了这本《刻意练习》就借来看了看,感觉还不错就写个文章总结下里面的思想,希望对自己日后的学习工作有帮助。

LRU 缓存设计

Jankeyfu

LRU ( Least Recently Used ) :见名知意,即最近最少使用,这是一种常见的缓存策略,当缓存数据超过缓存容量时,将最近最少使用的数据项从缓存中去除以便能够存储新的数据。

Golang Reflect基础篇

Jankeyfu

套用维基百科的解释来说,反射就是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。Go语言和很多语言一样,支持反射操作,接下来就一起学习下,反射在Go语言中是怎么使用的。

MySQL EXPLAIN

Jankeyfu

在日常开发工作中,你是否经常遇到自己写的sql执行时间过长影响系统性能的问题却无从下手?这时候你就需要一个工具,这就是EXPLAIN命令,它将全面分析我们所编写的sql语句,包括表的查询顺序,索引的使用情况以及预估的涉及数据量大小等等,接下来我们就一起来探索一下,如何分析我们写的sql语句的性能,以便写出更优,执行速度更快的sql吧。