http://segmentfault.com/a/1190000002464822
http://www.cnblogs.com/youxilua/archive/2013/05/20/3087935.html
http://www.cnblogs.com/youxilua/archive/2013/05/22/3092657.html