单播,组播(多播),广播以及任播

单播(unicast): 是指封包在计算机网络的传输中,目的地址为单一目标的一种传输方式。它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用单播传输,例如一切基于TCP的协议。
组播(multicast): 也叫多播, 多点广播或群播。 指把信息同时传递给一组目的地址。它使用策略是最高效的,因为消息在每条网络链路上只需传递一次,而且只有在链路分叉的时候,消息才会被复制。
广播(broadcast):是指封包在计算机网络中传输时,目的地址为网络中所有设备的一种传输方式。实际上,这里所说的“所有设备”也是限定在一个范围之中,称为“广播域”。
任播(anycast):是一种网络寻址和路由的策略,使得资料可以根据路由拓朴来决定送到“最近”或“最好”的目的地。

在Linux运行ifconfig, 如果网卡信息中包含UP BROADCAST RUNNING MULTICAST,则支持广播和组播。

阅读全文

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项目中使用。

阅读全文