XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。 XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。 起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。 但是XPath很快的被开发者采用来当作小型查询语言。
mqtt消息中间件mosquitto的安装和配置
Mosquitto是一个开源(BSD许可证)的消息代理,实现MQTT(消息队列遥测传输)协议版本3.1.1。
MQTT(MQ Telemetry Transport),消息队列遥测传输协议,轻量级的发布/订阅协议, 适用于一些条件比较苛刻的环境,进行低带宽、不可靠或间歇性的通信。目前已经是物联网消息通信事实上的标准协议了。
值得一提的是mqtt提供三种不同质量的消息服务:
- “至多一次”:消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
- “至少一次”:确保消息到达,但消息重复可能会发生。
- “只有一次”:确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
Java8中的lambda表达式
2014年3月18日,Oracle终于发布Java8正式版。在新的版本里面加入了很多特性, 总共增加了55个新特性,其中最最吸引人的就是Lambdas表达式和Stream函数式编程,本文详细讲解这两个特性。
其他特性比如日期API,泛型,反射,注解,集合框架,并发,Nashorn引擎等等这里暂时就不详细介绍了。 具体可以参考:http://openjdk.java.net/projects/jdk8/features
昨天参加了Oracle的Java8宣讲活动,有幸目睹了Simon Ritter的风采,写个总结来分享下。
Java内存区域与内存溢出异常
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 按照《Java虚拟机规范(第2版)》的规定,Java虚拟机所管理的内存将包括以下几个运行时数据区域。
来个图更加直观点,如下图所示:
fastjson对Date的处理
fastjson对日期的序列化方式
一种方法是通过注解
1 | @JSONField (format="yyyy-MM-dd HH:mm:ss") |
另一种是通过SerializeConfig:
1 | private static SerializeConfig mapping = new SerializeConfig(); |
使用xmemcached客户端
Xmemcached是基于java nio实现的高性能可扩展的memcached客户端。它的主要特点:
- 高性能,稳定可靠,已经在众多公司的众多项目里得到应用。
- 功能完备:客户端分布式、权重、最新最完整的协议支持。
- 可扩展,易于集成
- 可动态增删memached节点
- 客户端操作统计
- NIO连接池
等等,更多信息请见wiki文档。
快速排序和二分查找
排序算法中最快的是快速排序算法,搜索算法中最快的是二分搜索算法。我也最喜欢这2 个算法。 因为它们是使用递归实现的,代码简洁清晰,效率又非常高。
根据我的理解,算法的本质就是数学。根据输入和设定的目标,采用有限的步骤实现输出。 通常,使用计算机实现的算法,都会用到循环,这样才能发挥计算机高速运算的优势。
循环和递归是等效的,这已经被科学家所证明。数学上没有循环,只有递归的概念,因此使用递归代替循环表示算法有很多好处:
- 递归的代码要比循环简洁很多,也优雅很多。
- 递归的代码可以用数学方式建模,可以从数学角度验证其正确性。
很多函数式语言甚至没有循环的概念和关键字,强迫你使用递归来实现循环。如,ErLang 。 递归也有一些缺点,递归使用栈来保存函数地址和参数、返回值,而栈是有一定大小的, 过多的递归调用可能会造成栈溢出。但是,递归算法会容易转变为循环。我更欣赏递归的简洁, 除非真的出现栈溢出的问题,我是不会使用循环的。
linux上安装memcached
下载memcached与libevent的安装文件:
memcached下载地址:memcached-1.4.15.tar.gz
libevent下载地址:libevent-2.0.21-stable.tar.gz
安装libevent
- 由于memcached依赖于libevent,因此需要安装libevent。由于linux系统可能默认已经安装libevent,执行命令:
1
rpm -qa|grep libevent
回溯法解决八皇后问题
利用递归算法并行化解决谜题框架
我们将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
规则集包含两部分:计算从指定位置开始的所有合法移动,以及每次移动的结果位置。
下面先给出表示谜题的抽象类,其中的类型参数P和M表示位置类和移动类。根据这个接口, 我们可以写一个简单的串行求解程序,该程序将在谜题空间Puzzle Space中查找, 直到找到一个解答或者找遍了整个空间都没有发现答案。注:一个移动M代表一步。
1 | /** 表示 搬箱子 之类谜题的抽象类*/ |