美國谷歌臉書面試最看重什麼?

特指美國一線大的IT公司software engineer崗,new grad cs專業在美國找工作,身邊人很多都是題做出來了,但是還是沒收到offer,相反有的題沒做出來,反而被錄了,說是交流問題等等,但是感覺大家(國人)口語應該差異也不會太大,就不知道除了刷題以外,還能做哪些準備呢?

或者需要注意的地方

希望過來人能解惑一二。


我曾經在google工作多年,是Google的主力面試官,面試過很多人,也幫助過很多人進FLAG(其中包括LeetCode版主)。對於怎麼面試和如何準備面試,特別是頂級科技公司的面試,我想聊一聊我的經驗。

面試官真正想要的,是能夠獨自和與團隊一起為公司解決問題的人。寫出了code,答對了題,並不代表你coding能力就強,即使coding已經達到了標準,也不完全代表面試官就願意選擇和你共事。

首先,並不是寫出了code,做到了基本的bug free,就代表你coding能力很solid。

以下是我自己總結的比較有用的check list

code本身:

code寫的對不對,是不是做到bug free?

是不是能夠處理所有可能的情況?

有沒有主動walk through幾個test cases?

code是不是用標準的格式來寫的?

結構是不是讓別人能夠很清楚的看明白?

溝通code:

在寫code之前,有沒有主動的跟面試官溝通來明確題目要求,分析各種需要處理的情形?

有沒有考慮可能的環境和多種解決方案?

有沒有做必要的trade off的分析?

如果你用到了某些數據結構和演算法,有沒有解釋清楚運用這些工具的原因到底是什麼?

code優化方面:

有沒有冗餘的可以優化的代碼?

你給的答案是否是效率比較好的?

能否主動繼續分析優化方案?

其次,那種Coding能力不錯,但是因為其他原因掛了的,也太多太多了,舉幾個典型的例子:

例子1:

面試官:The Candidate was very quiet. I need to probe him all the time. I』m worried about his communication.

例子2:

面試官:Do you have a bug here?

應試者:(想都沒想)」No! No! No! I disagree with you」

例子3:

面試官:Do you have any question for me for the last minute?

應試者:You work in XXX department, right? I think there are quite a number of things that can be improved...(噴了10分鐘面試官的工作)

這些不論是太安靜,還是太急於證明自己,都最終導致了面試的失敗。所以說,Coding能力是很重要,但只是拿Offer的必要不充分條件。

如果說FLAG面試的完整攻略,還是必須要在Hard Skill和Soft Skill兩個方面都表現出色。

Hard skill方面,主要考察的就是你的專業能力,包括Coding, Testing, Basic Data Structures Algorithms和Design。

Coding

能保證至少一門語言,不論是java還是C++還是Python,不會被面試官問倒。

能夠很快將複雜的問題轉化成邏輯和代碼。

想到和處理可能的邊界條件。

寫出的代碼能夠符合業界對格式、易讀性和結構的要求。

Testing

對於測試的要求大多為單元測試,因此要求工程師能夠自己寫test來驗證自己代碼的正確性

Basic Data Structures Algorithms

能夠深度理解各種數據結構和演算法,對應選擇高效的解決方案,並告訴面試官為什麼

Design

Solution Design:能夠從工程的角度,考慮不同的需求和環境之下,不同的解決方案的tradeoff。System Design:應該具有完整的知識體系和儲備,熟悉計算機系統的基本知識,在複雜的情況下分析和解決對應的設計問題。基本知識概念包括操作系統、資料庫、網路、web technology、分散式系統、多線程等等。

(雖然很多人都說New Grad不考Design,但事實上,FLAG這個級別的面試還是多少會有涉及,而且了解Design的知識,對於和面試官分析、解決問題有很大的幫助。)

Soft Skill方面,除了一個必須具備的Attitude,對於面試來說最重要的就是兩個方面:Problem Solving和Communication。

Problem Solving

要能夠系統地、明確地觀察問題,定義問題,分析問題,分解問題,最後找到合適工具來解決問題。

還能夠不斷總結、優化、調整現有方案,多次迭代來找到更合適方法

(這是一個非常重要,但也很容易被忽視的方面。所有的技術能力都只是用來解決問題的工具,而不是方法。)

Communication

Technical Communication方面就是要有目的、有條理、有主次

Non-Tech Communication方面包括自我介紹、Behavior Questions、向面試者提問,以及其他所有的細節。這方面相對沒有那麼唯一的要求,但是自信、積極、尊重應該是一個普遍的標準。

(一樣的題目,面試官可以選擇給你提示也可以選擇不給你提示。評分評價主觀上,加減10%到20%輕輕鬆鬆。2.8和3.2一樣嗎?一個天上,一個地下。)

如果在CS求職方面還有其他的疑問,可以私信聯繫我。


如果是剛畢業的話,做不做得出題目的確是最重要的因素了。但是題目做出來也沒拿到offer的原因就很多了,說幾個最近面的例子:

A 國人小哥:題目做得很快也很好,基本上沒bug。但是小哥你多說兩句話啊,聽了問題以後五分鐘不出聲,然後開始刷刷刷地寫,整個房間里鴉雀無聲,這是鬧哪樣嘛……我問點問題想活躍一下氣氛,結果還是說了沒兩句就開始寫……最後被拒了,好幾洋人面官在feedback里都寫了交流困難雖然程序寫得很好。面試不是online judge,能說還是多說點,尤其寫白板的時候,能邊寫邊說最好,不行的話也要寫一會解釋一下。

B 國人妹子: 估計刷題有點走火入魔了。我問了到網上的原題,但是背景稍微改了一下。結果沒幾秒就說了一個很巧妙的解法。這還好,但是讓她解釋思路的時候直接照著原題的背景就開始說了……碰到做過的題是很讓人開心,不過您能好歹裝一下么,雖然我當作沒看見,但是後面還是有一輪還是被人抓住這點了(是的,面試官其實都能懶,一道題連續問半年很正常)…… 如果運氣好看到做過或者熟悉的題,先別著急,深呼一口氣,再確認一遍題目,然後說一個直觀點的想法,接著裝著一步一步思考怎麼提高

C 三哥(這個其實不算會做):電面,在google doc里粘了問題,然後他說要在白紙上寫一下,然後等了五分鐘,pia一下就把答案粘上來了。我驚訝之餘自己在google里搜了一下…………您tm能別用搜索結果第一頁的答案么,連變數名都不帶改的……讓他用另外一種格式輸出答案,妥妥地不會了

對剛畢業或者快畢業的學生來說,一般很難考察比較靠經驗的內容,比如設計或者測試。但是如果只要求做對題的話,完全不用那麼麻煩把人弄過來onsite,佔用正式員工大半個小時,直接帶到小黑屋裡寫題就好了。和TL聊起來的時候他說其實面試無非就是考察兩點:這人能不能工作,你願不願意和這人工作


面大公司沒失過手,拿到過G家總部等offer(通通拒掉創業中。。。),這裡弄個斧。

」題答出來了」也分很多種情況。思路清晰與否、表達有沒有條理、對各種情況是不是考慮周全、有沒有工程意識等等,其實都很重要。

此外,面試的時候一定要自信!自信!自信!具體表現出來就是敢於深究、敢於反問、敢於承認不懂讓面試官現場再解釋一下。給人的感覺一定要是非常active地在解決問題,而不是應付題目。

對於比較難的演算法題,不要一上來就糾結於最優解。先迅速給出一個trivial的解,分析其複雜度和優化餘地,再慢慢搞,會讓人感覺很好。

面試官其實就是在給自己挑同事。想想如果你是團隊的leader,你想要什麼樣的夥伴?當然是有貨,有條理,而且態度積極主動,信心滿滿那種,把活兒交給他/她才能讓你踏實。

而且面試官大部分也都刷過題,只會刷題的貨幾分鐘就會被看穿的。面試不是按答對題目多少給分的。


1. 關於面試

先上最乾的貨!

前段時間,FB招聘官工程師有來我們學校宣講以及介紹面試經驗。總結如下:

1)How to prepare? 如何準備面試

  1. The material (準備好相關材料,例如簡歷,求職信,作品集等等)
  2. The process(準備和練習如何進行面試)
  3. How to communicate(練習如何與人更好的溝通)

2)Goals of coding interview 面試的目的

  1. How you think and tackle hard problems (看你是怎麼思考和應對難題的)
  2. How you consider engineering trade-offs (memory vs. time)(看你如何考慮演算法優劣)
  3. How you communicate about code(看你是如何描述思路演算法,解釋代碼的)
  4. Limits of what you know(看你知識的局限在哪裡)

4)What is coveved? 會考哪些內容?

  1. Data Structures and Algo (數據結構和演算法)
  2. Understand, not memorize(是理解了還是只是死記硬背)
  3. Could be re-implementing lib functions(可以自己重複實現庫函數)
  4. Specific questions about concepts are rare(很特殊的概念問題考的比較少)

5)面試Tips

  1. 不能直接報答案/演算法,要講述你的思路,描述你的演算法

  2. 不能埋頭寫代碼不說話,要邊寫邊解說

  3. 寫完之後,用一個例子演示演算法過程(一般招聘官也會要求你提出Test case)

2. 刷題

然後,我覺得不提其他的先,最重要的肯定還是做題能力(就是體現了演算法能力,以及思路敏捷性,思考寬廣性)。所以首先還是說如何刷題。

刷題也是有講究的。需要有針對性的刷題,以及刷題的過程中,應該對知識點進行總結複習。

1)題目來源

a. Leetcode (OJ,刷題主戰場)

b. & (準備面試的好書,包括如何準備和一些經典題目)

c. Glassdoor – Get Hired. Love Your Job. (面經,英文為主)

d. 一畝三分地論壇(什麼都有,主要看面經,中文)

主要陣地還是以刷Leetcode上面的題為主。

2)有針對性

主要就是Leetcode上面的題目,可以根據公司分類,有針對性的先將要面試的公司的題目做完,然後再做其他題目。

有些題目會是一個系列,例如Shortest Word Distance這題就有1,2,3個版本。可以一起做。然後體會題目變形過程中的演算法/數據結構的變化,這樣也可以橫向比較演算法/數據結構。

如果刷題時間不多,盡量將每個類型的題目都做上一兩道。這樣可以避免遇到沒做過的類型的題目。

3)總結複習

推薦刷題的過程中,用記事本(App)進行歸納收集,總結複習。例如:

a. 語言相關:語言相關的知識點(例如ArrayList和LinkedList的區別)

b. 相關演算法/用法的精簡高效的寫法(例如遍歷)

c. 時間複雜度/空間複雜度的計算

最好還能結合著複習演算法/數據結構的知識點。例如,集中做幾道一個類型的題目,例如集中做幾道樹的遍歷的題目。然後總結樹的遍歷的方法以及各種遍歷的寫法(框架)。

4)精刷泛刷

一道題到底可以做多細,我是這麼劃分的。

Level 1. 直接從題解中學習

這是最簡單最快的刷題方法,直接看題解,看別人的代碼,學習別人的思路以及寫法(Leetcode,點Discuss,就能看到別人的解法以及代碼)

Level 2. 直接做題

最普遍的刷題方法,直接自己上手做題,調試,AC。

Level 3. Follow up

在Level 2的基礎上,follow up,就是自己給自己提高題目難度。例如,如何減少時間/空間複雜度。這部分,可以寫出來然後提交,看運行結果來判斷自己是否成功了。還例如,可以自己給自己加限定條件。這部分,可以就想一想,鍛煉思維。

Level 4. Learn and compare

在Level 3的基礎上,再去看論壇里別人的思路和代碼,然後進行橫向比較。看看別人/自己的演算法/代碼好在哪裡,哪些是可以學習借鑒的。總結一下寫下來。

Level 5. Explain code when coding

最後,也是最高層次的刷題,就是將這道題當作面試題來做。在Coding前,用英語說明自己的思路,然後在Coding過程中,用英語解釋你的代碼和思路。思路很重要,也是一部分考官看重的點。

3. 整理知識點

刷題之餘,還應該整理一些知識點,不但是演算法/數據結構的知識點。有些公司還會考OS、Database,網路,軟工等等的知識點。

1)針對性

首先,大家可能沒有那麼多的時間將幾個方面的知識點都複習總結一邊。所以,方案還是有針對性的進行準備。

推薦大家在一畝三分地論壇上找對應公司的面經,看看這些公司都問什麼類型的題目,以及都問過些什麼題目。可以優先將這些內容準備一下。

例如Amazon會有問到OOP(多態),Linux(命令)等等。

2)一些資源

a. Big-O Algorithm Complexity Cheat Sheet:一些演算法/數據結構的時間複雜度

b. 圖說設計模式:設計模式的總結和解釋

c. Linux基礎 — Linux Tools Quick Tutorial

d. Cracking the coding interview--問題與解答

4. Mock Interview

說完做題和整理知識點之後呢?然後就是「實戰」了。最好的辦法就是Mock Interview(模擬面試)。

一方面可以,模擬真實的面試環境,另一方面也可以鍛煉自己用英語解釋思路和代碼的能力。

1)盡量真實的去模擬

a. 時間:大多為45mins。

b. 流程:有先自我介紹,問簡歷/Project,再做題的;也有直接做題的。

c. 形式:模擬電面:(Google doc/Coderpad上寫代碼 + 電話交流)

模擬On site:白板書寫代碼+面對面交流

2)儘早進行 持續進行

儘早進行模擬,大致感知一下面試先。刷過一些題之後,可以定期進行。推薦找同樣正在準備面試的同學,互相進行模擬面試。一方面,兩個人都有需求,可以順利進行。另一方面,也可以從面試官的角度去考慮面試過程。

3)注重反饋 交流討論

面試之後,可以讓模擬面試官的同學提供一些反饋,兩個人也可以一起討論如何準備,解說思路會更好。如果一方/雙方有面試經歷,也可以討論交流面試經歷。

另外再提一點,就是可以找不同的人幫你進行Mock Interview,這樣你可以嘗試到不同「面試官」的風格,也有助於面試準備。

5. 交流

最後提一句,一定要多與人交流,包括同學(正在準備的與已經拿到Offer的),學長(還在學校等與已經工作的),老師等等。不建議閉門造車。

最後祝大家都能拿到滿意的Offer!

===== 更新 =====

01.08 資源添加


很多CS專業的學生找工作的套路就是刷題,我覺得想通過刷題拿offer的人感覺思維還在應試教育上,就像考試拿優一樣,你瘋狂的刷題,是肯定能拿優的,也的確有不少人通過刷題拿到Google,Facebook等一線IT公司的offer。但是很多人貌似沒弄明白一點,面試官招聘不是在招一個寫代碼的機器,而是在找自己的同事,工作夥伴,你以後是要與他共事的,那麼你和他的交流,契合度就很重要了。這也是為什麼題主身邊人很多都是題做出來了,但是還是沒收到offer,相反有的題沒做出來,反而被錄了的原因。

我在USC有一個好基友,同住一個寢室,也是中國人,我畢業後就直接回國創業了,而他選擇留在美國,目前正在Google工作,前陣子休假回國到我的公司里轉了一圈,很久沒見面就聊了很多,又因為都是CS專業,於是跟他聊起了美國CS專業的就業前景,也聊了一些關於面試的問題。去年各大科技公司的面試題就越來越讓人看不懂了,如果你還一味地糾結於「刷題」的數量,拿到手不會的題目通過記住參考答案來準備面試,你想拿offer只會越來越困難。

我不知道題主有沒有感受到,去年像谷歌,臉書領英這種大型科技公司對於面試的考核有一個明顯的變化趨勢。從之前的對於某些固定的演算法或者數據結構考核,逐漸變成了將考核的重點放在了你是否有能力通過與面試官合理的溝通,去解決一個實際問題。而所有的數據結構和演算法,都只是解決這個實際問題的工具。也就是說,你應該具備的能力並不僅僅是熟悉每一種數據結構並能快速寫出某些演算法,而是要在了解每種數據結構和演算法優劣勢的基礎上,理解面試官的問題,從而對實際問題建立模型,再自然而然地轉化代碼。在面試過程中,通過與面試官的交流,不斷加深對問題的理解,解決問題並且逐步優化的過程,才是面試官最想看到的。

拿谷歌的電話面試來說,software engineer崗位的電面持續時間是30-60分鐘,回答編碼相關問題時,你需要一邊在與面試官共享的 Google Doc 上編寫代碼,一邊清晰地闡述你的思路。如果你只是一味的悶頭解題,自己抓耳撓腮的寫了10分鐘,然後告訴面試官我不會。又或者說你花10分鐘迅速的做完了題,然後面試官在那頭盯著屏幕看了十分鐘,你覺得面試官心裡會不會有一萬隻草泥馬在奔騰。其實有很多人在面試官描述完問題之後,都直接想要給出最佳的答案而卡住自己思考半天,從而錯過了真正有價值的通過討論而得出有效思路的這個過程,最終被刷掉。所以在面試中,溝通是很重要的。

我舉個例子吧,Google和Facebook都考過的問題

Implement an algorithm that models raindrops randomly falling on a sidewalk .sidewalk is 1m and raindrops are 1cm. How could we know when the sidewalk is completely wet.

雖然看似很簡單的一個問題,但其實有很多需要和面試官溝通的地方,比如人行道的形狀,長寬,和雨滴濺落的樣子,以及雨滴的掉落是否可以覆蓋原來的雨滴。通過這些問題,都可以逐漸理解面試官的意圖,並且和面試官積極的進行溝通,這種思考過程才是面試官非常願意看到的,而不是你悶頭解題,這種溝通和思考過程絕對不是你通過刷題就能得來的。

當然,我們也不能否定刷題,刷題固然重要,但這只是找工作的必要條件而絕非充分條件,除了紮實的基本功,訓練有素的邏輯思維能力,分析問題能力,舉一反三能力,思想表達與溝通能力才是決定面試成敗的關鍵。


做出來題目,但是程度有很多種:一下子就做出來,並且優化好,順便把follow up解決掉;一開始沒想出解法,但是摸到邊,面試官提示一下就能做出來;經過面試官無數提示,很辛苦才做了出來,沒時間做follow up,etc。 以上這三種情況的好壞並不是僅僅憑有沒有做出題目來區分的。

另外,和面試官的溝通也很重要,我的策略是這樣的:面試官說完題目,先思考一兩分鐘,和面試官確認題目的具體細節(體現你思考周全);然後盡量畫圖跟面試官描述你的演算法,得到面試官確認後才開始寫代碼;寫的時候可以邊寫邊跟面試官講解你的代碼;寫完之後先自己代入一些數據看看有沒有bug。 最後還可以說說單元測試之類的東西,講解一下edge case。


第一次回答問題,然後就發燒到40度了。還去掛了急診。沒來得及回答請見諒。現在就在床上回答一下問題吧。

關於華大西雅圖,個人覺得錄取應該不難,sat1900左右托福95左右應該還是十拿九穩的。不過有一點要說明的就是,大多數人進了華大之後是沒有專業的,一般是根據你要申請的專業,你去上申請專業要求的課,然後根據你的成績來錄取。有些專業比如商科,還會當場寫作。大多數專業還會要求personal statement

華大計算機專業:

華大的計算機還是很熱門的一個專業,一年錄兩次,秋季一次春季一次,秋季大概錄200多個人,春季100多個,一般都是看cse143的成績(如果其他課都不差的話)。 cse143是一門java的課,講binary tree,linkedlist這種深度的數據結構,如果你對這些都很熟悉的話,那麼華大計算機歡迎你~申請的時候還會寫一篇ps,講一下你對計算機的興趣什麼的,我覺得只要認真寫了應該沒什麼問題。

好了先說到這兒吧,我去好好養病。。

分割線---------------------------------------------------------------------------------------------------------------

最近剛剛拿到了facebook的實習機會,很幸運地碰到了中國同胞。 所以過來回答一下回報一下祖國。

我大三(馬上大四),大二進的計算機專業。 我是在University of Washington Seattle的專門對於計算機專業的學生的career fair上的投得簡歷,投了很多公司,最後差不多拿到了10家面試,然後在感恩節前拿到的FB實習offer.

簡單說一下怎麼準備面試吧,十分推薦Cracking the Code Interview這本書,講得很詳細,該怎麼改簡歷,和面試官交談。 大概在面試前2個禮拜有機會就多刷刷題,leetcode和hackrank都是很好的機會,我第一次面FB是在學校里,和面試官聊的挺開心的,題目在glassdoor上也見到過,但是沒有做。。。(看到真題一定要做啊!)。。但是還是寫出了一個brute force的答案,然後改進到了一個7分得答案,最好的是DP演算法(大神求放過。。)

然後就是onsite的面試,因為FB在西雅圖有分部,所以他們組織了一個UDAY的活動,把一幫錄取的人叫過去吃吃飯面面試,環境還是很好的!就是空間有點小,感覺有點擁擠,就一次面試,50分鐘,題目還是有點難的,勉勉強強做了出來還有點小BUG。。

好了,上面就是我的經歷,個人覺得technical interview最重要的還是內功,自己平時演算法題做多了,面試的時候自然得心應手,弄清各種數據結構,看到題目就想到該怎麼做。

還有就是充實自己的業餘時間,找面試,找實習,找學校工作,最好的練習面試的方法就是去面試!

還有就是要把自己簡歷上的東西背熟,很有可能會問你簡歷上的問題。

不過面試還是有點小trick的,我跟我朋友面的同一家公司,題目都幾乎一樣,可是我錄了他沒錄。。(對不起。。。)。 我覺得很重要的一點就是一定要把自己的想法告訴面試官,就算你不會做。一定要做說要說要說!

1. 你可以扯淡找時間想題目。

2. 面試官會覺得你事一個會思考的人。

3. 個人覺得一開始可以先想最簡單最粗暴地方法,你在想的過程中說不定就會有Aha的想法!

所以最後,第一多出去實習,鍛煉,學習知識,第二就是掌握一些小trick,面試會很有用!

推薦leetcode, crack the code interview和glassdoor!

小弟第一次回答,不足請補充!


根據老婆面試fb的經驗,她說fb題目給的都超級容易,最難不超過leetcode medium,但是要求黑板上寫出來的代碼一次性0bug。


New Grad, Facebook / Google 都拿到過面試和offer。

我覺得三點最看重:

1. 分析溝通問題的能力。這項我覺得是最重要,也最受英語口語能力影響。Facebook和Google給我的面試問題有難有簡,但無論簡單與否,面試官都要求我想到什麼說什麼(think out loud)。基本上每次面試都是從頭說到尾(寫代碼的時候也是邊寫邊說)。我在Google面試中有個問題跟本沒想到解法,一半胡扯一半問問題地做完面試,結果面試官最後很開心,說,「雖然沒有完成,不過你中途一直說話,很欣賞你如何分析一個不熟悉的問題,並一步一步接近解法」。個人認為美國公司很看重這點。我認識些同學大量刷題也沒有過面試,很大一部分原因是上來就寫代碼,面試官看不到分析問題的過程。(不信你給你朋友面試一個,他要是啥都不說光把題做出來,估計你也看得挺無聊的。。。)多跟朋友們練習面試最有幫助。

2. 編寫代碼的熟練度。把想法轉換成代碼的能力。想到解法之後寫出來的代碼是否整潔,變數名是否合理,是否bug-free,是不是有合適的abstraction,都是寫代碼熟練度的表現。同樣一個最優解法,每個人寫出來的都可能會有細微差別,用loop還是recurse,用static還是dynamic memory,哪些邏輯寫成helper function,都能給體現出他是否真的能熟練地寫代碼。這點上刷題很有幫助。

3. 對公司和科技的熱情。這是個軟能力,但是一個很大的加分項。如果能和面試官聊聊一個公司最新的動態,那是最好不過的。比如我在面Facebook的時候他們剛拆分Messenger不久,就興緻勃勃地跟面試官聊了不少這個決定的原因和影響。多看看科技新聞很有幫助。


FB真的就是刷題,然後問lc原題。我個人覺得因為FB這兩年好多刷題刷進去的,所以培訓出來的面試官也都是各種問lc原題。也的確是對代碼的正確度要求很高。

Google不方便說。

美國一線大IT公司怎麼能少了微軟!微軟雖然也是一輪一道題,但是做題前後談笑風生的空間非常大(

另外面試要考慮的因素太多了……每個公司對候選人的期望和考察的側重點也不盡相同。誰誰誰在某個公司面試的時候這樣那樣最後拿到了或者沒拿到offer其實都無法反推出這個公司的招聘原則。但是我個人覺得,花點時間在溝通能力的訓練上收益會比使勁悶頭刷題要高得多。比如多找身邊的同學搞mock interview啊,多用小黃鴨調試法啊。

以及有時間的話,上學的時候做個TA,給萌萌的本科生講講習題課答疑,對這方面的幫助也是很大的(


營銷崗,當年面apple,被問如何做一個廣告高級黑google,我答

i dont know, google

i know,apple

錄取

後來跳槽去了google,學海無涯啊


就是刷題. 刷leetcode.

刷完了看面經, 看完了去面, 面完了再刷.

然後我就去Facebook了.....


1)所有面試都應該好好準備吧,有針對性的,多從應聘職位考慮

2)fail也有可能拿到offer的,我fail了兩次,但面了9輪,最後拿到offer。前提是要麼有很好的解釋,或者有很強的其它天賦

3)表達能力不是說你口語,當然也不能差到別人聽不懂。而是說你能不能把你想表達的東西說清楚,比如項目,從需求,分析,展示,應用,能不能和人聊上天。

4)對工作的熱忱,很加分。


傳說就是給你leetcode原題簡單的要你五分鐘bug free。

真的看面試官吧 我當時第一次去六輪,有一輪沒寫出來 本以為跪定了 結果HR跑來說要加面一輪

加面是一個MIT本科剛畢業一年的中國女同胞,出了一道DP的樹的題,我沒見過,但按著他家moving fast的風格上來就BB,二十五分鐘說了四種解法,從暴力解到最優解。她也親口承認四種解法都是對的,也承認最後那個是最優解了。然後面試在三十五分鐘左右就結束了。結果還是沒要。沒見過的題耶,當真不知道如何能做的更好了。

沒看清題,這個說的只是fb。

所以說就是一點,刷題,他家不在乎你見沒見過這道題,快速一遍bug free是硬標準,就是把自己刷成熟練工。這點做到了,看命就行了。

說真的這種方法真的過時了。有本事咱就打開leetcode 中等和簡單里咱倆各挑一道,互相來,你能一遍bug free咱再來談這規矩。


我2014年春季快畢業時,作為new grad面過Google,no offer. 面試後,recruiter打電話和我說很遺憾,我很接近,但沒到錄取線。我當時的準備狀況是刷完leetcode,看完cracking the code interview第四版。面試全程五輪中,有一輪很不好,其他幾輪都順利。

畢業後我進了灣區的一家互聯網公司。過了一段時間我做了電話面試官。

2015年春季被Google recruiter再次聯繫,我拖到秋季又面了一次。一共也是五輪,都很簡單。就過了。當時的準備狀況是刷完了leetcode(多了很多新題),以及很簡略的瀏覽了cracking的第五版(多了一章,換了一些題)。面試的感想是因為我自己有了工作,心態就比較放鬆;以及我也做了面試官,我對面試官的心理也有體驗,面試時比較注重互動:確定他們聽懂了我在幹什麼再move on,否則很可能是在浪費時間。而面試的時間非常寶貴。

最後我想說作為有過失敗的面試經歷者,要明白FLG這樣的公司面試有很高的false negative rate(你是合格的,卻面試被拒),所以失敗了主要是運氣不好。Let"s move on. 另外課餘時間除了刷題,也要學點兒真正有用的東西(個人認為刷題對實際工作幫助不大)。


國人出題較難,尤其是對非校友。國內Top 畢業是很有優勢的。不過即使面的不愉快,有的時候也不會fail你


New grad 面試或者找工作的結果可以用中華民族最常用的三個因素來概括:天時地利人和。

天時:

重要的事情說三遍。找工作一定要趁早。一定要趁早。一定要趁早。我不能說這件事比個人實力更重要,但它對最終的結果有很重要的影響。我見過很多忙於學業不專心找工作,或者說不先下手為強的明明有實力的朋友,最後栽到了headcount滿了,走都不到面試那一步。

或者我們可以這麼理解。cs行業特別是software engineer崗的不可替代性不強,大家刷一刷題以後在面試上的表現都差不太多。學4年的人有著精湛的編程功底,但是這種優勢在以演算法為基礎的面試上發揮不太出來,也就是看起來跟那些學了一年刷了一年題的人區別不是那麼大。所以先佔坑就顯得尤為重要了。

地利:

這個不用我多說了。矽谷附近的學校們的面試機會比村裡大學的面試機會明顯多,畢竟公司不用承擔onsite的往返機票酒店住宿等等的費用。Apple一半員工都是聖何塞州立大學這種說法雖然有誇張成分,但也可以看出地理位置的重要性了。

人和:

這一點是最重要的一點了,即面試的個人發揮。個人曾在轉行cs半年多後拿下谷歌的實習,並且在conversion成功,拿到了Google SDE的offer。在面試谷歌實習的時候我只刷過40道leetcode,conversion面試的時候刷過將近200道。這個過程中多少是有一點運氣的成分的,但還是來談談我的經驗。

首先,面試內容以Google為例,new grad的面試主要是演算法和數據結構。面試的list裡面提到了mathematics和system design,但我迄今沒有聽說過明確對new grad考察這些的。並且演算法的概率明顯大於數據結構。所以從面試內容來看,刷題基本可以滿足需求。

有一個題外話,很多人好奇為什麼「碼農」的工作性質跟演算法並無太大關聯,但面試(特別是大公司)卻非常注重演算法。原因很簡單,公司不僅想招能完成工作的人,更想招「聰明」的人。通過演算法來檢驗一個人的聰明程度,可能是大公司們探索若干年得到的性價比最高的方法。雖然這種方法在如今各種刷題網站的轟擊下,已經顯得不太可靠了。

儘管Google/Facebook等公司一般都很政治正確,揚言說不在意是否做出來題目了,更在意解題過程和你的思維,但我還是認為在大多數情況下"做出來沒聊好"強於「表達好沒做出來」,畢竟華人相對來說交流不如local。「做出來」最好是寫出了可執行的代碼,其次假如時間不足,闡述清楚思路和計劃如何解題也可勉強算「做出來」。在面試過程中有如下注意的事項:

  1. 解題和優化。面試的題目一般不難做出來,大不了寫個exponential的做法。但是演算法優化顯得很重要,也就是不僅要做對,更要控制演算法的time complexity和space complexity。一個優雅的演算法無疑是「聰明」的體現。另外,對於一些簡單的演算法問題,不要大意,要注意解題是否快速且正確,corner case是否考慮完整。比如同樣一個簡單問題,你用了10分鐘解答,當天的其他interviewee只用了5分鐘,那麼高下立判。
  2. Coding style。簡單表現為變數名的定義,類與函數的使用,注釋,邏輯是否簡潔無重複等。
  3. Communication。有價值的交流很重要,不是說漫天亂聊嘮嗑式的交流。個人認為交流的作用有兩點。第一,幫助面試官快速了解你的思路,成功表達自己的思想,不要讓任何一點自己想法的可貴之處埋沒。我曾遇到過一個hard的面試題目,想不出徹底的解法,就把自己能想到的思路和相關的困惑都說了一遍,然後面試官表達這個思路是正確的並且解答了我的困惑,於是我們順利進行。第二,假如遇到了卡殼,可以儘快從面試官的反饋(語氣、神態、建議等)中發現解題的方向。不要把面試官當成上司,就把他當作跟你一起解題的人。

祝大家都找工順利 :)


我一直有一點不成熟的想法:

只要是演算法面就讓面試官和面試者單挑,隨機出題。只要比面試官先AC,或者解法更優,或者代碼更簡潔優雅就算過。

這樣可以直接避免阿三使壞。mmp, 嚴重懷疑各路公司參加演算法面的阿三有幾成真比被他們掛掉的面試者演算法更好。


實力差不了太多的情況下,運氣才是真吧。適用於所有面試。


作者公眾號:作者還行。關注此公眾號,給你一套價值10萬元的職場大禮包。

Google是我最喜歡的互聯網企業,也是我覺得目前這個世界上最偉大的公司。對Google的運作一直很好奇,系統性地學習Google的運行方式對於我們大有裨益。這篇文章主要是Google對於人才的聘用的系統性知識總結,希望能給大家帶來更多的思考。

成為一個創始人

Google兩位老總拉里和謝爾蓋奠定了Google對待員工方式的基礎:Google人可以引領所在團隊的工作和生活方式。

2004年8月19日,Google上市,當時Google只有1907名員工,謝爾蓋在招股說明書中講到:我們的員工自稱Google人,是我們公司的根本。Google是圍繞著吸引和發揮出眾的技術專家和商務人才的能力而打招的。我們有幸招募了很多具有創造性、有操守和不辭勞苦的工作明星。我們希望未來能夠招募更多這樣的人。我們會獎勵他們,對他們好。

Google為他們的員工提供了世界頂級的員工福利,包括不同尋常的福利,例如免費餐、醫生和洗衣機等。

拉里和謝爾蓋刻意留出空間,使其他人也能像創始人一樣行事,有識之士有機會創造自己的Google。

建立傑出的團隊或機構的起點是有一位創始人,但是成為一名創始人並不意味著要建立一家新的公司,任何人都有能力成為一名創始人,也可以成為所在團隊的文化創造者。

Google工作法則:成為一名創始人

1. 把自己看成是一名創始人。

2. 像創始人一樣行動。

Google的文化是什麼?

使命是Google文化的第一塊基石。

在內心深處,每個人都要找到工作的意義。沒有什麼比知道自己正在改變世界能帶來更強有力的激勵作用。

Google的使命是:整合全球信息,使人人都能訪問並從中收益。

這個使命讓大家的工作變得有了意義。這個使命不是一個商業目標,而是一種道德目標。史上最有影響力的運動都要有道德動機,或是追求獨立,或是追求平等等權利。

歸根到底,這個使命還永遠無法達成,總是有更多的信息需要集成,總有更多的方式可以使人們從中收益。這樣Google人創造了動機,促使大家不斷創新,探索新的領域。要成為「市場領導者」這種公司使命,一旦實現,就難以再帶來更多的激勵。Google範圍寬泛的使命使得Google能夠循著指南針而不是追著速度計前進。

透明是Google文化的第二塊基石。

應該假設所有的信息都可以與團隊分享,而不能假設任何信息都不能分享。在開源領域,隱藏信息是有悖於主流文化的。

發聲的權力是谷歌文化的第三塊基石。

我們所有人都想要掌控自身的命運。發聲的權利意味著給員工真正的話語權,決定公司如何運營。對於很多組織而言,這樣令人恐懼,但是只有這樣才能秉承Google公司的價值觀。

Google聘用什麼樣的人?

Google有兩個選擇:

A,Google聘用水平超過90%應聘者的員工,一上手就能做好工作。

B,Google聘用平均水平的員工,通過Google的培訓項目訓練,希望他們最終能夠超過90%應聘者的表現。

花同樣的預算招募最優秀的人才,是把資金前置還是後置的問題。

Google的選擇是人力資金投入前置,意味著Google把大把的資金投入了招聘的人力預算,招最優秀的人才。

還有一條,出色的招聘工作不僅在於聘請到名頭很大的人,頂尖的銷售人員,或者最聰明的工程師,而且在於搜尋在你所處組織的環境下能夠成功的最優人才,在於找到能夠使周圍每個人都更加成功的人才。

Google怎麼找到最優秀的人才的?

Google每年都要招募大約5000名員工,候選人大概是100萬到300萬應聘者,錄取比例是0.25%。

Google早期的做法

1. 嘗試用招聘網站招募員工,起到了一些作用,但並不盡如人意。

2. 嘗試找獵頭合作,但是獵頭很難理解Google尋找人才的目標。

3. 出怪題難題登廣告,結果一個人都沒招到,只是做了一個有趣的營銷活動。

4. 得到Google的聘用可能要用上6個月甚至更久,應聘者要參加15~25次面試,每一位應聘者每次都要用上10~20個小時進行面試和撰寫反饋報告。每招聘一個Google人需要250小時,招聘1000人需要投入250000小時。要125人全職工作才能招聘1000人。

Google改進版的做法

1. 採用內部推薦。這招不是很管用,因為Google的員工不可能認識世界上的每一個人,對崗位的要求和適合這個崗位的人才也不是很了解。

2. 最優秀的人並不在尋找工作。必須主動出擊。Google內部研發招聘產品gHire---建立自己的應聘者資料庫,輔以各種強化工具對應聘者進行篩選和跟蹤。這一招是最管用的,一半以上的Google員工來自於這個系統。

3. 利用互聯網數據,對每一個應聘者進行檔案分析,領英,大學資料庫和社交媒體是Google的數據分析源。

4. 只做少數國家使用獵頭,比如韓國,中國。

Google的面試流程

Google已經在員工人數達到2萬人之前,多數員工每周用在招聘工作上的時間是4~10個小時。

2013年,Google員工大約4萬員工,Google人平均每周用在招聘上的時間降為1.5個小時。

面試者最優的輪數(每一輪可能有多個面試官)是4次,每個面試官都需要打分,然後綜合每個面試官的平均分數。

具體流程如下:

1. 由一位不進對應聘者申請的工作熟悉,而且對所有工作都熟悉的人篩選簡歷。這一條對篩選人要求非常高。

2. 電話面試後者視頻群面,面試一般的認知能力。

3. 由招牌經理,同事,和下屬和跨職能部門做面對面面試。下屬面和跨職能面很有意思。

4. 整理正式的,結構化的反饋意見,發揮「群體智慧」打分做決策。

5. 招聘委員會審核,然後高管審核最後由首席執行官審核。

6. 為應聘者頒發錄用涵。

本書的核心觀點來自於Google首席人才官 拉斯洛 博克。本人並不是全然贊成其觀點,在實際工作中也會發現很多水土不服的地方,國內工作環境還是不太一樣,企業環境也不太一樣,但是不妨礙大家從各個角度去理解和吸收其中的營養。

作者公眾號:作者還行。關注此公眾號,給你一套價值10萬元的職場大禮包。


推薦閱讀:

是否可以認為 EverMemo 抄襲了 Keep ?
目前國內可以訪問的搜索引擎中,英文搜索質量較高的有哪些?
谷歌的產品為什麼看不到更多的整合?
谷歌閱讀器(Google reader)將於七月一日關閉,有哪些原因?同時有哪些優秀的替代產品?
如何評價 Google Reader 取消分享、備註、評論等社會化功能?

TAG:美國 | 求職 | 留學 | 谷歌Google | 計算機科學 |