array是最簡單最常見的數(shù)據(jù)結(jié)構(gòu)。它們的特點是容易通過索引(位置)訪問元素。它們是干什么用的?想象一排劇院的椅子。每把椅子都被分配了一個位置(從左到右),所以每個觀眾都會從他將要坐的椅子上分配一個數(shù)字。這是一個數(shù)組。把問題擴展到整個劇院(一排排椅子),你就有了一個二維數(shù)組(矩陣)。特征列表是線性的數(shù)據(jù)結(jié)構(gòu),就像數(shù)組一樣。
它由存儲當前元素的值和下一個元素的地址引用的節(jié)點組成。這樣,元素通過指針鏈接起來。它們是干什么用的?鏈表的一個相關(guān)應(yīng)用是實現(xiàn)瀏覽器的上一頁和下一頁。雙向鏈表非常適合存儲用戶顯示的頁面。特征棧是一種抽象數(shù)據(jù)類型,它形式化了受限訪問集的概念。此限制遵循后進先出(LIFO)規(guī)則。因此,添加到堆棧中的最后一個元素是您從堆棧中移除的第一個元素。
8、如何使用bloomfilter構(gòu)建大型Java 緩存 系統(tǒng)在如今的軟件中,緩存是解決很多問題的關(guān)鍵概念。您的應(yīng)用程序可能是CPU密集型的。當然,你不希望這些操作一遍又一遍的重復(fù)。相反,您只能執(zhí)行它們一次,并將結(jié)果作為緩存放入內(nèi)存。有時候系統(tǒng)的瓶頸在于I/O操作。比如不想重復(fù)查詢數(shù)據(jù)庫,想結(jié)合緩存的結(jié)果,只查詢數(shù)據(jù)在數(shù)據(jù)變化時更新緩存。類似于上面的情況,在某些情況下我們需要做一個快速搜索來決定如何處理新的請求。
如果我們把所有惡意網(wǎng)站的網(wǎng)址緩存加起來,會占很大空間?;蛘咴诹硪环N情況下,您需要確認用戶輸入的字符串包含美國的地名。就像這個字符串中的“華盛頓博物館”一樣,華盛頓是美國的一個地名。是不是應(yīng)該把美國所有的地名都記在記憶里,然后再去查?那樣的話緩存會有多大?在不使用數(shù)據(jù)庫的情況下可以高效地完成嗎?這就是為什么我們要超越基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)map,在更高級的數(shù)據(jù)結(jié)構(gòu) bloomfilter中尋找答案。
9、slab管理對于每類 數(shù)據(jù)結(jié)構(gòu)的 緩存是不是就是數(shù)組所謂數(shù)組,就是數(shù)據(jù)類型相同的元素按照一定的順序排列的集合,也就是用一個名字命名有限個相同類型的變量,然后用數(shù)字區(qū)分它們的變量集合。這個名字叫做數(shù)組名,數(shù)字叫做下標。組成數(shù)組的變量稱為數(shù)組的組成部分、數(shù)組的元素,有時也稱為下標變量。數(shù)組是將幾個相同類型的變量以有序的形式組織起來,以便于編程處理的一種形式。
數(shù)組不同于線性表。區(qū)別主要在動態(tài)分配上。現(xiàn)代語言支持動態(tài)數(shù)組,可以在運行時確定數(shù)組大小,但早期語言不支持,所以數(shù)組大小必須在編譯器中確定。線性鏈表可以動態(tài)確定大小,隨時增刪,知道元素個數(shù)。除非數(shù)組是動態(tài)定義的,否則要自己知道元素個數(shù)。例如,c89不支持動態(tài)數(shù)組,但c99支持。Isoc 也不支持,但c 0x支持。
10、常用的 緩存技術(shù)第一章中的Common緩存Technology 1、Common two緩存Local緩存:不需要序列化,速度快,并且緩存的數(shù)量和大小受本地內(nèi)存分配的限制/。速度比local 緩存慢,但理論上緩存的數(shù)量和大小是無限的(因為緩存 machines是可以不斷擴展的)。2.local緩存Google guavacache:最好的local緩存ehcache:Spring的默認集成之一,以springcache的緩存實現(xiàn)類的形式操作非常方便,但是缺乏靈活性。如果想靈活使用,或者單獨使用EhcacheOscache:最經(jīng)典最簡單的page 緩存3,distributed緩存memcached:distributed緩存as standard Redis:new generation distributed緩存,有取代memcached的趨勢,3.1.基于slab內(nèi)存模型的memcached經(jīng)典一致哈希算法可以有效防止內(nèi)存碎片的產(chǎn)生(但同時需要對啟動參數(shù)進行估計,否則會浪費大量內(nèi)存)。集群中的機器互不通信(相比Jbosscache等集群中的緩存速度更快。