左耳聽風 ARTS Week 001

2022-03-05 07:04:10 字數 2147 閱讀 1757

3.學習至少乙個技術技巧

4.分享一篇有觀點和思考的技術文章

1.每週至少做乙個 leetcode 的演算法題

演算法題:14. 最長公共字首

編寫乙個函式來查詢字串陣列中的最長公共字首。

如果不存在公共字首,返回空字串 ""。

示例 1

:輸入: [

"flower

","flow

","flight"]

輸出: "fl

"示例 2:

輸入: [

"dog

","racecar

","car"]

輸出:

""解釋: 輸入不存在公共字首。

說明:所有輸入只包含小寫字母 a-z 。

解答:

public

class

solution

}return

prefix;

}}

此處拉下了。

3.學習至少乙個技術技巧

關於dictionary、hashtable、list的比較,之前收藏的,今天回顧一下。

dictionary:

採用鍊錶法

適合增刪的動作很多( 因為解決碰撞的方式  是list.add)

單執行緒程式中推薦使用 dictionary, 有泛型優勢, 且讀取速度較快, 容量利用更充分.

對於值型別,特定型別(不包括 object)的 dictionary的效能優於 hashtable,這是因為 hashtable 的元素屬於 object  型別,所以在儲存或檢索值型別時通常發生裝箱和取消裝箱操作

hashtable:

採用開放定址法

適合改動的動作很少  查詢的動作很多

多執行緒程式中推薦使用 hashtable, 預設的 hashtable 允許單執行緒寫入, 多執行緒讀取, 對 hashtable 進一步呼叫  synchronized() 方法可以獲得完全執行緒安全的型別. 而 dictionary 非執行緒安全, 必須人為使用 lock 語句進行保護,  效率大減.

dic  和 list

list是對陣列做了一層包裝,我們在資料結構上稱之為線性表,而線性表的概念是,在記憶體中的連續區域,除了首節點和尾節點外,每個節點都有著其唯一的前驅結點和後續節點。我們在這裡關注的是連續這個概念。

而hashtable或者dictionary,他是根據key而根據hash演算法分析產生的記憶體位址,因此在巨集觀上是不連續的,雖然微軟對其演算法也進行了很大的優化。由於這樣的不連續,在遍歷時,dictionary必然會產生大量的記憶體換頁操作,而list只需要進行最少的記憶體換頁即可,這就是list和dictionary在遍歷時效率差異的根本原因。

根據value 的查詢  dic 的效率是高於 list 的 但是遍歷的話   則dic 要差點。這就好比你要摘抄書裡邊的所有文字  是根據目錄 查乙個找一篇文章 快,還是直接從正文開始 從頭到尾快遍歷快一樣。單獨的找某一篇知道題目(key)的文章 當然是從目錄快了

在dictionary中,除了要儲存我們實際需要的value外,還需要乙個輔助變數key,這就造成了記憶體空間的雙重浪費。

在尾部插入時,list只需要在其原有的位址基礎上向後延續儲存即可,而dictionary卻需要經過複雜的hash計算,這也是效能損耗的地方。

list和 datatable

datatable,ilist效能比較

1)二進位制序列化的情況

從測試結果可以看出,ilist序列化的檔案大小比datatable小得多,這意味著在資料傳輸中頻寬占用小很多,所以在設計remoting介面時盡量使用ilist作返回值。

2)xml序列化的情況

從測試結果可以看出,ilist序列化後的檔案比同樣比datatable小,但差距已經沒有二進位制序列化那麼明顯了。而且ilist的二進位制序列化和xml序列化相差很大,所以remoteing中建議使用二進位制序列化。

3)操作性比較

datatable有支援資料的提交、回滾、查詢等強大的方法,但訪問單元格內容的時候不方便,還要型別轉換。

ilist則訪問項的屬性比較方便,有屬性自動提示,不用型別轉換,有linq的協助也能實現強大的查詢。

4.分享一篇有觀點和思考的技術文章

白話解析,一致性雜湊:

左耳聽風 ARTS Week 002

3.學習至少乙個技術技巧 4.分享一篇有觀點和思考的技術文章 1.每週至少做乙個 leetcode 的演算法題 演算法題 20.有效括號 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸...

再讀《左耳聽風》

今天,偶然間又想起來了自己訂閱的極客時間課程,好久沒有看了。之前買了兩個課程,乙個是 左耳聽風 乙個是關於pygame的。左耳聽風 這個課程應該是一年前就出了的,當時也是機緣巧合看到了這個課程,剛推出來的時候就買了 忘了當時是多少錢了 現在好像已經漲到299了。當時剛買的時候,看了幾篇文章,給我的印...

左耳聽風 第九周

每週完成乙個arts 每週至少做乙個 leetcode 的演算法題 閱讀並點評至少一篇英文技術文章 學習至少乙個技術技巧 分享一篇有觀點和思考的技術文章。也就是 algorithm review tip share 簡稱arts leetcode 844.比較含退格的字串 leetcode 148 ...