一. c宏

  1. do{}while(0) 宏的用处?

    避免调用者出现使用错误,保证程序执行的一致性。
    例如:

    #define FOO() foo1();foo2();

    调用代码:

    if (a > 0)
        FOO();

    会被扩展成:

    if (a > 0)
        foo1();foo2();

    这时就产生了一个问题,若是a <= 0foo2()仍然会被调用。
    正确的写法:

    #define FOO() \
            do{ \
                foo1(); \
                foo2(); \
            }while(0)

二. 计算机二三事

  1. 栈和堆的区别

    操作栈空间是比堆速度快的,因为使用堆你需要先寻找到一块足够大的空间(malloc),而且使用的内存并不是连续的(如动态链表),需要在内存中跳来跳去,这些操作都会降低性能。
    还有很多原因,如cpu对栈有直接支持(push, pop);栈内存由操作系统管理,而堆内存由用户程序管理。

  2. 指针

    In computer science, a pointer is a programming language object that stores a memory address. --wikipedia

    在计算机科学中,指针就是存储了一个内存地址的编程语言对象。

  3. 引用

    以 java 为例:

    A reference is an address that indicates where an object's variables and methods are stored.

    引用是一个指向了对象的方法和变量存储位置的地址。

三. linux命令

  1. 删除当前目录除某文件外的所有文件

    ls | grep -v except_filename | xargs rm -rf
  2. 更新所有的module

    git submodule update --init --recursive --remote
    

四. Redis需要注意的问题

  1. 集群环境下使用lua脚本只支持一个key,多个key需要用{}括起来

Thu Feb 17 10:27:30 2022