有沒有清除重復文件的軟件?
重復文件查找及刪除功能,許多軟件都有類似功能,例如:文件比較BeyondCompare文件比較軟件DuplicateCleaner查找重復文件DuplicateFinder其實一些優化工具也有類似功能,例如“魔方電腦大師”,個人認為更安全一些,至少有警告硬盤里的重復文件,并非一定是無用的,自動刪除多余重復的,這是很危險的操作,!!!
備份好重要文件到別處
前端刷算法用什么語言?
選用JS
leecode可以用js刷題了,我大js越來越被認可了是吧。但是刷題中會因為忽略js的一些特性掉入坑里。我這里總結一下我掉過的坑。
坑1:js中數組對象是引用對象
js中除了object還有數組對象也是引用對象,這點常常被忽視,所以在遞歸的時候傳遞數組要用(0)這樣復制一個一樣的新數組,不然會出現你傳入的數組會被同級的遞歸改變,結果就不對了。
所以只要數組復制的地方最好都要這么寫,除非你真的想引用。而且注意是slice不是splice這兩個方法差別很大,你如果用splice(0)也能得到數組的復制,但是你將會刪了原數組,因為splice是一個操作
增加和刪除的元素,返回值是刪除的元素的集合。splice(0)是表示從idx為0開始刪除到數組尾部,所以得到的返回值也是這個數組。slice(start,end)可以理解為切片,省略end表示到數組尾部,如果end為負
則從數組尾部開始數。
坑2:js中的sort是默認以字典序排序
一般排序的時候都以為如果是升序就不用寫compare函數,然而js中的()是按字典序排序的,這就導致你如果數組中都是非負數用sort可以得到你想要的效果,但是有負數的話就不對了。
比如arr[-1,-3,-5,7,4,-2]()console.log(arr)
你會得到[-1,-2,-3,-5,4,7]
所以要記得寫compare函數,不要偷懶,寫成匿名函數的形式最好。
坑3:函數沒有變量提升
其實這個一般不容易犯,主要當時我是和第二個坑結合了,我自定義compare函數的時候寫的是varcomparefunction(a,b){returna-b},本來沒錯,但是我寫在了sort的下面,于是sort找不到compare函數就按照默認的字符順序排列,搞的
我還以為是compare定義出現了問題。函數中定義變量是有“變量提升”的,就是說你在函數的任何位置定義vara都相當于在函數最開始的地方定義了vara,所以用習慣了之后就忘了函數不是變量,沒有變量提升了。你在下面定義會找不到。所以寫compare函數的時
候寫成匿名函數吧。
坑4:浮點數運算不精確
試試console.log(0.3-0.2)你會發現是0.09999999999999998。我發現只要有奇數的浮點數存在,js就無法精確計算。這應該跟浮點數在js中存儲的機制有關系。這個問題沒有太好的解決辦法,一般來講答案是要求保留2位或3位小數的,利用toFixed(n)直接保留
n位就可以了,這個方法本來就是四舍五入的。但是總有些情況你可能不想四舍五入而是想取上下界什么的,這樣就只能靠一些方法hack比如你想取前兩位:(a*100-b*100)/100這樣。
坑5:判斷數組為空
判斷數組為空時不能像變量一樣直接用if(!arr),因為數組不會像變量那樣隱式轉換,所以可以在你知道arr是個數組的情況下使用arr.lengthgt0判斷,但有些情況下可能那個變量還不是數組,就不能去length,所以網上看了一個比較周全的方法,就是先判斷該對象到
底是不是數組類型的,然后再取長度判斷