blog icon indicating copy to clipboard operation
blog copied to clipboard

Linkerist's blog.

Results 28 blog issues
Sort by recently updated
recently updated
newest added

![image](https://user-images.githubusercontent.com/16617323/101491933-48450c00-399f-11eb-88a0-3281a22ef2ea.png) [TOC] # 引言 存储场景中,我们对性能的要求非常高。在存储引擎底层的IO技术选型时,可能会有如下讨论关于IO的讨论。 > http://davmac.org/davpage/linux/async-io.html So from the above documentation, it seems that Linux doesn't have a true async file I/O that is not blocking (AIO, Epoll or...

### 书名 一定要,爱着点什么 一本小小的红色写作书 三体 不畏将来 不念过去 中国女性的感情与性 中国经济2018 中国经济2019 中国经济 为何家会伤人 为何爱会伤人 乌合之众 乡土中国 乡村教师 亲密关系:通往灵魂的桥梁 人人都是产品经理 人性的优点 人性的弱点 人生有何意义 人生的智慧 人类简史 从此,我爱的人都像你 你今天真好看 你是你吃出来的2021-01-02 你的孤独,虽败犹荣 你的第一本保险指南 兄弟 写作是最好的自我投资2021-01-02...

这几天写程序发现有个bug,最后看底层才解决,写篇blog 复盘一下。 具体表现就是服务端软件接受请求时,一些值在首次请求是正确的,以后请求时都成了非随机固定值。 其实这个场景比较常见。有人会说,软件带了状态。 既然第一次是正确的,说明程序本身没问题,问题在各种状态标记,或者说可能作为状态的值的生命周期上。 这一想法直接导致查bug思路进入误区。 看起来是带了状态,所以我把相关的构造析构,各种涉及到对象生命周期的代码都检查调试了一遍,没发现问题。 由于代码不公开,这里省略上层软件的调试,直接用gdb显示最终问题。 ```bash [qianzichen@dev ~]$ ps -ef | grep -E '$regex...' | awk '{print $2}' 25497 [qianzichen@dev ~]$ gdb -p 25497 GNU gdb (GDB)...

We can use the _Pragma directive for header file guard. example: ```cc #ifndef FOO_BAR_BAZ_H_ #define FOO_BAR_BAZ_H_ ... #endif // FOO_BAR_BAZ_H_ ``` change to ```cc _Pragma("once") ``` There are several factors...

> 出参一定要是指针? ![image](https://user-images.githubusercontent.com/16617323/103081621-49b73b00-4613-11eb-8a67-e1c79190da7d.png) 群里之前有同学问过这个问题。 当时的规范中,强制了这一条,因为彼时的规范该条目主要来自Google C++ Style Guide其中一个历史版本,比较旧了,当时google还未更新此项。 这个条目是影响面比较大的争议项。有不少人反馈,之前我写了个issue(https://git.code.oa.com/standards/cpp/issues/71 )提议修改。 经过和委员们的思考和互动讨论,这个条目已经如提议改进了。 可以看到,现在的规范(https://git.code.oa.com/standards/cpp#51%E6%8E%A8%E8%8D%90%E8%BE%93%E5%85%A5%E5%92%8C%E8%BE%93%E5%87%BA) 中, 这个条目已不再强制。 对我们的影响(仅有积极影响)是:存量代码中这一条目对应的CodeCC告警(Is this a non-const reference? If so, make const or use a pointer)不用改。 该记录归档于此,以后编程可以注意一下。 --- issue引文:...

#### 字典 字典, 又称符号表(symbol table)、关联数组(associative array)或者映射(map), 是一种用于保存键值对(key-value pair)的抽象数据结构。 在字典中, 一个键(key)可以和一个值(value)进行关联(或者说将键映射为值), 这些关联的键和值就被称为键值对。 字典中的每个键都是独一无二的, 程序可以在字典中根据键查找与之关联的值, 或者通过键来更新值, 又或者根据键来删除整个键值对, 等等。 字典经常作为一种数据结构内置在很多高级编程语言里面, 但 Redis 所使用的 C 语言并没有内置这种数据结构, 因此 Redis 构建了自己的字典实现。 字典在 Redis 中的应用相当广泛, 比如 Redis...

基于Linux的redis C++库的设计与实现 背景 现在没有好用的 redis C++ 库(功能缺陷、使用困难、对第三方依赖大) 功能 给 C++ 程序员编程使用,实现与redis server交互,完整实现功能(集群、连接, geo, 哈希、键、列表、pub/sub、集合、有序集合等),原生支持分布式锁、分布式数据结构,让用户无感知地使用分布式字符串、分布式列表等。协议层低耦合、可扩展其他kv存储协议。 优点 无其他库依赖、功能完备、高性能、多种编程模型,完备的测试体系 用到知识点: | 知识点 | 项目中体现 | | :--- | :--- | | 软件工程 |...

上次跟妳讲的几个问题,我把总结成文档了,妳有空思考一下。 库底层 api 的实现决定了库的使用方法。 testcase 需要模拟用户使用。 ##### 若干因素会影响到使用者 1. 同步/异步编程模型。 已实现同步,现有所有代码基于同步编程模型开发,不需要注册回调函数。异步方式的测试代码其实和同步的大体相同,只不过调用、使用方式有所区别。没必要写两份差不多的代码。 妳思考一下,如何通过采用统一的 testcase,测试async/sync的api ##### 若干因素会影响到 testcase 1. 测试逻辑 比如如下是针对 get 的单元测试,如果它通过,说明 get 命令确实可用(关于 get:https://redis.io/commands/get)。 ```cpp test("get"); { c.set(foo, bar); ASSERT_EQUAL(c.get(foo),...

https://www.jianshu.com/p/8c45561d9d36

结合平时的需求,借鉴一些开源代码,写了一个小工具。应该能大幅提高生产效率。 xs 设计简约,不像传统 cmdline 工具那样有很多选项。使用者不需要操作很多就可以达到目的。 xs 没有使用很复杂的算法,只是进行模糊匹配,对于开发者。只需要xs,然后回车,就可以进入交互模式,使用简单的箭头操作就可以到达目的路径。 地址: https://github.com/Linkerist/xs 使用方法:make && make install && xs 使用相关直接在git页面上能看到