Google SWE Intern 兩輪新鮮面經 | 非常順利的通過兩輪Code面試

675Views
Google SWE Intern 兩輪新鮮面經 | 非常順利的通過兩輪Code面試

Google SWE Intern 的面試就2輪面試,主要考察算法設計部分,重點考察數據結構和算法基礎,包括動態規劃、圖算法、樹操作、排序搜索等經典問題。常見題目有最大子數組和、LRU緩存實現、二叉樹LCA、序列化反序列化等,需要熟練掌握時間空間複雜度分析。 Google 面試用自家的text editor,沒用Google Doc;建議mock的同學用text editor 練習。

Google SWE Intern VO 第一輪

題目:Google Company有一堆會議室預訂記錄請求,每條record有start_time和end_time。返回最少需要多少room。

澄清問題

  1. 時間區間是start開始還是end開始?
    • 若為 半開區間 [start, end)end == next.start 可複用同一間房。
    • 若為 閉區間 [start, end]end == next.start 視為衝突,需要新房間。 (面試時需要先問清,若未明確,通常默認半開區間。)
  2. 輸入是否可能為空?是否存在 start == end 的會議?
  3. 時間是否有上界/是否為整數?
  4. 輸入是否已按 start_time 升序?

思路

按開始時間處理會議,用一個小根堆存“正在佔用的房間的最早結束時間”,每來一個新會議:

  • 若堆頂結束時間 <= 新會議開始時間,說明有房間空出來了——彈出並複用;
  • 否則需要新開一間房——直接把新會議的結束時間壓入堆。
    用一個變量記錄堆曾達到的最大大小,即所需房間數。

複雜度:時間複雜度 O(Nlog N),空間複雜度:O(N)

Google SWE Intern VO 第二輪

這輪面試包含BQ環節和兩道coding題。面試官是位美國小哥,人很nice,簡單寒暄後直接進入正題,整體節奏挺舒服的,下面簡單分享一下。

BQ

  1. 講一個你從項目失敗中學到重要經驗的例子?
  2. 如果你和同事在技術方案上意見不合,你會怎麼處理?
  3. 描述一次你主動幫助團隊成員提陞技術能力的經歷?

Coding

題目:可變範圍求和 這題要求設計一個數據結構,既能查詢數組某個區間的和,又能支持更新某個元素的值。

思路:用線段樹來解決最合適,把數組構建成二叉樹結構,每個節點存儲子節點的和,這樣查詢和更新都能在O(log n)時間內完成。

Follow up:

  1. 除了線段樹,你還能想到其他方法嗎?請比較一下它們的優劣。
  2. 如果這個數組非常大,並且需要頻繁更新,你的線段樹實現在內存和性能上可能會有什麼瓶頸?如何優化?

整場下來,順利通過! 在Amazon、Meta、微軟、Google等等北美大廠OA和VO都很熟悉,都能順利通過。如果你也需要Google面試助攻、面試輔助、OA代寫等服務,請與我們聯繫

author avatar
Alex Ma Staff Software Engineer
目前就職於Google,10餘年開發經驗,目前擔任Senior Solution Architect職位,北大計算機本碩,擅長各種算法、Java、C++等編程語言。在學校期間多次參加ACM、天池大數據等多項比賽,擁有多項頂級paper、專利等。
END