Web Analytics

走马观花ANSI C标准-介绍

大部分的关于C的著作都提到ANSI C Standard,但我相信少有C程序员真正细致阅读过ANSI C标准(当然了对于作C编译器的程序员来说这个标准肯定是烂熟于胸了^_^),在这个系列的文章中我将和大家一起浏览一下ANSI C标准(C99,以下称标准),呵呵,当然也不能面面俱到,只是“走马观花”。 ...

July 28, 2005 · 2 min · Tony Bai

C程序员之“痛”

内存问题是C程序员永久的话题,也是最能让C程序员心痛的话题。内存bug即隐秘,危害又大,而且往往当你解决了它之后,你会发现你的错误是多么的低级。以我为例,看下面的两个case: CASE1 背景: 配置信息读取 Bug现象: 通过打印语句观察到,在配置读取中间时刻,某一指针突然被置为NULL,出core。 耗时: 6小时 问题所在及分析: 经过6小时的不懈努力,终于发现了这一让我哭笑不得的低级错误。问题原因大致是这样的: 我定义了一个存储配置信息的结构体变量指针,并在初始化的时候给该指针在共享内存中分配空间,下面的代码就是我分配空间时的代码 xx_t *p; …// ...

July 20, 2005 · 3 min · Tony Bai

同步问题讨论-Tony与Alex的对话系列

Alex正在电脑前面作冥思苦想状,这时Tony悄悄地走到Alex的身后,观察了一会儿… Tony : 看来今天我们要讨论同步问题了。 Alex : (惊奇地回头)。Hey Man , you scared me! 你说的没错,我正在学习同步这一块儿呢,有什么高见不妨说出来吧,我洗耳恭听! Tony : 不敢不敢。关于进程和线程同步的问题,W. Richard Stevens在他的那本经典的“UNIX Network Programming Volume 2”中有过详尽的讲解,你不妨仔细阅读一下。 Alex : 远水解不了近渴。你还是大概跟我说说吧! Tony : OK, 我们就拿一个最简单例子来探讨一下吧。在拿出例子之前我们来回顾一下同步的由来。Alex你说说为什么要同步呢? Alex : 有共享就要同步,就好比超市的POS,如果没有好的同步顾客活动的策略,那超市不就乱了套了么,大家都争着抢着去结账。 Tony : 嗯,没错。mess world is not what we need! 互斥和条件变量是我们经常使用的同步手段,当然更高级的还有信号灯等。 Alex : 逐一说明吧,看来今天又会有不小的收获^_^ Tony : 历史上有个特别有名的问题叫做“生产者-消费者”问题,又叫“有限缓冲区”问题,我们今天的例子大约就是这个样子的。 Alex : (入迷的样子) Tony : 我们的例子是这样的,我们有“生产者”和“消费者”两个角色,他们共享某一整型变量,规定如下: 1)生产者发现产品已经被消费了,便生产,即将该共享变量置为1; 2)消费者发现有产品了,便消费,即将该共享变量置为0; 很简单吧。我们还是用老办法,由简入难,我们可以使用最简单的手段“互斥锁”来完成这个任务。 Alex : 我知道“互斥锁”,但是了解得并不深,先讲讲理论把! Tony : 互斥,顾名思义互相排斥,它是最基本的同步手段,一般用来保护“临界区”,“临界区”是一段代码,看起来互斥保护了临界区这段代码的,实质上互斥保护的是“临界区”中被操纵的数据。 Alex : 互斥是不是即可用于线程,也可以用于进程呢? Tony : 都可以,在我们的例子中我们使用线程,因为线程间共享一个数据空间,实现起来比较容易;进程间要想共享数据就需要额外的支持,比如共享内存等。 Alex : 噢。 Tony : 我们开始吧,按照例子中所述我们应该有两个线程,分别代表生产者和消费者。按照W. Richard Stevens的指导,我们将我们的互斥锁和我们的共享数据放在一个结构体内。 ...

June 9, 2005 · 5 min · Tony Bai

从技术到管理的对话-Tony与Alex的对话系列

5月末我参加了一次“从技术到管理的”培训,总体来说还是有所收获的。这段时间我一直想把自己的收获总结出来与大家分享,但是也一直没找到一个很好的形式来表达,我想简单的罗列一些规则和技巧是最最乏味的。在我的“关于Tony与Alex的对话系列的一点说明”一文中曾经将“Tony与Alex对话系列”定位为技术类的系列文章,但是经过这几天的思考,发现它同样可以用做管理知识起码是技术管理知识的介绍,这篇Blog将作为本系列中的第一篇围绕管理知识的文章。由于本人现在并非管理角色,所以文章内容的正确性和合理性并不能完全保证。 ...

June 5, 2005 · 7 min · Tony Bai

CppUnit入门实践-Tony与Alex的对话系列

Tony : Hi Alex ! you just looks like drowing in your project. what is up? Alex : 我们的项目要求引入单元测试,but i’ve no experience in unit test. Tony : i think cppunit is your best choice. Alex : 是的,我刚从网上把它down了下来,正准备研究它呢。 Tony : Really ? I have done some practice on unit test before. would you like me to join you? Alex : Oh Tony, I’m so glad that you could help me ! Tony : My pleasue ! Alex : 我们从哪里开始呢? Tony : The simplest case! 我们拿一个最简单的例子吧。now we have a class with the name “SimpleCalculator” and it has four basic methods ‘add’, ‘sub’, ‘mul’ and ‘div’, All we should do is to test whether these methods run as same as we expect. First of all , complete the “SimpleCalculator” class, Alex. Alex : It is simple! ...

May 30, 2005 · 4 min · Tony Bai

一个C++项目的Makefile编写-Tony与Alex的对话系列

Tony : Hey Alex, How are you doing? Alex : 不怎么样。(显得很消沉的样子) Tony : Oh , Really ? What is the matter? Alex : 事情是这样的。最近有一个Unix下的C++项目要求我独自完成,以前都是跟着别人做,现在让自己独立完成,还真是不知道该怎么办,就连一个最简单的项目的Makefile都搞不定。昨晚看了一晚上资料也没有什么头绪。唉!! Tony : 别急,我曾经有一段时间研究过一些关于Makefile的东西,也许能帮得上忙,来,我们一起来设计这个项目的Makefile。 Alex : So it is a deal。(一言为定) Tony : 我们现在就开始吧,给我拿把椅子过来。 ...

May 23, 2005 · 8 min · Tony Bai

一个Xml Parser的TDD开发过程-Tony与Alex的对话系列

Tony : Alex今天我们来做一个xml parser.我们使用的开发工具为Eclipse + JUnit Alex : 好啊,喜欢接受挑战。 Tony : 先看看我们要解析的xml file的样子: ...

April 30, 2005 · 4 min · Tony Bai

看完“程序员”2005-04期一些想法

每次看完《程序员》杂志都会有些新的收获,这次看的是《程序员》2005年第4期,顺便把一些阅读过程中产生的想法记录了下来。 [软件建模,大势所趋] 看完微软、IBM、Borland等公司的最新动态,感觉软件建模是大势所趋,以前虽然也有众多建模工具,但是由工具支持得不好,建模的各个阶段彼此脱节,使用户体验(user experience)很差。随着Microsoft VSTS(Visual Studio Team System)的发布在即、随着Borland的ALM(Application Lifecycle Management )工具及基于Eclipse的产品计划的实施,相信在不久的将来软件建模会有一个很大的改观。 ...

April 20, 2005 · 4 min · Tony Bai

微软又推出新语言了

微软又推出新语言了!最近在csdn上围绕着C-Omega和G#的话题有很多。每当我们看到一门新语言诞生时,特别是诞生在微软这样的软件帝国中,很多人都会冒出一身冷汗并大喊“Oh,My God! How fast the technology is going, I can not catch it up!” after that they still have to learn these new languages. 当今软件行业的两大主流平台Microsoft的.NET和Sun、IBM以及开源组织的支持的Java平台。抛开技术细节,从技术大方向来说两个平台除了竞争之外,在技术上呈现出一种融合的趋势。微软新推出的这两种语言就是一个很好的例证。众所周知在Java界AOP这种概念正在迅速的占领着Java开发者们的思维领地,几个著名的开源组织也都发布了自己的AOP product,如JBoss AOP,Spring AOP,eclipse组织接纳AspectJ等。另外XML->Object , Object->XML以及ORM等技术也蓬勃发展。相比之下软件帝国微软的.net的步伐似乎有些慢了。C-Omega和G#的出现仿佛给生存在.NET平台下的人们带来了些生气。我们看到了.NET向Java学习的态度。其实Java 5.0的发布又何尝不是一种学习的结果呢,例如annotation、enhanced for loop grammar等。 ...

April 15, 2005 · 2 min · Tony Bai

动态代理再思考

看了透明发表在《程序员》杂志2005年第一期上的“动态代理的前世今生”,让我不仅了解了“动态代理”这门技术,更让我知道了一段Java技术的发展史。带着对Rickard Oberg的钦佩之情,怀着对Rod Johnson敬仰之义我踏上了动态代理再思考之路。 ...

March 25, 2005 · 8 min · Tony Bai