论坛首页 Java企业应用论坛

写的不是程序-------是态度

浏览 16129 次
精华帖 (0) :: 良好帖 (9) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2011-09-05  
   小弟不才,有幸和公司其他几位技术牛人共同开发CDN系统。在开发Peer模块的过程中,有这个一个看上去很简单的task给到我。简单的描述一下需求:删除上传目录中的临时文件,这些临时文件以 “upload_”开头,”.tmp”结尾。同时也会生成很多的源文件数据信息也保存在upload目录下。于是小弟写出了如下汗颜的代码(伪代码,仅供参考,本文重点不讲代码)
Private void deleteFile(String path) {
              /*
* Do something
* Check the file name and file path to match the special conditions
	*/
	File[] deleteFiles = directory.listFiles(new FileFilter() {

				public boolean accept(File pathname) {
					// step3:Check last modify time
Date lastModifiedDate = new Date(pathname.lastModified());
long interval = (now.getTime() - lastModifiedDate.getTime()) / 1000;

			return interval > DELETE_TIME_INTERVAL;//大于一定时间的文件才被删除				}
			});
	For (File df : deleteFiles) {
	FileUtils.forceDelete(df);
}
}

小弟以为上面这部分代码就可以work了,可以完成了所以的工作!于是乎就提交,打包,放到测试环境开始run!结果可想而知,导致测试服务器上传的视频源文件和图片源文件信息丢失,杯具呀!幸好是测试服务器,只能这样感叹一句。
好了,进入本文重点。其实主要是想再次给自己提醒一下:写程序不能想当然,不能觉得是怎么样就是怎么样,所以写的不是程序,其实是态度。
首先, 删除文件必须考虑到删除文件的访问权限,是否可以被删除,如果不能被删除,如何处理这种case,虽然我利用了第三方的API,但是这个API接口是否能够满足自身开发的程序的需求,这个需要严格审查。第二点,删除特殊文件目录先的文件是,如果这个目录下的文件目录,修改时间是大于设定的删除时间,但是此时文件夹中还包括刚刚上传的文件,如何处理这种特殊的case。第三,删除文件过程中,还可能遇到一些特殊的异常case,是否是依靠一个第三方API就能搞定。
看似很小小的一个删除文件的case,其实后边本质反应的是一个程序开发人员写程序的严谨的态度,严谨的做事风格。这一点在外企体现的更为明显,我已近不是第一次因为这个问题让别的同事提醒了。记住一句话:小公司教人做事,大公司教人做人。(没有歧视小公司的意思,江湖上流传这句话,用在这里挺合适)。如果一个程序员过不了这一关,就永远无法成长为一个技术牛人。这句话希望与各位博友共勉。
所以这里引用一下公司同事说过的话。什么是写程序?其实就是满足如下三点就能写出很好的程序。
1. 算法和数据结构;
2. 尽可能考虑到正常的case;
3. 尽可能考虑到异常的case。
我觉得如上三句话总结的比较好,所以在此应用,有不同理论的同学,还请息怒。
所以,写出本人主要是想让自己记住,如何从一个程序员成长为一个技术大牛,其实很简单:写的不是程序,是态度!细节决定成败!
以上总结希望能够和各位共勉!
   发表时间:2011-09-06  
你要么全部用英文写 要么全部用中文写
0 请登录后投票
   发表时间:2011-09-06  
别把未完成处理文件、当前工作文件和历史存档文件放一个目录,temp文件完成后在移动到工作目录,工作文件过期放入存档目录,这样情况简单很多
archive文件按照目录或者命名格式归档,别把太多的判断逻辑放到系统维护代码中
0 请登录后投票
   发表时间:2011-09-06   最后修改:2011-09-06
KimShen 写道
你要么全部用英文写 要么全部用中文写

不好意思,我的错。。。
0 请登录后投票
   发表时间:2011-09-06  
ppgunjack 写道
别把未完成处理文件、当前工作文件和历史存档文件放一个目录,temp文件完成后在移动到工作目录,工作文件过期放入存档目录,这样情况简单很多
archive文件按照目录或者命名格式归档,别把太多的判断逻辑放到系统维护代码中


在这里,temp文件是需要被删除,不要保存。同样,过期的文件在此处也是不需要保存的。
0 请登录后投票
   发表时间:2011-09-06  
说的好,程序写的好不好就是看你有没有用心,有没有考虑周全。
0 请登录后投票
   发表时间:2011-09-06  
你没抓住重点,这个设计你的核心问题是把文件都放在一起,把一个部署问题最后放在了实现上的硬编码解决,这里你所引入的细心其实只是一种亡羊补牢,你补了劳,第二个新兵一样可以轻易犯同样的错
一个如此简单的需求,还需要上层维护者费那么多心思,应该想想到底是哪层更该细心改造一下
0 请登录后投票
   发表时间:2011-09-06  
顶bobo
有理解,共勉
0 请登录后投票
   发表时间:2011-09-06  
这个不属于态度, 应该算是你经验不足或者考虑问题不全。 先不管你的考虑全不全, 光你这几行代码本身就有很多问题。  
  Date lastModifiedDate = new Date(pathname.lastModified());
为什么现在java程序员写这样的代码的人越来越多,  Date近乎一个淘汰的类了, 还在到处用。 除了需要DateFormat外尽量不要使用Date。 你获取了lastModified 居然转成DAte再去Date.getTime()  这样写的意义是什么??  就不能System.currentTimeMillis()  - pathname.lastModified() >  DELETE_TIME_INTERVAL .  还有一个问题就是FileFilter, 本来应该做成单实例模式, 你这样写每次调用都会new一个FileFilter。
1 请登录后投票
   发表时间:2011-09-06  
Ctrl+C,Ctrl+V
会阻碍程序员的发展,
踏入江湖时,一个老头的话
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics