工作上的原因,最近要实现一个LRU的内存管理器,于是研究了一下Memcached的实现做个笔记备忘,意外的发现其使用的LRU算法做了更新换代,从原先经典的LRU实现变成了所谓的分段LRU算法(Segmented LRU),感觉跟之前看过的Lua的三色GC算法有点类似:https://www.codedump.info/post/20210701-memcached/ #博客 #存储 #LRU
因为使用Markdown格式编写文档,时常需要引用外部文章。如果简单的在浏览器中拷贝文章URL,还需要自己修改成MD格式的引用格式。推荐一个叫“TabCopy”的chrome插件,安装之后在页面右键可以选择生成不同的URL引用格式:MD、HTML等等,看似很简单的功能,但是能节省很多零碎的时间。见:https://chrome.google.com/webstore/detail/tabcopy/micdllihgoppmejpecmkilggmaagfdmb/ #推荐 #生产力工具
Google
Tab Copy - Chrome Web Store
Quickly copy tabs to the clipboard in a variety of formats
旧金山大学制作的系列算法可视化交互动图,包括常见的堆、栈、队列等。学习算法数据结构的时候,如果能图示化的展现其变化过程,理解起来就会更顺畅,在学习B+Tree算法的时候,我就用过这里的演示来理解流程。 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html #推荐 #算法 #数据结构
#博客 #分布式 #Raft #etcd
之前对etcd raft的wal、快照部分理解的不够深入,导致一些问题理解的不到位,于是单独整理了一篇这部分的分析:
https://www.codedump.info/post/20210628-etcd-wal/
看完之后应该能回答这个问题:follower节点是在收到leader节点的日志广播之后,还是在日志达成一致之后,才将日志落盘到WAL的?为什么以及恢复流程是怎样的?
写完这篇博客之后,发现我已经写了5篇raft、etcd的文章了,其中第一篇是纯的raft原理篇,其余4篇都是结合etcd来分析其raft实现的。
我应该不用再写etcd的raft实现分析文章了吧 🙂 #flag
之前对etcd raft的wal、快照部分理解的不够深入,导致一些问题理解的不到位,于是单独整理了一篇这部分的分析:
https://www.codedump.info/post/20210628-etcd-wal/
看完之后应该能回答这个问题:follower节点是在收到leader节点的日志广播之后,还是在日志达成一致之后,才将日志落盘到WAL的?为什么以及恢复流程是怎样的?
写完这篇博客之后,发现我已经写了5篇raft、etcd的文章了,其中第一篇是纯的raft原理篇,其余4篇都是结合etcd来分析其raft实现的。
我应该不用再写etcd的raft实现分析文章了吧 🙂 #flag
codedump的网络日志
Etcd Raft库的日志存储 - codedump的网络日志
#推荐
DeepL是由德国一家AI创业公司的推出的翻译服务,主打使用人工智能、深度学习技术来进行翻译服务,支持 简体中文、英语、德语、法语、日语、西班牙语、意大利语、荷兰语及波兰语之间的翻译。
我自己尝试了一下这个翻译工具,将我博客的一篇中文博文翻译成英文,几乎不加修改就能比较顺畅了:
《如何阅读一份源代码?(2020年版)》 https://www.codedump.info/post/20200605-how-to-read-code-v2020/
《How to Read Code(En Version)》 https://www.codedump.info/post/20210215-how-to-read-code-en/
感觉对于技术类文章的翻译来说,这个工具的表现已经很好了。
Mac、Win桌面版可以免费下载,也有网页版本,但是免费版本有每次翻译的字数限制,文章长了需要自己多倒腾几次:https://www.deepl.com/translator
DeepL是由德国一家AI创业公司的推出的翻译服务,主打使用人工智能、深度学习技术来进行翻译服务,支持 简体中文、英语、德语、法语、日语、西班牙语、意大利语、荷兰语及波兰语之间的翻译。
我自己尝试了一下这个翻译工具,将我博客的一篇中文博文翻译成英文,几乎不加修改就能比较顺畅了:
《如何阅读一份源代码?(2020年版)》 https://www.codedump.info/post/20200605-how-to-read-code-v2020/
《How to Read Code(En Version)》 https://www.codedump.info/post/20210215-how-to-read-code-en/
感觉对于技术类文章的翻译来说,这个工具的表现已经很好了。
Mac、Win桌面版可以免费下载,也有网页版本,但是免费版本有每次翻译的字数限制,文章长了需要自己多倒腾几次:https://www.deepl.com/translator
codedump的网络日志
如何阅读一份源代码?(2020年版) - codedump的网络日志
#博客
因为博客里都是很硬的技术文章,于是想慢慢写一些非技术的文章,这是第一篇《选择的维度》:
https://www.codedump.info/post/20210803-choice-dimension/
简单介绍了做选择时的一些方法论,简而言之:做选择时要精简出最重要的几个维度以及划分维度的权重。
因为博客里都是很硬的技术文章,于是想慢慢写一些非技术的文章,这是第一篇《选择的维度》:
https://www.codedump.info/post/20210803-choice-dimension/
简单介绍了做选择时的一些方法论,简而言之:做选择时要精简出最重要的几个维度以及划分维度的权重。
#职场
跳槽时的薪水,由什么因素决定?
你自身的能力(水平、资源、学历等),肯定是决定因素之一,这已经是共识,不再多说。除此以外,跳槽的薪水,还取决于你当前工作的薪水,因为跳槽薪水还有一部分因素是“给你多少钱能让你离开现在的工作”。
水平能决定你是否满足这份工作的要求下限,而现有薪水能决定你在满足要求下限之后,拿到这份工作薪水范围的哪个点。
以一个例子来说明,假设一份工作的薪水范围是1W~2W。同样满足这个工作要求的两个人,一个人现有薪水8K,另一个人10K,假设至少都要涨薪5成才够跳槽吸引力,那么8K的人只需要给12K,而10K的人则需要15K了。讽刺的是,大部分情况下这两人的水平差距也许并没有8K和10K的差距,而仅仅由于上一份工作的薪水就能决定多少钱能挖的动ta了。
因此,跳槽时的薪水溢价,有相当一部分来源于“多少钱能让你离开现在的公司”。
当然,一份工作的吸引力,除了待遇还有别的维度,可以回看前面的文章《选择的维度》,在这里只谈论待遇这个维度。
跳槽时的薪水,由什么因素决定?
你自身的能力(水平、资源、学历等),肯定是决定因素之一,这已经是共识,不再多说。除此以外,跳槽的薪水,还取决于你当前工作的薪水,因为跳槽薪水还有一部分因素是“给你多少钱能让你离开现在的工作”。
水平能决定你是否满足这份工作的要求下限,而现有薪水能决定你在满足要求下限之后,拿到这份工作薪水范围的哪个点。
以一个例子来说明,假设一份工作的薪水范围是1W~2W。同样满足这个工作要求的两个人,一个人现有薪水8K,另一个人10K,假设至少都要涨薪5成才够跳槽吸引力,那么8K的人只需要给12K,而10K的人则需要15K了。讽刺的是,大部分情况下这两人的水平差距也许并没有8K和10K的差距,而仅仅由于上一份工作的薪水就能决定多少钱能挖的动ta了。
因此,跳槽时的薪水溢价,有相当一部分来源于“多少钱能让你离开现在的公司”。
当然,一份工作的吸引力,除了待遇还有别的维度,可以回看前面的文章《选择的维度》,在这里只谈论待遇这个维度。
#博客
上个月写过一篇memcached的文章,最近项目实现了cache库之后,发现很多细节当时理解的并不够细致,于是重新又写了一篇memcached的文章:
https://www.codedump.info/post/20210812-memcached/
这次将slab、分段LRU、读写操作中的锁、安全回收item、hash表的扩容操作等都讲到了,希望以后也不需要再写memcached的文章了。
总体感觉是实现一个多线程安全且高效的cache库还是有不少细节要考虑的,细节是魔鬼。
上个月写过一篇memcached的文章,最近项目实现了cache库之后,发现很多细节当时理解的并不够细致,于是重新又写了一篇memcached的文章:
https://www.codedump.info/post/20210812-memcached/
这次将slab、分段LRU、读写操作中的锁、安全回收item、hash表的扩容操作等都讲到了,希望以后也不需要再写memcached的文章了。
总体感觉是实现一个多线程安全且高效的cache库还是有不少细节要考虑的,细节是魔鬼。
codedump的网络日志
Memcached的存储原理解析(续) - codedump的网络日志
#文章推荐
JuiceFS创始人的一篇文章,很同意里面的一句话:“互联网的人口增长的红利结束了,但是数据增长的红利还很足,而且应该能持续很久,甚至不知道会不会有结束的那天。”。前者表现在内卷越来越严重了,后者原因是场景(AI、智能)、上网设备(车联网、物联网)越多越多了。
https://mp.weixin.qq.com/s/AQk7dd2g0MDzYMdwmjzL5g
JuiceFS创始人的一篇文章,很同意里面的一句话:“互联网的人口增长的红利结束了,但是数据增长的红利还很足,而且应该能持续很久,甚至不知道会不会有结束的那天。”。前者表现在内卷越来越严重了,后者原因是场景(AI、智能)、上网设备(车联网、物联网)越多越多了。
https://mp.weixin.qq.com/s/AQk7dd2g0MDzYMdwmjzL5g
Weixin Official Accounts Platform
在 23:56 分想起今天是加入 JuiceFS 四周年的日子
如题
#项目推荐
之前已经清楚了b-tree大体的算法思想,最近想找一个简洁的b-tree实现看看生产级都是怎么做的,发现一个不错的项目:https://github.com/madushadhanushka/simple-sqlite
看介绍,作者把sqlite2.5里b-tree相关的部分代码抽取出来了,我编译运行了一下用例都能正常跑,代码量不过几千行,就从这里入手开始吧。
按照sqlite官网上记载的发布历史,sqlite 2.5是2002年6月的版本了:
https://www.sqlite.org/changes.html
附带博客里整理过的B、B+Tree算法原理:
https://www.codedump.info/post/20200609-btree-1/
https://www.codedump.info/post/20200615-btree-2/
之前已经清楚了b-tree大体的算法思想,最近想找一个简洁的b-tree实现看看生产级都是怎么做的,发现一个不错的项目:https://github.com/madushadhanushka/simple-sqlite
看介绍,作者把sqlite2.5里b-tree相关的部分代码抽取出来了,我编译运行了一下用例都能正常跑,代码量不过几千行,就从这里入手开始吧。
按照sqlite官网上记载的发布历史,sqlite 2.5是2002年6月的版本了:
https://www.sqlite.org/changes.html
附带博客里整理过的B、B+Tree算法原理:
https://www.codedump.info/post/20200609-btree-1/
https://www.codedump.info/post/20200615-btree-2/
GitHub
GitHub - madushadhanushka/simple-sqlite: Code reading for sqlite backend
Code reading for sqlite backend. Contribute to madushadhanushka/simple-sqlite development by creating an account on GitHub.