自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (3)
  • 收藏
  • 关注

原创 HTTP/3系列-QUIC包头保护

包头保护是QUIC(RFC9000)的一个特性,说白了就是对每个包的包头所有bits,加密能加尽加,注意是能加尽加,不是所有bits都加密。这一点跟google quic(下文简称GQUIC)是不同的,GQUIC的包头是不加密的。本文将结合RFC和chromium中具体实现代码,详细解答以下三个问题:1、为什么要做包头保护?2、怎么做包头保护?3、发送端第一个Initial Packet加密,此时还未协商密钥,接收端怎么解密?

2021-12-05 21:41:59 2957

原创 wrk批量压测:一次压测多个http/https url

wrk是个很好的http/https压测工具,同时也支持通过lua脚本一次发多个url测试,详见githubhttps://github.com/timotta/wrk-scripts。但是这个脚本有一个bug,需要改一下,才能运行正常。修改后的代码如下://counter = 0counter = 1-- Initialize the pseudo random number generator - http://lua-users.org/wiki/MathLibraryTutorialma

2021-01-14 09:24:54 1524 2

原创 libgd图片格式转换:PNG转JPEG背景变黑的解决方法

使用libgd将PNG转JPEG直接上代码:gdImagePtr loadImage(const char *name) { FILE *fp; gdImagePtr im; fp = fopen(name, "rb"); if (!fp) { fprintf(stderr, "Can't open png file\n"); return NULL; } im = gdImageCreateFromPng(fp); fclose(fp); return i

2020-12-19 21:14:22 1119 1

原创 centos中编译http3的压测工具h2load

h2load可以压测http3,其编译详见https://github.com/nghttp2/nghttp2/tree/quic。官方的编译方法应该在ubuntu上很ok,在centos中编译的有点不顺畅,下面将遇到的一些坑及其解决办法详细描述一下。1、安装gcc 8等依赖编译ngtcp2需要gcc >= 8.0,简单的安装方法如下:yum install centos-release-sclyum install devtoolset-8-gcc devtoolset-8-gcc-c++

2020-06-12 11:27:48 1951 1

原创 nohup后台运行perf top脚本持续监控CPU

背景和问题某个线上进程偶尔突发短暂的CPU 100%导致一些问题,这个问题是间歇性的,为了捕捉CPU 100%时的现场,想写个脚本通过perf top持续监控。脚本很简单,主要一行:sudo perf top >> perf.data前台执行这个脚本正常。但是线上机器,必须要后台运行,但是使用nohup + &,脚本执行异常:perf top每秒钟N次刷新,捕捉到的都是无...

2020-04-14 21:29:05 1062

原创 记一次程序coredump在stl unordered_map find函数

程序调用unordered_map find导致coredump程序定义了一个unordered_map对象来保存一些信息,运行起来coredump了,gdb看堆栈,很莫名其妙,coredump的地方是在调用标准库unordered_map的find函数:Program terminated with signal 11, Segmentation fault.#0 0x00000...

2018-08-26 09:18:59 9045

原创 mysql错误:this authentication plugin is not supported

this authentication plugin is not supported应用程序连接mysql docker一直报错:this authentication plugin is not supported。 google发现,原来是mysql新版本(8.0以上)将root用户使用的plugin更新成caching_sha2_password。 登录mysql输入如下命令可以看...

2018-05-24 11:53:09 14498

原创 记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST

问题描述这两天用Go做一个比较简单的task:后端有HTTPServer和TCPServer。客户端通过http接入到HTTPServer,HTTPServer通过RPC将请求发送到TCPServer,所有的业务逻辑都由TCPServer处理。压测:自己的mac电脑(CPU:Intel i7, 4核,2.7GHz。内存:16G),硬件够用。客户端用Go编写,1个goruntine启...

2018-05-13 17:37:40 27681

原创 select case break引发的血案

最近线上一个模块有内存泄漏,加了http pprof后,发现goroutine一直在增长,怀疑是goroutine泄漏导致的内存泄漏。于是死看代码,发现以下代码片段可能存在问题://goroutine...for{ select { case ... ... case ... ... case

2018-03-20 13:15:57 8015 3

原创 6位全局唯一随机邀请码实现方式

很多APP都会为每一个用户生成一个邀请码,用以奖励用户邀请其他人下载注册使用该APP。例如之前的Uber邀请码、现在的西瓜视频邀请码、各种虚拟货币邀请码等等。这些邀请码多是5位或者6位数字和字母的组合,实现中,每一个用户固定一个邀请码,也就是说邀请码全局唯一。且邀请码没有特定的规律,看上去是随机生成的。那么这些邀请码具体是怎么实现的?邀请码实现方式我没有做过邀请码类似项目,所以我能想到

2018-01-11 15:35:55 38849 9

原创 GO语言TCP编程范式

GO语言TCP服务端、客户端编程实例

2018-01-02 20:44:11 620

原创 GO 语言websocket编程

GO提供原生的websocket API,使用时go get然后引用即可 golang.org/x/net/websocket 使用起来也很方便,直接上代码吧。一个echo server的代码package mainimport( "golang.org/x/net/websocket" "fmt" "net/http" "flag")type WSServer

2017-12-19 18:18:52 8390 2

原创 GO通道chan

chan用于goroutine间的通信1、基础有缓冲通道和无缓冲通道无缓冲通道:make(chan int) 有缓冲通道:make(chan int, 5)无缓冲通道会导致发送和接收的goroutine同步化主要体现在如下两点: - 无缓冲通道会使发送goroutine阻塞,直到对应的chan上有接收者package mainimport (

2017-12-12 20:31:41 915

原创 不要通过共享内存来通信,要通过通信来共享内存

“不要通过共享内存来通信,要通过通信来共享内存”,这句话是GO社区中非常经典的一句话,但是我们如何理解这句话呢? GO语言的协程(goroutine)是从进程、线程基础上发展而来的,它比进程线程更轻量级,但是都是为并发而生。既然是并发,那么不可避免的会有多个不同并发实体之间传播或者交换信息,也即通信。要理解“不要通过共享内存来通信,要通过通信来共享内存”这句话,我们得从跟进程线程间通信的比较来了解

2017-12-12 19:29:43 5453 2

原创 命令行解析:flag

一般使用在写命令行程序(工具、server)时,对命令参数进行解析是常见的需求。Go的命令行参数解析通过flag包实现,先看下面这个例子,假设我们实现了一个server,启动这个server的时候需要指定监听的tcp地址(例如:127.0.0.1:1314)、配置文件、监听的http地址(例如:127.0.0.1:6666)。启动命令如下: ./server -tcpAddr 127.0.0.1

2017-12-12 19:27:01 1883

原创 切片(slice)

切片是动态数组,比数组灵活。数组长度不可变,但是切片可以追加。 切片原型定义如下:struct Slice{  byte *array;  unit32 len;  unit32 cap;};它抽象为以下三个部分: 1. 指向被引用的底层数组的指针; 2. 切片中元素的个数; 3. 切片分配的存储空间。声明、定义和初始化声明一个切片:var sliceTest []int声明的切片

2017-12-12 19:24:37 866

原创 map

GO语言 map

2017-12-12 19:22:43 176

原创 ProtoBuffer消息设计经验

protobuffer设计的相关经验,包括消息的分类、抽象、类型和错误码定义、解包封包、维护等

2017-10-17 14:30:41 1883

原创 log4cpp编译安装

下载代码官网log4cpp下载 或者git下载 git clone https://git.code.sf.net/p/log4cpp/codegit log4cpp-codegit编译安装以centos下git下载代码为例cd log4cpp-codegit/ ./autogen.sh ./configure makemake checkmake install安装完成后,头文件

2017-01-25 12:09:15 1105

原创 resiprocate-repro编译和运行

下载代码git clone https://github.com/resiprocate/resiprocate下载编译依赖resiprocate依赖包包含但不限于以下: automake autoconf libtool openssl-devel boost-devel asio-devel db4-devel centos上执行以下命令: yum install gcc-c+

2017-01-19 20:17:32 3261

原创 resiprocate使用入门:内网搭建基于repro的sipproxy测试环境

测试环境sipproxy:repro + centos 客户端:windows电脑客户端使用X-Lite,手机andriod客户端使用linphonerepro配置和启动log的配置如果使用默认的log配置,则log级别是INFO,且所有log都打印到标准输出。如果要输出到文件,则做如下类似配置: #################################################

2017-01-19 20:07:19 4597 7

原创 SO_REUSEPORT使用示例

SO_REUSEPORT使用示例最近计划对之前写过的后台多线程服务器重构,其中涉及到并发模型,之前是一个listener线程+N个worker线程,即用一个线程监控tcp端口,来了请求,accept一个新的socket后,丢给后面的worker线程池去处理。现在想用Linux内核支持的SO_REUSEPORT特性,减少listener线程跟worker线程之间的锁,同时去掉listener线程。示例

2016-06-20 16:50:41 13090 2

转载 C/C++ Volatile关键词深度剖析

本文转载自 http://hedengcheng.com/?p=725背景前几天,发了一条如下的微博 (关于C/C++ Volatile关键词的使用建议): 此微博,引发了朋友们的大量讨论:赞同者有之;批评者有之;当然,更多的朋友,是希望我能更详细的解读C/C++ Volatile关键词,来佐证我的微博观点。而这,正是我写

2016-05-24 14:42:15 1344 2

原创 分布式文件系统介绍

1分布式文件系统的一些概念分布式系统:分布式系统是指利用多台计算机协同解决单台计算机所不能解决的计算、存储等问题。分布式系统分两种:分布式存储和分布式计算。分布式存储主要有分布式文件系统和分布式数据库。分布式文件系统主要是用于文件存储。互联网上的所有资源,最终都会以文件的形式存放在具体的物理机器的存储设备上。存储、读取和管理这些海量的文件依靠单一的机器无疑是不行的,所以分布式文件系统应运而生。

2016-01-05 18:13:05 6842 1

原创 QFS的整体架构

1 架构图

2014-08-23 17:20:07 2783

原创 分布式文件系统QFS简介

QFS是一个开源的分布式文件xi'tong

2014-08-23 16:02:35 3703

原创 C++构造函数与析构函数总结

Author:阿冬哥Created:2013-4-20Blog:http://blog.csdn.net/c359719435/Copyright 2013 阿冬哥 http://blog.csdn.net/c359719435/使用以及转载请注明出处1 构造函数和析构函数        构造函数和析构函数是C++中面向对象的基本概念,每本教科书

2013-05-03 19:04:49 631

转载 [转载]Redis能干啥?细看11种Web应用场景

转载:http://blog.nosqlfan.com/html/2235.htmlRedis作者谈Redis应用场景作者:nosqlfan on 星期二, 六月 28, 2011 · 5条评论 【阅读:12,930 次】 毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在

2013-04-20 21:09:39 637

原创 内存池创建以及使用

Author:阿冬哥Created:2013-4-18 Blog:http://blog.csdn.net/c359719435/Copyright 2013 阿冬哥 http://blog.csdn.net/c359719435/使用以及转载请注明出处1 内存池      内存池是一种内存分配方式。一般我们习惯用new\malloc在需要使用内存时分配内存,这

2013-04-20 18:08:26 876

原创 socket tcp缓冲区大小的默认值、最大值

Author:阿冬哥Created:2013-4-17 Blog:http://blog.csdn.net/c359719435/Copyright 2013 阿冬哥 http://blog.csdn.net/c359719435/使用以及转载请注明出处1 设置socket tcp缓冲区大小的疑惑       疑惑1:通过setsockopt

2013-04-17 19:27:41 39209 3

Oracle初学者笔记

Oracle初学者笔记,和适合入门参考。简单易懂。

2009-10-12

WEKA入门中文教程(doc)

WEKA入门中文教程(doc) 学习数据挖掘,WEKA是个不错的软件。

2009-10-11

WEKA源码,包括SVM、KNN等源代码

数据挖掘软件中WEKA算法源码,慢慢看吧

2009-10-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除