240 发简信
IP属地:上海
  • 120
    Faiss源码解析

    向量检索ANN(Approximate Nearest Neighbor Search),指的是对于一个query向量,从向量库中找到和它距离最接近的k个向量。这是一个典型的...

  • 120
    编译构建工具-bazel

    bazel是什么:https://zhulao.gitee.io/blog/2019/04/05/%E7%BC%96%E8%AF%91%E6%9E%84%E5%BB%BA%E...

  • 常用Shell脚本模板

    shell脚本 目录 启动行参数解析[#%E5%90%AF%E5%8A%A8%E8%A1%8C%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90] 参数...

  • CPP技巧整理 —— 分布式进程id表示方法

    在分布式的服务器环境下,设计到大量的进程以及相同进程的不同实例,需要一种有效的进程id来做唯一标识。 对于这种数据结构的需求是: 尽可能简单,易读 省空间 对于游戏的服务器进...

  • CPP技巧整理 —— 依赖注入

    设计模式里面有一个很重要的思想,原话可能是“不要依赖于具体,而是要依赖于抽象”。在软件的设计中,这种思想可谓算是指导思想了。比如系统要设计一个rpc服务。一种比较好的设计思路...

  • CPP技巧整理 —— 关于动态库中调用外部符号

    在开发中,经常有这样的场景,把一些功能打包为一个动态库,这个库作为工具人,可以被其他不同进程链接,然后把自己的功能提供给对应链接的目标程序。这也是动态库最常见的用法,如下所示...

  • 链接顺序依赖导致未定义符号的问题

    最近遇到一个问题,有两个底层依赖模块,分别是dep1和dep2。在dep1中有调用dep2的代码。本地开发完毕后,合入分支编译报错 提示符号未定义。但是,本地编译是正常的,在...

  • 120
    随机洗牌算法整理

    在游戏里面有各种“随机”的需求,比如从n个用户里面随机给m个发奖励。那么,要如何实现呢?简单的来说,可以调一个stl的函数来实现,伪代码如下: 那shuffle背后是怎么实现...

  • 120
    使用-finstrument进行函数调用追踪

    假设有个场景,希望在程序在执行的时候,调用函数的时候可以自动打印出它的调用栈。或者说希望自动打印出在这个函数中的执行时间。比如这段程序,希望执行到任何函数的时候,都打印出它的...

  • 120
    PB反射技巧整理

    Protobuff是一个与开发语言、平台无关序列化的工具,广泛应用于需要跨进程传输数据的场景。除此之外,PB还提供了强大的反射能力。可以利用反射的技巧,可以大量降低重复的代码...

  • 120
    PB插件开发指南

    protobuf 中提供的编译器protoc,支持开发者自定义plugin的扩展,根据.proto文件生成各种各样的代码。官方文档 https://developers.go...

  • 120
    lua和C相互调用

    lua可以通过与C函数相互调用来扩展程序功能,在C中嵌入lua脚本既可以让用户在不重新编译代码的情况下修改lua代码更新程序,也可以给用户提供一个自由定制的接口,这种方法遵循...

  • C++获得程序的调用栈的几种方法

    打印程序的调用栈是一种常见的debug工具,最常用的就是backtrace函数去获得堆栈信息。不过,这个函数的调用成本很高,是容易使用不当,造成性能问题。在这里整理几种获得程...

  • 120
    jemalloc内存泄漏分析

    jemalloc 是一款内存分配器, 除了可以提高分配内存的效率之外。jemalloc还可以通过profiling机制来发现并定位内存泄漏。 1. 安装 官方提供的insta...

  • shell脚本攻略

    年后在微信读书上面看到两本关于linux shell的书,分别是《linux shell脚本攻略》 和 《linux 性能优化》。涨了写奇怪的姿势,Mark在这里。 tee ...

  • 对于一个函数调用,比如main 调用 square,在进入square的首地址后,才会进行压栈(push rbp)。如果在调用squere的函数前,已经把squere首地址插入跳转到其他函数的汇编后,square函数的push rbp已经被覆盖了,square函数的栈帧并不会被真正的建立。

    一种基于so的C/C++服务热更新方案

    对于线上的服务,经常会出现xxx服务的某一段逻辑里面有bug,需要紧急修复。对于无状态的服务,可以修复之后,直接重启。但是,对于有状态的服务,重启意味着内存状态丢失和长连接断...

  • 0000000000401106 <_Z6squarei>:
    401106: 55 push %rbp
    401107: 48 89 e5 mov %rsp,%rbp
    40110a: 89 7d fc mov %edi,-0x4(%rbp)
    40110d: 8b 45 fc mov -0x4(%rbp),%eax
    401110: 01 c0 add %eax,%eax
    401112: 5d pop %rbp
    401113: c3 retq

    0000000000401114 <main>:
    401114: 55 push %rbp
    401115: 48 89 e5 mov %rsp,%rbp
    401118: bf 64 00 00 00 mov $0x64,%edi
    40111d: e8 e4 ff ff ff callq 401106 <_Z6squarei>
    401122: b8 00 00 00 00 mov $0x0,%eax
    401127: 5d pop %rbp
    401128: c3 retq
    401129: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)

    一种基于so的C/C++服务热更新方案

    对于线上的服务,经常会出现xxx服务的某一段逻辑里面有bug,需要紧急修复。对于无状态的服务,可以修复之后,直接重启。但是,对于有状态的服务,重启意味着内存状态丢失和长连接断...

  • 程序调试的一些心得和经验

    整理程序调试的一些踩坑,经验整理,注意事项等。 C++后端开发的踩坑整理https://www.jianshu.com/p/b67222570785[https://www....

  • 120
    C++模板实用技巧

    整理C++模板在开发中的一些使用技巧 编译期静态检查 实现可以检查类型的memcpy (避免手滑拷贝了两个不一样长度的对象) 根据T是否是某个类的派生类 根据T是不是int匹...

  • 120
    基于LD_PRELOAD的动态库函数hook

    1. LD_PRELOAD 实现注入的原理 LD_PRELOAD是linux系统中的一个环境变量,它可以指定优先加载某个动态库。当主程序中有相同的符号出现在不同的动态库中,会...

个人介绍
至少做一个有态度的程序员