http://www.cnblogs.com/shaoyangjiang/archive/2012/03/11/2389822.html
http://www.cnblogs.com/menlsh/archive/2013/05/04/3060250.html