递归优化
很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer)。但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError。处理这个问题,我们可以使用一种叫做尾调用(Tail-Call Optimization)的技术来对递归进行优化。同时,还可以通过暂存子问题的结果来避免对子问题的重复求解,这个优化方法叫做备忘录(Memoizatio...
分类:
编程语言 时间:
2014-10-29 10:54:45
阅读次数:
395
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,是函数式编程的一种衍生范型。通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。...
分类:
其他好文 时间:
2014-10-28 17:48:30
阅读次数:
243
利用懒操作
代码中的很多操作都是Eager的,比如在发生方法调用的时候,参数会立即被求值。总体而言,使用Eager方式让编码本身更加简单,然而使用Lazy的方式通常而言,即意味着更好的效率。
本篇文章就是为了展示Java 8中新特性是如何让我们能够更方便的写出Lazy方式代码。
延迟初始化
对于会消耗较多资源的对象,使用延迟初始化是比较好的选择。这不仅能够节省一些资源,同时...
分类:
编程语言 时间:
2014-10-27 10:55:00
阅读次数:
352
资源处理
Java本身自带了垃圾回收(Garbage Collection)功能,但是只有垃圾回收的目标是内部资源(Internal Resource),典型的比如堆上分配的内存区域等。对于外部资源(External Resource),如数据库连接,文件句柄,套接字等资源,还是需要在程序中进行显式回收的。
使用Lambda表达式可以实现一种叫做Execute Around的模式,用来...
分类:
编程语言 时间:
2014-10-26 11:44:13
阅读次数:
305
使用Lambda表达式进行设计
在前面的几篇文章中,我们已经见识到了Lambda表达式是如何让代码变的更加紧凑和简洁的。
这一篇文章主要会介绍Lambda表达式如何改变程序的设计,如何让程序变的更加轻量级和简洁。如何让接口的使用变得更加流畅和直观。
使用Lambda表达式来实现策略模式
假设现在有一个Asset类型是这样的:
public class Asset {
...
分类:
编程语言 时间:
2014-10-25 07:03:55
阅读次数:
350
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。他极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软...
分类:
其他好文 时间:
2014-10-24 20:20:24
阅读次数:
312
Win32:Win32函数式编程,窗口体系,消息统一传入反应函数处理通过分析MFC的源代码,我们可以得到WM_COMMAND的消息响应顺序如下:多文档框架中,有打开的文档时:视图>文档>子框架窗口>应用程序>主框架窗口多文档框架在没有打开文档时,应用程序和主框架窗口的顺序..
分类:
编程语言 时间:
2014-10-24 16:52:53
阅读次数:
307
列举目录中的所有文件
首先给出代码:
Files.list(Paths.get(".")).forEach(System.out::println);
Files.list方法得到的是一个Stream类型的对象,它代表了目标路径下所有的文件。如果只想获取目标路径下的所有目录文件:
Files.list(Paths.get("."))
.filter(Files...
分类:
编程语言 时间:
2014-10-24 11:00:57
阅读次数:
163
本规范是针对javascript函数式编程风格与公司严重依赖于jQuery进行编码的现实制定出来。禁止使用eval,with与caller(ecma262 v5 的use strict要求)。eval只允许在加密时机器生成。声明变量必须加上 var 关键字,除了在for(;;)循环等语句中,原则上不...
分类:
编程语言 时间:
2014-10-24 09:15:27
阅读次数:
213
前言: 程序设计语言主要分为两种 1、基于存储原理(冯*诺依曼体系)的命令式编程语言,如C/C++、Java、Object Pascal(DELPHI)。 2、根据阿隆左*丘琦的lambda演算而产生的函数式编程语言,如Lisp、Scheme。 ...
分类:
编程语言 时间:
2014-10-23 15:40:58
阅读次数:
280