Posted a year ago by Mingche Su
在面試時候有時會遇到考官問你一些你列舉的關鍵詞(知識點)洁墙,如何跟考官侃侃呢?
舉例子:could you tell me what you know about NoSQL(MongoDB)?
[圖片上傳中荸镊。。堪置。(1)]
下面列舉了回答問題的幾個維度:
第一個維度:被考官牽著鼻子走(面試者初期的狀態(tài)):不知道怎么講(或者壓根不會)躬存,考官問什么你回答什么,這樣會非常被動舀锨。其實大部分時候面試如果遇到不會的知識點(如果不是onsite的時候)可以Google的岭洲,但是切記在網(wǎng)上查知識點的時候,要用百度“xx是什么” 或者Google查漢語的解釋:“xx是什么”雁竞,大部分不在美國接受本科的同學看到陌生的技術名詞钦椭,在緊張的情況下是無法理解的。漢語畢竟是母語碑诉,理解得比較快彪腔,這樣可以給面試官的感覺是你懂知識點,在國內(nèi)學過进栽,只是不知道怎么用英文表達德挣,至少還是能彌補一小下的。
如果Onsite的時候真的不會某個知識點快毛,你可以就反問面試官大概是什么東西格嗅,誘導他說一個大的范圍知識,然后談論一個相近的知識唠帝,反問面試官一個問題屯掖,最后說你聽過這個知識點,與他在激烈討論下襟衰,顯得你們在談笑風生贴铜;
比如面試問你MongoDB知不知道,你可以反問下這個大概是什么瀑晒?面試官很可能就會說NoSQL的一種了绍坝,這時候你恰巧知道hbase,可以多扯扯hbase的東西苔悦,然后說MongoDB啊轩褐,以前聽說啊,但是沒用過玖详,有機會可以嘗試把介,你再反問它們?yōu)槭裁从肕ongoDB而不用hbase勤讽,你各種列舉hbase的優(yōu)點,達到渾水摸魚的效果拗踢;
第二個維度:羅列知識點地技,誘敵深入(正常面試者的水平)):
首先你要裝成是專家,然后自信的選擇幾個層面講起:
What is MongoDB
Main features of MongoDB
Application of MongoDB
Who's using MongoDB
When NOT to Use Document Stores
特此申明:以上幾張圖來自于CMU NoSQL Database Management 95737課件秒拔,僅為本文舉例說明,無任何商業(yè)用途飒硅。在面試中:基本答幾個熟悉的層面就OK了砂缩,面試本身很多時候具有賣弄的成分,給面試官覺得很猛三娩,實際上這些問題面試官也不一定很清楚庵芭,重要的就是你要很有觀點,而且對新技術感興趣雀监,了解最新前沿技術動態(tài)双吆。
比如這里賣弄的點吧,說說哪些公司在用会前,這些就能體現(xiàn)出:你對IT行業(yè)很了解好乐,調研過很多公司技術棧,然后你會的東西你要多說瓦宜,這樣引導考官問你熟知的東西蔚万,然后開始給他講,他就會覺得你很博學临庇。
其余賣弄的點:主要四種NoSQL:
Column Family Databases
Document Databases
Key-Value Databases
Graph Databases
每種database 都點評下反璃,會給人感覺很牛的樣子.
第三個維度:用生長的方法來談(大師級的答案,基本這樣答假夺,考官會哭的)淮蜈。什么是生長的方法?就是從一顆種子開始談已卷,講一講它是如何張成參天大樹的梧田。MongoDB是怎么來的,如何演化的悼尾?
剛開始給面試官講一個實際的例子 (工作中碰到的實際問題):
假設我們有很多app信息信息需要存儲柿扣,包括URL、PageSource闺魏、ID和Name等未状,如何寫入硬盤呢?很簡單析桥,順序地寫就可以了司草。
所以我們可以在最后重寫第二塊的數(shù)據(jù),加上Version信息搔课,然后將之前已有的第二塊信息刪除胰柑。[圖片上傳中。爬泥。柬讨。(8)]
這樣的方法會使數(shù)據(jù)不連續(xù)(產(chǎn)生磁盤碎片),中間有很大的gap袍啡,讀取數(shù)據(jù)的時候很麻煩踩官。這種情況下如何提速呢?可以在數(shù)據(jù)塊之間建立指針境输,嗖地就跳過去了蔗牡。
[圖片上傳中。嗅剖。辩越。(9)]這樣查找變得簡單了,可是仍然沒有解決產(chǎn)生磁盤碎片的問題信粮。如何既能加入新信息而又不移動已有數(shù)據(jù)呢区匣?就是在每個數(shù)據(jù)塊之后添加一些冗余的padding,這樣新的數(shù)據(jù)就可以直接添加了蒋院。[圖片上傳中亏钩。。欺旧。(10)]
以上是我們的幻想姑丑,想象中有足夠大的、連續(xù)的硬盤空間可以寫辞友。理想很豐滿栅哀,現(xiàn)實卻很骨感,真正的硬盤往往已經(jīng)不連續(xù)了称龙,存在著大大小小的磁盤碎片留拾,我們只能插空寫。[圖片上傳中鲫尊。痴柔。。(11)]
你看這樣我們可能就會將文件寫的很碎了疫向,要跳來跳去咳蔚,讀寫性能很差豪嚎。如何避免這種瑣碎呢?就是申請一個比較大的空間谈火,盡可能地連續(xù)寫侈询。
那么如何申請大小合適的空間呢?策略就是double上升糯耍。我們從16M開始扔字,不夠就申請32M,再不夠申請64M…直到2G為止(不再double温技,不夠再申請還是2G)啦租。[圖片上傳中。荒揣。。(12)]
解決了寫還要解決讀焊刹,比如如何查找ID范圍在5000到7000范圍內(nèi)的app信息呢系任?我們就可以對ID建索引,比如BST虐块,每個節(jié)點都指向對應的文檔俩滥。[圖片上傳中。贺奠。霜旧。(13)]
這就是MongoDB的實現(xiàn)。MongoDB將document存儲在硬盤上儡率,每個document都可以隨意添加挂据,有schema-free的特點。MongoDB在document尾部添加了padding儿普,并且document之間有前向和后項指針崎逃,成倍地申請硬盤空間,用B樹(BST的升級版)做索引眉孩。
注:第三維度的講解 來源于硅谷之路40:十分鐘解讀MongoDB个绍,查看完整視頻:http://www.bittiger.io/classes
轉自:https://www.bittiger.io/blog/post/djAH5QCDc6ExwE9Wz