- 博客(102)
- 资源 (5)
- 问答 (5)
- 收藏
- 关注
原创 【转】关于烂代码的那些事(下)
假设你已经读过烂代码系列的前两篇:了解了什么是烂代码,什么是好代码,但是还是不可避免的接触到了烂代码(就像之前说的,几乎没有程序员可以完全避免写出烂代码!)接下来的问题便是:如何应对这些身边的烂代码。1.改善可维护性改善代码质量是项大工程,要开始这项工程,从可维护性入手往往是一个好的开始,但也仅仅只是开始而已。1.1.重构的悖论很多人把重构当做一种一次性运动,代码实在是烂的没...
2016-02-05 10:24:43
381
【原创】java实现压缩、解压缩的常见问题Memo
国庆假期,宅呀~ 无意中看到一篇java压缩算法的文章,就顺便度娘了一些相关文章来看。本来想深入研究一下算法,但是,毕竟是假期,哪有那份心思啊,就实际应用简单Memo一下吧。 1. 中文乱码问题 其实这是无意中看到的,度娘一下漫天都是,看来各位程序猿还是以务实的应用为多啊。度娘里,99%的帖子都是说用 Ant中的 org.apache.tools.zip.* 来代替...
2015-10-04 21:08:28
447
原创 【转】关于烂代码的那些事(中)
1.摘要这是烂代码系列的第二篇,在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣。 在发布了关于烂代码的那些事(上)之后,发现这篇文章竟然意外的很受欢迎,很多人也描(tu)述(cao)了各自代码中这样或者那样的问题。 最近部门在组织bootcamp,正好我负责培训代码质量部分,在培训课程中让大家花了不少时间去讨论、改进、完善自己的代码。虽然刚毕业的同学对于代码质量都很用心,...
2015-09-08 16:56:12
1060
原创 【转】关于烂代码的那些事(上)
1.摘要最近写了不少代码,review了不少代码,也做了不少重构,总之是对着烂代码工作了几周。为了抒发一下这几周里好几次到达崩溃边缘的情绪,我决定写一篇文章谈一谈烂代码的那些事。 这里是上篇,谈一谈烂代码产生的原因和现象。2.写烂代码很容易刚入程序员这行的时候经常听到一个观点:你要把精力放在ABCD(需求文档/功能设计/架构设计/理解原理)上,写代码只是把想法翻译成编程语言而已...
2015-09-08 16:48:58
265
原创 【原创】面向企业应用的平台框架的思考
面向企业应用的平台框架应该是什么样子的?或者说都应该具有哪些特性(现在流行说features,而不说functions)?我也看了一些书籍,比如《企业应用架构模式》,不过它太老了,翻译成中文版时已经是2004年了。不过对于“古老”的“企业应用”或许十年也不算太老,呵呵。十年前,提到“企业应用”那一定是高大上的(当然那时候还木有高大上这个词),但是到了如今(2015年)我总觉得“企业应用”这...
2015-02-15 12:20:41
483
原创 利用Lucene MoreLikeThis 实现“相关你可能感兴趣的”推荐栏
MoreLikeThis是Lucene的一个相似搜索组件。用它可以很简单的实现“相似推荐”栏功能,如 用户浏览一本书,下方(或右侧)推荐用户 书名、作者或关键字 相似的其他书籍。事例代码如下:首先,列出所有书籍,然后逐一打印每一本书的“相似图书”列表[code="java"]public class MoreLikeThis { public static vo...
2013-09-02 09:24:36
371
给Extjs的GridPanel增加“合计”行
奇怪,也算玩了2年Ext,怎么还没有一篇关于Ext的博文?这一篇算是第一篇了。要给Extjs的GridPanel增加“合计”行,有这个想法的童鞋想必不在少数。我首先看了官网的例子,没有“合计”。再Google,找到一个看似写的比较好的 [url]http://www.cnblogs.com/over140/archive/2009/05/06/1449892.html[/u...
2012-11-26 17:44:43
374
Spring AOP 前切入点及多参数问题
问题:看了很多关于Spring AOP的文章,在讲各种切入方式(before、around、after-returnning、thrown等)时,被切入的业务主体Bean的方法,基本都是无参数的。也有提到有参数的,但都是一个String型的参数。以before为例,无参数方法的切点配置为[code="xml"] [/code]如果方法有一个String型的参...
2012-11-20 10:51:09
976
原创 让照片在Apple(iphone / iPad)上显示在地图中正确的位置
太久没来这里了,这两天又在之前批量调整照片日期的那段代码的基础上整了两个程序,拿来分享一下。上周我买了个牛排,对就是the new iPad。哈哈,从此我可以在这上面得瑟我的照片啦~~ 啦呀啦,想一想这是一件多么美妙的事情啊!题外话,iTunes很无耐,iTools很好用。当我满心欢喜地导入几千张以往的照片后,我崩溃了。iOS的“照片”软件可以说做的很不错,除了不能建立子目...
2012-05-17 16:27:58
2059
自己写段代码批量修改照片的Exif数据
老爸老妈去欧洲画了一个圈,带回来一千多张照片(数量没法和年轻人比)。虽然老爸晓得调节相机中的时间,但是毕竟年岁不饶人,整差了12个小时。也就是下午4点拍的照片,Exif里显示是凌晨4点。好在欧洲大陆都用相同的时区(偶没去过,不晓得,只是老爸说导游都是这样执行的),每张都 +12H 即可。基本各种照片查看工具都有批量修改功能,但无奈咱需要“时间+12H”确谁也没有。...
2011-05-24 15:11:37
1295
原创 关于项目管理的通俗讲解
想首先问大家一个问题:你觉得中国人聪明还是美国人聪明? 我见过最好的回答是美籍华人。 我们说美国人很愚蠢,为什么呢? 你们都考过T或G吧,他们经常会出这么一道题1/3+1/2=? 50%的人回答是2/5,这可是美国研究生入学考试的试题呀! 通常在这个问题之前还有一个1/2+1/2=?为什么? 他们怕太难了,先给个容易的热身一下。 我在美国的时候见过很多的PHD,对于美国...
2011-04-27 20:29:07
281
我与OO老师的问答(SSH与OO可以兼得吗),邀你继续...
问:面向对象的设计、开发 与 实际工作中的规范化、流程化、定型化 架构之间的矛盾,如何处理?如何使OOA、OOD实战化,特别是在水平各异的整个团队中普遍展开[color=darkblue]答:规范化、流程化、定型化与面向对象的设计、开发没有绝对矛盾。开发规范中文书中都把UML的使用模板化了,反而更利于面向对象的设计、开发。或许面向对象更适合迭代式开发,但是瀑布似的规范化、流程化、定型化一样...
2011-01-13 13:46:23
305
实战Ext -> Struts2 -> Spring数据传递与解析
在以Spring为核心的Web应用中,使用Ext作为Web前台,通过Struts2作为数据交换的“跳板”。 原本Struts2自身具备的ModelDriven接口,在使用Ext前台后变得已经没有什么大用了。 由于有struts2-json-plugin的支持,可以很方便的获取前台的数据。 有点像Ext将数据序列化后,再由后台的Java进行反序列化。但是,Ext毕竟只能提供J...
2011-01-07 17:28:46
221
原创 Spring aop expression 星号(*)
<aop:config> <aop:pointcut id="allMethod" expression="execution(* *..BookManager.save(..))"/> </aop:config>execution(modifiers-pattern? ret-type-pattern declaring-type-p...
2010-12-23 13:30:30
369
原创 Spring连接两个以上的数据库
通过Spring的配置,添加多个数据源,制作多个qlMapClient,iBatis或Hibernate的各个DAO,按其所需使用不同的qlMapClient,即可连接到多个DB。 用途吗,同时使用Oracle、SQLServer、DB2、MySql,这样的可能似乎不大。但是对于要从其他系统读取数据的接口,是有可能的。 还有就是,将OLTP和OLAP的表分别放置在不同DB中...
2010-12-20 11:57:16
481
Spring获得各种客户端HttpServletRequest的方法
由于我希望提供各种客户端来连接Spring提供的服务,(客户端种类至少包括:Flex/AIR、MS WinForm、Ajax、纯JSP)所以Spring必须识别不同种类的客户端,并从中取得request,这样才能拿到类似IP地址这样的客户端信息。 这里说的“取得”,不是在JSP的代码里,JSP里根本不用“取得”,request就在那里。这里是说在,Spring的代码中,如何...
2010-06-11 16:09:26
393
原创 用Sping发布WebService
【原创】用Sping发布WebService 我的需求是这样的:系统已经成型,仅仅通过基础架构的很小变化,达到将服务开放为WebService的目的。 1、不用或几乎不用修改已有代码 2、简单的xml配置 3、通用性强,各种开发环境皆可访问 4、参数与返回型都要支持DTO(POJO) 以上四点需求,看起来很简单,可想而知各种Java的WebService方案应该都能够满足。但是...
2010-06-01 14:45:58
517
敞开你的心扉
多年前(中学时代)的一档电视节目的主题歌,歌词写得非常好,曾经抄在笔记本的扉页。今天终于借助Baidu又找到了,记录下。 敞开你的心扉,风吹愁云散。真情涓涓如流水,坎坷不言累。敞开我的心扉,歌唱真善美。你我灵犀两心知,人间共相亲、相慰…… ...
2010-03-20 20:28:59
225
原创 转贴:关于java数组的深度思考
刚刚开始接触java数组的人都会听到一句类似的话:java是纯面向对象的语言,他的数组也是一个对象。于是乎,笔者就按照一个对象的方式来使用数组,心安理得。直到我接触到C的数组后,才发现将数组作为一个类来使用在实现上是多么的“不自然”。 首先我们看一下表面现象,数组创建的时候采用的是如下语句: MyClass[] arr = new MyClass[9]; 而普通类...
2010-02-22 15:38:03
196
原创 三十年一开花 三十年一结果
就在刚才,中国男子足球国家队创造了一个新的历史:三十年来首次战胜宿敌韩国队!而且是3:0完胜! 作为一名“老”准球迷,在全场“我爱你”的助威声中心潮澎湃,更是在终场哨音响起的时候,禁不住落泪! 无数的辛酸,使现在观看中国队的比赛已经是有一搭无一搭的事情,下午无意中看到女足的比赛,才知道稍后有男足。 但是,今天高家班的表现,却令人惊喜,给全国的球迷们一份最好的春节礼物! ...
2010-02-10 20:30:03
383
原创 重新更新索引的方法
由于分词工具用的用户字典有了更新,比如加入了一些出现频度较高的专有名词。这时候希望通过重建索引,使查询结果更加准确。但是,由于一些信息是当初建索引时加入的,而且这些信息是不能从原始文件中提取的,如当初的上传者是谁、上传日期 等。所以,不能够直接删除索引文件,重新来过。为此,必须遍历原有索引,将其中进行了分析的Field重新分析并更新,不需要分析的Field则保持不变。 /** * ...
2010-01-22 10:21:17
670
原创 《纪四》诗词对
梅映雪:《临江仙》天涯孤旅只一人,四季日夜连晨昏,秋霜如风雨似针。长夜独行久,庭院几许深。忍看邻家天伦暖,遥闻欢颜笑语声,生非命薄却如今。梦醒人不见,泪眼映孤灯。(同是天涯沦落人,相逢何必曾相识?)《醉花阴》故道何人曾邂逅,还梦携红袖。世事剪鲛绡,更见风飘,一句衫寒透。流年泛处无交旧,花落灰心久。应待别烟萝,暗解长河,再唱抛红豆。(这让人想起苏轼的《江城子·别徐州》:天涯流落思无穷。 既相逢,却匆...
2010-01-08 09:31:11
661
原创 什么时候考虑使用静态
用百度搜索“什么时候使用静态”,会得到大致这些结果: 静态方法不用new对象可以直接调用1.与类相关与对象无关 2.不需要对象的“轻”方法 3.工厂方法如果某个方法是用频率较高,或者方法本身通用性较强,无需初始化类成员变量,则可以使用静态方法,那样方便,速度也快.可以直接拿来就用的方法,就算是静态的.肯定不涉及具体对象,因为静态方法内,是无法直...
2010-01-06 09:28:08
375
原创 Eclipse快捷键大全
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+↑ 当前行和上面一行交互位置(同上)Alt+← 前一个编辑的页面Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)Alt+En...
2009-09-15 15:05:17
164
【第48条】对共享可变数据的同步访问
《第9章 线 程》 通过使用线程(thread)可以在同一程序中同时进行多个活动。多线程程序设计比单线程程序设计要困难得多。所以如果一个类库可以帮助你从低层的多线程程序设计中解脱出来,那么一定要使用这个类。即使这样,有时候仍然要编写或者维护多线程代码,所以本章包含的建议可以帮助我们写出清晰、正确、文档组织良好的多线程程序。 【第48条】对共享可变数据的同步访问 &l...
2009-06-23 12:18:18
238
原创 无BOM utf8编码判断
BOM(Byte Order Mark)是一个字符,它表明UNICODE文本的UTF-16,UTF-32的编码字节顺序(高字节低字节顺序)和编码方式(UTF-8,UTF-16,UTF-32, 其中UTF-8编码是字节顺序无关的)。如下所示:Encoding Representation UTF-8 EF BB BF UTF-16 Big Endian FE FF UTF-16 Little E...
2009-06-19 13:34:31
1236
原创 【第47条】不要忽略异常
作为本章的最后一条,此条目是一条“纪律”,一条你必须遵守的纪律。虽然这是显而易见的道理,但却很容易被违反。 任何一个被抛出的异常都是API设计者有意为之的,其中蕴含了特定的含义,所以千万不能忽略它们! try{ ......}catch (Exception e){} 这样的代码并不十分罕见,这有可能是在代码堆砌阶段的“简...
2009-06-15 11:51:26
213
【第46条】努力使失败保持原子性
所谓失败的原子性,就是在一个方法失败之后,使对象保持“它在被调用之前的状态”。因为,尤其是CheckedException发生后,一般是希望程序可以从异常中恢复过来的。 那么如何才能保持对象的状态呢?最简单的方法就是使用非可变类型的对象(见【第13条】)。因为无论什么时候,非可变类的状态都是不可改变的。 对于可变对象,常见的方法是在对其进行处理之前,先做参数有效...
2009-06-15 11:23:44
162
【第45条】在细节消息中包含失败-捕获信息
这一条是写给那些自己写Exception的程序员的。 为了在异常发生后捕捉失败原因,一个异常的字符串表示应该包括所有“对该异常有贡献”的参数和域的值。也就是说在异常所能“携带”的信息中,尽量多的加入对调试人员有用的信息。 一个例子是 IndexOutOfBoundsException ,在这个下标越界的异常中,提示出了,最小小标、最大下标和当前下标的值,这样...
2009-06-15 10:54:54
155
【第44条】每个方法抛出的异常都要有文档
虽然在【第40条】中说到了,Java的throws语法的一大好处是,即使没有文档也可以知道要调用的方法都会抛出哪些异常。但是,绝对不推荐你这么做。一定要写好文档。 通过@throws标签,逐个地声明每一个被检查的异常,并写清每一个异常被抛出的条件(这个是通过throws语句所了解不到的)。如果一个方法可能抛出多个异常,不要用它们共通的父类异常来表示。甚至,有人连会抛出哪些异...
2009-06-09 17:12:47
204
【第43条】抛出的异常要合适于相应的抽象
如果一个方法抛出的异常与它所执行的任务没有明显关联关系的话,会使人感到不知所措。为了避免这个问题,应该在高层的实现中俘获底层抛出的“低级”异常,并同时用另一“高级”异常继续向外抛。 例如,如我们在方法中,有一段循环,一个一个地取集合的一下元素。当catch到一个 NoSuchElementException 或 NullPointerException 时,说明已经到头儿了。...
2009-06-09 16:52:32
316
【第42条】尽量使用标准的异常
代码重用,是程序员们“千百年来”所追求的目标,同样Exception也是代码,也该尽量被重用。所以,应该尽量使用标准的异常,而不是轻易地使用自造的异常。 很多的类库都定义了自己的异常,我本人所参与设计的几个项目大多数也有自己的异常。但这些异常都是仅适用于项目自身的某些情形的,换个角度说,就是这些情形下没有太合适的标准异常来表示,加之自造异常还可以做某些处理,如信息的反馈,日...
2009-06-09 16:37:28
179
【第41条】避免不必要地使用被检查的异常
也就是说,在使用checkedException时,你必须确认这里的的确确是应该抛出一个异常,否则不要乱抛。如果一个方法会抛出一个或者多个被检查的异常,那么调用该方法的代码就必须要么在一个或几个try-catch块中处理这些异常,要么就要声明(throws)它们,以便向上抛出去。而无论哪种方法,都给程序员增添了不可忽略的负担。 回想一下上一条最后一段关于.Net为什么选择了更...
2009-06-09 16:21:06
210
原创 【第40条】对于可恢复的条件使用被检查的异常,对于程序错误使用运行时异常...
Java一共有三种可抛出的东东(trhowable):被检查的异常(checkedException),运行时异常(runtimeException),错误(error)。我们最常见的是前两者,但是什么时候该使用哪种异常,可能是一件非常让人头疼的事情。为此,搜索“checkedException runtimeException”关键字,可以得到不少的讲解,比如我收藏的这一篇:http:/...
2009-06-09 12:09:08
222
【第39条】只针对不正常的条件才使用异常
《第8章 异常》 异常是Java语言中非常重要、而又容易被轻视的、一个出于非常奇妙的地位的一个东东。这一章讲了关于有效使用异常的指导性原则。 【第39条】只针对不正常的条件才使用异常 异常只应该被用于不正常的情况,它们永远不应该被用于正常的控制流。书中举了一个特殊的例子,在这个例子中,循环的结束条件是当数组下标出界时引发的一个 ArrayIndexOutOf...
2009-06-09 11:28:32
229
原创 Crystal Reports(水晶报表) 中的人民币大写金额写法
自定义一个变量如下: ( {@TotalWithTax} 是要显示成人民币大写金额的变量 ) ________________________________________________ Global StringVar Array PreDotUnit; Global StringVar Array ChineseDolla...
2009-06-08 16:42:16
993
读《C# 和 Java 的比较》有感
网上的一篇《C# 和 Java 的比较》(或者叫《Java 和 C# 的比较》)写的挺不错的,今天忽然搜索到。自己刚刚接触C#,也不由自主地随时都拿来和Java做对比,所以就心血来潮在原作者的每一条之后斗胆都写了些文字。就当是给自己再加深一遍印象吧。 【非常抱歉,由于网上此文章已经被转载多次,所以真的找不到原出处了,所以没法贴出作者原贴的连接】 开始吧... 2007年...
2009-06-04 11:44:26
219
【第38条】遵守普遍接受的命名惯例
Java平台(其实整个编程界)有着一套很好的命名惯例。所谓惯例,可以理解为“约定俗成”。类似我们常见的《命名规则》《编码规则》《SQL文规则》等,经过提炼,可以基本看出里面的“规律”。 “约定”对于编程来说,意义远大于在其他领域。在Rails中,甚至是“约定大于配置”的。 具体到Java的一系列命名惯例,首先是包名。和.Net中的namespace类似,Ja...
2009-06-03 17:15:52
350
【第37条】谨慎地进行优化
这一条我没有什么好评价的,记住作者的忠告就好。 作者的意思大概有三点吧:1)任何优化都存在风险,有时候弄不好反而带来其他的问题 2)并不是 性能 优先。努力编写好的程序而不是快的程序。 3)对前人,尤其是类似于Java API这样的成熟代码,进行优化,是不明智的(要是能优化,人家早就做了) 其实,不仅仅是优化。随着项目的进展,尤其是到了后...
2009-06-03 15:57:33
188
【第36条】谨慎地使用本地方法
Java Native Interface(JNI,Java本地接口),可以调用本地方法。这里的“本地”是指用其他语言(如 C, C++) 编写的特殊方法。 从历史上看,使用JNI主要有三个用途: 1)由于Java程序是运行在虚拟机之上的,虚拟机作为中间件,带来的平台无关性的好处的同时,也使得那些要求访问OS甚至硬件的底层操作变得无所适从。通过JNI可以调用C/C+...
2009-06-03 15:50:52
200
asm-4.1.jar
2015-10-22
编译Tika所用的所有16个jar包
2010-01-20
BlazeDS开发者指南
2008-11-16
使用BlazeDS实现Flex与Java通信
2008-11-15
PureMVC开发指南中文版
2008-11-15
C# 如何得到float型的Int32的 IEEE 754 浮点值的表示形式
2009-06-05
C# 如何判断一个引用是数组类型?
2009-06-04
Flex中数据的双向绑定
2008-11-18
弱问eclipse中调试小图标的含义
2008-11-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人