一个帅气的链表节点删除引起的错误
这是几年前在一个系统中的 DEBUG 经历,最近又发现了类似的错误,觉得应该 分享出来。
发布来自土法炼钢兴趣小组的知识、笔记、进展和应用。主题包括数据结构和算法、编程语言、网络安全、密码学等。
共 5 篇文章 · 返回首页
这是几年前在一个系统中的 DEBUG 经历,最近又发现了类似的错误,觉得应该 分享出来。
文本编辑器里的 "undo" 和 "redo",数据库系统的 MVCC,git 的历史记录,mac 的 Time Machine,等等功能,他们都有一个共同点,就是记录历史。这个功能依赖一种数据结 构:持久化数据结构 (Persistent data structure)。持久化数据结构记录所有历史版本, 你可以读取任…
二分查找,也叫 binary search,half-interval search,logarithmic search, binary chop,是在可随机寻址的有序列表中根据元素的值查找元素的位置的算法。它拥有和 排序二叉树相似的查询效率,也就是 $O(\log n)$ 的时间复杂度。通俗的讲,在一个长度为 $n…
Leveldb 实现了key-value形式的缓存,淘汰算法是LRU。实现代码在 leveldb/util/cache.cc,一共400行,非常简洁。我曾以为他提供的一些逻辑是多余的,在 工作中遇到同样需求时尝试精简这个实现,后来发现我是错的,最终只改了注释上的拼写错 误。
redis 的代码清晰不卖弄,也有很详细的注释,如果已经开始阅读代码,这篇不 算详细的文章是多余的。但是,如果你拿到了一份代码但不知道何处入手,也许 阅读代码时参考本文是个不错的选择。