
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。
澄清問題
- 時間區間是start開始還是end開始?
- 若為 半開區間
[start, end):end == next.start可複用同一間房。 - 若為 閉區間
[start, end]:end == next.start視為衝突,需要新房間。 (面試時需要先問清,若未明確,通常默認半開區間。)
- 若為 半開區間
- 輸入是否可能為空?是否存在
start == end的會議? - 時間是否有上界/是否為整數?
- 輸入是否已按
start_time升序?
思路
按開始時間處理會議,用一個小根堆存“正在佔用的房間的最早結束時間”,每來一個新會議:
- 若堆頂結束時間
<=新會議開始時間,說明有房間空出來了——彈出並複用; - 否則需要新開一間房——直接把新會議的結束時間壓入堆。
用一個變量記錄堆曾達到的最大大小,即所需房間數。
複雜度:時間複雜度 O(Nlog N),空間複雜度:O(N)。
Google SWE Intern VO 第二輪
這輪面試包含BQ環節和兩道coding題。面試官是位美國小哥,人很nice,簡單寒暄後直接進入正題,整體節奏挺舒服的,下面簡單分享一下。
BQ
- 講一個你從項目失敗中學到重要經驗的例子?
- 如果你和同事在技術方案上意見不合,你會怎麼處理?
- 描述一次你主動幫助團隊成員提陞技術能力的經歷?
Coding
題目:可變範圍求和 這題要求設計一個數據結構,既能查詢數組某個區間的和,又能支持更新某個元素的值。
思路:用線段樹來解決最合適,把數組構建成二叉樹結構,每個節點存儲子節點的和,這樣查詢和更新都能在O(log n)時間內完成。
Follow up:
- 除了線段樹,你還能想到其他方法嗎?請比較一下它們的優劣。
- 如果這個數組非常大,並且需要頻繁更新,你的線段樹實現在內存和性能上可能會有什麼瓶頸?如何優化?
整場下來,順利通過! 在Amazon、Meta、微軟、Google等等北美大廠OA和VO都很熟悉,都能順利通過。如果你也需要Google面試助攻、面試輔助、OA代寫等服務,請與我們聯繫。