自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

[email protected]

笔记备忘

  • 博客(24)
  • 资源 (2)
  • 收藏
  • 关注

原创 旧版glibc兼容旅程

一.背景在新环境编译程序部署到老环境运行。为什么不直接在老环境里面编译?因为用到了一点c++11的特性,需要较高版本的gcc进行编译;老环境默认的gcc版本太低,新版gcc的rpm包安装部署不上(glibc版本太低),源码安装高版本gcc又太麻烦。二. 错误表现注: server名字做过修改, 暂且叫my_server. 运行时报错,找不到GLIBC_2.14的符号:

2016-04-11 18:27:58 11784 2

原创 CDN源站数据同步优化总结

rsync数据同步优化

2015-12-13 18:09:32 3335

原创 udp connect偶发失败的问题定位

问题表现程序“重启”的时候偶发性失败,表现在udp connect失败,但是如果成功启动,则程序运行完全正常。 失败时出现coredump,表现为断言失败:(gdb) bt#0  0x00007ff031e28f45 in raise () from/lib64/libc.so.6#1  0x00007ff031e2a340 in abort () from/lib64/l

2014-10-10 17:26:22 2282

原创 服务器编程的一点心得

由于水平有限,以下仅仅是个人的一些心得,希望对新人有一点参考作用。另外由于时间关系,写得有点杂,有些点可能并不是跟服务器编程强相关的。性能相关1.     应用各种pool。a)       Mempool比如为了提高内存分配效率,可以使用Mem pool。当对应的场景简单时,可以自己定制私有的内存池管理。当内存池设计相对复杂的时候,可以考虑直接使用jemalloc、tcmallo

2014-09-06 00:10:48 1074

原创 tcp端口探测脚本 问题分析

【背景】最近在优化一个监控模块里面的dns解析功能,原来的做法是用旁路线程调用getaddrinfo去同步解析,解析实时性非常差,所以决定将解析改成异步执行。网上搜索了一些dns异步解析的库/接口, 大致有:getaddrinfo_a 、adns、c-ares、udns等等。这些库虽然功能相对比较全,但是在我的场景各种别扭或者低效,不能很好地满足我的需求:其实需求很简单,我就需要解析ipv4的

2014-09-05 15:55:35 1577

原创 简单高效dns ipv4解析

【头文件】/// dns协议打包解包(ipv4地址)/// @file/// @date 2014-08-29 22:13:30/// @version 1.0.0/// @author ling-zhou(周龄), [email protected]/// @copyright Tencent/// @namespace hydra#ifndef __DN

2014-08-30 19:49:15 3682

原创 选择合适的整数运算方法

【简单移位】大家都知道对于整数乘以2的幂可以通过位左移完成,整数除以2的幂可以通过位右移完成。实际上现在的编译很聪明,即使不显式地用移位的方式优化,编译器也会自动帮忙完成优化,不过前提是这个数是2的幂且是常量。  【整数除&求余】整数除法和求模往往成对的出现,如:quotient = dividend  / divisor remainder = dividend 

2014-08-21 22:40:11 1025

原创 写时拷贝惹得祸

【问题表现】hydra cgi底层库取出来的参数不对 【问题定位】1. 确认是否库的问题check out hydra-release_src-3.10.0,拷贝问题参数到单元测试用例,编译运行,表现跟上面贴图一致,确认是库本身的问题。遗憾的是,cgi底层库单元测试本身的用例全都通过。2. 走查源码仔细确认检查,cgi底层库依赖hydra_u

2014-08-20 11:24:09 596

原创 个人开发经验总结

个人心得,仅供参考一.提升规范性1. 保持规范整洁的目录结构,用不同的目录存储不同的模块。比如ugc目录存储ugc模块,activity目录存储活动平台模块。模块内部进一步细分share、接口、cgi、server等子目录。避免将不同模块的东西放到一起而显得凌乱。2. 与时俱进,文件编码尽量用utf8。3. 尽量避免使用全局using namespace

2014-08-20 11:20:55 781

原创 用strace跟踪系统调用

之前有新同事在问,strace的时候怎么样过滤掉某些系统调用, 这里简单总结下,希望对新同事有参考作用 部分跟踪举例:1.     只跟踪epoll_wait和gettimeofday,其他系统调用通通过滤掉,可以这样: strace -e trace=epoll_wait,gettimeofday(逗号分隔)2.     过滤epoll_wait和gettimeo

2014-08-20 11:15:59 1831

原创 tcp连接失败分析

前端时间业务团队在使用平台oidb中转服务的时候,偶尔出现connect失败的情况。这里简单总结下connect失败的可能原因,供参考。 一。网络不通由于iptables防火墙隔离等原因,导致两台机器之间无法连接。 二。网络波动偶尔出现的网络故障,导致两台机器之间连接失败。一般可以通过ping找到蛛丝马迹 三。client端分配不到“端口”可能的原因有2个:

2014-08-20 11:12:15 20478 1

原创 让c/c++代码更好的缩进

将以下内容追加到开发机自己用户的 ~/.vimrc文件中,可以让vi更好的对C/C++代码进行缩进。cinoptions是缩进相关的选项。具体的可以查看vim帮助IndentNamespace是用以防止namespace内部缩进的函数。如果不希望namespace内部内容缩进的话,就加上这个函数;否则不要加上这个函数(或者将setlocal indentexpr=Inden

2014-08-20 11:03:27 1371

原创 快速命令行编辑

可能很多人还在使用Backspace退格键一个字符一个字符进行删除,如果你还在用方向键一个字符一个字符的移动,那么下面的介绍会对你有所帮助。 一.Emacs模式(系统默认): Ctrl+r       然后输入若干字符,开始向上搜索包含该字符的命令,继续按Ctrl+r,搜索上一条匹配的命令CtrL+p     查找上一个历史命令Ctrl+n     

2014-08-20 11:02:00 512

原创 慎用string.resize()

string作为stl模块库的一部分,应用非常广泛,但是用的不好的话,会导致性能低下。可能很多人(包括我之前)认为resize操作仅仅只是改变string对象的内部偏移量,实际的情况是:除了改变内部偏移量之外,resize可能伴随内存重分配,  而且还会作填充操作,见帮助文档:          不适当使用resize可能会严重影响性能。见如下代码(修改自某底层库)

2014-08-20 10:59:35 5461

原创 gcc内建原子操作总结

gcc从4.1.2开始提供__sync_*系列的内建函数,用于提供加减和逻辑运算的原子操作。type是1,2,4或8字节长度的整形。后面的可扩展参数(...)用来指出哪些变量需要memory barrier,因为目前gcc实现的是full barrier(类似于linux kernel 中的mb(),表示这个操作之前的所有内存操作不会被重排序到这个操作之后),所以可以略掉这个参数。在3

2014-08-20 10:57:41 1444

原创 gcc实用扩展总结

一.              将语句跟声明放在表达式里面({  语句、 声明 })  ,可以任意组合声明和语句,但是最后必须是一个语句,表示整个表达式的返回值比如:              二.              局部标签    __label__ end;    for (int i = 0; i        

2014-08-20 10:56:47 790

原创 警惕sscanf的使用

sscanf跟scanf类似,只不过sscanf是扫描字符串,而scanf是扫描标准输入,用得好的话会给解析带来极大的便利性,用的不好的话,可能导致程序陷入死循环,进而导致cpu 100%。 案例 可能不会像你预期的一样,得到一个三元组{1, 120, 6}, 而是让你得到无数个三元组:     原

2014-08-20 10:56:32 2444

原创 linux下如何printf size_t/uint64_t

一. linux下蛋疼的size_t/ssize_t     32位环境下size_t被定义为unsigned int, 64位环境下size_t被定义为unsigned long, 对于一个需要同时运行在32位、64位环境的程序来说,在printf或者LOG size_t的时候会比较纠结,一般采用如下第1、2两种方式:1. 强制类型转换统一转换成unsigned lo

2014-08-20 10:51:46 11237 1

原创 利用ctags提升看、写代码的效率

用vi有一段时间了。要方便的查看c、c++代码的话,还是要依赖一些工具、插件之类的东西,比如用ctags生成符号链接文件。用ctrl+]可以方便的跳转到符号的定义处。vi初学者可能只是简单的使用ctags,而没有使用ctags的一些有用的选项。不加选项使用ctags的话,只能生成一些最基本的符号链接信息。一.目前我使用的ctags的完整参数,供参考:alias ctags="cta

2014-08-20 10:51:12 851

原创 gcc初始化顺序问题

【问题】    最近在封装一个底层库的时候遇到诡异的问题,用gcc4.1.2编译的程序一切正常,    用gcc4.8.2编译的程序运行总是coredump。 经过分析后发现是初始化顺序问题,代码如下(经过简化):     typedef std::map typeid_t;    typeid_t TYPEID;      __attrib

2014-08-20 10:35:17 2109

原创 好用的epoll接口封装

/// epoll接口封装/// @file/// @date 2012-02-14 15:21:53/// @version 1.0.0/// @author baozhou(周龄), [email protected]/// @copyright Tencent/// @namespace hydra//  Revision: $Id: epoller.h 1519

2014-07-16 10:15:17 858

原创 简单高效uri解析

header:/// @brief 解析形如[protocol://]domain[:port][path][?query_string]的url/// @param[in] url 被解析的url/// @param[out] protocol 解析到的形如 http/https/ftp/... 的协议串(没有默认为http)/// @param[out] domain 解析到的

2014-07-16 10:05:18 1118

原创 C/C++ 资源自动清理

【函数/语句块 级别的自动清理】方式一.借助类的析构原理class C{public:    C(int* ptr): _ptr(ptr) { }    virtual ~C() { delete[] _ptr; } private:    int* _ptr;}; void func(){         C obj(new int[5])

2013-10-15 13:40:50 1254

原创 integer string极速互转 优化过程

【前言】在C/C++编码中有大量的string、interger互转需求,系统接口要么不好用,要么性能不高。基于性能优化、个人兴趣两个主要目的,对string、integer互转优化做了大量的尝试,下面分享一下优化中的一些过程。【优化效果概览】32位环境(-O2):[----------] 4 tests from performance

2013-10-15 13:35:16 1334

python expect工具

python expect工具。 自动交互完成: 1. 批量并行scp/rsync 2. 批量并行ssh并执行命令 3. 挨个自动ssh,退出(ctrl-D、exit)后,自动登入下一台机器

2014-01-21

Exploring Expect

Expect专业教程,非常全面的讲述expect的语法。expect是对tcl语言的扩展,如果对tcl语法熟悉的话,可以快速上手。如果不熟悉的话,需要从基本语法入手。expect可以完成大量的自动交互,将我们从繁杂重复的操作中解放出来

2013-10-15

空空如也

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

TA关注的人

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