http://www.cnblogs.com/jyan/archive/2012/07/24/2606646.html
http://www.cnblogs.com/jyan/archive/2012/07/24/2606547.html
http://blog.csdn.net/try530/article/details/7782704