参考文章链接:

https://www.cnblogs.com/endenvor/p/9057856.html/ ,个人觉得原文有些乱,并且代码不完整,在此做了整理和补充。