A. 面試題-關於大數據量的分布式處理
面試題-關於大數據量的分布式處理
題目:生產系統每天會產生一個日誌文件F,數據量在5000W行的級別。文件F保存了兩列數據,一列是來源渠道,一列是來源渠道上的用戶標識。文件F用來記錄當日各渠道上的所有訪問用戶,每訪問一次,記錄一條。
請問如何快速計算出各渠道上新增的用戶?
問題分析:首先本次面試的是有關於分布式數據處理以及數據分析的職位,所以相關的面試題目可能會偏向於使用分布式的思想去解決。但無奈本人當時反應太慢,實在沒向分布式處理方向思考。
方案一:
本題最直觀的一個處理方法就是,直接拿著當日新增的5000W條訪問記錄一條一條的去匹配歷史訪問用戶。若存在歷史訪問記錄,則忽略;若不存在訪問記錄,則保存為新增記錄。很明顯,假若歷史訪問用戶有2億條記錄,則需要和2億條數據比較5000W次。比較次數可想而知。
由於本人一直在做基於資料庫的數據處理工作,很容易就想到將歷史數據保存在資料庫的一張表中,並對來源渠道和用戶標識這兩個欄位建立索引,然後遍歷日誌文件F(5000W次)。根據日誌文件F中的每一行去匹配資料庫中的歷史訪問記錄。由於歷史數據表有索引,單次查詢的速度也非常快。但是需要5000W次的資料庫查詢,很明顯效率低下。
方案二:
既然多次單一查詢無法滿足要求,於是可以先通過一種數據導入技術將當日新增數據導入到資料庫的另一張表中,並和歷史數據做左外關聯。若能關聯成功,則表示此用戶已存在;若關聯失敗,則表示此用戶不存在。
此方案暫且不說5000W條記錄的大表與2億條記錄的大表關聯效率有多高以及使用到的資料庫緩沖區的資源有多少,單就5000W條訪問記錄導入資料庫表,都是一個不小的時間花費。
方案三:
很明顯,面試時方案二的回答並未達到面試官的預期,最初被遺憾的PASS掉。一家很有潛力,自己很看好的公司,並計劃做為自己未來發展方向的職位,就這樣丟下我,揚長而去了。
這幾天又看了下分布式相關的介紹,突然想到這道題。一下子醒悟過來,其實還是因為對題目要考察的點分析得不夠透徹。當時以為只是僅僅考數據處理效率的一個題目,其實考的是一種將復雜問題拆分為簡單問題的拆分思想。了解到這一層,一種新的方式立馬在腦海中浮現出來。具體如下:
假如現在有N(N>=2)個存儲塊,並存在一個函數f(來源渠道,用戶標識),對於給定的一組(來源渠道,用戶標識),總能將其分發到一個固定的存儲塊內。那麼可以使用此函數將5000W行訪問記錄盡量均勻的分發至N個存儲塊上,並同時使用此函數將歷史訪問記錄也分發至這些存儲塊上。由於相同的一組記錄,肯定會被分配至同一個存儲塊,所以比較時,只需要分別比較各個存儲塊上當日新增記錄與歷史訪問用戶,然後將N個存儲塊上比較的結果匯總,即可得到最終結果。
假設歷史訪問用戶數據已通過函數f(來源渠道,用戶標識)被分發至了N個歷史文件H1、H2、…、HN。則詳細處理步驟如下:
1、將F中的內容使用函數f(來源渠道,用戶標識),分發至文件F1、F2、…、FN內。(可開M(M>=2)個並行,且若N-M越大,同時向同一文件寫入數據的概率越小)
2、將文件F1、F2、…、FN內的訪問記錄去重。(可開N個並行分別處理對應的N個文件)。
3、將文件Fn(1=<n<=N)去重後的結果與對應的歷史文件Hn比較得出新增用戶結果Rn。(可開N個並行分別處理對應的N個文件且當N足夠大時,實際要處理數據的量級就會相當小)。
4、合並第3步得到的結果R1、R2、…、RN即可得到當日新增用戶。(可並行)
5、為使歷史數據文件H1、H2、…、HN中的數據最全,將結果R1、R2、…、RN分別寫入對應的歷史文件中。(可並行)
本方案主要有以下優點:
1、數據的分發、處理、合並都可並行處理,明顯提高了處理效率。
2、由於每個存儲塊上的新增數據,只需要與它對應存儲塊上的歷史數據比較即可,大大減少了比較次數。(對於當日每一條記錄來說,都只需要與大約歷史的N分之一條數據去比較)
3、基本不需要考慮歷史全量數據的保存及獲取問題。
本方案缺點:
1、處理方案明顯變的復雜許多,不僅需要處理數據的分發,處理,還需要一個並行的快速收集方法。
2、可能需要多台伺服器並行處理。
本方案難點:
1、一個穩定(對於相同的一組來源渠道和用戶標識,必定會被分發至同一存儲塊)、快速(根據一條來源渠道和用戶標識數據,可以快速的計算出它將要被分發至的存儲塊)、均勻(當日新增數據及歷史數據都能盡量均勻的被分發至N個存儲塊,最理想的情況是每個存儲塊上分發到的數據都是總數據的N分之一)的分發函數至關重要。
2、如何分發、並行處理及匯總數據。
B. 大數據告訴你求職者是如何面試的
大數據告訴你求職者是如何面試的
大數據告訴你求職者是如何面試的,對沒有多少經驗的求職者來說,想要輕松面試,可以多看一些被人面試的案例,這樣能提高自己面試的技巧。下面是大數據告訴你求職者是如何面試的!
又到每年的招聘旺季,想跳槽的人都已經走在了面試的路上,運氣好的人已經拿到了offer。
無論如何,面試是找工作中躲不開的一環,作為正在找工作的我們,是不是時常有這樣的困惑,為什麼別人面試輕輕鬆鬆,「一面」就過了,而自己卻連個面試機會都沒有;
為什麼別人上午面,下午就被錄用了,而自己面試「一面」、「二面」,最終卻「黃」了;求職者面試不能遲到,但面試官卻遲到了,作為求職者該等多久才合適;
面試結束多久沒迴音,就真的沒戲了……這些面試時的「疑難雜症」到底如何解開?想知道大家是如何面試的嗎?別急,這篇文章將揭曉答案。
好不容易來面試了,而我卻不想要,什麼原因?
沒面試,盼面試,有面試,卻不想去,這是出了什麼狀況?日前,前程無憂在網上發起了《個人面試行為習慣》大調查;
調查顯示:「薪資談不攏」、「公司本身信息缺失」、「風評不好」、「路程太遠」和「公司只發簡訊通知面試」這五個情況成為個人有面試機會卻不想去的主要原因。其中薪資達不到期望是首因。
有趣的是,對於「路程太遠」這一投票選項,女性比男性更在意。數據顯示,63%的女性受訪者表示公司離家太遠的話就不想去面試了,而僅有37%的男性表示介意路程問題。
哪些情況會讓你不想要面試機會
12%左右的人會放公司「鴿子」
調查顯示,如果約好的面試,因為各種原因不想去了,大部分人(超八成)會告知公司,僅有12%左右的人直接爽約,什麼也不幹。
數據還顯示:直接爽約率與工作年限成反比。例如,工作1—2年的受訪者,面試爽約率在14%左右,而擁有6年工作時間的受訪者,面試爽約率在12%左右,工作10年的受訪者面試爽約率為11%左右。
顯然大部分人在面試約定這件事上做到了誠信,保持著良好的職業素養。
通過此次調查還發現,個人取消面試的主要原因是公司風評不好。受訪者表示,在答應面試以後,會對公司進行初步的了解,如果看到公司在網上有不好的風評,會直接打消面試念頭。
此外,實地考察路途太遠,也是取消面試的重要因素。當然還有一類重要原因是,個人同時拿到了更為心儀的公司面試邀請,而面試時間發生了沖突,不得不取消原來的面試約定。
公司離家近是一種什麼樣的體驗?
前面提到,路途太遠成為個人不接受面試或是取消面試的重要原因。那究竟公司離家多遠才算遠呢?進一步調查顯示,61%的受訪者表示,半小時是忍耐的界線。
公司離家近節約的不僅僅是交通費,還有時間成本。一位網友表示:「上份工作,去公司單程時間要2個小時,當同事在家吃晚飯時,我還在路上;同事吃完飯出門散步遛娃的時候,我還在路上;
同事都上床休息,陪著娃做睡前閱讀了,我終於打開了家的大門,這是一種怎樣的體驗?」
單程上班時間多長能忍受?
另外一位網友感嘆:「公司離家遠,天天頂著星星出門,看著月亮回家,不見天日。當時間不再像是手握流沙而是被整塊整塊地搬走時,我很快就覺悟到了人們口中『錢多事少離家近』中那『離家近』 的含義。」
面試地點在酒店客房?不去!
調查發現,受訪者曾經去過的'面試地點「五花八門」,郊外、倉庫或是居民區,已經司空見慣,那種明晃晃地把面試地點安排在酒店客房的情況,還真叫大家無法接受。
受訪者表示:酒店客房、交通樞紐和酒店大堂是讓人最不能接受的面試地點。
有位從事HR工作的網友表示:「有些公司在異地招聘時可能會把面試地點定在酒店,但一般會在酒店的大堂或是咖啡吧等公共區域。所以個人找工作時還是要具體情況具體分析,不用一見地點是酒店就疑神疑鬼。」
哪些面試地點讓你猶豫?
異地面試,成本是個問題
根據最近的前程無憂求職者跳槽意願度調查顯示,近6成的個人願意異地找工作,異地跳槽已是常態。但是在異地招聘過程中,如果公司不報銷面試費用,個人異地面試的意願度會急劇下降。
本次調查顯示,如果公司不承擔面試費用(交通費、住宿費等),65.7%的受訪者不願意去異地面試。在不願去異地面試的人群中,女性佔比高於男性。
無憂專家建議:雖然異地面試成本高,但是對於心儀的工作,公司在行業中排名靠前的話,個人不妨可以要求公司先視頻面試,做初步溝通,如果雙方都有意向,再進行異地面試也為時不晚。
異地面試,公司不負擔費用,你會去面試嗎?
面試官遲到,到底等不等?
近7成受訪者表示,最多等面試官一個小時,其中有2.73%的受訪者表示耐心有限,只等五分鍾,另有33.45%的受訪者表示會等半小時。
面試官遲到,你會等多久?
大部分網友表示:等還是不等?看自己對機會的渴望度!網友「時間換空間」認為:「福利待遇一般的公司我可以等30分鍾;較好的公司我等60分鍾。差的公司,10分鍾不來我就走人。」
網友「xiaomin80」表示:「面試官遲到要不要等,看你是不是真的很需要一份工作。
我剛畢業的時候去一家日企等過十個小時,當時老闆體會到我的誠意,當場就錄用了我。如果面試當天自己沒有其他重要的事情,等等也無妨。
關鍵是看,面試官出現後是不是能很誠懇地表示歉意,並且解釋遲到的原因。有時候老闆的事情突如其來,他又不得不處理,我們要體諒。」
面試後多久沒通知,你覺得沒戲了?
前程無憂調查顯示,9成受訪者認為面試結束2周內沒通知,面試就是沒戲了。還有7%受訪者認為,4周內沒通知,才是真的面試失敗了。
進一步調查顯示,當面試沒迴音時,近七成受訪者不會聯系公司,認為聯系了也沒有用;有36%的受訪者會聯系公司詢問情況。
面試結束多久沒通知,就沒戲了?
面試後(一周以上)沒有迴音有可能遇到以下幾種情況:
情況一: 還需要安排下一輪面試,而面試官一般是級別較高的領導,出差、會議安排多,HR要和其協調安排面試時間,這個過程會比較費時,但進入下一輪甚至入職的希望也會相應增加。
情況二: 還有其他的候選人。你的面試表現只是過關,但並非是最好最令人滿意的,只是侯選池中的一員,因此要等整一輪面試過後才能決定你的「命運」。
如果在之後的候選人中有表現優異的,那「暫時」沒有迴音就成了「永遠」沒有迴音了。
情況三: 一些較高層的職位本身的招聘時間會更長一些,企業會更慎重地考量、挑選候選人,所以很可能面試一周後還沒有回復。
情況四: 很不幸,你被淘汰了。
總之,面試後沒迴音是「正常」現象,若是你所心儀的公司,發個郵件或打個電話跟進詢問一下也無妨,說不定你的熱忱和主動會打動HR或面試官,再給你一次機會呢。
離面試成功到底要過幾關?
調查顯示,面試需要經過5輪以上的受訪者並不在少數,佔到了14%左右。63%的受訪者面試2輪以內。
在被錄取前,你面試了幾輪?
獵頭J女士表示,通常管理崗位面試時間較長,需要面見的面試官也較多;而基礎崗位的面試輪次基本在1—2輪。面試的輪數越多,從另一個方面也可以證明崗位的重要性,公司方出於謹慎需要幾輪面見才能最終決定。
從事HR工作的王女士這樣透露:「面試的時候,經歷了五輪面試後沒有消息的,問題並不一定出在第五輪。
很多時候可能是前面的面試官意見有分歧,但是還是需要考察完再慎重考慮,這個時候一般會讓候選人走完整個招聘流程。
所以在分析面試為什麼沒成功時,要通盤考慮,失敗原因是綜合的,終面沒過並不代表問題出在終面上。」
最後,我們還是要時時刻刻提醒自己,我們只是在找工作,不是「求」工作。面試是雙向的,也是平等的。只有在面試前做足應對准備,對形勢有充分地預估,那麼在面試中才能游刃有餘掌控全局。
面試中技術很重要,但是如何去溝通表達你的技術更重要,這篇文章內容會講一些面試中的方法論,後續將不定期進行更新。首先,在這里我想提前說三個問題:
大數據面試
1、面試和工作要懂得分開,先不要過多擔心自己寫內容在真正工作時不會做,要先解決第一個問題,先有機會進到公司。至於工作的問題是後話,有另一套方法論解決,不是當前要考慮的問題。
2、當前的復習不要追求大而全,不要盲目復習,要根據自己的簡歷復習,怎麼根據簡歷做看下面內容。
3、高薪肯定是好的,但是要有自我的認知,付出努力會有回報,要追求卓越,要有自驅力。
簡歷書寫
格式
1、專業技能點(8~10 行,主要描述自己掌握的技術棧,可以按照框架劃分)
2、工作項目個數(1年經驗[1~2]個項目,2年經驗[2~4]個項目,3年經驗[3~4]個項目)
3、項目描述(概況說明項目即可,但是不能太短,不要兩三句話就結束了)
4、架構組件(項目中涉及的技術組件列出來 A+B+C+…的形式)
5、項目流程(可以將項目的整個流程,以列表形式描述出來,要包含所用的關鍵技術組件,注意用技術的名詞,組件名詞,別都是中文描述)
6、項目職責(個人職責[3~5]條),`這里注意個人職責,先概況說明,有必要的話再細化一些,比如負責計算了XX指標,描述出來通過什麼方式,或者用了什麼函數計算了XX指標`。每條不要一句話參與了XX事情,就結束了。
7、自我評價(自己發揮,正能量即可,比如追求卓越,自驅力等)
內容
1、錯別字和技術組件的大小寫問題,要注意檢查,同一個技術組件不要有的大寫有的小寫。
2、項目內容的時間順序要有邏輯比如採集-數倉-畫像-推薦 在時間上的順序要遞進,但是這里注意項目在簡歷中可以倒序排列。
3、項目可以根據自己對組件的掌握程度,已經對我們學習項目的掌握程度來寫,比如 Flink掌握不好,可以不寫,但是Spark是必須的。
4、簡歷項目一定要認真讀,認真思考,我在簡歷項目中已經把涉及到的問題講解的比較清晰了,借用到自己的項目中時,要轉換為自己的語言。
如何溝通?
項目架構圖
你的每一個項目都要將項目架構圖畫出來(這很重要),架構圖中要提現出你項目中所涉及的技術組件,弄清楚一條數據在你架構圖中的每個組件的輸入輸出都是什麼;
每一個組件在架構圖中的作用是什麼,為什麼用它,能解決什麼問題。尤其在你寫的自己的項目職責,要在架構上有體現。
架構圖畫出來有兩名方面的作用:
架構圖能讓你對你的項目有更明確深入的理解,有助於你思考問題。同時在描述項目是思路會更清晰。這就要求你畫架構圖是不僅僅是列出來組件,而是要明白數據在:
1、組件中的流轉,每個組件對數據都做了怎樣的處理,我為什麼要用這個組件,它有什麼優勢,有沒有可以替代的其他方案。當然上述這些不是每個人都能做的完美,請記住我們這句話Done is better than perfect。
2、當你做完自我介紹後,不要傻傻的等著面試官問你問題,如果手邊有紙和筆,或者身邊有黑板,就對面試官說,您好,我能把我項目的架構圖畫一下嗎;
這樣我們有一個上下文,也比較容易溝通,我對著架構給你講一下我們項目的技術棧,期間你有什麼技術問題,可以隨時打斷我。
這樣是不是就可以把你們溝通的思路圈定到你線下准備的架構上了,是不是對你就更有利了?
當然會遇到面試官不需要或者沒有給到機會畫架構,不必擔心,那就正常走面試流程就可以了。
3、因為在溝通過程中,不可避免會問到你項目中關鍵組件的一些技術原理問題,比如你用ClickHouse,問你ClickHouse為什麼你得知道吧,因此關鍵組件的基本原理還是要掌握一些,但也不要追大。
技術問題
你的每一個項目都要准備兩個相關的技術問題,有深度一些的,准備這些問題作用如下:
當你描述自己的項目的時候,不要只是去講解項目流程,同時要說一個問題,比如「我在做項目的時候,在什麼樣的場景下,遇到了XX問題,然後我是怎麼解決的」。
這樣會讓面試官聽起來更有質量,同時面試官也可能會追問這個問題,你們是不是就有共同語言了。
比你沉默不語要好得多」。
心態
1、前幾次的面試,是找經驗的,不必關心結果,不用感覺到面試回答不好,就影響到心情,這是很正常的事情。
你要做到的就是面試之後的「總結」,這個非常重要,每一次面試之後都要深刻總結問題,不僅是技術問題;
還有自己在面試過程中的表現,有沒有找到機會畫架構圖,有沒有一些問題是自己會的,但是當時由於什麼原因沒有答上來,下次該如何調整。
2、面試時不用緊張,此處不留爺,自由留爺處,你和這個面試官可能一輩子就這一次見面的機會,有什麼可緊張的,就是表現的再不好,又有什麼可怕的。
3、面試的過程其實就是與人交流的過程,要善於抓住機會把自己的能力表現出來,也要能夠抓住機會,引導面試官問你會的問題。
比如上邊說的描述項目中,說出來自己遇到的問題,已經怎麼解決的,就可能把面試官的思路引導到你解決問題的場景和組件上。 還有自我介紹後的畫架構圖,都是這個思路。
C. 大數據面試題以及答案整理(一)
一、Map端的shuffle
Map端會處理輸入數據並產生中間結果,這個中間結果會寫到本地磁碟,而不是HDFS。每個Map的輸出會先寫到內存緩沖區中,當寫入的數據達到設定的閾值時,系統將會啟動一個線程將緩沖區的數據寫到磁碟,這個過程叫做spill。
在spill寫入之前,會先進行二次排序,首先根據數據所屬的partition進行排序,然後每個partition中的數據再按key來排序。partition的目的是將記錄劃分到不同的Recer上去,以期望能夠達到負載均衡,以後的Recer就會根據partition來讀取自己對應的數據。接著運行combiner(如果設置了的話),combiner的本質也是一個Recer,其目的是對將要寫入到磁碟上的文件先進行一次處理,這樣,寫入到磁碟的數據量就會減少。最後將數據寫到本地磁碟產生spill文件(spill文件保存在{mapred.local.dir}指定的目錄中,Map任務結束後就會被刪除)。
最後,每個Map任務可能產生多個spill文件,在每個Map任務完成前,會通過多路歸並演算法將這些spill文件歸並成一個文件。至此,Map的shuffle過程就結束了。
二、Rece端的shuffle
Rece端的shuffle主要包括三個階段,、sort(merge)和rece。
首先要將Map端產生的輸出文件拷貝到Rece端,但每個Recer如何知道自己應該處理哪些數據呢?因為Map端進行partition的時候,實際上就相當於指定了每個Recer要處理的數據(partition就對應了Recer),所以Recer在拷貝數據的時候只需拷貝與自己對應的partition中的數據即可。每個Recer會處理一個或者多個partition,但需要先將自己對應的partition中的數據從每個Map的輸出結果中拷貝過來。
接下來就是sort階段,也稱為merge階段,因為這個階段的主要工作是執行了歸並排序。從Map端拷貝到Rece端的數據都是有序的,所以很適合歸並排序。最終在Rece端生成一個較大的文件作為Rece的輸入。
最後就是Rece過程了,在這個過程中產生了最終的輸出結果,並將其寫到HDFS上。
讀:
1、跟namenode通信查詢元數據,找到文件塊所在的datanode伺服器
2、挑選一台datanode(就近原則,然後隨機)伺服器,請求建立socket流
3、datanode開始發送數據(從磁碟裡面讀取數據放入流,以packet為單位來做校驗)
4、客戶端以packet為單位接收,現在本地緩存,然後寫入目標文件
寫:
1、與namenode通信請求上傳文件,namenode檢查目標文件是否已存在,父目錄是否存在
2、namenode返回是否可以上傳
3、client請求第一個 block該傳輸到哪些datanode伺服器上
4、namenode返回3個datanode伺服器ABC
5、client請求3台dn中的一台A上傳數據(本質上是一個RPC調用,建立pipeline),A收到請求會繼續調用B,然後B調用C,將真個pipeline建立完成,逐級返回客戶端
6、client開始往A上傳第一個block(先從磁碟讀取數據放到一個本地內存緩存),以packet為單位,A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應答隊列等待應答
7、當一個block傳輸完成之後,client再次請求namenode上傳第二個block的伺服器
D. java面試題:將一個20G的數據,存入一個運行2G的電腦里,每個數據佔一行,怎麼去重
這題考的是大數據去重,數據量大於內存,即無法直接在內存中去重,那回么有兩個方案:
1、內存外去重答
也就是將數據存入資料庫,然後利用資料庫進行排序並去重。
優缺點:
1)優點:簡單直接
2)缺點:消耗大
2、演算法去重
題目中說明是20G數據,假設每行數據是1k,則數據行數是20M(如果每行數據是512位元組,則數據行數是40M),可使用MD5對每行數據進行映射,獲得16位元組映射嗎,即總共需要內存空間320M(或640M),滿足內存內去重的需求。
優缺點:
1)優點:在內存內進行處理,速度明顯比內存為要快。
2)缺點:需要進行額外的編碼,程序復雜度和效率要求較高。
E. 尚矽谷大數據面試都會問些什麼
其實不管是哪家公司面試,都是根據你的簡歷來對你進行提問,所以自己簡歷上面寫的知識點都要全部對答如流。
還有慎用精通這樣的字眼,工作五年以上的人,也不敢說自己對哪一方面能夠達到精通的地步。
尚矽谷大數據面試的一些基本問題總結如下:
1.講講你做的過的項目。 項目里有哪些 難點重點注意點呢?
2.講講多線程吧, 要是你,你怎麼實現一個線程池呢?
3.講一下Maprece或者hdfs的原理和機制。map讀取數據分片。
4.shuffle 是什麼? 怎麼調優?
5.項目用什麼語言寫? Scala? Scala的特點? 和Java的區別?
6.理論基礎怎麼樣,比如數據結構,裡面的快速排序,或者,樹? 講一講你了解的樹的知識?
7.數學怎麼樣呢?
8.講一下資料庫,SQl ,左外連接, 原理,實現?
9.還了解過數據的什麼知識? 資料庫引擎?
10.Hadoop的機架怎麼配置的?
11.Hbase的設計有什麼心得?
12.Hbase的操作是用的什麼API還是什麼工具?
13.對調度怎麼理解.? 用什麼工具嗎?
14.用kettle 這種工具還是 自己寫程序? 你們公司是怎麼做的?
15.你們數據中心開發周期是多長?
16.你們hbase裡面是存一些什麼數據
F. 面試問你們大數據項目的數據結構是怎樣的
一些最常見的編程面來試問自題:
1.數組編碼面試問題
數組是最基本的數據結構,它將元素存儲在一個連續的內存位置。這也是面試官們熱衷的話題之一。以下是一些熱門的基於數組的編程面試問題:
1.如何在一個1到100的整數數組中找到丟失的數字?(方法)
2.如何在給定的整數數組中找到重復的數字? (方法)
3.如何在未排序整數數組中找到最大值和最小值? (方法)
4.如何找到數組所有和等於一個給定數的數對? (方法)
5.如果一個數組包含多重復制,那麼如何找到重復的數字? (方法)
6.在Java中如何從給定數組中刪除多重復制? (方法)
7.如何使用快速排序演算法對整數數組進行排序? (方法)
8.如何從數組中刪除多重復制? (方法)
9.如何在Java中對數組進行反向操作? (方法)
10.如何在不使用任何庫的情況下從數組中刪除多重復制? (方法)
這些問題不僅可以幫助你提高解決問題的能力,還可以提高你對數組數據結構的認識。
G. 大數據中的歸並排序(Merge Sort)
最近在研究大數據的分治思想,很多場景計算得出的中間結果都是「內部有序,外部無序」,這時候就要用到「歸並排序」演算法將多個這樣的結果集合歸並為一個有序的集合。於是就復習了一下「歸並排序」。
在大數據場景中,數據量遠大於計算機的內存,磁碟和網路的IO又是無法解決的瓶頸,就需要用到分治思想。
比如有1000G的中國2020年某電商平台用戶消費總金額數據。數據格式是用戶名:消費總金額。所有數據都是無序的。現在有1台磁碟5T/內存8G(程序可用內存約為5G多)的計算機。如何將數據按消費總金額從大到小排序輸出?
a. 從有序隊列中取出第一個元素。
b. 將此元素數據寫入輸出的文件中,並從此元素所屬的數組中的下一個元素放入有序隊列。
c. 重復步驟a,b直到某個數組元素耗盡,從這個數組所屬的5G文件中,繼續載入25M數據到內存中。
d. 重復步驟a,b,c直到所有5G文件的數據全部載入到內存中,並寫入到輸出文件。
H. 大數據面試題及答案誰能分享一下
大數據時代才剛剛開始。隨著越來越多的公司傾向於大數據運營,人才需求達到歷史最高水平。這對你意味著什麼?如果您想在任何大數據崗位上工作,它只能轉化為更好的機會。您可以選擇成為數據分析師,數據科學家,資料庫管理員,大數據工程師,Hadoop大數據工程師等。在本文中,慧都網將介紹與大數據相關的前10大數據面試問題。
以下是最重要的大數據面試問題以及具體問題的詳細解答。對於更廣泛的問題,答案取決於您的經驗,我們將分享一些如何回答它們的提示。
無論何時進行大數據采訪,采訪者都可能會詢問一些基本問題。無論您是大數據領域的新手還是經驗豐富,都需要基礎知識。因此,讓我們來介紹一些常見的基本大數據面試問題以及破解大數據面試的答案。
1.您對「大數據」一詞有何了解?
答:大數據是與復雜和大型數據集相關的術語。關系資料庫無法處理大數據,這就是使用特殊工具和方法對大量數據執行操作的原因。大數據使公司能夠更好地了解其業務,並幫助他們從定期收集的非結構化和原始數據中獲取有意義的信息。大數據還允許公司採取數據支持的更好的業務決策。
2.大數據的五個V是什麼?
答:大數據的五個V如下:
Volume -Volume表示體積大,即以高速率增長的數據量,即以PB為單位的數據量
Velocity -Velocity是數據增長的速度。社交媒體在數據增長速度方面發揮著重要作用。
Variety -Variety是指不同的數據類型,即各種數據格式,如文本,音頻,視頻等。
Veracity -Veracity是指可用數據的不確定性。由於大量數據帶來不完整性和不一致性,因此產生了准確性。
Value -價值是指將數據轉化為價值。通過將訪問的大數據轉換為價值,企業可以創造收入。
YARN的兩個主要組成部分:
ResourceManager-該組件接收處理請求,並根據處理需要相應地分配給各個NodeManager。
NodeManager-它在每個單個數據節點上執行任務
7.為什麼Hadoop可用於大數據分析?
答:由於數據分析已成為業務的關鍵參數之一,因此,企業正在處理大量結構化,非結構化和半結構化數據。在Hadoop主要支持其功能的情況下,分析非結構化數據非常困難
存儲
處理
數據採集
此外,Hadoop是開源的,可在商用硬體上運行。因此,它是企業的成本效益解決方案。
8.什麼是fsck?
答:fsck代表文件系統檢查。它是HDFS使用的命令。此命令用於檢查不一致性以及文件中是否存在任何問題。例如,如果文件有任何丟失的塊,則通過此命令通知HDFS。
9. NAS(網路附加存儲)和HDFS之間的主要區別是什麼?
答:NAS(網路附加存儲)和HDFS之間的主要區別 -
HDFS在一組計算機上運行,而NAS在單個計算機上運行。因此,數據冗餘是HDFS中的常見問題。相反,復制協議在NAS的情況下是不同的。因此,數據冗餘的可能性要小得多。
在HDFS的情況下,數據作為數據塊存儲在本地驅動器中。在NAS的情況下,它存儲在專用硬體中。
10.格式化NameNode的命令是什麼?
答:$ hdfs namenode -format。
歡迎咨詢慧都在線客服,我們將幫您轉接大數據專家團隊,並發送相關資料給您!
以上就是大數據面試題及答案,希望我的回答對您有幫助!
I. 演算法面試
我在《再談「我是怎麼招程序員」》中比較保守地說過,「問難的演算法題並沒有錯,錯的很多面試官只是在膚淺甚至錯誤地理解著面試演算法題的目的。」,今天,我想加強一下這個觀點——我反對純演算法題面試!(注意,我說的是純演算法題)圖片源Wikipedia(點擊圖片查看詞條)我再次引用我以前的一個觀點——能解演算法題並不意味著這個人就有能力就能在工作中解決問題,你可以想想,小學奧數題可能比這些題更難,但並不意味著那些奧數能手就能解決實際問題。好了,讓我們來看一個示例(這個示例是昨天在微博上的一個討論),這個題是——「找出無序數組中第2大的數」,幾乎所有的人都用了O(n)的演算法,我相信對於我們這些應試教育出來的人來說,不用排序用O(n)演算法是很正常的事,連我都不由自主地認為O(n)演算法是這個題的標准答案。我們太習慣於標准答案了,這是我國教育最悲哀的地方。(廣義的洗腦就是讓你的意識依賴於某個標准答案,然後通過給你標准答案讓你不會思考而控制你)功能性需求分析試想,如果我們在實際工作中得到這樣一個題 我們會怎麼做?我一定會分析這個需求,因為我害怕需求未來會改變,今天你叫我找一個第2大的數,明天你找我找一個第4大的數,後天叫我找一個第100大的數,我不搞死了。需求變化是很正常的事。分析完這個需求後,我會很自然地去寫找第K大數的演算法——難度一下子就增大了。很多人會以為找第K大的需求是一種「過早擴展」的思路,不是這樣的,我相信我們在實際編碼中寫過太多這樣的程序了,你一定不會設計出這樣的函數介面 —— Find2ndMaxNum(int* array, int len),就好像你不會設計出 DestroyBaghdad(); 這樣的介面,而是設計一個DestoryCity( City& ); 的介面,而把Baghdad當成參數傳進去!所以,你應該是聲明一個叫FindKthMaxNum(int* array, int len, int kth),把2當成參數傳進去。這是最基本的編程方法,用數學的話來說,叫代數!最簡單的需求分析方法就是把需求翻譯成函數名,然後看看是這個介面不是很二?!(註:不要糾結於FindMaxNum()或FindMinNum(),因為這兩個函數名的業務意義很清楚了,不像Find2ndMaxNum()那麼二)非功能性需求分析性能之類的東西從來都是非功能性需求,對於演算法題,我們太喜歡研究演算法題的空間和時間復雜度了。我們希望做到空間和時間雙豐收,這是演算法學術界的風格。所以,習慣於標准答案的我們已經失去思考的能力,只會機械地思考演算法之內的性能,而忽略了演算法之外的性能。如果題目是——「從無序數組中找到第K個最大的數」,那麼,我們一定會去思考用O(n)的線性演算法找出第K個數。事實上,也有線性演算法——STL中可以用nth_element求得類似的第n大的數,其利用快速排序的思想,從數組S中隨機找出一個元素X,把數組分為兩部分Sa和Sb。Sa中的元素大於等於X,Sb中元素小於X。這時有兩種情況:1)Sa中元素的個數小於k,則Sb中的第 k-|Sa|個元素即為第k大數;2) Sa中元素的個數大於等於k,則返回Sa中的第k大數。時間復雜度近似為O(n)。搞學術的nuts們到了這一步一定會歡呼勝利!但是他們哪裡能想得到性能的需求分析也是來源自業務的!我們一說性能,基本上是個人都會問,請求量有多大?如果我們的FindKthMaxNum()的請求量是m次,那麼你的這個每次都要O(n)復雜度的演算法得到的效果就是O(n*m),這一點,是書獃子式的學院派人永遠想不到的。因為應試教育讓我們不會從實際思考了。工程式的解法根據上面的需求分析,有軟體工程經驗的人的解法通常會這樣:1)把數組排序,從大到小。2)於是你要第k大的數,就直接訪問 array[k]。排序只需要一次,O(n*log(n)),然後,接下來的m次對FindKthMaxNum()的調用全是O(1)的,整體復雜度反而成了線性的。其實,上述的還不是工程式的最好的解法,因為,在業務中,那數組中的數據可能會是會變化的,所以,如果是用數組排序的話,有數據的改動會讓我重新排序,這個太耗性能了,如果實際情況中會有很多的插入或刪除操作,那麼可以考慮使用B+樹。工程式的解法有以下特點:1)很方便擴展,因為數據排好序了,你還可以方便地支持各種需求,如從第k1大到k2大的數據(那些學院派寫出來的代碼在拿到這個需求時又開始撓頭苦想了)2)規整的數據會簡化整體的演算法復雜度,從而整體性能會更好。(公欲善其事,必先利其器)3)代碼變得清晰,易懂,易維護!(學院派的和STL一樣的近似O(n)復雜度的演算法沒人敢動)爭論你可能會和我有以下爭論,如果程序員做這個演算法題用排序的方式,他一定不會像你想那麼多。是的,你說得對。但是我想說,很多時候,我們直覺地思考,恰恰是正確的路。因為「排序」這個思路符合人類大腦處理問題的方式,而使用學院派的方式是反大腦直覺的。反大腦直覺的,通常意味著晦澀難懂,維護成本上升。就是一道面試題,我就是想測試一下你的演算法技能,這也扯太多了。沒問題,不過,我們要清楚我們是在招什麼人?是一個只會寫演算法的人,還是一個會做軟體的人?這個只有你自己最清楚。這個演算法題太容易誘導到學院派的思路了。是的這道「找出第K大的數」,其實可以變換為更為業務一點的題目——「我要和別的商戶競價,我想排在所有競爭對手報價的第K名,請寫一個程序,我輸入K,和一個商品名,系統告訴我應該訂多少價?(商家的所有商品的報價在一數組中)」——業務分析,整體性能,演算法,數據結構,增加需求讓應聘者重構,這一個問題就全考了。你是不是在說演算法不重要,不用學?千萬別這樣理解我,搞得好像如果面試不面,我就可以不學。演算法很重要,演算法題能鍛煉我們的思維,而且也有很多實際用處。我這篇文章不是讓大家不要去學演算法,這是完全錯誤的,我是讓大家帶著業務問題去使用演算法。問你業務問題,一樣會問到演算法題上來。小結看過這上面的分析,我相信你明白我為什麼反對純演算法面試題了。原因就是純演算法的面試題根本不能反應一個程序的綜合素質!那麼,在面試中,我們應該要考量程序員的那些綜合素質呢?我以為有下面這些東西:會不會做需求分析?怎麼理解問題的?解決問題的思路是什麼?想法如何?會不會對基礎的演算法和數據結構靈活運用?另外,我們知道,對於軟體開發來說,在工程上,難是的下面是這些挑戰:軟體的維護成本遠遠大於軟體的開發成本。軟體的質量變得越來越重要,所以,測試工作也變得越來越重要。軟體的需求總是在變的,軟體的需求總是一點一點往上加的。程序中大量的代碼都是在處理一些錯誤的或是不正常的流程。所以,對於編程能力上,我們應該主要考量程序員的如下能力:設計是否滿足對需求的理解,並可以應對可能出現的需求變化。
J. 2021年大數據工程師面試內容包括哪些
【導語】近年來,大數據發展如火如荼,很多人都選擇學習大數據專業或者轉行大數據,大數據里又包含很多就業崗位,所以在進行崗位選擇的時候,還是需要大家合理選擇,為了幫助大家更好的進入大數據行業執業,下面就把2021年大數據工程師面試內容給大家進行一下具體介紹。
1、自我介紹
一般上來就是自我介紹,談下工作經歷和項目經驗,面試官會根據你的項目經驗對你進行技術面試。在自我介紹時,一定要抓住核心說,不要太啰嗦,盡量放大自己的價值,讓面試官感受到你對工作的熱情,以及以後對公司貢獻的能力。
2、數倉開發知識技能
(1)Java是必問的,不過問的不深,把Javase部分吃透,足以應付Java部分的面試。
(2)Hadoop生態,Yarn、Zookeeper、HDFS這些底層原理要懂,面試經常被問。
(3)Maprece的shuffle過程這個也是面試被常問的。
(4)Hbase和HIve,搞大數據這些不懂真的說不過去。
(5)Mysql、Oracle和Postgres資料庫操作要回,Sql要會寫。
(6)linux操作系統,這個簡單得命令必須要懂,會寫shell腳本更好了。
(7)Kettle或Sqoop這種數據處理工具至少要會一個。8,數據倉庫建模、數據模型的問題。
3、技術方面知識技能
(1)SparkSql和SparkStreaming,底層原理、內核、提交任務的過程等等,盡量深入內幕,這個經常會跟MapRece作比較的。當然也要了解Storm和Flink,Flink這個建議要學會,以後用處會越來越廣。
(2)Redis、Kafka、ElasticSearch這些都得懂原理,深入了解,會使用,會操作,會調優。
(3)impala和kylin這些盡量也要了解會用
(4)Python這個要是有能力,有精力,建議也要往深處學習,我目前正在自學中。
(5)集群的問題,包括一些簡單的運維知識。
(6)大數據數據傾斜的問題,包括Spark JVM內存調優問題等等。
關於2021年大數據工程師面試內容,就給大家介紹到這里了,希望對大家能有所幫助,當然進入大數據行業,還需要大家在平時不斷進行技能提升,這樣才能更好的擁有一席之地。