待完成的任務
1、Arrays.mergeSort排序演算法
2、BigInteger的實現原理
3、紅黑樹的新增和刪除操作實現
4、Collections各方法的相關實現
5、ORACLE怎麼查詢db_cache pool中的block,比如全表掃描怎麼查詢到所有的block。
6、學習apache,memcached、webservice、MYSQL
大資料量處理演算法:
1. Bloom Filter
2. Hash
3. Bit-Map
4. 堆
5. 雙層桶劃分
6. 資料庫索引
7. 倒排索引(Inverted Index)
8. 外排序
9. Trie樹
10. MapReduce
1、bloom filter
轉載:http://www.hellodba.net/2009/04/bloom_filter.html
設想以下的一個問題:有一個keyword的集合,我們需要快速判定某個keyword是否包含在其中。最簡單的方法是遍歷,但是效率很差。我們馬上想到了hash的方法,因為在Oracle內部,hash無處不在。比如在cache buffer中找到某個block,在shared pool中找到某個SQL等等。我們可以把keyword的集合build成一個hash table,然後根據keyword計算hash值,通過是否落在相應的hash bucket中,這樣就可以實現快速查詢的目的。這個方法不錯,但是當keyword過多時,hash table會佔用大量記憶體,效率也會隨之下降。
今天公司的架構師介紹了一個新的方法給我:Bloom Filter。它是一種基於隨機數(或Hash)的資料結構,它支援對成員使用較少空間來儲存,卻能得到較高效率的查詢。換句話說:在Bloom Filter 可以用於檢索一個元素是否在一個集合中。其原理如下:
建立一個容量為500萬的Bit Array結構(Bit Array的大小和keyword的數量決定了誤判的機率),將集合中的每個keyword通過32個hash函式分別計算出32個數字,然後對這32個數字分別用500萬取模,然後將Bit Array中對應的位置為1,我們將其稱為特徵值。簡單的說就是將每個keyword對應到Bit Array中的32個位置上,見下圖:
[img]http://dl.iteye.com/upload/attachment/333383/934e7bf6-acd1-3528-89b7-71a4a325af1e.jpg[/img]
當需要快速查詢某個keyword時,只要將其通過同樣的32個hash函式運算,然後對映到Bit Array中的對應位,如果Bit Array中的對應位全部是1,那麼說明該keyword匹配成功。
Bloom filter 是一個集合的有損編碼,所以它不是一種“保險”的方案,存在一定的誤判率。
另參考:http://blog.csdn.net/jiaomeng/archive/2007/01/27/1495500.aspx
========================================================================
1、在一條街上,有5座房子,噴了5種顏色。
2、每個房裡住著不同國籍的人
3、每個人喝不同的飲料,抽不同品牌的香菸,養不同的寵物
問題是:誰養魚?
提示:
1、英國人住紅色房子
2、瑞典人養狗
3、丹麥人喝茶
4、綠色房子在白色房子左面
5、綠色房子主人喝咖啡
6、抽Pall Mall 香菸的人養鳥
7、黃色房子主人抽Dunhill 香菸
8、住在中間房子的人喝牛奶
9、 挪威人住第一間房
10、抽Blends香菸的人住在養貓的人隔壁
11、養馬的人住抽Dunhill 香菸的人隔壁
12、抽Blue Master的人喝啤酒
13、德國人抽Prince香菸
14、挪威人住藍色房子隔壁
15、抽Blends香菸的人有一個喝水的鄰居
以上是愛因斯坦在20世紀初出的這個謎語。他說世界上有98%的人答不出來。
你能做出來嗎?