Netty5用户指南

Netty 是一个NIO client/server 网络编程框架, 可以快速且容易的开发基于协议(protocol)的网络客户端/服务器端的程序。 它极大的简化了TCP和UDP socket编程, 提供流水线化的操作。

'快速且容易'并不会导致应用难以维护和性能低下。 Netty经过仔细设计, 基于许多协议实现的经验如FTP, SMTP, HTTP以及各种二进制的和基于本文的老的协议, Netty成功的找到一种保证开发,性能,稳定性,灵活性的方式, 毋须折衷.

特性

设计

  • 为各种传输类型提供统一的API- 阻塞和非阻塞的socket
  • 灵活和可扩展的事件模型, 将关注点分隔
  • 高度可定制化的线程模型- 单线程, 一种或者多个线程池如SEDA
  • 真正无连接的数据报socket支持(since 3.1)

    易用

  • 提供Javadoc, 用户指南和例子
  • 除了JDK 1.5 (或以上版本)毋须第三方库支持

    性能

  • 更好的吞吐率,低延迟
  • 较少的资源占用
  • 最小化不必要的内存拷贝

    安全

  • 完整的SSL/TLS, StartTLS支持

    社区

  • 早期发布,发布频繁
  • 作者自2003就开始写类似的框架(mina), 一直收集用户的反馈。

    阅读全文

Java位操作指南

原码,反码和补码

这个是计算机的基础知识了。

+3的原码为00000011
-3的原码为10000011
第一位是符号位。

+3的反码为00000011
-3的反码为11111100
正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

+3的补码为00000011
-3的补码为11111101
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

使用补码可以将减法变为加法,而且0的问题也会解决。

Java中使用补码的格式保存byte,short,int,long类型的数据。 ( two's complement integer.)

位操作符

  • & 与。 按补码的每一位进行与操作。
  • | 或。 按补码的每一位进行与操作。
  • ^ 异或。 按补码的每一位进行与操作。
  • ~ 取反。 按补码的每一位进行与操作。
  • >> 带符号右移,高位补符号位。 正数右移一位相当于除以2。
  • >>> 无符号右移。高位补0。 正数右移一位相当于除以2。
  • << 左移,低位补0。 正数左移一位相当于乘以2。

除了~是一元操作符外其它都是二元操作符号。

阅读全文

Java Buffer编程基础

Java 1.4中在java.nio包中增加了Buffer类以及一些处理基本数据类型的子类(除了boolean型) ,用来提供为基本数据类型(primitive) 的数据提供一个容器。
何谓Buffer? Buffer 是一个线性的有限长度的特定基本数据的序列。 除了基础数据外,它还包括一些基础操作和属性, 比如capacity, limitposition

实际使用中使用特定的子类来处理数据。每个子类都定义了两套get/put的操作。

  • 相对位置操作 (Relative )。 从当前位置position读写一个或者多个元素, 并position增加相应的数值。 如果一个get请求的数据超过了limit的位置,会抛出BufferUnderflowException异常。 如果一个put操作超过了limit的限制, 会抛出BufferOverflowException异常。不管上面哪种情况,没有数据被传输。
  • 绝对位置操作 (Absolute )。 显式地提供index, 不会影响position的值。 如果索引超过limit会抛出IndexOutOfBoundsException异常。

数据也可以通过Channel的I/O操作如write,read 写入或者读出。
显然, Buffer只有写入了数据才可能有意义的数据读出。

Buffer类并不是线程安全的, 使用时要特别小心, 避免多线程同时读写同一个Buffer。 万不得已, 需要为读写操作加锁。

阅读全文

Hexo 同时支持Github和Gitcafe

Hexo支持同时发布到多个git仓库中。需要修改_config.yml
原来的配置:

1
2
3
4
deploy:
type: github
repo: github: https://github.com/<username>/<username>.github.io.git
branch: master

改成

1
2
3
4
5
deploy:
type: git
repo:
github: https://github.com/<username>/<username>.github.io.git,master
gitcafe: https://gitcafe.com/<username>/<username>.git,gitcafe-pages

首先需要你在gitcafe创建一个和用户名相同的项目,并为此项目创建一个gitcafe-pages。 静态站点发布到这个分支上。 同时需要绑定你的域名在此项目上。
这和github有点不同。 github要求创建一个<username>.github.io的项目,站点发布到master分支即可。

dnspod
之所以发布到两个站点, 主要是想让国内的用户直接访问ggircafe上的站点,这样速度快一点。
你可以在dnspod上针对不同的线路配置不同的A记录。

参考文档:

javascript 函数前面的一元操作符

segmentfault上的一个问题:

一般看JQuery插件里的写法是这样的:

1
2
3
(function($) {
//...
})(jQuery);

今天看到bootstrap的javascript组件是这样写的:

1
2
3
!function( $ ){
//...
}( window.jQuery );

为什么要在前面加一个 " ! " 呢?
原来,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。
另外,用 ! 可能更多的是一个习惯问题,不同的运算符,性能是不同的。

阅读全文

Gitbook简明教程

Gitbook是一个命令行工具(node.js库), 使用Github/Git创建漂亮的图书。 你可以看一些用它编写的图书的例子: 学习Javascript. 你也可以很容易的通过gitbook.io网站发布在线图书。 editor 是一个图形化的编辑工具, 提供Windows, Mac 和Linux的版本. 关注Twitter帐号 @GitBookIO. 这篇文章只是一个起步教程, 完整的文档可以在help.gitbook.io网站找到.

阅读全文

使用FastJson作为JAX-RS的序列化/反序列化框架

FastJson是阿里巴巴的温少开发的一个JSON的序列化和反序列化的框架。 我前面的文章: Java序列化框架性能比较中也提到, 我使用第三方的序列化测试框架jvm-serializers表明, FastJson是最快的JSON序列化框架之一, 优于Jackson。

JAX-RS是一个Java编程语言的应用程序接口,支持按照 表象化状态转变 (REST)架构风格创建Web服务Web服务. JAX-RS使用了Java SE 5引入的Java 标注来简化Web服务客户端和服务端的开发和部署。
JAX-RS的实现包括:

  • Apache CXF,开源的Web服务框架。
  • Jersey, 由Sun提供的JAX-RS的参考实现。
  • RESTEasy,JBoss的实现。
  • Restlet,由Jerome Louvel和Dave Pawson开发,是最早的REST框架,先于JAX-RS出现。
  • Apache Wink,一个Apache软件基金会孵化器中的项目,其服务模块实现JAX-RS规范

如果项目中使用JAX-RS传递JSON格式的数据, 可以利用FastJson提高序列化的性能。 但是FastJson并没有提供JAX-RS的集成( Issue #65, Issue #138 )。

我实现了一个FastJson的JAX-RS集成框架: fastjson-jaxrs-json-provider ,可以方便在在JAX-RS项目中使用。

阅读全文

ZooKeeper程序员指南

翻译于最新的ZooKeeper 3.4 文档

前言

本文档是为那些希望利用ZooKeeper的协调服务建立分布式应用程序的开发人员而写的指南。它包含了Zookeeper的概念和实践内容。
指南的前四节介绍了ZooKeeper各种概念的高层次的讨论。 对于理解ZooKeeper如何工作和如何使用它这些概念都是必须了解的。尽管不包含代码,但还是假定你熟悉分布式计算相关的问题。
第一组的章节包括:

  • ZooKeeper数据模型: The ZooKeeper Data Model
  • ZooKeeper的会话: ZooKeeper Sessions
  • ZooKeeper的监视: ZooKeeper Watches
  • 一致性保证:Consistency Guarantees
    (下面的翻译中概念尽量不翻译成中文,因为英文更能直观的反映其概念)

接下来的四个章节提供了编程实践信息,它们是:

  • Building Blocks: A Guide to ZooKeeper Operations
  • Bindings
  • Program Structure, with Simple Example [tbd]
  • Gotchas: Common Problems and Troubleshooting

附录中的链接是其它的有用的,和ZooKeeper相关的信息.
书中的章节都可以独立阅读,然而在开发你的第一个ZooKeeper程序之前, 你最好先阅读一下ZooKeeper数据模型和ZooKeeper基本操作。Simple Programmming Example对于理解ZooKeeper客户端程序的基本结构也很有帮助.

阅读全文