有兩臺計算機具有相同數量的多個文件。我們如何確定一臺電腦中的任何一個文件是否有輕微變化。這些計算機之間的網絡通信非常緩慢兩臺不同計算機上的文件差異
回答
您可以散列這些文件並通過網絡比較散列。
一個好的散列函數被設計成如果函數的輸入只有一點區別,那麼輸出將是完全不同的。此外,大多數散列函數現在具有160-512位的輸出長度。這意味着儘管你可能想要比較幾個千兆字節大的兩個文件,但你只需要在網絡上發送一個512位的小字符串來查看哈希值是否匹配。
如果你有幾百萬個文件,這可能已經很多了。一種解決方案是這樣的:
- 散列每個文件的每臺計算機上
- 然後串連的散列和散列連接字符串再次
- 如果它不同於你知道,這是有區別的現在比較這個輸出在那些文件中。
- 要查找的文件不同(甚至確切位置在文件中),你可以使用二進制搜索:
- 斯普利特百萬計的文件分爲兩個部分,現在轉到步驟1-3(如果你有足夠的空間,你可以保存每個文件的散列以加快速度)。
- 現在對於不同的兩個散列中的每一個,遞歸地進行步驟4-6。
- 如果你找到了不同的文件,你可以再次按照行數分割文件,並像4-6中那樣工作。
- 在某些時候,行數將會很小,以至於散列可能會比行的實際內容更長。現在,以天真的方式比較實際內容當然更有效率。
假設你只有一個不同的文件,只需要在網絡上發送對數許多散列,從而最大限度地減少網絡流量。
一個想法是爲每個文件生成一個散列。散列將任意長度的文件轉換爲固定大小。你可以進一步散列哈希,然後上傳並比較。散列是廣泛使用的,以確保下載不被破壞。
謝謝......您能請詳細說明一下我在面試中被問及與Web安全相關的問題(顯然我不適合)。讓我重新解釋一下這個問題:這是兩個系統中的數百萬個文件,網絡速度很慢,我們如何檢查一個文件中是否有一個字符是錯誤的 –
您想要查找特定字符還是隻需查找文件與錯位的性格? –
您可以使用md5sum實用程序。對於Windows請檢查[this](https://support.microsoft.com/en-us/help/889768/how-to-compute-the-md5-or-sha-1-cryptographic-hash-values-for-a-file)和linux使用md5sum filename
,然後比較散列值。
- 1. 計算同一文檔上的兩個值之間的差異
- 2. HTMLBody屬性返回兩臺計算機上的不同結果
- 3. 在兩個不同的平臺上,類文件的大小是否有差異?
- 4. 在同一臺計算機上同步兩個ruby腳本
- 5. 算法需要兩次計算差異
- 6. 確定運行Windows XP的兩臺計算機之間的差異?
- 7. 在兩臺不同的計算機上開發相同的應用程序
- 8. 計算不同分支上文件的差異。 GitHub的服務器VS GIT(CLI)
- 9. 兩臺計算機上的同一個Mercurial帳戶
- 10. 計算差異
- 11. 計算差異
- 12. 計算差異
- 13. 計算差異
- 14. 計算兩個HTML文件的百分比差異
- 15. 計算兩次python之間的差異
- 16. 用於更新計算機之間文件差異的腳本
- 17. 在同一臺計算機上安裝兩個Java 6更新
- 18. SQL2008 Express Edition:同一臺計算機上有兩個實例?
- 19. Mysql - 計算兩個不同表中的兩列之間的差異並插入
- 20. 來自兩個不同目錄的兩個文件的差異
- 21. 兩臺計算機上的Hazelcast實例互不識別
- 22. 計算不同行中不同列之間的差異
- 23. 計算JSON差異
- 24. 在一臺計算機上找不到Qt平臺插件「windows」
- 25. 從多臺計算機同時寫入文本文件
- 26. 我可以在同一臺計算機上運行兩臺Web服務器嗎?
- 27. 性能問題,從不同的計算機上拷貝文件
- 28. 計算機和空間問題上的文件位置不同
- 29. 從網絡上的不同計算機讀取xml文件?
- 30. 在不同的計算機上運行.exe文件(visual studios)
謝謝...您能否詳細說明一下我在面試中被問及與Web安全相關的位置(顯然我不適合)。讓我重新修改這個問題: 這兩個系統中的數百萬個文件和網絡速度很慢,我們如何檢查是否有一個字符在任何一個文件中都是錯誤的 –
@VivekKumar請參閱我的編輯 –