自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(117)
  • 问答 (7)
  • 收藏
  • 关注

感觉重构成了笑话

从开始编程到现在,呆过的公司,呆过的每个项目组,几十上百行的函数都比比皆是。以此为美的还不在少数,认为这是“紧凑”;变量太多也不认为是问题,统统提到函数开头就行了,认为这样“更易读”;变量命名也很简短,一个字母的,两个字母的大行其道,也不认为是问题,可能认为这样并不影响阅读,相反还使得代码更简短。代码嵌套太深也不认为是问题,反对分拆函数,认为不是公用的代码就不用分拆,是否分拆与函数长...

2013-12-13 11:05:08 163

编程的核心在于抽象

抽象是软件体系结构的灵魂。一个“优秀”的软件体系,必然是抽象层次恰到好处的结构。软件需要抽象,就如同书籍需要目录和章节一样;又好似茂盛的树木需要树干和枝丫。任何具备面向抽象编程意味的动作,都使软件体系朝质变迈出实实在在的一步,虽然不见得一定是变好。 面向过程语言与面向对象语言最大的区别就是,对抽象的支持不一样。两者都可以抽象,只是后者容易多了,它专为抽象而生。 但最重要...

2012-12-26 01:49:51 158

要成功就现在,不要推到将来

人生为某一个终极目标而活,很荒谬。这样的一生时间再长,也只等于一瞬间。为了六十岁的成功牺牲前面的二十岁、三十岁、四十岁乃至五十岁,得到的是一,失去的也许是十。 每个时期都做最大程度发挥潜能的事情,赢得了现在就是赢得了未来。等到了未来,那也只是短暂的一瞬,再大的成功也享受不了多久,也未必就真的需要多大的成功;另一方面,也完全没有理由说未来就比当前重要,没有理由为了未来的成功,就可以...

2012-09-27 02:04:08 131

Win7下重装ubuntu双系统

一、卸载现有ubuntu系统(参考[url=http://www.linuxidc.com/linux/2010-03/25129.htm]linuxidc.com[/url])1、下载[url=http://www.linuxidc.com/Linux/2007-11/8785.htm]MBRFix[/url]工具,放在c盘2、[code="java"]cd c:\mbrfix[/c...

2012-08-18 03:26:52 119

学习感悟--编程语言

从前觉得学校的教材太浅,只讲语法,根本不讲一种语言能用来做什么。后来不论学习什么语言都要认真钻研一番,看它到底有哪些功能。时间长了,就发现,现在感兴趣的又回到了语言本身的语法、特性上。因为,每种语言能做的事都差不多,语言之间的差异最大的部分反而就是它的语法规则。要掌握一门语言,首要掌握的,也是这个。至于功能,翻翻资料,大同小异。比如,网络编程,c、java、ruby、python,这些功能...

2012-08-12 02:10:48 108

涉及页面展示尽量少用js

用js操作DOM元素会引起页面频繁的reflow和repaint,加重页面负担。能用html和css达到效果的,就不要用js。

2012-07-04 10:42:04 163

actionscript与javascript交互总结

一、actionscript调用javascript[code="js"]function method4As() { alert('This is js code ')}[/code][code="java"]ExternalInterface.call('method4As');//as[/code]二、javascript 调用 actionscri...

2012-06-12 16:07:04 98

inline Element相互之间多出几像素的空白

若干个行内元素并排排列,margin,padding都设成0了,但它们相互之间还是莫名其妙地多出了几像素的空白。这不是那个ie6bug,但很容易被忽略,也很难查出原因:和元素的排版方式有关。[code="html"] model 第1层 第2层 [/code]换成如下再看看:[code="html"] ...

2011-10-19 05:17:12 158

《人性的弱点》不是靠学来的

曾经钻研过卡耐基的这本著作,也老老实实地实践过一阵子,但大多不了了之。究其原因,无外是逼自己做另一个完全不同的人,太难了,简直不可能。 比如说,作者建议不吝自己真诚的赞美。这点看起来容易,实际上稍有不慎就容易被理解为虚伪的奉承。根本原因是无法做到“真诚”二字,也许对方的得意之处在自己看来根本就没什么值得称道的地方,如果真要“真诚”,那就是不做出任何赞美。但实际上,这个时候最好还是...

2011-10-15 15:31:41 85

代码分层、分模块的好处

第一条,也是最根本的一条:抽象出了代码的整体框架、脉络,同时也隔离了具体的变化。没有分层,把逻辑都写在一个方法里面的代码就好比是一本没有目录的电子书,要找哪一章哪一节全得凭感觉,得点进去看,得结合上下文来分析。 良好的代码层次结构则相当于给这电子书创建了目录,而且按住Ctrl+鼠标就能点进去。它可以让维护人员迅速地掌握代码的整体架构,因为它把功能点都显式地列出来并很好地组织在一起了。...

2011-09-28 16:09:55 1550

VMWare虚拟机上网方式总结

一、宿主机处于局域网。1、bridge(桥接)将虚拟机的ip设为局域网其中的一个,确保无冲突。2、nat本地连接-->属性-->共享-->允许其他网络用户通过....来连接-->选择VMnet8。将虚拟机的ip设为自动获取。二、宿主机直接宽带上网,或任意使其拥有固定物理IP地址的上网方式。只能选择nat。与上述步骤2同。最后重启虚拟机。...

2011-09-25 23:42:17 98

兼容各浏览器盒子模型

各浏览器盒模型的组成结构是一致的,区别只是在"怪异模式"下宽度和高度的计算方式,而“标准模式”下则没有区别。组成结构以宽度为例:总宽度=marginLeft+borderLeft+paddingLeft+contentWidth+paddingRight+borderRight+marginRight。页面在“怪异模式”下,css中为元素的width和height设置的值在标准浏览器和ie系...

2011-09-24 23:36:32 542

原创 获取鼠标相对位置

获取鼠标相对于html的位置:[code="java"] function mousePosition(evt){ if(evt.pageX||evt.pageY){ return {x:evt.pageX,y:evt.pageY}; } return { x:evt.clientX+document.documentElement.scrol...

2011-09-20 10:48:19 228

基数排序

时间复杂度为O(k*n)的排序算法。目前只适用于非负整数,当然改造下也可用于负整数。[code="java"] /** * 过程:1、从个位数起,使用计数排序作为内排序方法,针对各个数位即“基数”进行排序。 * * * @param arr * @param digit 最大数据的位数,比如100则输入3 * */ public int[...

2011-09-08 10:17:22 83

快速排序

快速排序。基于比较的排序中基本上最快的算法O(nlgn)。数据基本有序且每次取第一个元素作划分点(含基本相同)时将遭遇“最坏”情形,时间复杂度为O(n^2)。换言之数据越乱越高效。缺点:非稳定排序。[code="java"] public void q_sort(int[] arr, int from, int to) { if (arr == null || arr.length ...

2011-09-07 23:42:28 68

归并排序

归并排序,时间复杂度O(nlgn),相比快速排序和堆排序,优势是排序稳定。通过两两分拆、归并实现。在子数组长度小于等于7(一说50)时可采用插入排序来提高效率(但我在本机上测试,两者带来的提升并不明显)。JDK自带的Collections.sort方法采用的即是归并排序。[code="java"]public class MergeSort { private int[] temp...

2011-09-07 23:34:18 72

堆排序

建立堆的时间复杂度为O(n),随后的排序为O(nlgn);常用于取前K大/小的应用。[code="java"] public void heapSort(int[] arr) { if (arr == null || arr.length == 0) { return; } for (int i = arr.length / 2; i >= 0; i--) {...

2011-09-07 23:20:22 70

直接插入排序

直接插入排序。[code="java"] public void sortWithIndex(Integer arr[], int from, int to) { if (arr == null || to > arr.length - 1||from= arr[j-1]) { break; } arr[j] = arr[j - 1]; }...

2011-09-07 22:50:12 70

希尔排序

希尔排序是简单插入排序的优化。插入排序在数组基本有序的情形下非常高效,希尔排序则通过创造这种环境,并最终进行一次整体的插入排序实现性能的优化。代码如下:[code="java"] /** * * @param arr 待排序数组 * @param group 分组数 */ public void shellSort(Integer[] arr, int g...

2011-09-07 15:44:47 88

http协议-缓存控制:no-cache/must-revalidate/no-store

客户端从服务器请求数据经历如下基本步骤: 1、如果请求命中本地缓存则从本地缓存中获取一个对应资源的"copy"; 2、检查这个"copy"是否fresh,是则直接返回,否则继续向服务器转发请求。 3、服务器接收到请求,然后判断资源是否变更,是则返回新内容,否则返回304,未变更。 4、客户端更新本地缓存。 no-cache的作用是:强制客户端跳过步骤2,直接向服务...

2011-09-04 20:02:59 552

http协议-缓存控制:etag If-None-Match / Last-Modified If-Modified-Since

 ETag和Last-Modified用法上的区别是:ETag必须由开发人员来使用,而Last-Modified服务器会自动判断。也就是说服务器自己能够获取文件的"Last-Modified"并和"If-Modify-Since"进行对比,进而决定发送什么样的响应。而ETag则必须由开发人员自己来和"If-None-Match"进行比较判断。 加上ETag一个用途是,假如文件被编辑...

2011-08-30 02:26:58 217

原创 http协议-缓存控制:max-age

打算将cache-control的各个值都试一遍,看看最终效果是否和预期一致。 先尝试max-age。其作用是:假如请求了服务器并在a时刻返回响应结果,则在max-age规定的秒数内,浏览器将不会发送对应的请求到服务器,数据由缓存直接返回;超过这一时间段才进一步由服务器决定是返回新数据还是仍由缓存提供。 设置max-age的方式是tomcat的filter。[code="...

2011-08-28 21:46:16 671

原创 下载文件示例

闲来无事做了个文件下载的功能,这还是第一次做的说,不知道会不会遭BS。请自备jQuery环境。[code="js"](function($){ var _cf = window["configFile"] = {LoginModel:function () {}}; _cf.LoginModel.prototype={ /** * 下载配置文件 */...

2011-08-26 16:18:36 70

原创 判断日期格式

[code="js"]var startTime = "2011-03-31 12:33:30";var reg = /^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]...

2011-08-17 09:34:46 73

mysql触发器创建细节

看起来学习成本不大的东西真要真刀实枪地跑通,细节还是挺多的。一、删除触发器。[code="sql"]DROP TRIGGER DEL_TR;[/code]看到很多例子都是这样的:DROP TRIGGER IF EXISTS xxx;但我的mysql版本上根本就不支持对触发器的IF EXISTS.[code="java"]mysql> select version()...

2011-08-04 22:20:03 79

原创 JS简易拖拽效果

模仿《javascript权威指南》写了个简易拖拽程序,麻雀虽小五脏俱全。原理:注册mousemove事件,使元素跟随鼠标挪动;注册mouseup事件,移除mousemove事件,使得松开鼠标时元素不再跟随移动,能够固定在指定位置。在mousedown事件中注册mousemove事件和mouseup事件,这样便可完成一次完整的拖拽。重点:IE中setCapture()的应用。它的作用是...

2011-07-31 22:48:43 105

原创 DOM事件传播模型

参考了如下链接,备忘一下:[url=http://jonsion.iteye.com/blog/1095853]DOM事件模型[/url]见下图:[img]http://www.w3.org/TR/2010/NOTE-xml-events2-20101216/images/event-flow.png?[/img]标准DOM2的事件传播模型分2个阶段:首先是捕获阶段(captu...

2011-07-31 22:15:41 157

想明白了,什么都是浮云

完成任务、解决问题的能力才是最重要的。技能只是手段,使用技能实现预定目标才是目的。所以人家更关注你能做出什么成果,而不是你会什么技能。这更加坚定了我之前的想法:必须扩大自己的业务领域,而不是仅仅沉溺于技术本身;要是这个技术还被认为是屠龙之术那就杯具了。 有人在踩...其实不是在否定技术,而是强调在学习技术时要时时关注它能给自己带来什么。...

2011-07-27 17:36:36 132

原创 面向抽象编程通俗理解

程序要隔离变化:首先要抽象、剥离出固定的部分,即使剩余部分再怎么变化,它也是不变的;做到这一点就必须使程序依赖于抽象,而不依赖于实现;这里的“抽象”应该从广义上理解,它可以是interface也可以是抽象类,可以利用ioc,甚至一个方法都行,总之,这部分不能使用具体的实现。 举个生活中的例子:小明接到一个电话找他爸爸,但恰好他不在家,于是小明告诉对方晚点再打过来。过一会儿爸爸回来了,...

2011-07-18 21:37:58 591

tdd的t不是集成测试

[code="java"]public void testMixedAddition() { Expression fiveBucks= Money.dollar(5); Expression tenFrancs= Money.franc(10); Bank bank= new Bank(); bank.addRate("CHF", "USD", 2); ...

2011-06-14 10:45:56 101

Spring问题记录

带着问题学习是最高效的学习方法;当然,不同阶段能够提出问题也不一样,但一定不能忘记提。否则无论看多久都会混混沌沌,直到某一天清醒了,回头一想,之所以变清醒还是因为突然向自己提了一个或几个恰到好处的问题。 一、眼下着手研究Spring的AOP,问题列表如下。基本的配置流程已经掌握了,但还有一些功能不知道如何实现。 1、切面类(命名为Aspect)如何、在何处获取被代理类(...

2011-06-06 21:53:02 70

IE事件注册相关的内存泄露总结

经过一上午的艰苦试验验证,得出如下结论: 1、将元素传入闭包,并在其中注册事件,这是导致内存泄露的根源之一;另一必要条件是:元素必须脱离文档树,亦即类似执行了语句:[code="java"]elm.parentNode.removeChild(elm)[/code]。 2、解决方式:避免上述情形;在window.onunload中取消事件注册。 示例如下: 1...

2011-06-03 17:28:00 75

PowerMock and EasyMock

再记住一点,[code="java"]EasyMock.replay();PowerMock.replay()[/code]这两者无法相互替代,需要分别调用,不要想当然地以为用其中一种就够了。

2011-05-25 20:32:36 70

tdd的粒度

发现这个问题目前还处于空白状态,搜了很久没看见讨论。希望管理员不要把它移到问答区,大家发帖子或多或少都会有些疑问,没疑问的帖子还会有讨论价值吗。 进入正题。一个系统的功能结构都是树形的,底层的最简单,越往上就越复杂,因为它对底层功能的集成越来越多。刚开始时的测试都是针对底层编写的,这很轻松,基本上没问题;可当需要编写高层功能时,问题就来了:要不要写测试?1、写。这就是每一层都写测...

2011-05-11 12:10:51 109

编码就是在做一棵树

请看图: [img]http://dl.iteye.com/upload/picture/pic/86380/18426fa0-11a5-3919-9ee7-9da2e02f3878.jpg[/img]这是一个典型的树形结构,层次分明,结构严谨。想查找什么东西费的劲比较而言少得多。我看着看着就发觉编码跟这个很相似。 我们最忌讳的就是铁板一块,试图一个方法搞定所有功能的代码;说到本质上...

2011-04-08 00:23:55 98

原创 还是没找到兴趣所在

如果真找到了感兴趣的工作,相信我会处于这种状态:无时无刻不在思考与之相关的东西,上班、下班、吃饭、乃至睡觉;我的创造力会被充分发挥,潜力会被最大程度地挖掘,进步会在任何时刻发生,隔不了多长时间就会取得一次质的飞跃。 这种状态我有过,可惜与工作无关。只有找到了感兴趣的工作,才不会浪费自己的生命力,才能做到最好;只可惜现在还没有,不知道什么时候才会有。...

2011-03-14 15:44:08 78

平生第一次理财~~

本以为钱不是问题,能力才是重要的,有能力还怕没钱?没能力靠那些小伎俩也守不住那几个可怜钱。于是对理财一词不屑一顾,我辈不稀罕。 但昨天登陆了银行的网上帐户,看到活期转定期一项,心生好奇,那位说,不是对理财不屑一顾吗,怎么还看这个?其实也不全是,比如说看到脚底下有张10块钱,您捡不?但不看不知道,一看吓一跳。乖乖,我亏大了。 目前我所有的存款都是活期的,利率是0.4%;如果...

2011-03-03 21:20:24 87

Struts2包引用问题

今天自己重新建了工程,想测试点东西,为图方便,直接把现成的工程里面的jar包复制了进来,没想到竟然报了这个错误:[code="java"]java.lang.NullPointerException at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.jav...

2011-03-01 17:17:27 109

原创 火箭重建或已开始

灰熊在08年时与湖人的交易大家一定还印象深刻,家嫂只换来了一瓶可乐+咖啡+啤酒等。类似这种以优秀的老球员换年轻球员的举动都可以被视为重建的信号。 巴蒂尔换来了一名年轻中锋和一个首轮选秀权,这名中锋很可能无法证明自己的实力,火箭却愿意担负着这样的风险,合理的解释是选秀权分散了风险,这一切都说明火箭已放眼未来。...

2011-02-25 08:53:50 126

尼克斯太沉不住气了...

安东尼的合同应该马上就到期了吧?到时他就是自由人了,既然他铁了心要去尼克斯,那即使掘金现在把他卖到了篮网他也会以自由人身份加盟尼克斯。现在花这么大代价相当于只买了安东尼半年的时间。如果沉住气,让他暂时加盟篮网,到了夏天再收回来,那不就什么也不用付出了吗?只少了半年时间,跟现在这么大的代价相比,孰轻孰重?...

2011-02-23 10:00:19 74

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除