将原本在csdn的代码转移过来