- 博客(73)
- 资源 (29)
- 收藏
- 关注
原创 编译 arm 版 perl
文章目录一. 准备工作1.1. 下载 perl 和 perl-cross1.2. 安装交叉工具链二. 配置和编译2.1. 解压2.2. 编译参考一. 准备工作环境:Ubuntu 16.04perl-5.30.0perl-cross-1.31.1. 下载 perl 和 perl-cross注意: perl 和 perl-cross 的版本要对应。我这里使用的分别是 perl-...
2019-06-20 16:44:05
2443
2
原创 C++ 返回值优化
文章目录背景Copy elision 和 RVO编译器无法优化返回值的场景参考背景使用函数返回非内置类型对象时总是担心因拷贝对象而带来的性能问题。因此经常使用方式一传递对象的引用作为函数的参数,然后在函数里为对象赋值,而不使用方式二方式一:void f(std::vector<int>& v) { // do some thing with v}方式二:s...
2019-05-20 21:20:59
2122
翻译 编译 arm 版本 protobuf
文章目录准备下载编译参考准备$ sudo apt install autoconf automake libtool curl make g++ unzip git安装 arm 工具链$ sudo apt install gcc-arm-linux-gnueabihf下载下载 protobuf 和对应版本的 protoc$ wget https://github.com/prot...
2019-03-19 21:36:34
3118
1
原创 map 中结构体或指针做 key
文章目录一. 问题背景1.1. 问题描述1.2. 问题分析二. 解决方案2.1. 方案一2.2. 方案二三. 参考一. 问题背景1.1. 问题描述朋友今天问了一个关于 map 的问题,假设有个 Person 结构体如下:typedef struct { std::string name; int age;} Person;map 定义如下:typedef std::map&...
2019-02-16 01:33:32
5400
原创 cmake protobuf
一. 简介Protocol Buffers 是一种数据序列化的格式。特点是语言无关,平台无关。相比于 XML 的优势是更小,更快和更简单。适合数据存储或 RPC 数据交换,可用于通信协议。支持的语言包括:C++,C#,Dart,Go,Java,Python 等。二. 安装https://github.com/protocolbuffers/protobuf/releases因为这篇是...
2019-01-29 13:08:09
4980
原创 coturn 简介
文章目录一. 安装1.1. 下载1.2. 安装二. 配置三. 启动 &amp; 测试3.1. Server3.2. Client四. 代码流程4.1. 大体框架涉及的函数4.2. 设置 relay 相关4.3. 处理请求或数据4.4. 分析请求并构造返回数据4.5. 真正的返回数据一. 安装1.1. 下载gitgit clone https://github.com/coturn/co...
2019-01-15 17:03:29
8657
原创 UPnP 端口映射原理
文章目录一. 简介二. 协议2.1. 发现2.2. 控制三. miniupnp3.1. upnpc 常用命令介绍3.2. miniupnp 映射部分代码简单逻辑参考一. 简介实现 UPnP 条件:路由器需支持 UPnP,且需启用该功能。操作系统需支持 UPnP,且操作系统需启用该功能。软件需支持 UPnP,如 p2p 下载软件等,且需启用该功能。简单来理解的话,UPnP 是一种设备...
2018-12-14 21:06:44
9704
原创 DHCP 分配 IP 初探
文章目录一. 概念1.1. 作用1.2. 为什么要使用 DHCP二. DHCP 原理2.1. DHCP 分配 IP 过程2.1.1. DISCOVER2.1.2. OFFER2.1.3. REQUEST2.1.4. ACK2.1.5. 完成配置2.1.6. DHCP Client 和 Server 交换消息图2.2. 续约参考一. 概念动态主机配置协议(Dynamic Host Configu...
2018-12-05 21:19:26
715
原创 减少 golang 二进制文件大小
文章目录一. Go VS C 二进制ELF二. 如何减小 go 二进制文件大小2.1. -ldflags2.2. UPX参考环境:$ go versiongo version go1.11.2 linux/amd64$ gcc --versiongcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609一. Go VS C 二进制hel...
2018-11-28 12:08:34
6305
4
原创 NUMA
文章目录一. 概念二. NUMA 带来的新问题三. 设置 NUMA参考一. 概念非一致性内存访问(Non-Uniform Memory Access,简称 NUMA)特点:内存划分为多个内存节点。内存的访问时间取决于访问 CPU 和节点的相对位置。# numactl --hardwareavailable: 2 nodes (0-1)node 0 size: 32276 MB...
2018-11-14 16:58:20
695
原创 系统监控 dashboard - netdata
OS:Ubuntu 16.04一. 准备阶段$ apt-get install zlib1g-dev uuid-dev libmnl-dev gcc make git autoconf autoconf-archive autogen automake pkg-config curl二. 安装 netdata2.1. 命令安装$ sudo apt install netdata...
2018-11-07 21:31:38
1590
原创 gRPC c++
准备工作Install grpc$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc$ cd grpc$ git submodule update --init$ make && sudo make installInstall protobuf$ cd thir...
2018-10-31 21:37:51
3107
原创 TCMalloc
文章目录问题简介小对象分配划分管理分配大对象分配划分分配Span释放参考内存分配的重要因素:速度。不同 malloc 分配速度对比:malloc耗时减少锁争用空间效率ptmalloc2300 ns线程 arena每个对象 4Bytes 头,大小四舍五入为 8 的倍数TCMalloc50 ns1. 小对象几乎没有争用 2. 大对象使用细粒度和高效的自旋锁...
2018-10-02 18:31:30
1050
原创 go 设计模式(一)单例模式
go 的单例模式写法比较简单,可以通过sync.Once来辅助。type Singleton struct { name string}var ( once sync.Once instance *Singleton)func New() *Singleton { once.Do(func() { // once.Do 调用的函数只执行 1 次...
2018-09-27 11:16:35
666
原创 Mac 下 git 命令自动补全
一. 安装 bash-completionbrew install bash-completion安装成功后提示:==> CaveatsAdd the following line to your ~/.bash_profile: [ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_com...
2018-09-27 01:13:02
2617
原创 Golang 通过方法名调用方法
有这样一个结构体 Person,带有4个方法。现在有个需求,想通过方法的名字调用对应的方法,想到的办法是将名字和对应方法建立 map 关系。type Person struct { nape string age int}func (p *Person) SetName(nape string) { p.nape = nape }func (p *Person) GetName(...
2018-09-20 20:14:41
7444
1
原创 Golang 通过 cgo 调用 C/C++ 静态库(二)
书接上回C 调用 C++ 类Golang 通过 cgo 调用 C/C++ 静态库(一)如果想使用 golang 调用 C++ 代码该如何做?我们知道,golang 无法直接调用 C++,但是可以调用 C,所以我们需要用 C 包装下 C++ 代码。还是 C 调用 C++ 类 中 Person 的例子,我们现在要将 person.cpp 的类生成静态库供 golang 调用。我们首...
2018-09-17 19:59:38
5946
2
原创 Golang 通过 cgo 调用 C/C++ 静态库(一)
hello.h#ifndef HELLO_H_#define HELLO_H_#ifdef __cplusplusextern "C" {#endifextern int hello(char *name, int age);#ifdef __cplusplus}#endif#endif // HELLO_H_hello.c#include <stdio.h...
2018-09-17 19:21:08
14923
6
原创 C 调用 C++ 类
现在有个类Person,其中成员函数分别用于获取 name 和 age: - GetName() - GetAge()我们希望可以在 C 代码中调用 C++ 类的方法。person.hclass Person { public: Person(std::string name, int age); ~Person() {} const char *GetName...
2018-09-14 15:57:44
15876
1
原创 vim 提示 PANIC PANIC PANIC
写 go 程序的时候,突然发现自动提示时显示PANIC PANIC PANIC。起初以为是YouCompleteMe出了问题,检查了下排除这种可能。最后网上搜索发现是gocode的问题。解决方法如下:gocode close && go get -u github.com/nsf/gocode...
2018-09-09 00:03:08
597
原创 invalid use of non-static member function
现在有一个 Object 类,它有两个方法:Recv 负责接收数据,并传递给 ProcessProcess 负责处理数据我们希望这个类接收完数据后启动线程去处理,不阻塞后面的其他业务逻辑。class Object { public: void Recv() { int a = 2; std::thread t(Process, a); // Do...
2018-09-06 18:26:07
49361
4
原创 Golang 闭包
为了加速数据处理,往往我们会选择goroutines并行处理。values := []string{"c++", "golang", "python"}for _, val := range values { go func() { fmt.Println(val) }()}执行的结果是pythonpythonpython和预期不符,为什么?...
2018-09-06 11:51:13
228
原创 C++ 使用 curl 发送 json 数据请求
用到的库:curlnlohmann/json假设现在 Client 想要获取 Person 喜欢的语言,需要发送 Person 的个人信息到 Server,Server 根据用户姓名返回他喜欢的语言。struct Book { std::string name;};struct Person { std::string name; int age; std:...
2018-09-06 07:49:20
5982
原创 Golang http 开启 gzip
一. 测试代码1.1. http 开启 gzip 数据大小对比1.2. http 开启 gzip benchmark 对比参考一. 测试代码package gzipimport ( "compress/gzip" "fmt" "io/ioutil" "log" "net/http")func RequestGzip...
2018-08-27 08:25:37
8751
翻译 TCP 拥塞控制
文档翻译自 https://tools.ietf.org/html/rfc5681摘要本文档定义了 TCP 的四种拥塞控制算法:慢启动,拥塞避免,快速重传和快速恢复。 此外,文档还规定了 TCP 在相对较长的空闲时段之后应如何开始传输,以及讨论各种确认生成方法。RFC 2581 已废弃。目录摘要目录1. 简介2. 定义3.拥塞控制算法3.1. 缓慢启动和拥...
2018-08-02 10:47:21
1924
翻译 可靠的 UDP 协议
可靠 UDP 协议 译自 https://tools.ietf.org/html/draft-ietf-sigtran-reliable-udp-00摘要此 Internet 草案讨论了可靠UDP(RUDP)。RUDP 基于 RFC 1151 和 908。RUDP 在 UDP/IP 协议层之上,为虚拟连接提供可靠的有序传送(最多可重传次数)。RUDP 具有非常灵活的设计,...
2018-07-24 23:43:07
2966
原创 Golang 通过代码执行命令
有时需要通过代码执行一些系统命令来获取信息,golang 提供exec.Command来实现这一目的。shtest.gopackage mainimport ( "fmt" "os/exec" "strings")func exeSysCommand(cmdStr string) string { cmd := exec.Command("sh",...
2018-04-24 20:27:42
7459
原创 Golang panic 打印堆栈信息
一. 缘起程序进程后台运行monitor 监控程序负责拉起程序当因为逻辑问题导致后台进程挂掉时,不容易发现程序曾经挂过。golang 可以通过 recover 捕获 error,并将 panic 时的堆栈打印到日志来定位问题。$ tree panictestpanictest├── main.go└── panic └── panic.go二. 代码...
2018-04-24 00:55:05
17069
1
原创 Golang 序列化方式及对比
Golang 序列化的方式:BinaryGobJSONProtobuf一. Binary// OKtype Message struct { Id uint64 Size uint64}// Wrong/*type Message struct { Id int Size int Data string}*/...
2018-04-18 14:02:24
16799
3
原创 random shuffle
数组洗牌实现// random_shuffle.cpp#include <iostream>#include <vector>#include <ctime>void random_shuffle(std::vector<int>& v) { int n = v.size(); std::srand(std::time(0)); for (int i = n-1; i > 0; --i
2017-12-06 10:28:02
427
原创 l2fwd 测试
环境如下:Ubuntu 16.04cpu 4 coreIntel Corporation 82545EM Gigabit Ethernet Controller * 2个dpdk-17.02.1 提示: 测试需要root权限一. dpdk 环境搭建1.1. 编译 dpdkcd dpdk
2017-11-03 11:34:24
2975
1
原创 lua tcp socket read timed out
线上机器在晚高峰 20:00 ~ 00:00 点之间 CPU 负载很高,且 nginx 的 error.log 日志中有大量类似如下内容:2017/10/16 22:19:48 [error] 16583#0: *137334081 lua tcp socket read timed out, client: 61.148.244.157, server: localhost, request: "
2017-10-17 12:53:56
13366
原创 Grafana Test Failed Network Error: Bad Gateway(502)
一. 问题 问题描述: Grafana 添加Data Sources Test 时失败,显示Network Error: Bad Gateway(502)
2017-09-13 19:58:00
17880
7
翻译 怎样设置 Docker 监控
本文转自 https://www.brianchristner.io/how-to-setup-docker-monitoring/ 作者:Brian Christner Brian’s spent a large portion of his career in the casino industry where he made sure the house always won. Bria
2017-09-03 15:56:35
2267
原创 使用 tcpcopy 线上导流及回放
有时项目上线前需要模拟线上流量进行压测或者验证功能,或者从线上导流到测试环境,排查问题,使用 tcpcopy 可以帮你完成这些目的。https://github.com/session-replay-tools/tcpcopy
2017-09-01 18:10:48
5605
原创 redis expire key 过期不删除
1. 问题描述今天使用 redis 遇到个奇怪的问题,key 设置过期时间后,到期后并没有删除。
2017-08-28 21:20:59
11688
2
原创 Intel VTune Amplifier XE 使用
VTune是 Intel 一个比较强大的性能分析软件。下载地址:intel-vtune-amplifier-xe
2017-08-10 13:19:37
7886
翻译 用 TestPMD 测试 DPDK 性能和功能
此文转自Testing DPDK Performance and Features with TestPMD 作者简介:Pablo de Lara Guarch 是英特尔网络软件工程师,主要关注DPDK的数据平面函数和库的开发,其贡献包括哈希算法增强和新的加解密设备驱动。此外,他还维护了DPDK crypto subtree。
2017-08-05 17:41:25
7971
3
深入理解Nginx模块开发与架构解析(第2版).pdf下载 高清完整版
2017-02-15
FMD 编程手册
2014-06-30
OpenSolaris Developer's Reference.pdf
2014-03-28
EFI Developer’s Guide
2013-01-18
think in java英文版及源码
2012-07-06
UNIX环境高级编程(第二版中文)高清完整PDF版
2012-06-14
Linux C函数手册
2012-04-24
NASM中文手册
2012-04-18
gdk-html-2.22.1 API手册
2012-04-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人