XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。 XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。 起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。 但是XPath很快的被开发者采用来当作小型查询语言。

W3C网址: http://www.w3schools.com/XPath/

阅读全文 »

Mosquitto是一个开源(BSD许可证)的消息代理,实现MQTT(消息队列遥测传输)协议版本3.1.1。

MQTT(MQ Telemetry Transport),消息队列遥测传输协议,轻量级的发布/订阅协议, 适用于一些条件比较苛刻的环境,进行低带宽、不可靠或间歇性的通信。目前已经是物联网消息通信事实上的标准协议了。

值得一提的是mqtt提供三种不同质量的消息服务:

  • “至多一次”:消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
  • “至少一次”:确保消息到达,但消息重复可能会发生。
  • “只有一次”:确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
    阅读全文 »

2014年3月18日,Oracle终于发布Java8正式版。在新的版本里面加入了很多特性, 总共增加了55个新特性,其中最最吸引人的就是Lambdas表达式和Stream函数式编程,本文详细讲解这两个特性。

其他特性比如日期API,泛型,反射,注解,集合框架,并发,Nashorn引擎等等这里暂时就不详细介绍了。 具体可以参考:http://openjdk.java.net/projects/jdk8/features

昨天参加了Oracle的Java8宣讲活动,有幸目睹了Simon Ritter的风采,写个总结来分享下。

阅读全文 »

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 按照《Java虚拟机规范(第2版)》的规定,Java虚拟机所管理的内存将包括以下几个运行时数据区域。

来个图更加直观点,如下图所示:

阅读全文 »

fastjson对日期的序列化方式

一种方法是通过注解

1
2
@JSONField (format="yyyy-MM-dd HH:mm:ss")
public Date birthday;

另一种是通过SerializeConfig:

1
2
3
4
5
6
private static SerializeConfig mapping = new SerializeConfig();
private static String dateFormat;
static {
dateFormat = "yyyy-MM-dd HH:mm:ss";
mapping.put(Date.class, new SimpleDateFormatSerializer(dateFormat));
}
阅读全文 »

Xmemcached是基于java nio实现的高性能可扩展的memcached客户端。它的主要特点:

  1. 高性能,稳定可靠,已经在众多公司的众多项目里得到应用。
  2. 功能完备:客户端分布式、权重、最新最完整的协议支持。
  3. 可扩展,易于集成
  4. 可动态增删memached节点
  5. 客户端操作统计
  6. NIO连接池

等等,更多信息请见wiki文档。

阅读全文 »

排序算法中最快的是快速排序算法,搜索算法中最快的是二分搜索算法。我也最喜欢这2 个算法。 因为它们是使用递归实现的,代码简洁清晰,效率又非常高。

根据我的理解,算法的本质就是数学。根据输入和设定的目标,采用有限的步骤实现输出。 通常,使用计算机实现的算法,都会用到循环,这样才能发挥计算机高速运算的优势。

循环和递归是等效的,这已经被科学家所证明。数学上没有循环,只有递归的概念,因此使用递归代替循环表示算法有很多好处:

  1. 递归的代码要比循环简洁很多,也优雅很多。
  2. 递归的代码可以用数学方式建模,可以从数学角度验证其正确性。

很多函数式语言甚至没有循环的概念和关键字,强迫你使用递归来实现循环。如,ErLang 。 递归也有一些缺点,递归使用栈来保存函数地址和参数、返回值,而栈是有一定大小的, 过多的递归调用可能会造成栈溢出。但是,递归算法会容易转变为循环。我更欣赏递归的简洁, 除非真的出现栈溢出的问题,我是不会使用循环的。

阅读全文 »

八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。 八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解 — 摘自八皇后问题wiki

阅读全文 »

我们将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。

规则集包含两部分:计算从指定位置开始的所有合法移动,以及每次移动的结果位置。

下面先给出表示谜题的抽象类,其中的类型参数P和M表示位置类和移动类。根据这个接口, 我们可以写一个简单的串行求解程序,该程序将在谜题空间Puzzle Space中查找, 直到找到一个解答或者找遍了整个空间都没有发现答案。注:一个移动M代表一步。

1
2
3
4
5
6
7
8
9
10
/** 表示 搬箱子 之类谜题的抽象类*/
public interface Puzzle<P, M> {
P initialPosition();

boolean isGoal(P position);

Set<M> legalMoves(P position);

P move(P position, M move);
}
阅读全文 »