說(shuō)實(shí)話,你是一位優(yōu)秀的工程師候選人嗎?你怎么評(píng)價(jià)自己?你面試過(guò)多少家公司?你拿到offer的比率是多少?試一下用以下的公式來(lái)計(jì)算。
x = 現(xiàn)場(chǎng)面試的次數(shù)
y = 拿到的 offer 數(shù)量
value = 100 * log(x) * y / x
如果你的計(jì)算結(jié)果小于90,請(qǐng)仔細(xì)閱讀這篇文章;如果大于120,那你并不需要這篇文章。
我是誰(shuí)?
我沒(méi)有高中學(xué)歷。我19歲從芝加哥前往南加州開(kāi)始編程。我把所有東西裝進(jìn)了我的轎車?yán)铮砩现挥?00美金和一個(gè)offer,4萬(wàn)美金年薪的初級(jí)程序員。那是在12年前,當(dāng)然又是另外一個(gè)故事了。
從那以后,我曾在 Double Helix、 Namco Bandai、 Google、Obvious 和 Square等公司工作過(guò)。也收到過(guò)來(lái)自Naughty Dog、 Activision、 Riot Games、 Blizzard、 Pinterest、 Goldman Sachs 等公司的offer。正由于此,用前面提到的公司算出我的得分是132。
我至少面試過(guò)500位工程師求職者,他們之中大概10%會(huì)收到offer,3%我認(rèn)為是”搖滾明星(rockstar)”類型的求職者,他們留給我的印象尤為深刻。
我想告訴你,絕對(duì)沒(méi)有萬(wàn)無(wú)一失的方法保證你被錄用。因?yàn)檫@里面存在太多的不確定因素,特別是像Google這樣的公司,你將會(huì)面對(duì)5-7個(gè)隨機(jī)挑選 出來(lái)的工程師,他們會(huì)選擇一套他們認(rèn)為合適的問(wèn)題來(lái)進(jìn)行面試,通常會(huì)包括“白板編碼”。但是有一些工程師是很差勁的面試官,他們會(huì)問(wèn)一些不公平的問(wèn)題并作 出武斷的判斷。但是沒(méi)關(guān)系,這對(duì)我們來(lái)說(shuō)正好,因?yàn)榍舐氄咄ǔ?huì)允許搞砸多輪面試中的其中一輪。
我可以做的就是告訴你怎樣做好充分的準(zhǔn)備,下面是我提供的一些建議:
技術(shù)建議:
1. 堅(jiān)持編程:
很簡(jiǎn)單,程序?qū)懙迷蕉啵愕氖斋@越多。通過(guò)編程,你不斷的練習(xí)。不過(guò),最好的練習(xí)是有目標(biāo)的練習(xí)。在腦海里有一個(gè)目標(biāo),開(kāi)拓新的領(lǐng)域,和挑戰(zhàn)自我。經(jīng)過(guò)一段時(shí)間后,你需要給你完成的和未完成的項(xiàng)目建立一個(gè)主頁(yè)。Github是一個(gè)非常好的用來(lái)建立項(xiàng)目主頁(yè)的地方。
2. 掌握至少一門編程語(yǔ)言
掌握一門編程語(yǔ)言會(huì)讓你擁有敏銳的洞察力。為此,你必須編寫大量的代碼,閱讀大量的代碼,同時(shí)要學(xué)習(xí)代碼里的最佳實(shí)踐。理論上,一門語(yǔ)言會(huì)有一個(gè)很活躍的社區(qū),和大量的產(chǎn)品代碼提供學(xué)習(xí)??蛇x的編程語(yǔ)言包括C#、C++、java、PHP、Python和Ruby。
在C++面試?yán)?,有一個(gè)經(jīng)常被問(wèn)到的問(wèn)題:“你給自己的C++知識(shí)打多少分,從1分到10分?”。我非常厭惡這樣的問(wèn)題。愿上帝幫助那些給自己打了 9-10分的人,因?yàn)樗麄兒芸鞎?huì)露出馬腳。Bjourne Stroustrap給自己打了8分或者更少。這門語(yǔ)言真的太復(fù)雜,太豐富,而且隨著時(shí)間的過(guò)去,演進(jìn)了太多次。離題了:)。
3. 理解復(fù)雜度
閱讀這篇文章( Read this cheat sheet)。 明確自己清楚復(fù)雜度的含義。然后實(shí)現(xiàn)一些常用的算法,比如Dijkstra’s, Floyd-Warshall, Traveling Salesman, A*, bloom filter, breadth-first iterative search, binary search, k-way merge, bubble/selection/insertion sort, in-place quick sort, bucket/radix sort, closest pair 等。再次重復(fù),堅(jiān)持編程!
4. 重復(fù)發(fā)明輪子
你應(yīng)該使用你常用的語(yǔ)言來(lái)實(shí)現(xiàn)一些常用的數(shù)據(jù)結(jié)構(gòu)。不要依賴于庫(kù)。實(shí)現(xiàn)以下的數(shù)據(jù)結(jié)構(gòu)并為其編寫測(cè)試用例:vector (dynamic array), linked list, stack, queue, circular queue, hash map, set, priority queue, binary search tree 等。你應(yīng)該能夠很快的編寫完成。
5. 解決問(wèn)題
不要在google上這樣搜索 like this。這都是一些基礎(chǔ)的編程概念。你要做的是,至少花費(fèi)40小時(shí)編寫解決各種問(wèn)題的代碼。其中最好的資源是TopCoder(Read this),然后嘗試去解決更多的問(wèn)題。挑一些問(wèn)題來(lái)測(cè)試你實(shí)現(xiàn)recursive, pattern-matching, greedy, dynamic programming, and graph problems的能力。瀏覽一下這些歸檔的問(wèn)題(archived problems)。
這或許是我被Google聘請(qǐng)的首要原因,我有2個(gè)星期的時(shí)間沉迷在Topcode里。在那以后,我可以在閉上眼睛綁起一條手臂的情況下,編好 Dijkstra算法。我可以解決幾乎所有的和圖相關(guān)的問(wèn)題。這都是在重復(fù)解答問(wèn)題的步驟而已。Eric Schmidt說(shuō)過(guò)“重復(fù)并不會(huì)使得祈禱沒(méi)有意義”。
6. 使編程簡(jiǎn)單
至少,使其看起來(lái)更加簡(jiǎn)單。隨著時(shí)間的過(guò)去,我了解到,編程是工程師工作中最直接和最簡(jiǎn)單的部分。我常常用一個(gè)詞組“a simple matter of programming”,因?yàn)槲蚁嘈鸥鼜?fù)雜的部分是在編程之前和之后。例如,設(shè)計(jì)好你所要編寫的代碼和確保你編寫的代碼能夠發(fā)布。讓你的面試官了解你清 楚的知道,編程只是到達(dá)目的的一種手段。
注意,在別人面前編碼可能會(huì)讓你感到害怕。自己找方法去練習(xí)白板編程和結(jié)對(duì)編程。Google基本上都是白板編程,而Square都是結(jié)對(duì)編程。我的朋友和同時(shí)Dan寫了一篇關(guān)于這個(gè)的文章( Read this)。
其他建議:
在這里,我不能自稱專家。事實(shí)上,有些人會(huì)說(shuō)我甚至不善于和別人相處。但是我還是應(yīng)該說(shuō)一些非技術(shù)的建議,其中有一些還是非常明顯的。
1 知道為什么你在那里
如果你在面試一家公司的時(shí)候,完全不明白為什么他們?cè)谶@,他們是誰(shuí),他們?cè)谧鍪裁矗敲凑?qǐng)不要去面試。
2 激情
如果你不在意,那么其他人也不會(huì)。對(duì)某些事情充滿激情??赡苁蔷幊?,或者別的。你會(huì)熱衷于利用業(yè)余時(shí)間編寫一個(gè)編譯器嗎?你會(huì)自己動(dòng)手制造一個(gè)遙控直升機(jī)嗎?只要你有激情,都沒(méi)關(guān)系,你會(huì)使其變得有趣。
3 不要做任何假設(shè)
如果不確定,就詢問(wèn)。如果他們問(wèn)了你一個(gè)問(wèn)題,你不是100%的肯定問(wèn)題是什么,那么請(qǐng)他們?cè)賳?wèn)一次。我見(jiàn)過(guò)許許多多的求職者從不詢問(wèn)任何問(wèn)題,結(jié)果浪費(fèi)大量時(shí)間解答了錯(cuò)的問(wèn)題。
4 微笑
興奮,開(kāi)心和積極。但不要過(guò)度。正如我前面提到的,人們會(huì)作出快速的判斷。確保你留給別人的第一印象是好的。微笑是能夠傳染的,我常常帶著糟糕的心情走進(jìn)面試的房間,但是求職者一個(gè)合適的微笑會(huì)讓我快速的恢復(fù)過(guò)來(lái)。
正如我之前所說(shuō),沒(méi)有銀彈能夠讓你被雇傭。但是,作為一個(gè)工程師,你能盡你最大努力做的是 ABC: Always Be Coding. – 堅(jiān)持編程。
-
工程師
+關(guān)注
關(guān)注
59文章
1563瀏覽量
68384
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論