最近

2011年8月21日 2 条评论

最近,几件事情,需要记录一下:
1. C++0x标准终于通过了,这对于所有的C++ programmer来说,是一件大事。不过要等正式的标准发布,以及主流的编译器都支持C++0x的特性,还需要一些时间,大家一起来期待一下吧。接下来,有空的时候,好好先把新标准中新增的部分学习一下,尝尝鲜先~~
2. 下周末要开始北欧四国之旅了,上半年辛苦了大半年换来的,虽说来得有点迟,但还是蛮期待的。旅游之前,手头的工作还有不少,这周要好好加把劲了,把事情都尽量往前赶赶,这样回来之后就不致于太紧了。
3. 分享一个算法,用于设计分布式cache系统时比较实用的一致性hash算法,可以在尽量保证系统灵活性的前提下,降低系统的复杂性,感兴趣的朋友可以看这里:一致性hash算法
4. 一年一度的校招又要开始了,好多同学都要开始找工作了,祝大家都能找到自己满意的工作,想来深圳的同学们,提前联系我~~

分类: 生活感悟 标签: , , , 168 views

无题

2011年8月14日 5 条评论


分享几条这段时间的心得体会,与朋友们共勉:
1. 做事做到极致,首先要让自己满意,如果自己都不满意,别人肯定也会不满意
2. 优秀是一种习惯,培养这种习惯很重要,一当养成了很受用
3. 做任何事情,不论大小,做最充分的准备,结果会比预期好很多
4. 正直是做人的基本原则,正确的价值观、是非观很重要
5. 读万卷书,行万里路,怀淡定心,多读些书,会让周围躁动的世界安静下来

分类: 生活感悟 标签: 100 views

C++类型转换(type cast)详解

2011年8月7日 4 条评论

在C中,类型转换相对比较简单,直接加括号强制转即可,不过这样做的后果,就是很难保证类型安全,所以,在C++中,虽然还允许C方式的类型转换,但是已经成为deprecated的方式了,良好的C++编程习惯都不推荐使用C方式的类型转换了。C++提供了类型相对安全的转换方式,本文的主要内容,就是介绍C++中的各种类型转换方式,以及各自用在什么样的场合下,有什么需要注意的地方,帮助大家更好的掌握类型转换,更好的驾驭自己的程序。
dynamic_cast,static_cast, const_cast和reinterpret_cast在C++中被统称为显式类型转换,在介绍它们之前,有必要介绍一下C++的隐式类型转换。隐式转换,就是不需要什么特殊运算符的转换,它是在变量赋值过程中自动发生的。在C++中,允许的隐式转换,主要包括以下两种方式:

  • 1. 基本类型之间的隐式转换
  • 阅读全文…

    谈谈程序的可扩展性

    2011年7月30日 5 条评论

    光阴如棱,写程序也有好几个年头了。几年来,写过不少程序,也读过不少别人写的代码,各种各样、形形色色的都有。刚开始写程序的人,大都是以完成任务为主,以结果为导向的,很少会注重程序,或者说代码本身。随着写过、读过的程序越来越多,对写程序的人来说,完成任务、实现当前功能不是唯一的目标了,如何能在完成当前任务的同时,考虑一下,如果后面还会有其它的需求的话,我们现在的程序能不能在尽量不修改现有代码的前提下,通过增加一些新的代码,来实现需求、完成任务。这就是所谓程序的“可扩展性”。

    为了帮助大家更好的理解,下面看一个例子,来实实在在的体会一下程序的可扩展性。这里首先给出需求:实现一个HtmlParser, 提供解析出页面里所有img链接的功能。

  • 1. 先来看看大家最容易想到的一种实现:
  • 阅读全文…

    分类: 程序人生 标签: , , 1,078 views

    Win7共享笔记本无线网卡上网

    2011年7月24日 5 条评论

    相信很多人跟我遇到过一样的情况,宽带只支持通过modem拨号上网,不支持通过路由器上网,这时候,如果有两台以上的设备要上网的话,就会比较麻烦了。这里介绍一种通过分享笔记本无线网卡来上网的方法,下面是具体的步骤,希望到遇到同样问题的朋友有所帮助:

  • 1. 保证笔记本可以通过有线正常上网,保证笔记本无线已打开且可以正常使用。
  • 2. 分享笔记本的能够连接因特网的适配器, 具体如下图:
  • 阅读全文…

    分类: 技术杂记 标签: , 205 views

    This is Your Life

    2011年7月17日 5 条评论

    This is your life

    Do what you love, and do it often

    If you don’t like something, change it

    If you don’t like your job, quit

    If you don’t have enough time, stop watching TV

    If you are looking for the love of your life, stop 阅读全文…

    分类: 生活感悟 标签: , , 145 views

    linux程序分析工具介绍(三)——sar

    2011年7月10日 2 条评论

    本文要介绍的sar,是linux下用来分析系统本身运行情况的非常有用的工具。我们知道,程序在操作系统上要运行,要关注的点不外乎内存,CPU和IO(包括磁盘IO和网络IO)。我们的应用程序在操作系统中运行前,我们需要了解系统当前的内存,cpu和IO的使用状况,还需要明白我们的应用程序运行时自身所需要的内存,cpu和IO资源的情况。只有操作系统剩余的内存,cpu和IO资源能够满足应用程序所需要的,才能保证应用程序在操作系统中正常的运行。sar就是用来帮助我们了解操作系统当前内存,cpu和IO等资源的使用情况的一个非常方便的工具,下面通过具体的例子来介绍sar的使用。
    在介绍例子之前,首先需要说一下sar命令的基本用法:sar [option] [interval] [count]

  • 1. 通过sar获取系统内存使用相关信息
  • (1)内存使用情况统计:-r,通过这个选项,我们可以了解当前系统中内存的使用情况 阅读全文…

    分类: 程序人生 标签: , , , , 3,727 views

    两周年

    2011年7月5日 3 条评论

    2009年7月5日,从杭州到深圳,结束了青涩的校园时光,正式步入自己的职业生涯。时光荏苒,两年时间,一晃而过。回想过去的两年,感慨满满。要为这过去的两年写点什么,算是为过去的两年向自己做一个交待,也算是为了让自己更加清楚地过好今后的若干个两年。
    曾几何时,听前辈们说过,刚走出校园的前五年,是对一个人至关重要的五年。五年间的所作所为,决定一个人的一辈子。细细想来,也是有一定的道理的,很大一部分人的区别,就是这五年中慢慢产生的,有的结婚、生子了,有的在为自己的理想孜孜不倦的追求着… 五年,已经过去了两年,过去的两年,更多的是专注于对技术的热情与追逐,在钻研的过程中,的确也使自己在技术方面有了一定的造诣,可能用‘造诣’这个词有点不太恰当,但是目前还想不到其它合适的,就暂且用它吧。但是,我一直很清醒,说实话,我不是个技术狂人,我只个想做清楚自己做的事、做好自己想做的事的人。因此,追逐技术的天花板,不是我所要的。曾几何时,一直很担心,在职场摸爬滚打几年,就会被磨得没有棱角,就会忘记了自己曾经年少时的梦想,所以一路走来,一直提醒自己,或许,现在的我,的确有了一些改变。与两年前的书生意气相比,虽说多了一份成熟,多了一份对人性的思考,但是,一直没有忘记曾经年少时的梦想,信念依旧那么坚定,坚守理想的约定一直铭记于心。 阅读全文…

    分类: 生活感悟 标签: , 262 views

    80×86汇编基础(四)——Hello world!

    2011年7月3日 1 条评论

    学习过程序设计语言的朋友,应该不会对Hello world感到陌生,相信大部分朋友跟我一样,刚开始接触某种语言,写的第一个程序就是Hello world。学习C、C++、Java这些高级语言如此,学习Bash、Php、Python这些script语言亦是如此。本篇是8086汇编系列的第四篇,通过前面三篇的介绍,我们已经具备了写Hello world的基本知识,本篇就让我们来看看用8086的汇编,如何实现Hello world。在开始之前,需要说明一下,因为我个人的开发环境是在Linux下,所以本文采用了AT&T的汇编语法。关于AT&T与Intel语法的差异,我在第三篇中已经有所介绍,不了解的朋友可以先看第三篇的内容。在今后本系列的文章中,如果没有特别的说明,我所采用的环境都是Ubuntu 11.04 i386, 内核版本2.6.38-8-generic, GCC版本4.5.2, GDB版本7.2。
    下面我提供两个版本的Hello world的实现,通过这两个例子,来说明一些在Linux下用8086汇编进行程序设计的基本过程与一些注意事项:

  • 1. 通过系统调用write实现
  • 阅读全文…

    分类: 程序人生 标签: , , , 403 views

    80×86汇编基础(三)——基本语法

    2011年6月26日 2 条评论

    本文是继之前写过的两篇8086系列文章的第三篇,主要内容是对8086汇编的基本语法做一个总结与介绍。当前,在Windows平台上,用的大都是Intel的语法,而在Linux平台上,由于早期的GCC中用的是AT&T的语法,所以现在在Linux平台上,用的比较多的是AT&T的语法,Intel的语法在Linux平台上也有用,但是不常见。但是,总的来说,Intel和AT&T的汇编语法,都是目前比较常见的汇编语法,我们都有必要都进行了解一下,下面分别从几个方面通过对比,来介绍两种语法。

  • 1. 寄存器的命名
  • 1
    2
    
    AT&T: %eax, %ebx, %ecx, %edx
    Intel: eax, ebx, ecx, edx

    如上所示,AT&T的语法中,寄存器前面要加%号,而Intel的不用。 阅读全文…

    分类: 程序人生 标签: , , , 242 views

    StackOverflow初体验

    2011年6月19日 6 条评论

    随着Quora类的问答社区的风生水起,各种各样的问答社区像雨后春笋一样,慢慢地露出了新芽。今天要介绍的也是一个问答类社区,一个与Quora类问答社区相比,完全不同的问答社区——StackOverflow(www.stackoverflow.com)。Quora类问答社区是面向大众的问答社区,用户在里面可以提各种各样的问题,等专业的人士来回答,得到满意的答案。而StackOverflow是一个面向细分市场的问答社区,它主要面向程序设计领域,StackOverflow自己的介绍是“Stack Overflow is a programming Q & A site that’s free. ”,很简洁,但定位很明确。StackOverflow是从2011发布的,目前alexa全球排名150名左右(Quora的alexa全球排名只有1000左右),每天的PV 1亿左右,算是做得很不错的了。最近抽时间体验了一个StackOverflow,这里做个简单的小结,把StackOverflow介绍给感兴趣的朋友。 阅读全文…

    分类: 我的观点 标签: , , 904 views

    年轻的心

    2011年6月16日 2 条评论

    窗外的夜,静悄悄的,douban.fm中正播着奶茶的《明年此时》,发现越来越喜欢豆瓣电台,也越来越享受一个人的日子。过去的半年,一直都忙忙碌碌,每天朝九晚九的日子,猛然地发现,渐渐地有点迷失了自己,或许到了该找回自己的时候了。心之所向,梦之所往,曾经的年轻的心,曾经年少的梦,是否依旧还是那样,还是那么坚定?Same time next year, everything is still the same as today?

    分类: 生活感悟 标签: 98 views

    在C/C++程序中打印当前函数调用栈

    2011年6月11日 没有评论

    前几天帮同事跟踪的一个程序莫名退出,没有core dump(当然ulimit是打开的)的问题。我们知道,正常情况下,如果程序因为某种异常条件退出的话,应该会产生core dump,而如果程序正常退出的话,应该是直接或者间接的调用了exit()相关的函数。基于这个事实,我想到了这样一个办法,在程序开始时,通过系统提供的atexit(),向系统注册一个回调函数,在程序调用exit()退出的时候,这个回调函数就会被调用,然后我们在回调函数中打印出当前的函数调用栈,由此便可以知道exit()是在哪里调用,从而上述问题便迎刃而解了。上述方法用来解决类似问题是非常行之有效的。在上面,我提到了在“回调函数中打印出当前的函数调用栈”,相信细心的朋友应该注意到这个了,本文的主要内容就是详细介绍,如何在程序中打印中当前的函数调用栈。
    我之前写过一篇题目为《介绍几个关于C/C++程序调试的函数》的文章,看到这里,请读者朋友先看一下前面这篇,因为本文是以前面这篇文章为基础的。我正是用了backtrace()和backtrace_symbols()这两个函数实现的,下面是一个简单的例子,通过这个例子我们来介绍具体的方法: 阅读全文…

    分类: 程序人生 标签: , , , , , 6,424 views

    喜欢上了python了

    2011年6月8日 4 条评论

    最近,抽时间学习了一下python, 越来越发现自己并没有像以前想得那样排斥python, 而是慢慢的喜欢上了python。以前,一直对python通过缩进来区分代码块这个觉得很不爽,我想,这个也许是每个C/C++程序员刚开始接触python都会puzzle的地方,尤其在不同的编辑器中,配置的缩进不一样的时候,这个很让人头疼。
    很多时候,事情也许并不像我们刚开始想的那样,通过深入的去了解事情本身,我们可能会发现事情积极的另一面,学习python的过程让我深深的体会到了这一点。随着在工作中,python的身影越来越常见,静下心来深入学习一下python的欲望越来越强烈,最近终于可以抽出空来了。随着对python的不断深入,发现python是一种会让人觉得amazing的语言,下面我列举一些我所认为python做得比较好的地方,分享给正在犹豫要不要学习python的朋友:

  • 1. python鼓励大家写模块(module),写库(library)。然而python的每个库本身也是可以单独执行的。这个神奇的特性是python的__name__来支持的,我们在别人的python代码中经常会看到这样的一段代码: 阅读全文…
  • 分类: 我的观点, 程序人生 标签: , 635 views

    JSON学习小结

    2011年6月5日 4 条评论

    1. 什么是JSON?
    JSON的全称是JavaScript Object Notation, 是一种轻量级的数据交换格式。就像XML一样,JSON也是一种比较常见的数据交换的语言,或者称之为数据交换格式更为贴切。
    2. JSON中的数据结构有下面两种:
    (1)对象(Object): 一系列name/value对的集合
    (2)数组(Array): 一系列有序的values的列表
    3. JSON中基数的数据类型有下面几种:
    (1)对象(Object): 对象是一系列无序的“name/value”集合,如下图所示,对象以'{‘开始,以’}’结束,name和value之间由’:’分隔,多个name/value对之间由’,’分隔。
    阅读全文…