自整理:
https://www.cnblogs.com/andy9468/p/9996464.html
网文参考:
http://blog.csdn.net/zhangfh1990/article/details/73442447