https://www.cnblogs.com/cainiaoaixuexi/p/3684641.html http://www.cnblogs.com/qlee/archive/2011/07/27/2118406.html