2018年4月

链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层实现.

除了链表键之外, 发布与订阅, 慢查询, 监视器等功能也用到了链表, Redis 服务器还使用链表保存多个客户端的状态信息, 以及使用链表来构建客户端输出缓冲区(output buffer).

1. 链表的定义

每个链表节点使用一个 adlist.h/listNode 结构来表示:

typedef struct listNode {
    // 前置节点
    struct listNode *prev;
    // 后置节点
    struct listNode *next;
    // 节点的值
    void *value;
} listNode;

使用 adlist.h/list 来操作链表会更方便

typedef struct list {
    // 表头节点
    listNode *head;
    // 表尾节点
    listNode *tail;
    // 链表所包含的节点数量
    unsigned long len;
    // 节点值复制函数
    void *(*dup)(void *ptr);
    // 节点值释放函数
    void (*free)(void *ptr);
    // 节点值对比函数
    int (*match)(void *ptr, void *key);
} list;

可见, 它是一个双向链表.

阅读全文

一开始以为 webpack-bundle-analyzer 是什么插件...后来才发现, 原来我用vue-cli安装的包, 在构建的时候, 多加个参数就可以了, 它还自动把浏览器打开了...

# build for production and view the bundle analyzer report
npm run build --report

无需配置, 只需一个参数, over...

回过头看了之前的Vue项目, 原来我用了2年的Vue了~

看了package.json, 有一个是"vue": "^1.0.21"...

现在Vue的最新稳定版本已经是2.5.2咯.

最近 vue init webpack my-project 了一个新项目, 发现webpack的配置变化挺大的. 在main.js引入了scss, 编译失败, 原来是loader没装.

运行下下面的两行命令, 装上loader, 就可以编译通过了.

npm install --save-dev node-sass
npm install --save-dev sass-loader

好吧, 又水了一篇文章哈哈哈.