切忌:浮沙之上筑高台

很久之前见过一个面试题,就是看一段代码并且发现里面的问题,那段代码是这样的:
public String XXXXXX(String input)
{
    StringBuilder sb = new StringBuilder(input);
    // 这里是一堆很复杂的操作sb的语句
    return input;
}
明眼人一下就看出来了,这简直就是忽悠小孩子玩的。
但是,在我现在的项目中,却真有人犯类似的错误,真是个很严重的问题,它直接造成了系统性能上的问题。
先说一下背景:
在对数据库操作之前,我们需要对用户的输入进行规范,其中包括需要把用户输入的内容进行截取,去掉前后的全角空格。
同样的,从数据库检索出来的数据,也要进行同样的操作。
这当然需要写入到共同方法里面,这就是我发现问题的代码段:
for (cntT = 0; cntT < str.Length; cntT++)
{
    if ((" ".Equals(str.Substring(cntT, 1))))
    {
        strWork = str.Substring(cntT + 1, str.Length - cntT - 1);
        continue;
    }
    else
    {
        strWork = str.Substring(cntT, str.Length - cntT);
        break;
    }
}
这是去掉前面的全角空格,先撇开这段代码是否有BUG,您发现里面存在的性能问题了吗?
不要告诉我应该用StringBuilder,它真正的问题是根本就不应该在循环里面进行截取。
循环里面只要计数就可以了,在循环之后进行截取,这样就避免了很多字符串操作,难道不是更好。
所以我说,基础很好总要,这个基础,既包括编程语言的基础,但是我们更需要注意的是编程思想、思维方式的基础。
不要把简单的问题复杂化,也不要把复杂的问题简单化,写出那样的代码,我也只能说编码人员根本就没有进行思考,就去写代码了。
很多人抱怨面试的时候,让你做面试题,而且都是很基础的题。
但是,您静下心来想一下,那些问题您都是十分清楚吗?
您可以不用翻书查资料就能准确的回答吗?
如果您办不到的话,我建议您还是先回家复习一下功课吧。
不要连这些基础东西都没搞明白,就跟我大谈特谈什么高深的设计模式、最新技术什么的。
不要告诉我说没有必要,那些基础的东西可以在很短的时间内掌握,而且平时应用也不会用到.......

我觉得,切忌:浮沙之上筑高台。
(心情不爽,特发此文。)

posted on 2007-12-09 19:26  Game_over  阅读(3452)  评论(33编辑  收藏  举报