[JavaScript]获取数组中的最大值、最小值的方法

获取一个数组中的最大值、最小值的最简单的方法,就是对数组进行一次遍历,通过比较,找到其最大值、最小值。但是其实在javascript的原生方法中,已经提供了一些快捷方法,可以实现此功能。下面列出利用基本方法和原生方法实现的几种不同方法。
1.基本方法(遍历数组)。

2.基本方法改进版(使用数组原型的方式)。
注:此处将最大值、最小值方法放入数组构造方法的原型中,可以使所有的数组对象都可以使用。在添加之前,为了防止重复定义(引入的类库中可能包含同名原型方法)而增加判断。

阅读余下全文 »

[Java]设计模式之单例模式

单例模式是设计模式中使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。
使用单例模式能带来什么好处呢?
1.对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销。
2.由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间。
因此对于系统的关键组件和被频繁使用的对象,使用单例模式便可以有效地改善系统的性能。
单例模式的类图:
singleton
阅读余下全文 »

人为什么活着?

伯兰特·罗素在他的自传前言里面谈论到“人为什么活着”这个看似简单而又无比深奥的问题。
他认为人活着有三个理由:对爱情的渴望,对知识的追求,对人类苦难不可遏制的同情,是支配我一生的单纯而强烈的三种感情。
第一个理由是:对爱情的渴望
首先,爱情有时给我带来狂喜,这种狂喜竟如此有力,以致使我常常会为了体验几小时爱的喜悦,而宁愿牺牲生命中其他一切。
其次,爱情可以摆脱孤寂。身历那种可怕孤寂的人的战栗意识,有时会由世界的边缘,观察到冷酷无生命的无底深渊。
最后,在爱的结合中,我看到了古今圣贤以及诗人们所梦想的天堂的缩影,这正是我所追寻的人生境界。
第二个理由是:对知识的追求
我们渴望去了解人类,也渴望知道星星为什么会发光,同时还想理解毕达哥拉斯的力量。知识能让我们理解人的内心,理解自然界,满足我们与生俱来的好奇心。
最后一个理由是:对人类苦难不可遏制的同情
爱情与知识的可能领域,总是引领我到天堂的境界,可对人类苦难的同情经常把我带回现实世界。那些痛苦的呼唤经常在我内心深处引起回响。饥饿中的孩子,被压迫被折磨者,给子女造成重担的孤苦无依的老人,以及全球性的孤独、贫穷和痛苦的存在,是对人类生活理想的无视和讽刺。我们活着,就是为了减轻一些这种苦难,不仅为了帮助他人,还因为我们自己也是这种苦难的受害者。
如果有人问我“人为什么活着”这个问题,我会把罗素的观点告诉他,因为我觉得他总结的太好了!
更重要的是,我会一直怀着以上三个理由来活着,努力寻找天堂的境界,坚强的面对、改变现实世界!

[Spring]InitializingBean和DisposableBean接口的简单介绍

Spring框架为bean的初始化和销毁方法分别提供了InitializingBean和DisposableBean接口,使得Spring容器在初始化和销毁bean后,可以执行一些动作。
两个接口的内容很简单:

两个接口都不需要对bean进行额外的配置,只需要实现此接口,Spring框架会在初始化后和销毁后,自动检查当前bean是否实现了相关接口,如果实现了,则执行相应方法。
上述可知,使用接口实现对bean进行初始化或销毁后的动作执行,会把代码耦合于spring中(接口定义于spring包中)。如果想要避免此种情况,可以在bean定义时,添加init-method属性和destroy-method属性,来实现bean在初始化和销毁后额外动作的执行。

同使用接口的效果是一样的,但是后者不会与spring耦合。
另外,两者可以共同使用。当接口和”bean属性配置”一起使用的时候,spring会先执行接口的实现方法,再执行bean属性配置的方法。

[Java]程序性能优化

Java程序性能优化简洁的总结如下,如果你通过以下二十多条优化点可以完全明白诸如“为什么如此优化?”、“优化的必要性?”等问题,那么就说明你完全掌握了相关Java的程序优化点。
1.避免在循环条件中使用复杂表达式
在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。
2.为’Vectors’和’Hashtables’定义初始化大小
通常,默认的10个元素大小是不够的,你最好能准确的估计你所需要的最佳大小。
3.在finally块关闭非内存资源
程序中使用到的资源应当被释放,以避免资源泄漏,这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。
4.使用’System.arraycopy ()’代替通过来循环复制数组
‘System.arraycopy ()’ 要比通过循环来复制数组快的多。
5.让访问实例内变量的’getter’、’setter’方法变成’final’
内联方法参考:Java内联方法
6.避免不需要的instanceof操作
如果左边的对象的静态类型等于右边的,instanceof表达式返回永远为true。
7.避免不需要的造型操作
所有的类都是直接或者间接继承自Object。同样,所有的子类也都隐含的“等于”其父类。那么,由子类造型至父类的操作就是不必要的了。
8.如果只是查找单个字符的话,用charAt()代替startsWith()
9.使用移位操作来代替’a / b’操作
“/”是一个很“昂贵”的操作,使用移位操作将会更快更有效。
10.使用移位操作代替’a * b’操作
“*”是一个很“昂贵”的操作,使用移位操作将会更快更有效。
阅读余下全文 »