原创 搜索引擎之正排與倒排索引

正排索引(正向索引) 正排表是以文檔的ID爲關鍵字,表中記錄文檔中每個字的位置信息,查找時掃描表中每個文檔中字的信息直到找出所有包含查詢關鍵字的文檔。 正排表結構如圖1所示,這種組織方法在建立索引的時候結構比較簡單,建立比較方便且易於維護

原创 top K、重複、排序問題

①Top K問題:分治+Trie樹/Hash_map+小頂堆。採用Hash(x)%M將原文件分割成小文件,如果小文件太大則繼續Hash分割,直至可以放入內存。然後使用Trie樹來Hash統計每個小數據集中的query詞頻,之後用小頂堆求出

原创 LRU算法(最近最久未使用/最近最少使用算法)

根據數據的歷史訪問記錄來進行淘汰數據,其核心思想是“如果數據最近被訪問過,那麼將來被訪問的機率也更高” 1、最常見的實現是使用一個鏈表保存緩存數據 1. 新數據插入到鏈表頭部; 2. 每當緩存命中(即緩存數據被訪問),則將數據移到鏈表頭

原创 輾轉相除法與更相減損術(求最大公約數)

輾轉相除法:兩個正整數a和b(a>b),它們的最大公約數等於a除以b的餘數c和b之間的最大公約數。比如10和25,25除以10商2餘5,那麼10和25的最大公約數,等同於10和5的最大公約數。 以上代碼存在取模運算,大數據較大時,其效率

原创 大量數據去重:Bitmap位圖算法和布隆過濾器(Bloom Filter)

Bitmap算法 與其說是算法,不如說是一種緊湊的數據存儲結構。是用內存中連續的二進制位(bit),用於對大量整型數據做去重和查詢。其實如果並非如此大量的數據,有很多排重方案可以使用,典型的就是哈希表。 實際上,哈希表爲每一個可能出現的數

原创 一些智力題

目錄 玻璃球與樓層 燒香 撞球 小白鼠試毒 水壺裝水 12枚硬幣 玻璃球與樓層 題目:有一棟100層高的大樓,給你兩個完全相同的玻璃球。假設從某一層開始,丟下玻璃球會摔碎。那麼怎麼利用手中的兩個球,用什麼最優策略知道這個臨界的層是第幾

原创 字典序算法

給定一個正整數,實現一個方法來求出離該整數最近的大於自身的換位數 換位數:把一個整數各個數位的數字進行全排列,從而得到新的整數。例如53241和23541。 例子:輸入12345,返回12354        輸入12354,返回1243

原创 二叉樹

目錄   二叉樹 什麼是二叉樹? 什麼是二叉排序樹? 二叉樹的數據結構定義 二叉樹的各種遍歷 從上到下不分行的層序遍歷 從底到上分行的層序遍歷 二叉樹的最小深度 判斷是否爲平衡二叉樹 按之字形打印二叉樹 二叉樹的直徑 二叉樹的鏡像 判斷是

原创 MySQL的EXPLAIN執行計劃

以下表格可用於在閱讀理解完本文在未來用於快速回顧知識點,初次瞭解explain請先忽略此表格 id select_type table type Possible _keys key key_len ref

原创 數據庫Mysql其他細節點

目錄 什麼是視圖?以及視圖的使用場景有哪些? 使用JDBC連接數據庫 preparedStatement和statement的區別 在數據庫中查詢語句速度很慢,如何優化? union和union all有什麼不同?union和union

原创 數據傳輸方式(零拷貝)

在介紹零拷貝之前我想說下在計算機系統中數據傳輸的方式。   早期階段: 分散連接,串行工作,程序查詢。 在這個階段,CPU就像個保姆一樣,需要手把手的把數據從I/O接口從讀出然後再送給主存。    這個階段具體流程是: CPU主動啓動I

原创 各種排序算法

目錄 二分查找 冒泡排序 選擇排序 插入排序 希爾排序 歸併排序 快速排序 堆排序 計數排序 桶排序 基數排序 外部排序與歸併排序(強調一種思想) 動態規劃要點: 二分查找 //不使用遞歸實現:while循環,時間O(log2 N),

原创 操作系統中的進程調度策略有哪幾種

先來先服務調度算法:先來先服務(FCFS)調度算法是一種最簡單的調度算法,該算法既可用於作業調度,也可用於進程調度。當在作業調度中採用該算法時,每次調度都是從後備作業隊列中選擇一個或多個最先進入該隊列的作業,將它們調入內存,爲它們分配資源

原创 計算機內存存取、磁盤存取原理

主存存取原理        目前計算機使用的主存基本都是隨機讀寫存儲器(RAM),現代RAM的結構和存取原理比較複雜,這裏抽象出一個十分簡單的存取模型來說明RAM的工作原理。        從抽象角度看,主存是一系列的存儲單元組成的矩陣

原创 varchar與char的區別

(1) varchar與char的區別        char是一種固定長度的類型,varchar則是一種可變長度的類型 (2) varchar(50)中50的涵義        最多存放50個字符,varchar(50)和(200)存儲