原创 程序鲁棒性的误区收藏

新一篇: java名字的由来 | 旧一篇: Apache Harmony要换主席了

 在参加面试的过程中,面试官经常会要求你写一段程序,实现某某功能,他们的评分标准里往往有一条如何处理边界条件,而且这个比例占的很大。这本来没错,但是出题者往往事先不暗示你。不可否认,如何处理异常情况是一个非常重要的能力,但是,如此考察的方式,存在着非常大的误区:

1. 函数是实现约定的功能。给定一个函数,不支持异常情况不表明该函数鲁棒性不强,可以在函数的规范中注明,比如传入参数不会空。
2. 函数有异常判断,不表明函数鲁棒性好。在现实的程序中,在哪一层处理异常情况是非常有讲究的。
一个简单的例子(忽略不好的命名习惯):
process() {
param = getParam();
step1(param); 
step2(param);
....
stepn(param);
}
假设step1, step2.... stepn是函数process的一系列步骤,如果参数异常(比如为空),应该不执行step1-n,那么应该怎么写process, step1,... stepn的异常判断呢?
是在每个stepx函数里加一句 if(invalidParam(param)) return; 好呢?还是在process里加这一句好呢?
显然是process里 ,而即使在step函数里加了异常判断,你的程序不会变得更健壮,反而更累赘。
这个例子表明了函数是一个约定,函数的调用者必须遵守这个约定,因此像写一个f(int * p) 之类的,是否需要判断p == null完全取决于对函数的定义,而不是对于每个函数,都去做无谓的判断,尤其是内部使用函数,更多的时候需要调用者知道调用场景。

发表于 @ 2007年08月10日 17:35:00|评论(loading...)|编辑

新一篇: java名字的由来 | 旧一篇: Apache Harmony要换主席了

评论

#paulex 发表于2007-08-12 22:12:47  IP: 222.71.13.*
面试本身是一个"试",凡是"试"几乎都有应试教育与素质教育的gap问题,这就是个例子。

还有类似的是提出个要求,让你设计个接口,然后百般刁难你的扩展性不好...个人体会这类问题的诀窍是要先提问...要是不问面试官还可以说你,不懂得exploit需求...你要是跟人说"refactory",人都不拿正眼看你...呵呵
#octalxia 发表于2007-09-10 20:59:26  IP: 58.33.235.*
笔试被鄙视or鄙视被笔试
#Andrew Zhang 发表于2007-09-10 21:35:38  IP: 124.160.98.*
问了面试官还说这要问吗?
让我惊奇的是,面试官对我写出的下面代码感到惊奇, 大概是atoi的, 明确告诉我字符串可能包含异常字符,
if(invalidCharactor(c)) throw IllegalArgumentException();
说,太不兼容健壮了,居然扔异常^_^
发表评论  


登录
Csdn Blog version 3.1a
Copyright © 张黄瞩