工作上的原因,最近要实现一个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
#推荐
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.
#推荐
B站上纯纯甘的节目《浮生一日》是我每期都会看的节目,主题是每次采访跟踪一个不同行业素人的生活:
https://space.bilibili.com/110930331
最开始知道这个栏目是看了《国企外卖小哥的一天》,背景是这位小哥由于疫情原因失业,所以找了一份国企的工作;媳妇买P2P赔光了积蓄,赶上老人得病要治疗,所以晚上得出来兼职跑跑外卖。
里面有句话让我感动:“结婚时面对自己媳妇儿最漂亮的时候,你说我愿意和你同甘共苦,然后现在又开始责怪她,那当初又何必说这四个字呢?”
https://www.bilibili.com/video/BV1V54y1h7Zr
这个栏目里还有各色不同职业的人:程序员、投资者、早餐摊位主人...等等。
不同的职业,都有各自不同的生活轨道和选择。
油管上有同名频道:https://www.youtube.com/channel/UCIs3-LcOCdpiGve6yu1-Fug
B站上纯纯甘的节目《浮生一日》是我每期都会看的节目,主题是每次采访跟踪一个不同行业素人的生活:
https://space.bilibili.com/110930331
最开始知道这个栏目是看了《国企外卖小哥的一天》,背景是这位小哥由于疫情原因失业,所以找了一份国企的工作;媳妇买P2P赔光了积蓄,赶上老人得病要治疗,所以晚上得出来兼职跑跑外卖。
里面有句话让我感动:“结婚时面对自己媳妇儿最漂亮的时候,你说我愿意和你同甘共苦,然后现在又开始责怪她,那当初又何必说这四个字呢?”
https://www.bilibili.com/video/BV1V54y1h7Zr
这个栏目里还有各色不同职业的人:程序员、投资者、早餐摊位主人...等等。
不同的职业,都有各自不同的生活轨道和选择。
油管上有同名频道:https://www.youtube.com/channel/UCIs3-LcOCdpiGve6yu1-Fug
Bilibili
纯纯甘的个人空间-纯纯甘个人主页-哔哩哔哩视频
哔哩哔哩纯纯甘的个人空间,提供纯纯甘分享的视频、音频、文章、动态、收藏等内容,关注纯纯甘账号,第一时间了解UP主动态。记录不一样的生活,分享最真实的感受。
【浮生一日】每月25号更新。
商务 starrank27(请注明来意)
【浮生一日】每月25号更新。
商务 starrank27(请注明来意)
#可能是错的
人生没有“一蹴而就”这种事,好比软件设计里没有“银弹”:能解决一切的问题的神器。
以前某个工作干烦了,会羡慕另一个人或另一个公司的状态,其实换了工作蜜月期过后,又会面临各种新的问题。类似的,小时候会羡慕别人怎么样,真到了他那个程度,又会有新的烦恼,等等等等。
年轻时总会认为到了某个程度就能解决所有的烦恼,实际并不是这样的。
所以,不存在那么一个状态,你到了这个状态就没有任何烦恼;反倒是,一个阶段有这个阶段的问题和收益。就好比爬一座山,有那座山的风景还有阶梯,然后继续往下走。
除非死了,否则一辈子都会跟着各种问题。与其想着解决所有的问题,不如先调整心态,想想怎样和各种问题共存,在问题的夹缝里,找到自己的方向,做自己想做的事情。
以上结合自己经历和最近的思考有感而发,正好昨天看到了2014年世界杯贺炜解说西班牙与澳大利亚赛后总结的台词(向不太了解足球的同学交代一下背景:西班牙是2010年世界杯的冠军,而在2014年世界杯小组赛上前两场比赛都输了,这场比赛即便赢了澳洲也会在小组赛阶段被淘汰):
“人生当中成功只是一时的,失败却是主旋律,但是如何面对失败却把人分成了不同的样子。有的人会被失败击垮,有的人会不断爬起来继续向前,澳大利亚队是如此,西班牙队也是如此。我想真正的成熟应该并不是追求完美,而是直面自己的缺憾,这才是生活的本质。罗曼-罗兰说过:“这个世界上只有一种真正的英雄主义,那就是认清生活的真相并且仍然热爱它。”
这一段解说的视频版见:
https://www.bilibili.com/video/BV1cf4y1X7w2
接纳自己的不完美,直面缺憾,热爱生活。
人生没有“一蹴而就”这种事,好比软件设计里没有“银弹”:能解决一切的问题的神器。
以前某个工作干烦了,会羡慕另一个人或另一个公司的状态,其实换了工作蜜月期过后,又会面临各种新的问题。类似的,小时候会羡慕别人怎么样,真到了他那个程度,又会有新的烦恼,等等等等。
年轻时总会认为到了某个程度就能解决所有的烦恼,实际并不是这样的。
所以,不存在那么一个状态,你到了这个状态就没有任何烦恼;反倒是,一个阶段有这个阶段的问题和收益。就好比爬一座山,有那座山的风景还有阶梯,然后继续往下走。
除非死了,否则一辈子都会跟着各种问题。与其想着解决所有的问题,不如先调整心态,想想怎样和各种问题共存,在问题的夹缝里,找到自己的方向,做自己想做的事情。
以上结合自己经历和最近的思考有感而发,正好昨天看到了2014年世界杯贺炜解说西班牙与澳大利亚赛后总结的台词(向不太了解足球的同学交代一下背景:西班牙是2010年世界杯的冠军,而在2014年世界杯小组赛上前两场比赛都输了,这场比赛即便赢了澳洲也会在小组赛阶段被淘汰):
“人生当中成功只是一时的,失败却是主旋律,但是如何面对失败却把人分成了不同的样子。有的人会被失败击垮,有的人会不断爬起来继续向前,澳大利亚队是如此,西班牙队也是如此。我想真正的成熟应该并不是追求完美,而是直面自己的缺憾,这才是生活的本质。罗曼-罗兰说过:“这个世界上只有一种真正的英雄主义,那就是认清生活的真相并且仍然热爱它。”
这一段解说的视频版见:
https://www.bilibili.com/video/BV1cf4y1X7w2
接纳自己的不完美,直面缺憾,热爱生活。
Bilibili
贺炜经典解说词-完整无BGM版_哔哩哔哩_bilibili
pptv, 视频播放量 189315、弹幕量 146、点赞数 3902、投硬币枚数 1008、收藏人数 3875、转发人数 1660, 视频作者 Bernabeu__, 作者简介 ,相关视频:“男生减速带之贺炜解说篇”,贺炜诗意解说:“当阳光亲吻他的沃土,当狂风吹刮他的橡树,当上天召走他的所爱,他的心仍为克罗地亚打着节拍!”,2018俄罗斯世界杯克罗地亚颁奖仪式,贺炜经典解说#世界杯,贺炜经典解说经典用不过时!,好喜欢贺炜这段话,或许再无青春,【收藏向】贺炜老师足球解说金句大合集!只有对足球有着深深的…
#推荐
这次推荐投资人Naval Ravikant的书《Almanack of Naval Ravikant》,可以在线或者下载免费阅读:
https://www.navalmanack.com/almanack-of-naval-ravikant/table-of-contents
最早知道此人,是看到和菜头翻译的《如何不靠运气致富》(How to Get Rich (without getting lucky)):
https://mp.weixin.qq.com/s/TfhBCbr8-IoHyPKtB3hTlw
里面给了很多箴言式的建议,比如:
“你不会通过出租自己的时间而变得富有。”
“互联网极大拓展了一个人职业生涯的可能性。”
等等,风格有点像《穷查理宝典》这种充满智慧的书籍。而《Almanack of Naval Ravikant》一书,相当于把这些箴言式的建议,又给展开详细讨论了一下,还加上了作者其他的一些思考。
据说这本书的中文版就要出版了,网上能找到其他人翻译的中文版:
https://www.yuque.com/qingmiyang/naval
个人阅读下来的体验,看原版会更畅快一些。
这次推荐投资人Naval Ravikant的书《Almanack of Naval Ravikant》,可以在线或者下载免费阅读:
https://www.navalmanack.com/almanack-of-naval-ravikant/table-of-contents
最早知道此人,是看到和菜头翻译的《如何不靠运气致富》(How to Get Rich (without getting lucky)):
https://mp.weixin.qq.com/s/TfhBCbr8-IoHyPKtB3hTlw
里面给了很多箴言式的建议,比如:
“你不会通过出租自己的时间而变得富有。”
“互联网极大拓展了一个人职业生涯的可能性。”
等等,风格有点像《穷查理宝典》这种充满智慧的书籍。而《Almanack of Naval Ravikant》一书,相当于把这些箴言式的建议,又给展开详细讨论了一下,还加上了作者其他的一些思考。
据说这本书的中文版就要出版了,网上能找到其他人翻译的中文版:
https://www.yuque.com/qingmiyang/naval
个人阅读下来的体验,看原版会更畅快一些。
Almanack of Naval Ravikant
TABLE OF CONTENTS — Almanack of Naval Ravikant
IMPORTANT NOTES ON THIS BOOK (DISCLAIMER) FOREWORD ERIC’S NOTE (ABOUT THIS BOOK) TIMELINE OF NAVAL RAVIKANT NOW, HERE IS NAVAL IN HIS OWN WORDS... PART I: WEALTH BUILDING WEALTH Understand How Wealth Is Created Find…
#博客
新写博客,讲解为什么Raft论文里不允许提交之前任期的日志。这部分论文内容有点难懂,这是因为经常忽略了这个图示展示的是错误的情况,即允许“提交之前任期的日志”可能导致的问题。如果允许这样做,图示展示的是会导致备份到多数的日志被覆盖的情况,这是不允许出现的。
https://www.codedump.info/post/20211011-raft-propose-prev-term/
新写博客,讲解为什么Raft论文里不允许提交之前任期的日志。这部分论文内容有点难懂,这是因为经常忽略了这个图示展示的是错误的情况,即允许“提交之前任期的日志”可能导致的问题。如果允许这样做,图示展示的是会导致备份到多数的日志被覆盖的情况,这是不允许出现的。
https://www.codedump.info/post/20211011-raft-propose-prev-term/
codedump的网络日志
为什么Raft协议不能提交之前任期的日志? - codedump的网络日志
#冷知识
b-tree数据结构中的“b”到底是什么单词的缩写?
下意识的,都认为是“balance”的缩写,毕竟这是一个平衡的树形数据结构。但是其实,连几位发明人,也从来没有解释过。
有可能是“boeing”的缩写,因为作者当时就职于波音公司;还有可能是第一作者Bayer的名字首字母。
b-tree数据结构中的“b”到底是什么单词的缩写?
下意识的,都认为是“balance”的缩写,毕竟这是一个平衡的树形数据结构。但是其实,连几位发明人,也从来没有解释过。
有可能是“boeing”的缩写,因为作者当时就职于波音公司;还有可能是第一作者Bayer的名字首字母。

