Home

程序员之东邪西毒

佛典有云 旗未动 风也未吹 是人的心自己在动 每个程序员都会经过这个阶段, 见到一个技术, 就想知道技术后面是什么。 我很想告诉他, 可能了解之后, 你会发现没有什么特别。 回望之下,可能会觉得原来的技术更好一些。 但是我知道他不会听, 以他的好奇心, 自己不试试怎么会甘心。 其实甩一个锅不是很容易, 不过为了工作, 很多人都会冒这个险。 一个人接了锅之后, 或多或少总会找个借口来掩饰自己。 其实堵包、延迟, 只不过是同一个bug的两种结果。 在这两个结果后面,躲藏着一个加着班的人。 排期什么时候给是有邮件的, 锅什么时候甩过来却没人知道。 立春之后, 很快就到了惊蛰。 每年这个时候, 会有一个KPI发到我这, 但是今年没有来。 没多久,我收到一封邮件。 因为结构调整,我们的...

Read more

skiplist简介

skiplist,即跳表是由William Pugh在1989年发明的,允许快速查询一个有序连续元素的数据链表,搜索、插入、删除的平均时间复杂度均为O(lgn)。 本文介绍下对于skiplist的理解,包括背景、推导过程、伪代码以及复杂度的证明。 1. 背景 有序数组的好处是可以通过二分实现O(lgn)的高效查找,然而插入元素时,为了保证有序性,时间复杂度是O(n)的。链表则刚好相反,插入数据是O(1),查找元素则是O(n)的。即使链表数据是有序的,查找元素仍然是O(n)的,因为本质上,链表不支持random access. 那么,是否存在一种链表,既支持高效的数据插入,又可以实现高效的查找? 介绍skiplist前,我们先举一个坐火车的例子。 假设公司组织出去bui,我们...

Read more

往前看、往后看 - 评《那些怪诞又实用的日常心理学》

这是一本非常短小精悍的书,一个周末,一杯茶,一个小时就可以读完。 印象最深刻的是这个视频,只有30秒,要求数出所有白衣服的队员传球的次数,建议全屏观看: 不知道你数清楚了次数没有? 10次? 6次? 还是11次? 好 上面几行只是想尽量让你慢点看到这个事实: 有多少人注意到了有只大猩猩出现过? 答案是很多人都没有。当我们带着极强的目的性关注一件事情时,往往容易忽略其他事物,即使这件事物是显而易见的,例如舞台上经过一只大猩猩🐒。很多人再回过头看这段视频,都会惊诧不已,奇怪之前没注意到。全神贯注focus带来了效率的提升,但也容易让人忽略很多细节。 另外一个类似的例子:研表究明,汉字序顺并不定一影阅响读。比如当你看完这句话后,才发这现里的字全是都乱的。 可见心理学...

Read more

protobuf之down_cast

C++ 提供了多种 cast 的方式:static_cast/dynamic_cast/const_cast/interpret_cast。 其中google代码规范明确表示了不建议使用RTTI,也就是尽量少使用dynamic_cast。本文介绍下 protobuf 里是如何使用down_cast替代dynamic_cast的。

Read more

AI时代 - 评《封神演义》

这两天终于听完了《封神演义》,非常感谢这本书,让我长期的霸占了微信读书好友排行版的第一名。 上一次看这本书,还是在大学本科,记得当时书皮已经被翻阅的不成样子,重新换了新的。纸张比较单薄,甚至微微发黄,看得出来经历了岁月,不知道已经被多少届师兄师姐们借阅。那时候看,纯粹为了热闹,看众仙家呼风唤雨,撒豆成兵,当时的感觉是科技在进步,什么千里眼、顺风耳,在如今都变成了现实,因为有了电话、视频。这次在路上听书,或许因为最近这两年AI火起来的原因,突然想到两个词:AI时代 和 基因突变,历史长河五千年一瞬而过,无数真相被遗忘,你无法真切的分辨清楚历史和小说。这个时代的幻想在当时或许都是现实。 或许上古是一个AI及其发达的时代,每件法宝都注入了 AI 程序,召之即来挥之即去。“急急如律令,激!...

Read more

如何基于protobuf实现一个极简版的RPC

基于 protobuf 的 RPC 可以说是五花八门,其中不乏非常优秀的代码例如 brpc, muduo-rpc 等。 protobuf 实现了序列化部分,并且预留了 RPC 接口,但是没有实现网络交互的部分。 本文想介绍下,如何实现基于 protobuf 实现一个极简版的 RPC ,这样有助于我们阅读 RPC 源码。 一次完整的 RPC 通信实际上是有三部分代码共同完成: protobuf 自动生成的代码 RPC 框架 用户填充代码 本文假设用户熟悉 protobuf 并且有 RPC 框架的使用经验。首先介绍下 protobuf 自动生成的代码,接着介绍下用户填充代码,然后逐步介绍下极简的 RPC 框架的实现思路,相关代码可以直接跳到文章最后。

Read more