http://coolshell.cn/articles/9749.html
http://www.cnblogs.com/cheche/archive/2011/03/06/1971955.html