標籤:

演算法教練談談碼工面試

序言

又是一年中充滿彷徨、未知的9月,有人說求職是一場殊死搏鬥的求生戰役,也有人說求職就像是談戀愛,知己知彼百戰不殆。其實求職是我們人生中又一次總結自己的契機,在一次次的期待和灰心喪氣中,我們逐漸了解自己的需求,明白招聘企業的用人邏輯,這將是我們在求職中得到的成長。今天,我們就來聊聊大熱的「碼工」求職中的那些事兒。

在北美從事工程相關的朋友中流傳著這麼一句話。「你是從事什麼工作的啊?」回答簡潔明了,硅工碼工或者礦工硅工指的是從事半導體相關行業的,比如計算機硬體,晶元設計等。碼工指的是從事計算機軟體相關工作,日常需要編寫不少程序,稱之為程序猿,或者程序媛

礦工則指的是金融領域相關的工程師,比如設計並實現金融的數學模型(主要採用計算機編程)。這三個工種,聽上去有些自嘲,但都是就業市場的香餑餑,都可以在美國高薪職業排行榜上佔據一席之地。其三個領域的頂尖公司也都是大家耳熟能詳,甚至被很多人列為心中的dream company。其中碼工和礦工更是以廣大的市場,高額的薪金福利吸引著眾多還未畢業就已經為之奮鬥的莘莘學子。

解構碼工面試密碼

碼工,顧名思義,寫代碼的,也就是常說的軟體工程師。這是學計算機專業的同學們最門當戶對的職業,也是很多希望轉行的朋友們的第一選擇。軟體開發是件有趣而枯燥的事情。有趣是因為只有你想不到,沒有你做不到的。50年前沒有人能預測計算機即將進入快速發展時期;40年前Bill Gates,Steve Jobs仍然默默無聞;

30年前,windows開始慢慢進入普通人家;20年前也沒人能想到互聯網的到來會改變企業採購,銷售,庫存,人力資源等方方面面;10年前你能想像在沒有手機,沒有網路的世界會是什麼樣子嗎?今天,大數據又以迅雷不及掩耳盜鈴之勢影響著我們的生活。枯燥是因為你需要用自己的努力一行一行的碼代碼,要經歷requirements,design,implementation,unit test,integration test,maintenance等一系列軟體開發流程。

興趣是成為優秀碼工的基本素質有句話說的好,Programming is a labor of love。

其實做任何事情都是一樣,唯有真正的熱情,才能完成真正的偉大事情。還有一些人認為編寫代碼是機械的,就像自嘲里說的那樣,碼工碼農,我們用青春來碼牆。也有人說印度的軟體行業之所以發達,是因為他們高中生都會寫代碼,因為計算機門檻低,什麼人都能學。

事實上,編程是一件極具創造性的工作,也可稱之為是一門藝術

最優秀的軟體工程師則是工匠,他們能把自己獨具慧眼的創造力融入到每一行代碼中。他們追求代碼的精緻,甚至雕琢至完美;他們把大型系統像拼圖一樣組裝到一塊,嚴絲合縫。熱愛編程的工程師從構建軟體中獲得滿足,就好比一位作曲家在完成一部交響樂後而欣喜若狂。正是興奮感和成就感,才造就了喜愛編程的明星工程師。

軟體工程師,那自然需要對一門或者多門計算機語言比較精通,了解語言特性,熟悉常用的library或者package,對流行的framework或者開發環境有一定的認識和了解。但這些遠遠不能作為優秀程序員的標準,甚至都沒有達到很多公司入職的門檻。

那我們來說些乾貨,什麼樣的人適合這個行業如何邁入FLAG(Linkedin如今將要成為Microsoft旗下的品牌)和極具發展潛力的unicorn這些頂尖科技公司的大門如何成為一名優秀的碼工

就像之前所說,你熱愛編程,喜歡挑戰,對新鮮事物永遠嚮往。因為這個行業發展迅速,新的技術層出不窮。如果你願意站在科技的最前沿,是一個對編程感興趣,對技術敏感,邏輯思維能力強嚴謹細心勇於挑戰難題,以解決一個程序設計難題為樂的人,那就去大展拳腳吧。

當然你要耐得住寂寞禁得起熬夜、願與電腦長相廝守

數據結構和演算法,數據結構和演算法,數據結構和演算法

重要的事情說三遍。一個剛從象牙塔走出來的學生,也許簡歷稍顯簡單,項目經驗也略顯不足,那面試官如何從眾多競爭者中選人呢?自然是面試,那眾多科技公司都以數據結構和演算法作為基礎和核心考察科目。別怪我沒提醒你,FLAG這類公司在面試fresh或者junior level的職位時,70%(也許更高)的面試都是這一類。Leetcode,lintcode,carrercup等這些網站提供了極其豐富的資源,大家不妨去刷刷題,熟悉下面試可能會被問到的題目類型。

相反的,在面試這類公司,或者說一些general hiring的面試,對於計算機語言反倒沒有什麼太多限制,你可以選擇你最熟悉的語言。面試官所看重的是你的思路,是觀察你在遇到困難挑戰時如何去面對,是考察你能否用計算機程序清晰的把你的思路編寫出來,是否有周全的考慮到每一個可能出現的情況。順便說一句,你的編程習慣、風格,如何和人交流,表達自己的想法,面試官都看在眼裡。

系統設計也是會被經常問到的一種題目類型,考察的是面試者是否能全局的去思考問題。這類題目聽上去很簡單,而往往是個很開放性的問題。在和面試官交流的過程中,他會給你一些提示,把你往正確的方向引導。

面試官們想要看的是在45分鐘到1個小時之內,你考慮了多少種情況解決掉多少問題。他們追求的不是一個答案,而是在整個面試過程中,考察你思考論述的過程

很多同學也許沒有豐富的項目經驗,那如何去準備呢?多參與一些項目,現在的open source的項目非常多,可以多去看看別人的代碼,甚至是參與其中,在實際的系統中去實踐。

課堂中可能也會有系統設計的題目,比如設計一個資料庫,或者是操作系統課上的多線程項目。不再再把它僅僅當成一個簡單的project,不要為了交作業而去做,而是把它當成實際問題,思考系統設計過程中的架構和博弈。多和有經驗的工程師去交流,當然你也可以從面試的過程中學到很多東西。

除了general hiring的面試以外,也有一些針對某一些技能的面試,比如前端工程師,網路安全工程師,數據科學家。那對於這一類的面試,數據結構和演算法的比例和難度或許會降低一些(只是或許哦!)但對某些領域的知識就要求深入一些,對於有過research經驗的同學也可以試試對症下藥,找一些和自己研究領域相關的職位。


推薦閱讀:

日本面試注意事項詳解【問答篇】
四項基本原則,讓面試官為你的機智點贊!
工商銀行面試真題彙編和精彩回答
奇葩而有效的反向面試——王猛見桓溫
zigzag 經典面試題

TAG:演算法 | 面試 |