http://www.cnblogs.com/r01cn/archive/2012/11/11/2765432.html
http://www.cnblogs.com/fzrain/p/3490137.html