william

Keep Calm and Markdown.

c++ hash map

我们在组织不同信号、不同策略时,往往需要一个容器存放对应合约标识的容器。这个容器要求具有一定的扩展性(即事先无法知晓容器大小),具有良好的插入效率、以及较高性能的查找性能。对于一般的算法,我们直接使用标准库里的哈希容器即可,这包括 std::unordered_map

然后,对于一个低延迟的交易系统,我们总是对性能有着极致的渴望,尽力开发性的数据容器,提升查找性能。

    1. 对于特化容器,如 <int, typename T>,可以更加快速的实现查找
    1. 对于较大对象,如 <std::string, typename T>, 则尽量避免运行期的构造开销,例如在确认不同的合约标识肯定的唯一情况下,可以大胆使用类型转化,直接 castint 类型。

nvim 基于buffer的文本补全

nvim 可以通过插件lsp实现基于编程语法的自动补全。而对于一般的文本,lsp 就无助于事了。这时候我们需要一个基于文本分析的自动补全功能。这个可以通过 echasnovski/mini.nvim 来实现

nvim 自动备份 lazy lock.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
-- backup: lazy-lazy.json
local lazy_cmds = vim.api.nvim_create_augroup('lazy_cmds', {clear = true})
local root = os.getenv("HOME") .. "/.config/nvim/lazy"
local snapshot_dir = root .. '/plugin-snapshot'
os.execute("mkdir " .. snapshot_dir)
local lockfile = root .. '/lazy-lock.json'
vim.api.nvim_create_user_command(
    'BrowseSnapshots',
    'edit ' .. snapshot_dir,
    {}
)
vim.api.nvim_create_autocmd('User', {
    group = lazy_cmds,
    pattern = 'LazyUpdatePre',
    desc = 'Backup lazy.nvim lockfile',
    callback = function(event)
        vim.fn.mkdir(snapshot_dir, 'p')
        local snapshot = snapshot_dir .. os.date('/%Y-%m-%dT%H:%M:%S.lazy-lock.json')
        vim.loop.fs_copyfile(lockfile, snapshot)
    end,
})
  • :Lazy restore

glibc2.18 安装

先查看当前系统的 glibc 版本

1
2
3
4
5
6
locate libc.so                                                                                                                                                                               [16:20:29]

/usr/lib64/libc.so
/usr/lib64/libc.so.6
/usr/local/glibc-2.34/lib/libc.so
/usr/local/glibc-2.34/lib/libc.so.6

当前系统使用的 glibc 动态库在 /usr/lib64/libc.so.6。我们可以使用命令 strings 查看动态库的版本信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
strings /usr/lib64/libc.so.6 |egrep '^GLIBC_2.' |sort                                                                                                                                        [16:19:55]
GLIBC_2.10
GLIBC_2.10
GLIBC_2.11
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.16
GLIBC_2.17
GLIBC_2.17
GLIBC_2.18
GLIBC_2.18
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.5
GLIBC_2.6
GLIBC_2.6
GLIBC_2.7
GLIBC_2.7
GLIBC_2.8
GLIBC_2.8
GLIBC_2.9
GLIBC_2.9
0%