https://www.cnblogs.com/beijiguangyong/archive/2010/11/15/2302807.html#_Toc281750445 https://www.cnblogs.com/Liqiongyu/p/5916710.html