自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

aaronjzhang_的专栏

专注linux、分布式存储、云计算、C++、python

  • 博客(38)
  • 资源 (1)
  • 收藏
  • 关注

原创 linux环境下给BOOST库编译静态库加上-fPIC选项

在linux环境下,使用静态方式编译boost时,bjam没有添加-fPIC, 解决办法如下: 编辑tools/build/v2/tools/gcc.jam文件,将第391行的if( $link ) = shared 注释掉,如下图:

2014-09-28 16:00:54 6370

原创 设置vim的项目配置

使用vim的C-f快捷键可以直接跳转到其对应的to

2014-05-21 10:07:50 1431

原创 二元查找树转换成双向链表

问题描述题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。

2014-05-11 12:42:50 1075

原创 android手机通过USB共享电脑网络

1. 首先手机需要解锁,获取root权限,怎么获取root权限,网上有很多方法,自行google。2. 手机上安装一个android超级终端2. 与Windows XP进行USB绑定,参见:http://www.android.com/tether#usb3. 修改手机网络配置 route add default gw 192.168.42.240 dev usb0

2013-12-30 14:48:36 7660 1

原创 C++实现的无锁队列

关于无锁队列的实现,网上有很多的文章,其实现原理都来自论文implementing_lock_free.pdf国内关于无锁队列实现介绍的较好的博客:http://coolshell.cn/articles/8239.html关于理论的介绍上述文章已经写的非常好了,因此本文不会复述无锁队列实现原理,只讲解下实现细节以及过程中遇到的问题。本文实现的是一个多生产者多消费者无锁队列,相比于单生

2013-12-06 17:42:25 5232 4

翻译 什么是分支预测?

首先让我们来看一下铁路枢纽:

2013-08-22 15:30:13 1896

翻译 不可表示数求解分析

我把庞果英雄上面的“不可表示数”的题目放到stackoverflow上后,一位国际友人给出一个相当漂亮的分析。原题:给定表达式[x/2] + y + x * y, 其中x,y都是正整数。其中的中括号表示下取整,例如[3/2] = 1 , [5/2]  = 2。 有些正整数可以用上述表达式表达出来,例如正整数2,当取x = y = 1时,可以把2表达出来 ( 解释下:当x=y=1时, [x

2013-08-14 15:55:39 1564 8

原创 awk编程介绍

我们为什么需要awk?我并不打算一上来就向大家介绍什么是awk,那样的话会比较枯燥,也许大家还没看完就睡着了...!所以我们先来看一个需求,需求如下SECode,Symbol,Exchange,TradeDate,AI,LCClose,COpen,CHigh,CLow,CClose,CAVGPrice,CChg,CPChg,LDClose,DOpen,DHigh,DLow,DClose

2013-08-09 16:28:46 1094

原创 一个C/C++结构体初始化有趣的现象

我们知道C语言当中结构可以使用{}进行初始化,例如有结构体定义如下:typedef struct type_t { int a; int b; int c; int d;}type_t;我们可以使用下面的语句来初始化一个变量:struct type_t o = { 1, 2, 3, 4 }但是如果像下面这样来初始化,结果会是什么呢?type_t o = { 8, o.a, o.b, o.c }

2013-07-25 15:32:13 1318

原创 TCMalloc源码阅读(四)--ThreadCache分析之空闲内存链表

前面几篇博文中已经描述了TCMalloc将内存从小到大划分成很多个固定大小的内存块,将每种大小的空闲内存块使用链表管理起来。本文就来分析下ThreadCache中空闲链表的实现。TreadCache::FreeList的代码如下: class FreeList { private: void* list_; // Linked list of nodes

2013-04-21 22:34:23 3063

原创 linux的bash shell编程笔记--脚本参数

前言自从接触linux以来,看过一些脚本,但是还从没正儿八经的写过一个脚本。这次本人被分配一个任务,写一个数据文件维护工具,数据文件是公司软件内部产生的一些记录,这些文件分散在各个目录。已经写了一个对单个文件处理的小工具,现在需要一个脚本遍历指定目录、指定类型的文件,对这些文件调用前述工具来进行处理。写下此文来总结此次编写脚本所涉及的bash shell知识。脚本参数因为脚本需要执行时

2013-04-11 15:26:47 1232

原创 linux下使用pyinstaller打包python脚本

最近给运维写一个系统维护的python脚本,但是被告知生产环境有很多服务器没有安装python解释器,于是在网上搜索多pyinstaller解决方案,本文简单记录之。1. 下载pyinstaller。最新的pyinstaller版本为2.0版本,官方网站http://www.pyinstaller.org。下载链接:http://jaist.dl.sourceforge.net/proje

2013-04-09 16:40:41 22018 7

原创 VirtualBox设置共享文件夹

因工作需要linux32和linux64两种环境,而服务器上只有linux64环境,因此在windows上使用VirtualBox安装了一个RedHat5. winodws和virtualbox之间采用共享文件夹进行数据交换,本文记录VirtualBox设置共享文件夹过程。1. 点击VirtualBox左上角“控制”->“设置”菜单,会弹出设置界面,再点左边列表底部的“共享文件夹”,在

2013-04-09 15:39:08 1571

原创 给RedHat配置科大Linux镜像的yum源

RedHat安装完成后需要注册才能使用RedHat官方的yum源,当然注册时要钱的。不过没关系,有很多免费的可以使用。本文就记录下个人配置科大Linux镜像的CentOS的yum仓库。1. 从http://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/centos?codeblock=2下载科大的CentOS-Base.repo2. 将Cen

2013-04-09 11:14:26 2272

原创 tcmalloc源码阅读(三)---ThreadCache分析之线程局部缓存

线程局部缓存tcmalloc采用线程局部存储技术为每一个线程创建一个ThreadCache,所有这些ThreadCache通过链表串起来。线程局部缓存有两种实现:1. 静态局部缓存,通过__thread关键字定义一个静态变量。2. 动态局部缓存,通过pthread_key_create,pthread_setspecific,pthread_getspecific来实现。静态局

2013-04-02 15:02:52 3549

原创 TCMalloc源码阅读(二)--线程局部缓存ClassSize分析

TCMalloc小对象分配机制首先我们回顾下TCMalloc文档的小对象分配机制。文档中说明TCMalloc给每个线程都保存一个缓存池,缓存池里有各种大小的内存对象。小内存分配过程如下:1. 将要分配的大小映射到对应的对齐对象。2. 在当前线程的局部缓存中查找该对齐对象链表。3. 如果该链表不为空,删除链表第一个节点并返回给调用者。问题1. 小对象是如何划分的?2.

2013-03-21 17:21:21 2948

原创 TCMalloc源码阅读(一)

前言最近一直在折腾内存管理,先是自己实现了一个非常简单的内存管理,但是和malloc对比测试之后发现效率相差甚多。偶然在网上发现TCMalloc,下载下来之后与malloc做了简单的对比测试,惊奇的发现tcmalloc的速度果然如它自己所述,比glibc的malloc快了很多倍。遂果断扔掉自己实现的那个简单的内存管理,改用tcmalloc。同时也对tcmalloc的实现感到非常的好奇,因此决定

2013-03-21 11:02:01 6175 2

翻译 TCMalloc介绍

动机TCMalloc是一个非常快速的内存管理库,它比glibc 2.3的malloc以及其他的一些内存管理库都要更高效。ptmalloc2在2.8GHz P4机器上执行一次malloc/free(分配释放小的内存块)大约耗时300纳秒。相同的执行操作,TCMalloc的实现只需要大约50纳秒。TCMalloc同时也为多线程编程减少了锁的竞争,对于小块内存分配,TCMalloc实际上没有锁开

2013-03-20 14:18:36 4506

原创 进程内存监控

我在上一家公司的负责的项目中有一个监视指定进程的内存的小工具,这个工具监视指定进程的内存占用,并写到xml文件,可以通过浏览器打开xml,显示内存占用曲线。这样很容易看出进程是否存在内存泄漏,泄漏是否严重。不过这工具是windows下的,现在在linux环境下工作,也想搞一个这样的工具。既然在Linux下工作,那就要充分利用linux的优势--各种强大的工具,通过管道将这些工具组合起来几乎可以

2013-03-11 15:34:39 2606

转载 C++内存管理

C++内存管理[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃

2013-03-07 13:17:29 1058

原创 python下的事件驱动编程

最近用python写一个网络服务的模拟测试程序,先是用同步socket实现了一个简单的server,后来发现要没法添加定时器来定时处理一些任务,于是网上搜索python的异步事件框架库,发现了gevent。1. gevent介绍gevent是一个python的网络库,它使用greenlet轻量级线程,使用libevent实现事件驱动。我写的模拟测试程序只使用了libevent的事件驱动,下

2013-03-06 17:03:35 7594

原创 TCP大并发短连接造成TIME_WAIT问题解决办法

这两天用python写了一个TCP的短连接压力测试脚本,模拟100路并发不间断的访问。脚本运行几分钟后开始全面报错,错误代码为10048或者99,使用netstat命令查看网络发现大量的连接处于TIME_WAIT状态。仔细阅读了《unix网络编程》相关章节,弄清楚了问题发生的原因,并找到了解决办法。问题原因:TCP连接的Close默认行为是将socket标记为关闭然后立即返回。此时so

2012-12-08 23:06:21 4579

原创 解决 vim Swqp file XXX already exists问题

问题描述:使用vim打开一个文件时vim报vim swap file xxx already exists。该问题不影响对文件的操作,但是每次都报的话比较烦人。问题原因:上一次使用vim编辑该文件时没有正常的关闭,例如直接关闭了terminate,导致在该文件目录下存在一个临时文件.xxx.swap。可用ls -al命令可以看到。解决办法:直接删除该.xxx.swap

2012-11-15 12:17:32 1812 1

转载 简明vim练级攻略

vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令。非常不错。——————————正文开始——————————你想以最快的速度学习人类

2012-11-14 22:32:20 642

原创 读书笔记-阅读无锁List实现疑惑

看了IBM上一篇文章--《不用互斥锁的并发数据结构》http://www.ibm.com/developerworks/cn/aix/library/au-multithreaded_structures2/index.html 对照着自己打算写一个lock free list数据结构,实现过程中发现还是有潜在的问题,问题如下:T Stack::pop( ) { i

2012-10-27 12:58:34 766

转载 设计不使用互斥锁的并发数据结构

简介本文是本系列的最后一篇,讨论两个主题:关于实现基于互斥锁的并发链表的设计方法和设计不使用互斥锁的并发数据结构。对于后一个主题,我选择实现一个并发堆栈并解释设计这种数据结构涉及的一些问题。用 C++ 设计独立于平台的不使用互斥锁的数据结构目前还不可行,所以我选用 GCC version 4.3.4 作为编译器并在代码中使用 GCC 特有的 __sync_* 函数。如果您是 WIndo

2012-10-27 10:58:34 1258

原创 linux查看帮助文档的小常识

man 分为1 2 3 4 5 6 7 8等级别1、Standard commands (标准命令)2、System calls (系统调用)3、Library functions (库函数)4、Special devices (设备说明)5、File formats (文件格式)6、Games and toys (游戏和娱乐)7、Miscellaneous (杂项)

2012-10-26 23:59:38 764

转载 linux查看系统资源

用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况...还有一种办法是 ps -ef | sort -k7 ,将进程按运行时间排序,看哪个进程消耗的cpu时间最多。top: 主要参数 d:指定更新的间隔,以秒计算。

2012-09-27 15:29:38 1775

转载 socket同步异步阻塞非阻塞区别

首先来解释同步和异步的概念,这两个概念与消息的通知机制有关.举个例子,比如我去银行办理业务,可能选择排队等候,也可能取一个小纸条上面有我的号码,等到排到我这一号时由柜台的人通知我轮到我去办理业务了.前者(排队等候)就是同步等待消息,而后者(等待别人通知)就是异步等待消息.在异步消息处理中,等待消息者(在这个例子中就是等待办理业务的人)往往注册一个回调机制,在所等待的事件被触发时由触发机

2012-09-27 15:28:59 668

原创 linux下查看动态增长的log文件

在linux下查看动态增长的log文件可以使用命令 tail -f filename

2012-09-20 00:40:13 5272

转载 linux编程-守护进程编写

linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。 同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程

2012-09-20 00:38:50 1205

转载 VIM命令列表

英文版原文链接: http://www.tuxfiles.org/linuxhelp/vimcheat.html小弟稍微翻译了一下,看中文可能会舒服一下。。。操纵文件Vim命令动作:e filename 打开一个新文件,可以用TAB键自动补全:w filename保存更改。如果不指定文件名,Vim会存为你正在编辑的文件。如果要存为不同的文件,需要指定文件名:q 退出

2012-09-16 14:07:55 812

转载 autoconf和automake

本文介绍了在 linux 系统中,通过 Gnu autoconf 和 automake 生成 Makefile 的方法。主要探讨了生成 Makefile 的来龙去脉及其机理,接着详细介绍了配置 Configure.in 的方法及其规则。引子无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或 make

2012-09-16 13:18:01 611

原创 debian下ffmpeg编译过程总结

自己捣鼓在debian上编译ffmpeg,以流水账的形式记录下过程。一、 下载ffmpeg     ffmpeg使用git进行源码管理,debian环境下需要先安装git,git的安装本文不描述,详细安装方法在网上搜索下。git安装完成后输入以下命令下载ffmpeg源码git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg二、.ffm

2012-09-12 12:22:32 1598

转载 debian环境安装svn

DEBIAN下安装SVN来源: ChinaUnix博客  日期: 2008.08.27 11:39 (共有条评论) 我要评论 1.安装debian:/# aptitude install subversion subversion-tools apache2 libapache2-svn2.创建一个新的su

2012-09-11 22:22:08 820

原创 makefile解析

VERSION = 1.1.0.1# A:Alpha B:Beta RC:Release Candidate R:ReleaseSTAGE =CC=g++# "$" 变量替换OBJFILES:=$(shell find ./ -iname '*.o')DFILES:=$(DFILES1) $(DFILES2)#SOURCE CODE wildcard

2012-09-04 12:53:12 851

转载 debian 安装gcc

1.编辑/ect/apt/sources.list,最前面的两句是设置cdroom为apt源的,将其注释。2. 输入apt-get install build-essential

2012-06-15 11:49:15 1211

原创 debian无root权限,如何将用户添加到sudo组中去?

最近下载了debian6.0,在vmware中安装完成之后发现root用户无法登陆,用普通用户登陆后也无法使用su, 使用sudo是也报xxx is not in the sudoers file. This incident will be reported错误。网上一般的解决方法是切换到root权限下修改/etc/sudoers文件,但是前面我说过,无法使用su,怎么办呢?在google上搜索

2012-06-15 11:27:46 6206

Linux Shell编程

高清带目录的linux shell编程书籍

2013-01-17

空空如也

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

TA关注的人

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