-
arena时levelDB中的内存池实现 接口 没有太多好说的,都非常直观。 补了些注释 1 2class Arena { 3 public: 4 Arena(); 5 6 Arena(const Arena&) = delete; 7 Arena& operator=(const Arena&) = delete; 8 9 ~Arena(); 10 11 // Return a pointer to a newly allocated memory block of "bytes" bytes. 12 char* Allocate(size_t bytes); 13 14 // …
Read More -
FilterPolicy接口 1 2class LEVELDB_EXPORT FilterPolicy { 3 public: 4 virtual ~FilterPolicy(); 5 6 // Return the name of this policy. Note that if the filter encoding 7 // changes in an incompatible way, the name returned by this method 8 // must be changed. Otherwise, old incompatible filters may be 9 // passed to methods …
Read More -
Cache接口 没有太多好说的,可以注意这里用了void*来表示任意类型数据。 在c++17之后可以考虑用std::any代替,参考 std::any 笔记 1 2 3namespace leveldb { 4 5class LEVELDB_EXPORT Cache; 6 7// Create a new cache with a fixed size capacity. This implementation 8// of Cache uses a least-recently-used eviction policy. 9LEVELDB_EXPORT Cache* NewLRUCache(size_t capacity); 10 …
Read More -
概述 std::shared_ptr是智能指针的一种,在modern c++中被广泛使用(甚至滥用) 虽然天天使用,但是有些细节还不是100%清楚,因此来整理一下 为了方便表述,下文只写shared_ptr,不在写std的namespace. 组成 shared_ptr的实现中,成员通常由两部分组成。一个是所涵盖对象的指针,一个是control block 的指针 control block Tip 最重要的是,control block是 dynamically-allocated 的 (校招的时候某次面试,让我手写shared_ptr的实现,当时被多个object如何共享引用计数卡住了。。主要就是没意识到control …
Read More -
背景 一种很常见的背景是,需要表示未知类型的数据。 比如可能是用户提供的数据,比如是一个Cache的实现, value想支持任意类型的数据 对于这种场景,c语言的出身的开发者通常会使用void*来实现 1struct day { 2 // ...things... 3 void* user_data; 4}; 5 6struct month { 7 std::vector<day> days; 8 void* user_data; 9}; 10 了解cpp11的开发者可能会使用std::shared_ptr<void> 来实现 1struct day { 2 // ...things... 3 …
Read More -
levelDB是一个有序的KV存储,因此key的顺序是十分关键的 levelDB提供用户自己定义key顺序的能力 先看下comparator的接口 接口 include/leveldb/comparator.h 1 2// A Comparator object provides a total order across slices that are 3// used as keys in an sstable or a database. A Comparator implementation 4// must be thread-safe since leveldb may invoke its methods …
Read More -
背景 最近在做一个智能算力相关的项目,类似美团外卖广告智能算力的探索与实践 其中实现控制系统需要与数据库交互。 虽然最后技术选型并没有使用到levelDB,但是想趁机把代码读了吧。 很惊讶的发现我大三的时候声称自己读过部分levelDB代码,甚至还写了几篇相关的博客,比如 murmurhash源码分析 Lock-free vs wait-free concurrency 内存屏障(Memory Barriers) levelDB 学习笔记 但是我却一点都没印象了.... 仔细看来很多概念在当时可能都是没有充分理解的,而且从数目上来看,应该并没有完整看完levelDB代码。 所以重新开个坑,看看自己比起毕业前有没有长进【没有 先从 …
Read More -
2022 TO DO list
Feb 26, 2022 · 1 min read竟然一下子就2022年了,时间过得真快。 还是简单列一下TODO list吧。 源码 levelDB workflow 书籍 APUE Advanced Programming in the UNIX Environment, 3rd Edition 粗略读完了,内容非常多,更像是一个手册。需要的时候再细读即可 Redis 深度历险:核心原理与应用实践 Redis 深度历险:核心原理与应用实践 豆瓣评分比较好,但是看到有些差评说是书很烂,都是刷分刷上去的。 抱着实践出真知的态度花了两个小时粗略看了下,感觉要深度没深度,也不适合入门,全篇缺少逻辑性,基本是想到哪写道到哪。 千万不要浪费时间读 DDIA TODO paper …
Read More -
博客要长草了。。趁着过年时间多,打理一下。。 添加google analytics hugo本身已经集成了这个功能 要点是集成的是旧版本的universal analytics (对应的是UA-ID) 而目前google主推得其实是新版本google analytics 4(对应的是GA4-ID) 更换主题 更换主题为 hugo-clarity 最主要的原因是之前的博客主题语法高亮有些问题... cpp中代码添加了注释后,会将代码显示在注释的同一行 proto文件不能正确换行 所以换了个可以正确解析语法的主题... 问题1 github actions执行正常,访问渲染好的页面提示 1 2This page contains …
Read More -
Goodbye 2021
Jan 3, 2022 · 1 min read在公司做ppt做到吐血,恰好想起2021年终总结还没有写 过去的一年 总的来说,2021年真的是无比辛苦的一年。 转行互联网的阵痛期这句话其实完全不是开玩笑。从CV转来做推荐,技术栈看起来接近,但是问题的重点变得很不一样。 推荐场景存在大量稀疏特征,而CV下大部分特征都是稠密的 推荐模型更新频繁,几分钟就要做一次更新,而CV模型的迭代速度是以天或者周来计算的 离线请求和在线serving. 当然这点其实并不是CV/推荐 带来的不同 以至于对于行业内一些人尽皆知的概念,我第一次听到也一头雾水。比如"看一下服务的流量分布",比如“统计下p99”最初这一个个简单的概念都让工作比较吃力 说起"阵痛 …
Read More