• golang里面array/slice的内存分配测试1

    1. 当cap还够用的时候, append不会申请新内存
    2. cap不够的时候, 会申请一块新内存. buf = append(buf, …), 新得到的buf会是一块新内存,指针是变掉的, 新的cap是之前的两倍(但一定是8的偶数倍, 比如2->8, 10->32)
    3. newbuf = buf[2:5] 生成slice的时候, newbuf指向buf[2], 他们共用同一块内存, 直到上面2中描述的新内存申请后, 他们会指向不同内存. 不管是buf还是newbuf扩容
    4. make([]byte, 10)[0:] , len, cap都是10, append会分配新内存.
    5. make([]byte, 10)[0:0] , len是0, cap是10, append 10 以内不会分配新内存
  • 函数中传递指针引起的一个BUG

    我是觉得编程里面最烧脑的就是传值和传引用的甄别, 一不小心就会出错.

    我是写一个kafka lib https://github.com/childe/healer, producer的类写好了, 然后在此基础上写一个可执行文件, 从stdin输入数据, 然后写入kafka.

    简单说一下producer逻辑, 输入1000条之后做为一批数据一起写kafka, 或者是200ms定时器到了就写, 哪怕没有1000条.

    但是在测试过程中, 无意间发现, 最终写到kafka的数据是错乱的, 后面写的数据会把前面的数据覆盖掉. 比如先输入 1111111111, 再输入 2222222222, 最后写到kafka的就是两条 2222222222

    这就让人很尴尬了…

  • ES中使用mmap存储的索引会锁定内存不释放?

    在可用内存不充足的情况下, ES中索引配置如果使用mmapfs, 会导致内存不足, Load飙升.

    虽然从发现这个问题到最后确认原因,花了很长时间, 这里长话短说.

  • git rebase移动commit到另外分支

    起因

    有两个分支, 一个master, 一个topic.

    master上面有commit: A C D
    topic上面有commit: A B C D

    本来是要在master上面提交2个新的commit: X Y , 但提交之后才发现是在topic上面提交的. 现在想把 X Y 两个commit移动到mater上面.

    git rebase --onto 可以实现这个功能, 模拟一下.

    模拟脚本

    用下面这个脚本模拟一下当前的情况

    git init
    date > 1
    git add 1
    git commit -m'1'
    git checkout -b dev
    date > 2
    git add 2
    git commit -m'2'
    git checkout master
    date > 3
    git add 3
    git commit -m'3'
    git checkout dev
    git merge master -m'merge from master into dev'
    date > 4
    git add 4
    git commit -m'4'
    date > 5
    git add 5
    git commit -m'5'
    

    脚本执行之后的commit情况

    * 2d2e87a - (HEAD -> dev) 5 (2 seconds ago) <childe>
    * afef668 - 4 (2 seconds ago) <childe>
    *   472e819 - merge from master into dev (2 seconds ago) <childe>
    |\
    | * ac945fe - (master) 3 (2 seconds ago) <childe>
    * | 1afa191 - 2 (2 seconds ago) <childe>
    |/
    * 18f563a - 1 (2 seconds ago) <childe>
    

    移动commit

    [/private/tmp/1521020400 on dev]
    % git checkout -b newbranch
    Switched to a new branch 'newbranch'
    [/private/tmp/1521020400 on newbranch]
    % git rebase --onto master 472e819 newbranch
    First, rewinding head to replay your work on top of it...
    Applying: 4
    Applying: 5
    [/private/tmp/1521020400 on newbranch]
    % git checkout master
    Switched to branch 'master'
    [/private/tmp/1521020400 on master]
    % git merge newbranch
    Updating ac945fe..33c077f
    Fast-forward
     4 | 1 +
     5 | 1 +
     2 files changed, 2 insertions(+)
     create mode 100644 4
     create mode 100644 5
    [/private/tmp/1521020400 on dev]
    % git rebase --onto 472e819  dev
    

    具体文档参见 https://git-scm.com/docs/git-rebase/2.21.0

  • vmtouch

    vmtouch可以方便的控制和诊断文件在系统Cache中的情况

    官方文档在https://hoytech.com/vmtouch/

  • 使用span query解决elasticsearch中的一种复杂搜索

    “传说中的陈老师”(什么鬼??)提了一个需求, 是想利用ES来做一种比较复杂的搜索情况, 我自己测试了一下span query, 看起来是可以满足.

  • 自定义内容页面

    方便在朋友圈装X.

    custom.html?text=朕知道了&size=50px

  • 房间内 100 个人,每人有 100 块,每分钟随机给另一个人 1 块,最后这个房间内的财富分布是怎样的?

    之前看过一篇文章,
    房间内 100 个人,每人有 100 块,每分钟随机给另一个人 1 块,最后这个房间内的财富分布是怎样的?

    突然想到用js来展示, 更动态和直观, 在线实时的效果, 那就用Highcharts来实现一下.

  • 为何没有充分利用CPU的一个小故事

    解决问题之后, 了解了负载均衡中一个比较隐蔽的坑(也只是对我这种新手来说是坑)

    写完之后发现自己还是没有把事情讲清楚的能力!摔.

  • nginx rewrite

    翻一下http://nginx.org/en/docs/http/ngx_http_rewrite_module.html并加一些例子