程序員David Byttow:“十二年前讶坯,19歲的我只身從芝加哥去往南加州浮还,所有的財產(chǎn)不過一部車和兜里的400美金,還有車里裝的別的東西闽巩。但是钧舌,當時我已經(jīng)達到專業(yè)級的編程水平担汤,而且,揣在兜里的還有一份年薪40000美金的合同洼冻≌钙纾”
本文作者David Byttow是一名程序員,曾在Google和Square等公司工作過撞牢。
在正文之前率碾,先讓我們回答幾個簡單的問題:第一,你面試過多少家公司屋彪;第二所宰,這些公司中,錄取你的有多少畜挥?記下這兩個數(shù)字仔粥,然后代入下面這個算式中(為我自己發(fā)明,僅供參考蟹但,不具有其他意義):
# x = number of companies interviewed with onsite //問題一的數(shù)字
# y = number of offers received //問題二的數(shù)字
value = 100 * log(x) * y / x //最終結果
如果你算出的結果120躯泰,那你比較強大,不需要這個华糖,但我建議你不妨看看麦向,權當參考。
首先做個自我介紹:
我沒有本科文憑客叉。十二年前诵竭,那時我19歲,只身從芝加哥去往南加州兼搏,所有的財產(chǎn)不過一部車和兜里的400美金秀撇,還有車里裝的別的東西。
但是向族,當時我已經(jīng)達到專業(yè)級的編程水平呵燕,而且,揣在兜里的還有一份年薪40000美金的合同件相。
從那以后再扭,我先后在Double Helix、Namco Bandai夜矗、Google泛范、Obvious和Square工作過,同時還收到過諸如Naughty Dog紊撕、Activision罢荡、Riot、Games、Blizzard区赵、Pinterest惭缰、Goldman Sachs以及更多這類公司的橄欖枝。把這些經(jīng)歷代入本文開頭的算式中后笼才,我的得分為132漱受。
在我的職業(yè)生涯中,我面試過超過500名程序員骡送,錄取了其中超過10%的人昂羡。并且,至少有15人在圈子里相當出名摔踱,我至今還記得他們虐先。
現(xiàn)在,我給自己干派敷,想要做點不一樣的東西蛹批。
羅列上述經(jīng)歷的目的在于,我想用我的親身經(jīng)歷告訴這個行業(yè)的職場新人膀息,沒有所謂的面試寶典能讓你百分百簽到自己想要的工作,以Google為例了赵,他們的面試流程中到處都是變數(shù)潜支,首先,你的面試官團隊是由隨機抽取的5-7名軟件工程師臨時組成柿汛,接著冗酿,他們會商量著給出一套適當?shù)念}目讓你回答,通常有一道題是關于徒手寫代碼的络断。偶爾會有個別惡趣味的面試官會進行一些刁難裁替,但這些面試官通常都是這個小組中的大牛,并且貌笨,面試中是允許你犯個別錯誤的弱判。
但這也不是說面試就是純粹碰運氣,雖然幫助有限锥惋,但我還是想給出一些很有用的小技巧昌腰,讓你有更充分的準備,減少在面試中的慌亂膀跌。
技術方面的技巧
第一:ABC(Always Be Coding)遭商。一力降十惠,說的多不如做的多捅伤,所有工作都是這樣劫流,編程也不例外。你寫過的代碼越多,你的能力也就越高祠汇。但是仍秤,你必須做到有目的的編程,在寫代碼之前做到心中有數(shù)座哩,明白自己的短板并且加強訓練徒扶,堅持不懈的挑戰(zhàn)自己的極限,努力使自己在各方面都很優(yōu)秀根穷。我強烈建議你把自己做過的每個項目——不管是否完成——都整理成作品集姜骡,在這里推薦GitHub,非常專業(yè)的代碼分享社區(qū)屿良,你可以把自己的作品集放到這圈澈。
第二:精通至少一種多重范式編程語言。精通一門諸如C++這樣的語言能讓你從根本上理解編程尘惧,因為這類語言風格多樣康栈,如何寫代碼完全取決于你自己的風格,你能在一種語言里體會到不同風格的代碼在執(zhí)行上的差別喷橙,同時要達到這樣的水平還需要大量的實戰(zhàn)與練習啥么。而且這類語言通常在各個社區(qū)中也是最活躍的板塊,你可以很容易就找到志同道合的朋友來分享經(jīng)驗贰逾。其他也支持多風格編程的語言還有C#悬荣、Java、PHP疙剑、Python及Ruby氯迂。
關于C++的題外話:有一個跟著名的面試題,許多面試官都喜歡問言缤,是這樣:“如果把C++分為十個等級嚼蚀,1為最低,10為最高管挟,你認為你自己處在哪一級轿曙?”希望上帝保佑那些回答9或者10的人,Bjarne Stroustrup估計也只會給自己打到8分甚至更低(此人為C++之父)僻孝。主要原因是這個語言經(jīng)過這么多年無數(shù)大能的不懈努力拳芙,已經(jīng)超級復雜,被稱為主流設計語言中最復雜的一款也不為過皮璧。
第三:熟悉各種算法的優(yōu)劣舟扎。先看看這份關于各種算法的對比圖,確定都理解了之后悴务,試著把這些算法都用自己的方式寫一遍睹限。這樣你就會對各種算法有更深刻的理解譬猫。面試的時候這幾乎是必考題哦。
第四:熟悉所有常用函數(shù)羡疗。你最好把所有的常用函數(shù)都用自己使用的語言寫一遍染服,不要依賴于現(xiàn)成的函數(shù)庫,這樣會加深你對各個函數(shù)以及語言本身的理解叨恨。試著快速寫出下列函數(shù):向量(動態(tài)數(shù)組)柳刮、鏈表、堆棧痒钝、隊列秉颗、哈希映射、集合送矩、優(yōu)先級隊列等等蚕甥。
第五:要更務實。臨時抱佛腳早就沒有用了栋荸,踏踏實實的打好基本功才是王道菇怀,花更多的時間去解決各種編程中遇到的問題,這里推薦多去TopCoder看看晌块,那里有很多不錯的資源爱沟。里邊有各種案例可供學習,試著學習里邊的思考方式來解決自己遇到的問題匆背。我當初花了整整兩個禮拜在TopCoder上呼伸,到最后我都能閉著眼一只手寫出迪科斯徹算法,幾乎能解決所有的圖形問題靠汁。所做的不過是不斷重復編程蜂大。這可能是Google最終要我的原因之一吧闽铐。Eric Schmidt說:“重復從不青睞祈禱者蝶怔。”
第六:編程是最簡單的兄墅。這么多年的工作經(jīng)驗使我明白了一條踢星,寫代碼是一個工程師所有工作中最簡單明確的一部分。我常掛在嘴邊的一句話是:“簡單的就像寫段代碼一樣隙咸°逶茫”我相信對于一個工程師來講,事前準備和事后維護才是更艱難的工作五督。比如說藏否,你需要在編程前計劃好你需要寫什么以及確保寫好的代碼能順利運行。盡量讓面試官知道充包,你不是一個只懂寫代碼的呆子副签。
需要注意地是遥椿,在別人面前寫代碼可能會略為別扭,最好提前做些這方面的練習淆储,可以參考下我前任同事Dan寫的這篇《Whiteboarding》冠场。
非技術方面的技巧需要提前說明的是我在這方面并不專業(yè),僅供參考而已本砰。
第一:明白你為什么選擇這個公司這分工作碴裙。不管大公司還是小公司,還是極度饑渴的創(chuàng)業(yè)公司点额,都不會要一個連公司是干嘛的都不知道的人舔株,哪怕這個人技術牛到一塌糊涂也不行。
第二:一定要滿懷激情咖楣。程序猿是一種沒有固定工作時間的動物督笆,如果你只是想找一份朝九晚五、有固定工資诱贿、只在偶爾加加班的工作娃肿,你還是別干這行的好,你一定要愛編程珠十,不管什么時間什么地點料扰,只要有需要,就能隨時投入工作焙蹭。愛一行晒杈,干一行,對于程序員來說尤其如此孔厉。
第三:不懂就問拯钻。面試的時候如果碰到?jīng)]有聽明白的問題,一定不要不懂裝懂撰豺,我曾經(jīng)見過有些面試的人花了老牛鼻子的勁去解決根本沒問過的問題粪般,這不只是浪費你的時間,也是浪費我的時間污桦。
第四:保持微笑亩歹。所有面試寶典上都有這條,但是凡橱,不要做太過了小作,適當?shù)奈⑿δ墚a(chǎn)生很大的效果。我有時候會在面試完一個人后特別受打擊稼钩,但是下一個面試者簡單而真誠的微笑能讓我一下子心情好起來顾稀。
我把我所有能想到的都寫在這里,希望能對大家有所幫助坝撑。還是開頭那句話静秆,沒有保證百分百成功的面試寶典氮块,只有不斷的努力,要想干好這份工作诡宗,堅持ABC吧滔蝉,少年。