[心得] 第二次 Google 面試洗臉心得 at Soft_Job - BWall 熱門 ptt bbs 文章



[心得] 第二次 Google 面試洗臉心得 at Soft_Job - BWall 熱門 ptt bbs 文章

標題寫得非常清楚,這篇是我去年第二次挑戰應徵日本 Google …… 然後再次被洗臉的故事。 第一次在臺北的面試由於 NDA 的關係不能分享整體面試內容 但是這次日本面試有特別確認過不用簽 NDA ,所以下面會講得很詳細 當然這不保證之後會不會被查水錶就是了,要是被查會回來把這篇毀屍滅跡 聯絡 recruiter (應該說被聯絡): 這次的面試並不是我主動投的,是 Google 一位負責亞太地區的 recruiter 找上門來: 「我有看到你去年應徵的記錄,請問你是否還有興趣再次應徵 Google 呢?」 其實我本來是打算在年底準備得差不多時自行應徵(因為我原先也是規劃一年準備期) 不過當時可能是想說這次居然有 recruiter 主動找上門來,擇日不如撞日 於是就馬上把更新好的履歷寄回去,開啟了第二次(洗臉)挑戰 面試準備: 除了履歷以外,其他項目都是在第一次面試失敗後開始利用下班時間準備的 所以這樣算起來,整個準備期間大概是十個月左右 如果是辭掉工作全心準備的話,聽其他有嘗試過的朋友提大概都是抓三個月 履歷: Google 面試時對於履歷內容的提問比例相對於其他公司算是比較少的 不過也不能保證完全沒有,所以面試前還是必須仔細確認自己寫在履歷裡的內容 確定到時候萬一真的被問起不會直接愣在原地 程式語言:由於四年工作經驗全是在做 Android 開發,我自然選擇了用 Java 應試 不過這裡的重點是一旦選定要用的程式語言就必須要詳細複習那個語言的語法 因為有些對程式碼特別要求的面試官會拿面試者的程式碼追問「為什麼要這樣寫」 (「為什麼 static 」「為什麼不用 float 」「這 call by reference 安全嗎」等) 所以比起「知道很多語言」,「把一種語言用到專精」反而比較重要 Leetcode :近幾年 Leetcode 的題目數量膨脹得相當快 直到我 on-site 面試前已經有大約 400 題,我自己是陸陸續續做了大概 340 題 如果是要挑戰 Google 的話,大致上有幾個利用方向: 1. 訂閱:這不是幫 Leetcode 打廣告(強調) 主要是我自己跟幾個有挑戰的朋友面試時都有碰到被 Leetcode 鎖住的題目 所以即使沒有自己付錢訂閱,有機會的話一定要打聽看看鎖住的題目 2. 參加比賽: Leetcode 現在每週末都有辦比賽,比賽中會放出新的題目 運氣好的話會碰到之後會鎖起來的題目,等於不用訂閱就看到題目了 3. 如果時間有限,練好一定基礎之後就從最後一題往前做 因為越後面的題目通常都是最近去面試的挑戰者回報的新題目 4. 最後就是碰碰運氣了,因為最近回報的題目裡出現賽局或是證 NP-Hard 的題目…… 基本上準備面試時不太可能涵蓋所有類型的題目,所以這種的就只能準備多少算多少了 Code Jam :由 Google 舉辦的程式競賽,官方會在比賽結束後放出題目和解答 有些面試官會拿比賽題目當面試題目 系統設計:就是那種「要你設計一個 Twitter 或是設計一個 Amazon 」的題目 這種題目對於沒有雲端背景的面試者來說確實比較難以下手 但是很不幸的,不只 Google , FLAG 或同等級的大型網路公司面試都很常出這種問題 (有傳聞說掛五年以上資歷的工程師面試 Google 一定會遇到至少一題系統設計題) 我自己也沒有相關經驗,只能在面試前到 HiredInTech 網站上看看要怎麼應對這種題目 那個網站上面很詳細地解釋了該怎麼一步一步地進行系統設計討論 (釐清需求→設計架構→發現瓶頸→改進架構),對於沒經驗的面試者幫助很大 電話面試: 我當時的打算是在電話面試上速戰速決(馬上安排面試,不再花時間準備) 這樣萬一電話面試就翻船的話,我就可以馬上評估要不要準備其他公司的面試 所以其實我這次有在電話面試上小賭了一把,賭電話面試只會出 medium 以下的難度 (聽說運氣很背的話電話面試就會被 hard 級題目洗臉) 這樣以我八月當時的準備狀況應該就足以應付大部分的題目 結果我運氣還不錯,這次碰到經典題大數相加(兩個超出 long 長度的數字相加) 題目本身不難,但是卻碰到一位對語言相當要求的中國面試官 我在程式碼中為了保險起見加的 explicit casting 全被他抓出來問是否真的有必要加 (他本人沒有表達預設立場,純粹是要測試我對 Java 的 casting 規則熟不熟) String 和 StringBuilder ( mutable string )的使用也被提出來討論 幸好最後還是得到面試官認可,安全進入下一關 On-site : 電話面試完四天後,我收到另一位 recruiter 來信通知準備安排 on-site 面試 (聽說第一位聯絡我的 recruiter 只負責到電話面試結束,所以後面交棒了) 不過當時我提了很多麻煩的條件: 1. 由於當時我還需要一些時間準備,所以希望把 on-site 時間排到兩個月後 2. 我跟 recruiter 提出希望能「自費飛去日本的 Google Office 面試」 原因還滿多的,包括臺北人力吃緊,排面試的時間限制非常多(很可能要分兩天) 以及希望能先去看看日本辦公室的樣子、還有同學建議不要去臺北 office 面試之類的 後來喬了好一會兒才終於敲定十月中到日本面試 當天的面試官一共四位,沒有實習面試官;全程以英文(我選的語言)進行 第一位美藉面試官考了 Leetcode #308 ,但是要把取總和的函式改成取平均 當時我一聽到這題心就涼了一半,因為我知道這題會扯到 Fenwick Tree 但是整個準備過程中用到 Fenwick 的題目不到 1% ,所以我沒有練熟…… (原理大致上能解釋,但是沒把握能寫成 code ) 或許是出於保守心態吧,最後我選擇忽略 Fenwick Tree 向面試官提出 naive 和 prefix sum 兩種解法、然後照要求 coding 和比較複雜度 另外由於這題被改成取平均,所以有討論到要以什麼型態回傳(精度)的問題 第二位面試官是個嚴肅的日籍中年工程師,看起來就像一般日本上班族: 1-1. 什麼是中位數?什麼狀況下會考慮使用中位數而非平均數? 1-2. 寫一個函式吃三個數字吐其中的中位數、並附上 unit test 測資 1-3. 你的函式執行一次最多會用到幾個 > 、 < 或 = ?有沒有辦法減少? 為了涵蓋到所有 case ,我在寫函式時直接窮舉了所有可能組合, 結果最多會比到五次,寫完後馬上被面試官用 1-3 (寫完後才問)打臉 最後印象中可以砍到最多只要比三次 2. 設計一個負責收集 log 的系統;這個系統要能收集從多個伺服器傳來的 log 、 並讓工程師調出指定時段內的所有 log 第三位面試官是位年輕的日本工程師,面試經驗比較淺: 1. 看履歷上摸過什麼技術、然後問該技術相關的東西(例如 Unicode ) 2. Road to Freedom (遊戲 Fallout 4 裡的任務) 首先會播一段該任務的攻略 https://youtu.be/v6_cRSULPZ8 (有玩的板友注意有雷)
然後問你:如果給定轉盤上的字 r 和要輸入的密碼 p 你能不能算出最少需要幾步(轉盤轉一格和按中間各算一步)才能輸入完畢? 2-1. 在討論時我提出了「只能逆時針旋轉」和「 r 沒有重複字母」兩個條件來簡化問題 所以面試官要求我寫出可以解簡化問題的 code 2-2. 把簡化條件移除,提出可以解決完整問題的演算法(不用寫 code ) 我在面試前有聽別人提過 Google 喜歡考 DP ,所以當初準備時有集中練習 結果在這裡派上用場,最後用 DP 解出這題,算是今天四場面試裡最順利的了 第四位美籍面試官有帶一位實習面試官,不過實習面試官只是來旁聽的,不會參與討論: 1. Leetcode #66 或 #369 ,就是給個大數要加一(資料型態不限) 2. 給即時通訊軟體設計一個 cache 存放最近有發言的使用者帳號資料 換句話說就是要一個 LRU Cache ( Leetcode #146 ) 結果我當時不知道哪根筋不對, Hash Map + Queue 居然寫成 Hash Map + Min Heap (可能是太緊張只注意到要追蹤 timestamp 最小的那筆吧),而且面試完才發現……

Read full article from [心得] 第二次 Google 面試洗臉心得 at Soft_Job - BWall 熱門 ptt bbs 文章


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts