随笔 - 67  文章 - 12  评论 - 442  阅读 - 39万

切忌:浮沙之上筑高台

很久之前见过一个面试题,就是看一段代码并且发现里面的问题,那段代码是这样的:
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   Game_over  阅读(3454)  评论(33编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2007年12月 >
25 26 27 28 29 30 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示