每逢金九銀十 , 像做者這樣的IT碼農, 會按奈住心裏對 996 和 產品經理 的一萬種髒話, 偷偷將手中的簡歷更新, 投往互聯網各公司的HR手中 , 這時IT論壇裏也熱鬧起來了, 各類大廠內推和求內推的帖子被頂的火熱. 有些幸運的 碼農拿到了些大廠的 面試邀請, 想着大廠入職後誘人的福利, 翻倍的薪資, 很多年輕的碼農不知不覺流下了口水, 興奮的徹夜難眠...前端
講個事, 我有個哥們叫張大胖也是 Java碼農, 上個月去某大廠面完試 , 去以前神采奕奕 的和我說 "這個崗位的最低薪資就是他如今薪水的兩倍 , 笑着說: 等着哥們到時候進某廠了, 給你內推, 一塊兒寫Bug." 這個星期五 張大胖喊我下班來他家吃羊肉火鍋, 一上桌看着大胖整我的垂頭喪氣的, 臉上寫滿了惆悵, 我趕忙給他把酒滿上, 招呼他吃菜, 酒過三巡, 我問張大胖 "上個月面的咋樣啊 ?" 他這時面露說道: "我TM就面箇中級工程師,去了先讓我作一堆看不懂的算法題, 而後來一個禿頭老大哥來面我, 聽說都工做十多年了, 沒等我把項目邏輯講完就拿着簡歷追問我技術棧底層實現, 用了什麼設計思想 balabala, 我硬撐着把肚子裏的那點貨倒騰出來, 又被連環追問,感受人都傻了, 哥們最近真倒黴能力被碾壓了!" 我說: "你在簡歷中專業技能欄裏寫的啥?" 大胖用手機把他的簡歷發給我了, 專業技能欄足足寫了 10行, 前面都寫着精通. 我說 "這麼多技術你都懂原理嗎? " 張大胖擺了擺手, "都是項目裏用過的,用完早就忘了, 嘆了口氣又說 我啥時候才能和你同樣吊打面試官, 薪資翻倍啊!" 我喝了口酒笑着說 "我也就比你多作了點功課,來大胖我幫你分析分析!"面試
我曾經也是做爲過面試官,親歷過從約面試到發Offer的全過程, 負責任的講, 公司給你發麪試邀請的這個環節, 實際上是由於你的簡歷獲得了HR + 你將來上司的初步認同, 認爲你的簡歷技能與當前職位匹配, 面試這個環節本質則是考察面試者與職位匹配度的高低, 基本的框架 CRUD 搬磚問題誰都會回答, 怎麼能考察出面試者的真實水平, 從而優中選優呢?算法
1.ES的倒排索引的底層?
ElasticSearch引擎把文檔數據寫入到倒排索引(Inverted Index)的數據結構中,倒排索引創建的是分詞(Term)和文檔(Document)之間的映射關係,在倒排索引中,數據是面向詞(Term)而不是面向文檔的。數據庫
一個倒排索引由文檔中全部不重複詞的列表構成,對於其中每一個詞,有一個包含它的文檔列表 示例: 對如下三個文檔去除停用詞後構造倒排索引編程
倒排索引-查詢過程
查詢包含「搜索引擎」的文檔小程序
經過倒排索引得到「搜索引擎」對應的文檔id列表,有1,3 經過正排索引查詢1和3的完整內容 返回最終結果 倒排索引-組成微信小程序
- 單詞詞典(Term Dictionary)
- 倒排列表(Posting List)
- 單詞詞典(Term Dictionary)
- 單詞詞典的實現通常用B+樹,B+樹構造的可視化過程網址:B+ Tree Visualization
倒排列表(Posting List)設計模式
倒排列表記錄了單詞對應的文檔集合,有倒排索引項(Posting)組成 倒排索引項主要包含以下信息: 1.文檔id用於獲取原始信息 2.單詞頻率(TF,Term Frequency),記錄該單詞在該文檔中出現的次數,用於後續相關性算分 3.位置(Posting),記錄單詞在文檔中的分詞位置(多個),用於作詞語搜索(Phrase Query) 4.偏移(Offset),記錄單詞在文檔的開始和結束位置,用於高亮顯示緩存
B+樹內部結點存索引,葉子結點存數據,這裏的 單詞詞典就是B+樹索引,倒排列表就是數據,整合在一塊兒後以下所示微信
ES存儲的是一個JSON格式的文檔,其中包含多個字段,每一個字段會有本身的倒排索引
倒排索引的結構
- 包含這個關鍵詞的document list
- 包含這個關鍵詞的全部document的數量:IDF(inverse document frequency)
- 這個關鍵詞在每一個document中出現的次數:TF(term frequency)
- 這個關鍵詞在這個document中的次序
- 每一個document的長度:length norm
- 包含這個關鍵詞的全部document的平均長度
倒排索引不可變的好處
- 不須要鎖,提高併發能力,避免鎖的問題
- 數據不變,一直保存在OS Cache中,只要Cache內存足夠
- filter cache一直駐留在內存,由於數據不變
- 能夠壓縮,節省CPU和Io開銷
關注 20K+ 訂閱號便可助力月入 20K+ , 相關文章.