说不得

改了名字

统计

常用链接

留言簿

阅读排行榜

评论排行榜

2007年12月21日 #

最近见过的垃圾代码

1DateTime begin = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day - 1, GlobalSetting.BeginTime, 00); 
2db.AddInParameter(command, "begintime", DbType.String, begin); 
3db.AddInParameter(command, "endtime", DbType.String, begin.AddDays(1));

这是我们项目里面的一段“垃圾”代码,能够发现这段代码,完全仰仗于我们每个月要做的日志检查。
稍微对代码做一些解释:这段代码的作用就是查找当前日期的某个时间点开始到前一天同一个时间点之间的数据。GlobalSetting.BeginTime是一个从配置文件中读取的时间点。
我们在日志中发现,这个程序每个月的1日都要抛出异常,按图索骥,就找到了这段代码。
见到了红色部分之后,我真的是又好气又好笑。这位程序员真的对.net理解人类语言的能力有些过于期待了,理所当然的认为:今天的前一天,就是今天减1天。而且这段代码顺利的通过了单元测试以及测试人员的测试,因为,我们测试的日期不是1日。直到程序跑在生产环境上报错之后,我们才有机会发现这个Bug。
在我看来,这段代码有以下3个问题:
1.致命错误
    天数减1当作参数传递给DateTime,在每个月1日的时候,天数变为0,DateTime的构造函数抛出异常。其实要获得某个DateTime的日期部分,完全可以使用DateTime自带的属性Date,何必这么复杂的取了年份、取了月份、最后取了日期当参数重新new出来一个DateTime呢,还引入这个致命的错误。
    所以,请在实现功能的时候仔细翻一翻MSDN,也许.net早已做过你想做的事情了。
2.性能损失
    第3行,为了获得结束日期,begin被加上了1天。但是我们明明在第1行的时候为了获得开始日期减去过一天啊。为什么不在第1行的时候直接获得结束日期,然后在第2行的时候把这个结束日期减去1天的值当作开始日期,第3行的时候直接拿结束日期当作参数呢?减少了一次计算也许不算什么,但是在整个程序中,运行效率都是因为这样一个“不算什么”,那样一个“不算什么”才慢慢的降低的。
    所以,请在写代码的时候稍微动动脑筋,虽然.net效率不高,但是不要因为自己的原因造成代码的执行效率低下。
3.潜在风险
    第1行代码连续3次调用DateTime.Now有可能造成时间差,如果恰好在2007年12月31日23:59:59.999999调用了一次,第二次调用的时候日期就变成了2008年1月1日。
    而且每次进行属性调用,消耗的系统资源也是一个可观的数字。
    所以,请坚持在某个属性会被无变化的调用两次或者两次以上的时候,使用用这个属性赋值的局部变量。
====================
以上纯属个人经验,欢迎拍砖。

posted @ 2007-12-21 14:27 说不得 阅读(286) | 评论 (4)编辑

2006年4月4日 #

一年了,回来看看。

这一年里,辞职了之后换了一份工作。
老板没有上次那个那样抠门了,不过薪水还是不多。幸好公司是M$的金牌合作伙伴,可以接触到一些东西。
做完手头的项目,如果老板还是没有加薪的意思的话,只好继续寻找工作了。

posted @ 2006-04-04 19:31 说不得 阅读(34) | 评论 (0)编辑

2005年3月29日 #

领到了离职通知单

但是要一个月以后才能走,麻烦啊,哪里有那么多工作需要交接啊。
只有一个工作的代码,和一个笔记本(注意,不是电脑)需要上交,别的就没有什么了。

posted @ 2005-03-29 13:10 说不得 阅读(585) | 评论 (0)编辑

2005年3月28日 #

已经交了辞职报告,今天下午跟老板谈一谈。

辞职报告交上去了,要等一个月才能离职,不知道各位辞职后需要多长时间才能离开啊?
没有设计力量的公司永远不会发展的。

posted @ 2005-03-28 11:06 说不得 阅读(439) | 评论 (0)编辑

2005年3月27日 #

准备辞职,想看看老板知道我要辞职之后的表情。

公司没什么技术力量,又不重视技术,所以准备走了,因为目前我还不大算转行,我的技术要是得不到提高,就是转行,到最后也没有饭吃。
做了七个月,一共拿了600元奖金,其中包括年终奖500元,NND,我一个人在这里撑了三个月才来了个新程序员,年终就给我500元。
新程序员来了,还带来了4个网站的管理员密码,程序代码……,呵呵,这种人。
昨天老板还跟会计说,以后不报销房租了,现在是报销50%,节约开支是吧,我让你省的更多一些。
不过还是要感谢这个老板,给了我一个锻炼的机会,让我从一个刚刚毕业、没有任何工作经验的学生,变成了一个公司职员。我不甘心只做一个小小的程序员的,但是你再也不给机会了。没有培训、没有奖励、现在天天给人修机器,给客户提供技术支持,或者上门服务,一个人干三个人的活,工资不涨,还没有奖金。
上一个程序员走的时候跟我说,你在这里混几个月,赶快走了算了,在这个公司没有前途。我现在总算知道为什么原来又20人的开发团队,等我来面试的时候只剩两个人,我正式工作的时候只剩一个人。呵呵。
明天就交辞职报告,准备一个月之后离职,如果不能立即找到工作,就先回家住两天,过个五一,放松一下。
……

posted @ 2005-03-27 18:10 说不得 阅读(584) | 评论 (2)编辑

2005年2月2日 #

还没有拿到回家的火车票,惨了啊。

4号的票,到现在还没有拿到手,惨了,下次不从这里订票了。 

                 
            
             
                    
                     
                   
                 
               
            
            

posted @ 2005-02-02 16:49 说不得 阅读(375) | 评论 (1)编辑

2004年11月6日 #

我喜欢的女孩有了男友 :(

我喜欢的女孩刚刚告诉我她有了男朋友。她才去上海上研究生1个月零16天,这也太快了吧。我大学的时候追了她两年,只有一句话:我对你没感觉。可是有了问题还是来找我帮忙,我都不会拒绝她。真的很受伤。:(

posted @ 2004-11-06 23:00 说不得 阅读(589) | 评论 (3)编辑

2004年10月13日 #

两个月后,我又回来了。

贴段代码先

using mshtml;    //
using SHDocVw;

private void DownLoad()
{
    
private InternetExplorerClass ie = new InternerExplorerClass();
    ie.DocumentComplete 
+= new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);    //waitting for download complete
    int zero = 0;
    
object oZero = zero;

    ie.Navigate(uri, 
ref oZero, ref oZero, ref oZero, ref oZero);
}


private void ie_DocumentComplete(object pDisp, ref object URL)
{
    sbPage.Length 
= 0;
    sbPage.Append((((HTMLDocumentClass) ie.Document).documentElement).innerHTML);
    FormatData(sbPage);
}


最近在使用WebClient和WebRequest、WebResponse时发现一个问题,提示:访问的页面不存在。但是我在浏览器中可以看到的数据。
分析后发现,可能数据是动态生成的,用浏览器可以不用等到数据完全下载完毕就可以看到,但是用这几个类就不行,数据下载结束之前,这几个类就结束了。

后来使用activex控件把问题解决了。

posted @ 2004-10-13 13:53 说不得 阅读(449) | 评论 (0)编辑

2004年8月5日 #

对上班失去了兴趣

那个程序员走了,现在做程序的就只剩下我了。公司里面有好多数据需要写程序来处理,现在我知道任务有多重了。坚持!

posted @ 2004-08-05 20:52 说不得 阅读(254) | 评论 (0)编辑

2004年8月2日 #

上班第十一天

在休息了一天之后,我又来了。今天又是算东西,3亿6千万行数据。

posted @ 2004-08-02 18:56 说不得 阅读(293) | 评论 (0)编辑