自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

XXL的技术博客

C++、Linux、并发编程、网络编程、数据库

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

原创 读写锁的性能问题及替代方案

这两天看了一些资料,谈到了读写锁的性能问题,并建议不要使用读写锁,而采取其他方案

2014-04-13 14:42:10 9077 2

原创 real time,user time,sys time

程序运行时间的几个衡量标准包括:real time,user time和sys time

2014-04-12 21:42:11 2698

转载 编程中的命名设计那点事(转)

博客转载的文章太多了,其实也想多弄点原创,无奈技术太水。看到好文又想记录

2014-04-12 18:56:26 766

转载 std::string的Copy-on-Write:不如想象中美好

转载地址:Copy-on-write(以下简称COW)是一种很重要的优化手段。它的核心思想是懒惰处理多个实体的资源请求,在多个实体之间共享某些资源,直到有实体需要对资源进行修改时,才真正为该实体分配私有的资源。COW技术的一个经典应用在于Linux内核在进程fork时对进程地址空间的处理。由于fork产生的子进程需要一份和父进程内容相同但完全独立的地址空间,一种做法是将父进程的地址空间

2014-04-08 11:56:17 1334

原创 怎样加快C++代码的编译速度

完美世界 笔试题问到了“如何优化C++编译时间?”C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。本文介绍了加快C++编译速度的方法,一起来看。C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。比如我现在工作的源代码,哪怕使用Incredibuild调动近百台机子,一个完整的build也需要四个小时,

2013-11-04 14:53:10 1629

原创 用GDB调试core dump文件

http://www.cnblogs.com/lbsx/archive/2010/10/09/1846535.htmlhttp://vaqeteart.iteye.com/blog/1013397http://blog.ddup.us/?p=176my.oschina.net/michaelyuanyuan/blog/68618http://blog.csdn.net/wen000

2013-10-28 16:05:50 1292

原创 伙伴分配器的一个极简实现

转自酷壳:http://coolshell.cn/articles/10427.html提起buddy system相信很多人不会陌生,它是一种经典的内存分配算法,大名鼎鼎的Linux底层的内存管理用的就是它。这里不探讨内核这么复杂实现,而仅仅是将该算法抽象提取出来,同时给出一份及其简洁的源码实现,以便定制扩展。伙伴分配的实质就是一种特殊的“分离适配”,即将内存按2的幂进行划分

2013-10-23 16:14:20 1236

原创 百度2014校招一道笔试题

百度2014校招笔试题题目:一幢大楼的底层有1001根电线,这些电线一直延伸到大楼楼顶,你需要确定底层的1001个线头和楼顶的1001次线头的对应关系。你有一个电池,一个灯泡,和许多很短的电线,你需要上下楼几次才能确定电线接头的对应关系?注明:这里每次上下楼都带着电池和灯泡,以及每次接口连接,对应接口的之前连接过的线都将拆除,所以下面不再说明。首先将底层一对接口(这

2013-10-09 12:49:16 1111

原创 Hadoop Pipes “Server failed to authenticate”错误及解决

问题描述:《hadoop实战》(第2版)3.5节的Hadoop Pipes例子。makefile的内容:HADOOP_INSTALL=/home/xxl/hadoop-1.1.2PLATFORM=Linux-i386-32SSL_INSTALL=/usr/local/sslCC=g++CPPFLAGS=-m32 -I$(HADOOP_INSTALL)/c++/$(PLA

2013-10-04 23:34:35 3498

原创 排序总结(源代码)(增加单链表快排)

插入排序:/* * ===================================================================================== * * Filename: 1.cc * * Description: * * Created: 2013年09月21日 15时52分13秒 *

2013-09-21 19:01:19 984

转载 一致性hash算法 - consistent hashing

一致性hash算法(consistenthashing)张亮consistent hashing算法早在1997年就在论文Consistenthashing and random trees中被提出,目前在cache系统中应用越来越广泛;1基本场景比如你有N个cache服务器(后面简称cache),那么如何将一个对象object映射到N个cache上呢,你很可能会采用类似下面的通用

2013-09-17 15:51:20 711

转载 二叉树的非递归遍历

二叉树的非递归遍历         二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说

2013-09-12 14:35:51 936 1

转载 Linux 套接字编程中的 5 个隐患

在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性。事实上,很难找到一种不支持 Sockets API 的现代语言。该 API 相当简单,但新的开发人员仍然会遇到一些常见的隐患。本文识别那些隐患并向您显示如何避开它们。隐患 1.忽略返回状态第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分

2013-09-04 23:16:07 756

转载 Linux C++线程池

本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。    为什么需要线程池目前的大多数网络服务器,包括Web服务器、Email服务器

2013-08-30 20:30:46 1032

原创 select,poll,epoll介绍和区别

http://www.cnblogs.com/xuxm2007/archive/2011/08/15/2139808.htmlhttp://www.cnblogs.com/xuxm2007/archive/2011/08/15/2139809.htmlhttp://www.cnblogs.com/xuxm2007/archive/2011/08/18/2144976.h

2013-08-28 10:53:05 830

原创 整除的数有哪些特征?

整除的性质:(1)如果a能被c整除,b也能被 c整除,那么a+b和a-b也都能被c整除。(2)如果a能被b整除,那么ac也能被bc所整除。(3)如果a能被b整除,b能被 c整除,那么a也能被c所整除。(4)如果a能被b,c所整除,且(b,c)=1,那么a也能被b×c整除。(5)如果a、b、c两两互质,且a、b、c都能整除m,那么abc能整除m。能被1、2、3

2013-08-10 10:26:44 2496

原创 hadoop命令(仅供自己查看使用)

1 进入MapReduce目录(如果没有则mkdir):cd ~/MapReduce2 创建MapReduce应用程序wordcount的目录mkdir wordcount3 编译生成.class(pwd为~/MapReduce)javac -classpath ~/hadoop-1.1.2/hadoop-core-1.1.2.jar -d wordcount Word

2013-08-03 19:51:34 1384

转载 单例模式——C++(线程安全)

一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety.使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈。1、静态成员实例的懒汉模式: 1 class Sing

2013-06-20 11:26:10 2399

原创 【分治法】求数组的最大元和最小元

给定n个数据元素,找出其中的最大元和最小元。简单直观的方法:一个一个地找,用n-1次比较来找出最大元,再用n-2次比较找出最小元,比较次数(基本运算)为2n-3次。此题最蛋疼的是为什么会想到用分治法来解决,为什么会知道分治法时间复杂度稍好,常数小?所以正常人不会往这方面想。当用分治法时,时间复杂度的数量级不变,但比较次数减少,具体计算、证明参见邓建明老师算法课件。本算法直接

2013-05-14 00:11:45 4825

原创 C++中接口与实现分离

参考《Effective C++》中条款31:将文件的编译依存关系降至最低C++实现接口与实现分离可以有多种方式,比如利用虚函数,来实现运行时的动态绑定,本文采用另一种方法,即代理模式,同时解决了文件间编译依赖关系的问题。第一个例子没有实现接口与实现分离,作为一个反例,文件的依赖关系如下:Name.h:定义了类NameName.cc:定义了类Name中的方法GetName(

2013-05-13 20:53:38 1186

原创 用汇编解释左值,右值,临时变量和引用

左值,LValue:Location Value,并非Left Value。Location是指在内存中能够找到该变量的地址,即内存中一定有一个地方,存放了该变量。右值,RValue:Read Value,并非Right Value。这种类型的变量是只读的,那是不是在内存中就不存在 存放该变量的地方呢?请看下面的程序:/* * ==========================

2013-05-08 16:50:25 2042

转载 阿里巴巴集团去IOE运动的思考与总结

【导读】预计2012年5月7日,阿里巴巴集团将正式公布技术团队合并的事情,涉及的部门:阿里巴巴运维团队、阿里巴巴DBA团队、阿里巴巴平台技术部、大淘宝运维团队、大淘宝DBA团队、大淘 宝核心系统部、阿里云计算运维团队、阿里云计算DBA团队和阿里巴巴集团安全团队,从一些可以猜测到的信息分析,上述技术团队合并之后,大淘宝的员工将成为相关技术团队的掌舵者。去IOE政治运动是阿里巴巴集团首席架构师某博

2013-05-07 12:13:45 1226

转载 结构体对齐的具体含义(#pragma pack)

##############################################################################################        转载的第一篇########################################################################################

2013-05-04 10:43:44 844

原创 TinyOS下的makefile(持续更新)

背景知识:节点 主要由 微处理芯片  和 无线射频芯片 组成Mica2:        Atmega128L        CC1000Micaz:        Atmega128L        CC2420telos:          MSP430               CC2420芯片代码存于tos/chips目录或平台子目录里。一个平台通常有一个.platfo

2013-04-22 12:17:02 3436

原创 vim for nesC

首先到http://www.vim.org/scripts/script.php?script_id=1847下载最新版本的插件将下载的nc.vim拷贝到~/.vim/syntax目录中然后修改home下.vimrc的配置,将[python] view plaincopyaugroup filetypedetect    au! BufRead,BufNew

2013-04-21 20:33:14 984

原创 重新配了一下vim

之前把vim弄得乱七八糟,这次重新弄了一下。现在主要有以下功能和对应插件:1 按 . 或 :: 或 -> 的自动补全,补全是根据自定义的类型以及C++标准库类型 ;快捷键跳转到函数定义: 插件ctags,插件omnicppcomplete2 注释等快捷键:插件c-support3 在输入代码时自动匹配,不用按快捷键,匹配语言关键字或是曾经输入的历史记录:插件autocomplpop

2013-04-21 19:25:31 1057

原创 将数组作为参数的单参数函数

一切尽在代码中:/* * ===================================================================================== * * Filename: 1.cc * * Description: 一般向数组传递参数都是传数组名(实际上在函数参数中被转换为指向第一个 *

2013-04-15 15:28:39 936

原创 C++引用的底层实现&引用解绑定

SB都知道引用是对象的别名,但是你要知道引用到底是什么,从底层实现角度来说,引用其实是对指针的封装。如:int a = 8;int &b = a;不管我们怎么用变量b,编译器好像进行了这样一种操作:它在b之前加上一个*,即:b = 4;   实际上类似于*b = 4;为了验证引用就是通过指针实现,下面通过一个实例来演示。注:编译器用的是G++。VS编译器打印

2013-04-15 14:22:43 1258

原创 一个诡异的问题,【已解决】

#include #include using namespace std;class A{ public: int a; char c1; };class B : public A{ char c2;};class C : public B{ char c3;};int main(){ cout << sizeof(A) << " "

2013-04-09 11:11:22 878

原创 子进程复制了父进程的什么

如果你对代码段、数据段、栈、堆存放哪些数据还不是很清楚,请先看我写和Linux 内存管理。有时会出现父子进程变量的地址一样,但值不一样。看下面代码:#include#includestring.h>#include#includemain(){ char str[4]="asd"; pid_t pid=fork(); if(pid==0){

2013-03-30 15:03:50 774

原创 函数的声明与定义(以前没注意过!!)

直接上程序,共两个源文件1.c:#includevoid func1(){ printf("func in 1.c\n");}main.c:void main(){ int func1(char); func1(12);}在Linux下编译:cc main.c 1.c没有错误,运行结果为:func in 1.c在VS下运行结果相同。

2013-02-23 19:56:54 519

原创 位运算,效率至上

本文不定期更新表达式 x &= ( x - 1 )  有很大用处,删除x最右边值为1的一个二进制位,在判断一个整数二进制中含有多少个1时,效率比逐位循环判断效率要高。比如,x = 10000000 时,前者只用循环1次,后者循环8次。

2013-02-23 14:59:22 867

原创 Linux访问Windows远程桌面——rdesktop用法

情景:   笔记本:Ubuntu11.10,已安装rdesktop   台式机:Windows XP注意:  windows 的服务中的 Terminal Servies 需要开启。我的电脑 右键 属性 远程中,勾选 允许远程用户链接到此计算机。另外,退出的时候选择注销,而不是关机!用法说明(官方文档):Usage: rdesktop [options]

2013-01-17 10:02:00 1311

转载 gcc和g++的区别

我们在编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而c++代码用g++,或者说编译用gcc,链接用g++,一时也不知哪个说法正确,如果再遇上个extern "C",分歧就更多了,这里我想作个了结,毕竟知识的目的是令人更清醒,而不是更糊涂。误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,

2013-01-09 21:47:29 566

原创 placement new

placement new 在一块已分配内存上创建对象placement new 是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下: void *operator new( size_t, void *p ) throw()  { return

2012-12-10 23:21:17 566

原创 浅谈内存分析

(一)先解释一下静态内存分析与动态内存分析             下面以C++为例解释:程序中用于存储数据的变量和数组等实体在使用前都必须通过说明语句进行定义。C++编译器将根据这额说明语句了解他们所需存储空间 的大小,并预先为其分配适当的内存空间。也就是说,这些变量或数组在内存中所占据的空间大小必须在编译时(即程序运行前)确定下来的,这种内存分配方式称 为“静态存储分配”

2012-12-10 23:20:56 557

转载 缓存、缓存算法和缓存框架简介

引言我们都听过 cache,当你问他们是什么是缓存的时候,他们会给你一个完美的答案,可是他们不知道缓存是怎么构建的,或者没有告诉你应该采用什么标准去选择缓存框架。在这边文章,我们会去讨论缓存,缓存算法,缓存框架以及哪个缓存框架会更好。面试“缓存就是存贮数据(使用频繁的数据)的临时地方,因为取原始数据的代价太大了,所以我可以取得快一些。”这就是 programmer one (pro

2012-12-05 18:12:11 585

原创 数据库顶级会议介绍:VLDB、SIGMOD、ICDE

VLDB和另外两大数据库会议SIGMOD、ICDE构成了数据库领域的三个顶级会议。VLDB (Very Large Data Base) 是数据库研究人员,供应商,参与者,应用开发者,以及用户一年一度的主要国际论坛。VLDB国际会议于1975在美国的弗雷明汉马 (Framingham MA) 成立,第一届VLDB就吸引了近100篇文章和150多个参与者,取得了巨大的成功。随着时间的推移,VLDB会

2012-12-02 10:37:54 15606

转载 Hibernate框架ORM的实现原理

1.什么是ORMORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。2.什么是Hibernate对于Hibernate的称呼有很多,比如工具、技术、框架以及解

2012-10-30 14:37:18 495

原创 linux查看硬件设备信息

系统# uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsus

2012-10-16 22:43:46 710

跟我一起写Makefile

makefile资料

2013-05-13

空空如也

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

TA关注的人

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