JDK8 lambda表达式

JDK8 lambda表达式

JDK8 中包含了很多内置的函数式接口。有些是在以前版本的Java中大家耳熟能详的,例如Comparator接口,或者Runnable接口。对这些现成的接口进行实现,可以通过@FunctionalInterface 标注来启用Lambda功能支持

Predicate
Predicate 是一个布尔类型的函数,该函数只有一个输入参数。Predicate接口包含了多种默认方法,用于处理复杂的逻辑动词(and,or, negate).

1

Example
[java]
publi[……]

继续阅读

日志输出中,必须使用条件输出形式或者使用占位符的方式

日志输出中,必须使用条件输出形式或者使用占位符的方式

比如以下例子:

logger.debug(“Processing trade with id: ” + id + ” symbol: ” + symbol);

如果日志是warn,上述日志不会打印,但是在执行字符串的操作时,如果symbol是对象,就会执行toString()方法,浪费了很多系统资源,但是日志又不需要打印。

正确的方式:


//condition
if (logger.isDebugEnabled()) {
logger.debug("Pro[......]

继续阅读

阿里巴巴Java技术手册

阿里巴巴Java技术手册

年初,阿里巴巴公布了他们的java技术手册,一直没有抽出时间拜读,今天不是很忙,就通读了一下,确实收获颇多。 自己做软件开发已经7年了,也积累了一些经验,文中有很多子项目是和自己平时开发一样的,但是从来没有这么详细的整理出来。保持一个良好的代码规范和风格对项目维护,项目更新以及新来员工的学习都是有更大帮助的。
现在再次把这个手册公布出来,希望一直温故而知新。什么时候开始都不是最糟糕的结果,问题是什么时候开始。

阿里巴巴Java开发手册

—如果有版权问题,请详细本人。谢[……]

继续阅读

函数式编程介绍

函数式编程介绍

最近在研究JDK8的新特性,一直熟悉面向过程和面向对象的编程模式,突然发现没怎么了解过函数式编程,于是最近乘这个机会,研究了一下函数式编程。

bg2012040601

定义
简单说,”函数式编程”是一种”编程范式”(programming paradigm),也就是如何编写程序的方法论。
它属于”结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。函数,大家应该都了解,就是一个功能逻辑单元,它没有特定的属性和归属。
函数式编程(FP)的核心就是一切都是函数,也就是说”活“的不再是对象[……]

继续阅读

为Java实现LinkedArray

为Java实现LinkedArray

前面的文章中,我们通过分析java的排序,顺便分析了ArrayList和LinkedList,这两个各有优缺点,那么我们能不能折合两者优点呢?我思考了一个问题-信息率,也就是为了存一个我希望存的对象而额外耗费的空间,

  • 对于ArrayList,每个数组的下标对于的地址单元存量一个对象指针,1:1的存,但是问题是在于增量导致的数组增长和整体数组的copy实在太损耗性能
  • 对于LinkedList,每一个链表节点,要额外增加一个前续来维持链表结构,1:2,事实JDK的LinkedList是p[……]

    继续阅读

谈一谈内存排序在JDK中的实现

谈一谈内存排序在JDK中的实现

说起内存排序,我立刻想到了大学和数据结构+算法设计老师的聊天,她推荐我去看《大道至简》,告诉我说,在很多复杂的情况下,先做内排序得到一个有序序列可以排除很多后续难题。我至今受用。

现在的计算机语言越来越高级,门槛越来越低,很多的基础细节再无人问津。万变不离其宗,作为科班出身的程序员,应该时刻温习基础知识。这里和大家一起从源码出发,看看Java中的排序是如何实现的。

还是先温习下内排序:

sort

那么,java中到底是怎么排序的呢?它是使用的哪一种呢?首先,Java中用于给集合排[……]

继续阅读

玩转JVM – 为wrtnode编译一个嵌入式JVM

玩转JVM – 为wrtnode编译一个嵌入式JVM

摩尔定律到达顶峰时期,物联网时代正在袭来,各种智能硬件玲琅满目,这让硬件和软件的的界限越来越模糊,硬件工程师可以不再面对元件一一焊起,软件工程师也可以轻易买到各种开发板,它已经”超乎“了嵌入式的概念,因为它完全是台小电脑。

从软件角度,当前NodeJS和Python等语言由于其轻量级内核(例如Python内核仅仅861Kbytes),因此厂商们为了吸引更多的爱好者和开发者使用产品,很多板子都会搭载NodeJS,例如,MTK的Sed Stadio,wrtnode等等。作为资深Java工程师,[……]

继续阅读

干净的架构

干净的架构

这是著名软件大师Bob大叔提出的一种架构,也是当前各种语言开发架构。干净架构提出了一种单向依赖关系,从而从逻辑上形成一种向上的抽象系统。

我们经常听说过如下各种架构:

  • 六边形架构Hexagonal Architecture (也称为 端口和适配器) 这是由Alistair Cockburn 提出,被Steve Freeman和 Nat Pryce在他们的书籍Growing Object Oriented Software中采取的。
  • Onion Architecture 作者[……]

    继续阅读

  • 如何排查Java内存泄露

    如何排查Java内存泄露

    转发
    java内存泄露典型特征

    • 现象一: 堆/Perm 区不断增长, 没有下降趋势(回收速度赶不上增长速度), 最后不断触发FullGC, 甚至crash(如下**两张图是同一个应用的GC和Perm数据, GC触发原因确认是Perm不足**)
. 一般是现象二的晚期表现.

    e1ddc292bde8c43925699d6ba1ab2c25755e75f9d359f01b651f3519aa0caedf

    • 现象二:每次FullGC后, 堆/Perm 区在慢慢的增长, 最后不断触发FullGC, 甚至crash(如下图: 示意图)

    b6edaed289de823016c3a6684c06ed5f

    java内存泄露场景—PermGen space

    &nbs[……]

    继续阅读