1. 程式人生 > >初級大資料工程師面經指南(上)

初級大資料工程師面經指南(上)

經過近一年臥薪嚐膽的自學和各種折騰後,於上年裸辭的博主終於於3月中旬來到深圳。彼時畢竟是沒參加過任何大資料方面面試的小菜鳥,對前面的路一無所知,甚至連自己能不能找到一份適合的工作都曾懷疑過。當時一想到自己現在的身份(既失去了應屆生的光環又沒有招聘要求中3-5年的工作經驗)就滿臉的尷尬。短短兩週的時間讓自己體驗了跌入谷底再到強勢反彈的生活。算了,廢話少說,這些經歷有時候文字根本無法表達,即使可以表達,也只有經歷過的人才能看懂,如果你真的想看的話,可以看下隨筆中的文章,我會在下週找個時間,好好總結下這段煉獄般的生活帶給我的人生感悟。以前經常看別人的面經,感覺對自己幫助挺大的,至少能夠讓自己窺探下自己是否能夠應聘該崗位;今天就寫寫自己的經歷,希望也能給其他人一些幫助。

直接進入主題說下最近的這幾場面試吧:
1. 自己的狀態:第一家公司是某上市公司,面的是大資料開發的崗位,但是面完之後感覺這個崗位偏向JAVA方向,由於當時是剛到深圳的第二天就去面的,再加上之前準備過的一些面試題也經過年前和年後的折騰基本忘光了,等到做面試題的時候,才突然發現自己當時的狀態有多尷尬。

結果:進入技術面因經驗不足沒有拿到Offer。

經歷:一輪的話是筆試,幾道Java基礎題如String類能否被繼承以及為什麼會這樣、return和finnally的執行先後的次序等接下來是兩道程式設計題:讓寫一個單例的實現、用遞迴的方式解決一個問題。然後是讓根據一個問題讓寫一個演算法實現的思路,要求複雜度必須為O(n)。最後才涉及到大資料相關的知識:兩道常見的大資料題目:一個是讓從1000W個數字裡面求最大的10個數寫出思路,第二個問題是針對叢集的,說如果一個正在執行的系統突然變慢了,如何查詢問題以及如何優化寫出思路。題目基本就是這樣,但兩個編碼題直接就被晾在那裡了,當時腦海裡竟然連JAVA一些常用的語句都和Python搞混了(一直在學大資料,java基礎被扔到一邊了一年多,一下讓手寫程式碼,整個人都無語了,當時嚴重“懷疑”自己是不是學過JAVA.)
二面的話是技術總監和產品經理面的(說實話當時以為就沒有二面了,本來抱得期望也挺低,只是想先了解下整個過程包括試題,面試等讓自己適應下這這個環境,看下自己到底在哪個階段),整個過程也就是常見的基本的套路,先自我介紹,然後面試官提問。期間技術總監卻對我機器學習的專案很感興趣(我當時有點鬱悶,畢竟有大資料的專案怎麼不問大資料的專案?機器學習的專案是作為一個輔助專案),問了大概十幾分鍾吧,然後說了下自己的實習和工作經歷,之後最重要一點又回到了那兩道程式設計題上,產品經理直接問這兩道程式設計題你寫不出來嗎?當時也是滿臉的尷尬(畢竟之前真的沒準備),只能說這個真的沒準備。後來也沒聊幾句就以自己經驗太少把自己PASS了。

總結:回來之後,那一週的時間沒有再去面試,而是狂補之前總結的面試題,然後回顧之前的JAVA知識,這一週算是活到現在為止遇到的最難熬的一週。。。後來總結這次面試覺得自己問題非常多:1、一輪面試題沒有準備好這也是自己直接被PASS的主要原因。2、二輪技術面試中由於情緒問題自己向面試官訴說不少關於之前自己在上一家公司的“不幸”遭遇。這是一個大忌,畢竟,在技術面你只聊技術,其他的一些事是HR面才應該聊的。
2. 自己的狀態:在週末和同學一起放鬆了下之後,感覺狀態已經調整的不錯了。然後在這周的週二去面了第二家公司,崗位為大資料平臺開發,第二家公司為一初創企業,剛拿到天使輪的投資。

結果:聊了薪水沒拿到Offer。

經歷:一輪筆試,但是試題比較開放,大體方向為重要的Linux指令及作用、網路TCP併發數為10K怎麼辦、寫一個決策樹程式碼實現、最後兩個演算法實現題只需要寫對應的虛擬碼思路(但是感覺這兩個題是公司目前正在面臨的問題想通過面試來嘗試得到對應解決方案),其他的題目不太記得了。
二輪的話是一個技術負責人和員工面的,但過程是直接的一問一答,不用再來什麼自我介紹,少了不少套路,期間主要聊得還是機器學習模型主要對其中的SVM的演算法的實現、原理以及對噪音是否敏感(從考官哪裡學到SVM對噪音非常敏感的)等問題做了不少了討論,之後關於大資料的框架卻也沒聊多少,之後又聊了一些Linux相關的知識,記得比較清楚的一個問題是linu啟動的時候載入的過程是什麼?(沒回答出來所以記得特別清楚)之後問了下薪水的問題,最後又讓博主去看一篇英文文獻(博主英語在各科中從小到大一直都是拖後退級別,再加上這麼長時間沒接觸英語,單詞都忘得差不多了,這直接來篇專業的英文文獻,直接懵逼。給我個Google翻譯我立馬給你讀懂,哈哈,說著玩呢。),也許就是因為最後這一步然後博主就被pass了,畢竟照面試官說的他們目前的專案基本都需要看對應的英文文獻,如果看不懂就沒法工作,別人也不可能幫你。但是最後自己卻犯了一個錯誤,就是向面試官表決心自己可以學習相關的東西,快速上手。整個面試的過程,讓我感覺很舒服,小公司沒有像大公司那樣的套路,再加上這家公司上的員工基本上都是某985高校的,所以給人的感覺很親近,有些問題如果你一時回答不上來,面試官會去引導你去回答,他們也會根據你的工作經驗來考察你的能力(真的印證了越有實力的人越謙遜這句話)。

總結:雖然這次沒拿到offer,但是這次過程給了自己不少信心。整個面試的過程中自己無論是心態還是表達都做的不錯(感覺之前沒有面試前自己在腦海裡彩排的場景被排上了用場)。最重要的一點是自己能夠和麵試官比較流暢的交流或者說面試官問的問題基本都能答出來。這是最終要的一點。唯一的不足也許就是最後自己表決心,自己可以學什麼什麼,對於一個職員來說永遠不要說“學什麼什麼”的字眼,畢竟公司招你來時讓你工作的,而不是學習的。雖然這個字眼在大多數時候是一個褒義的,但有些場景下就會變成貶義。。。

3.自己的狀態:帶著上面的狀態,週三去面了第三家公司,崗位為資料開發師,該公司也屬於創業公司不過已經拿到3輪融資。

結果:第二天拿到Offer。

過程:一面也是筆試,同樣試題比較開放,就兩道題:一道是提出一些新的方法來擴充套件公司的業務,增加使用者量。第二道題是也是關於公司業務的解決方案:如何分析一個地方的運動氛圍(大體意思是這樣)。
二面是相關部門的員工過來面得,也是自我介紹,然後記得讓講了下MR的執行原理,之後記得有一個關於佇列和連結串列的問題自己答得不是特別好,特別是讓自己描述佇列的時候,自己竟然把順序表的為什麼查詢的快,增刪慢的原因給說了出來。不過那位可能的“未來的同事”在面試過程對我的“關照”也讓我對該公司加分不少(其實只需要先描述下佇列是遵循先進先出原則,在一邊進在另一邊出就行了)。
三面是部門的leader,也是根據簡歷問了下股票預測模型中的相關知識(為什麼每個公司都這麼看重這個東西),其他的沒什麼印象。

總結:經過這次面試自己瞭解到自己目前在一個什麼樣的位置,大概值多少錢。也及時發現了自己在HR面存在的問題並改正。

4.自己的狀態:由於每次技術面中都遇到“貴人”在“引導”自己,所以每次技術面也很流暢,這也更加堅信自己可以拿到理想中的薪酬。週四面的是資料開發工程師崗位,也是一家拿到C輪融資的初創企業。

結果:拿到Offer。

過程(技術面持續約1小時):整個技術面讓自己很無語。一面直接是兩個員工面,還是老套路。首先自我介紹,然後讓說下區塊鏈(中間自己把說的過程中把公鑰說成了祕鑰,但一位員工很和氣的糾正了我),然後又說了下股票模型中的一些問題。之後部門Leader直接就過來,還沒拿到我的簡歷就開始發問,當時我們三個直接都沒話說,然後就開始不停的問些實際開發中遇到的實際問題(拜託他連我的簡歷都沒看,就開始問東問西,語氣也很挑釁,直接回答會或不會),記得有一個問題是當一個Hive中一張表特別大時如何做切分?還有Spark記憶體爆滿如何處理?等等(內心獨白是:拜託你看下簡歷再提問好不好,我剛畢業半年的,哪有這些實際經驗,再說對於Spark、Hive我也只是寫的瞭解好不好)之後也有說到演算法,讓我說隨機森林的原理,然後說分裂特徵是什麼,我舉了一個例子,他竟然又莫名其妙的問你給我說出來(內心獨白:我去,我不是說了嗎?)之後沒辦法只能把例子換成數字然後比如大於50作為一個分裂特徵…
之後有個問題是讓我說下數學在機器學習中的應用,我舉了推薦系統的例子講了下最終將CF演算法中對應的表的資料可以轉化為行列式,之後可以用線性代數的知識來根據業務進行操作。之後leader竟然說這個誰都知道,你問問他們兩個知道不(旁邊兩個員工只是尷尬的笑了笑),然後又說如果資料量達到多大多大你要怎麼處理?(內心獨白:你問你的員工吧。。。)之後又聊到Linux作業系統,就問熟不熟(內心獨白:簡歷上寫的清清楚楚你能不能看下),我說了解常用的指令,接下來直接問Vim用過嗎?ViM程式設計裡面你能說下一些功能的快捷鍵(刪除某行,跳轉到尾部什麼的)以及如何在查詢某個欄位等問題?之後又聊到一些什麼東西的時候,我反駁了一下,然後他竟然說這塊我也不熟,那誰誰你不是之前負責這塊嗎?你跟他解釋下(我總算知道他也是人。。。)。不過最尷尬的一個場景是當時他問我一個非常簡單的問題:環境變數在linux下的那個檔案中配置?當時腦海中閃過etc/profile但是又不確定(畢竟叢集扔那4、5個月了,又不是最近一直在linux下搞東西),所以只說了etc/,這個時間久了真的記不太清楚了(當時profile就在嘴邊但是沒有說出來)。但是Leader說的話的意思是你到底玩沒玩過Linux,用那種非常鄙視的語氣。(內心獨白:TMD,拿臺電腦試下不就知道了)不過當時也沒過多解釋,因為對於這種人你說再多都沒用。最後到我提問的時間的時候,我問了當前公司的AI平臺搭建到那種地步?回答這個問題時,也是難得見這個Leader心虛一次(講的過程中眼睛不敢正視我,整個語氣也虛了很多)。整個過程除了一些實際經驗問題其他的問題能答的也都答出來了,但是對這個Leader的態度也是重新整理我的三觀。又想起來兩道題:說下Spark為什麼比MR快?Hbase中RowKey怎麼建立?
HR面的時候,HR第一個問題就是:剛才的那個面試官怎麼樣?我也是呵呵一笑:“太犀利了。”之後才瞭解到原來Leader全場打壓我也許是想壓低我薪酬,和HR小姐姐聊完各種福利之後,最後HR小姐姐說給你的薪水比你預期的低一點你能否接受?可以考慮。Over。

總結:第一次碰到這樣的面試官,重新整理我的三觀,也許這是套路,是自己見識太少吧。雖然拿到了Offer,薪水也符合自己的期望值,但是我還是會慎重考慮。

5.週五上午面一家B輪初創的資料分析師崗位。

結果:因為崗位需求沒有拿到Offer

過程(持續一個小時):直接技術面,老套路,先自我介紹,之後TM的40多分鐘都在討論Hive,我TM只想說你們崗位要求的不是還有hadoop、kafka等等這些元件的嗎?整個過程感覺面試官特別摳,打個比方他都想知道1+1為什麼等於2。如抓著專案中的資料分析的過程不放,這個我沒有異議,但是我簡歷中的Hive明明寫著瞭解,也給他宣告過我只會用HQL做些簡單的資料分析。可這個面試官一直抓著Hql不放,讓我把整個資料分析的專案全部重新寫一遍。OK無所謂,寫就寫,誰怕誰。當時,問到對資料進行清洗這塊的時候,讓我比較驚訝的是,面試官問我:你用的什麼演算法?我說用MR程式直接就搞定了,這還用什麼演算法!面試官又問:你知道演算法嗎?演算法是什麼什麼。。我說你先聽我說,MR程式拿到資料後是按行讀取,map端輸入k為一個偏移量,v為一行的內容。拿到之後做一個切分,然後剔除不合格的資料這裡面有兩個依據1、根據陣列的長度、2、根據返回碼。不合格的程式不用write到reduce端。。。剛講完,面試官問這個偏移量是什麼?我說你可以把他理解為陣列的下標,預設的是0,也就是讀取當前行的行首。面試官又問陣列下標有什麼用?(內心崩潰,有病吧!你到底玩沒玩過MR)。之後又讓寫HQL來完成自己寫的一些資料分析的指標,寫出來之後竟然問我select語句後面的限制條件為什麼這樣寫?我真心沒法回答(這樣寫才能得出結果啊,不這樣寫要怎麼樣寫)。之後做Left join操作,又問為什麼要join這張表?(我心累,你不是給了一個需求我不是再實現你的需求嗎?)。之後他又畫了兩張表讓我做left join,然後給他說結果。不過最後自己給自己挖個大坑,他讓做專案裡面轉化路徑的分析,自己沒有寫出來(整個過程也是一個join的套路不過比較複雜,忘了),這也多少讓他懷疑這個專案到底是不是自己做的。再到後面Hive總算聊完了,聊到叢集的HA機制時,讓我說下HA。我就說是對節點各個元件的一個備份,如namenode的備份,yarn的備份。當namenode掛了之後,備份的namenode可以直接替代它。。。但是在一個問題上我們發生了爭執,他認為secondary Namenode就是namenode的HA,但是我記得當時學習的過程中,視訊中老師明明說過secondary Namenode不是namenode的HA,只是相當於namenode的一個熱備份,根據checkpoint機制,當namenode掛了之後可以將生成的image檔案用於還原資料。剛才查了一下,的確我說的沒錯,namenode的HA對應的backupNamenode的記憶體中metadata、以及edit和image檔案都會和namenode同步。而secondary Namenode只是定時的備份image。不過給人的感覺還是這個面試官可能玩SQL比較久了吧,所以SQL特別熟,但是整個交流的過程,我是真心無語。最後竟然問起了專案裡面用的java那個版本,hadoop哪個版本,(簡歷上寫的清清楚楚)我是真心不想答,既然不相信我的話,那何必要接著面下去呢?接著問我java最新版本,我竟然說出個2.0(哈哈,前幾天刷頭條也不知道在哪瞟見的,不過那個時候已經不想問答問題)。最後輪到我問他問題,我問了貴公司目前的風控系統資料量有多大以及以後的這個發展方向,然後他也出現了前一位面試官相同的表現(心虛)。現在想想既然大家都是從小白成長起來的,那麼那些老鳥面試的時候為什麼要去擺出這樣那樣的姿態來為難面試者呢?結束之後,沒有HR面,說讓回去三天給通知。估計也沒過,畢竟後來瞭解這個崗位基本就是HQL,有需求就去寫,應該對HQL要求比較高。但是後來據他描述,他們連底層的資料倉庫的ODS層還沒有建起來,我都懷疑他們之前是怎麼做的資料分析!最令我不爽的是這個面試官好像把知道和了解都當做是熟悉,簡歷上寫的清清楚楚瞭解什什麼什麼,到他嘴裡就變成了你對什麼什麼也挺熟的,然後直接就開始問問題。根本不給解釋的空間。我也是醉了。
總結:再一次重新整理自己的三觀,難道這種奇葩的面試官真的不少嘛?(以前看別人的面經有提到過,但是真沒想一下遇到這麼多這種人)不過自己也有缺陷,就是資料分析的專案需要重新複習下,特別是資料分析對應的幾個指標的實現這部分!最後沒能拿到該公司的Offer,自己並沒有太多的遺憾(畢竟整個技術面的過程該答的自己都答了出來),很大一部分原因覺得還是崗位的要求和自己目前的能力不太匹配。畢竟根據面試官面試的重點已經後期的交流覺得該公司的這個崗位還是需要精通SQL的人;而自己還遠遠未達到精通的地步。

6.週五下午快12點面完上午的公司,下午3點又要去面一家外包公司的初級大資料開發崗位,本來是不打算去的,畢竟對外包的印象不好,但是被招聘的小姐姐“忽悠”了兩句,又一想既然有面試就去試試吧,能拿到offer再決定去不去。

結果:被公司放鴿子。

過程:回到住的地方吃過午飯後已經是下午1點然後休息了一會就出發,到地方後,直接站那等了半個小時(公司找不到面試官,面試官在開會),之後被丟給一個人坐那聊了5分鐘,基本沒有聊任何技術的問題,然後就讓回去等通知,我去,真沒見過這樣的態度。後來和招聘的小姐聯絡說:你們公司是不是不缺人?從沒見等了半小時面試5分鐘什麼都沒聊就讓回去等通知的情況。

總結:外包公司最好別進,畢竟自己上一家公司就是外包公司,裡面什麼情況我還是比較清楚的;但是第一見這麼不正規的外包公司。其實下午本不想來,但是畢竟答應招聘的小姐姐了,所以最終還是跑了一趟,誰知道被公司給放了鴿子,我去這劇情剛好相反。(不是應聘者放公司鴿子嗎。。。)

週末休整下,針對自己的不足,再做些相應的調整。下週再跑一週的招聘,到時候會在下篇中和大家分享整個經歷。希望這些經歷能對各位讀者有一定的幫助。