2024 Google Summer STEP Internship — 實習面試準備心得

Student Training in Engineering Program (STEP) Intern, 2024

Yi Chen
11 min readMay 9, 2024

前言

在申請的時候翻遍了超多心得文、準備文,但關於 Google STEP Intern 的資訊相對較少,因此決定寫這篇心得文,希望能幫到後續的申請者們,那麼我們就開始吧!

Disclaimer: 筆者並非演算法競賽出身,也自認為程式實力沒有到非常厲害,因此以下心得僅供參考,希望可以給沒有方向的人一點想法,但相信大家都有適合自己的準備方式!

什麼是 STEP?

STEP 是 Google 的一個暑期實習計畫,在每年的 11、12 月開始招募,以大一大二的資訊工程背景之大學生為優先,約莫錄取 10 位分配到不同的 Team,進行為期 10–12 週的實習,若表現良好則在隔年可以直接錄取 SWE(Software Engineer) Intern Program。

目錄:
零、申請時程
一、Online Application
二、Technical Interviews Preparation
三、Technical Interviews
四、結語

零、申請時程

Hiring Process 在投遞申請後會由 HR Team 寄信詳細介紹:

Step 1. Online application
Step 2. Information Collection Form
Step 3. Technical Phone Interviews X2
Step 4. Hiring Team Review
Step 5. Team Match
Step 6. Offer
Step 7. Onboarding!

我的具體時程如下:

🏠回目錄 / 🔽繼續閱讀

一、Online Application

Resume

由於是外商公司的履歷,我是用 LaTex 來寫,推薦直接使用 Online Editor overleaf,網路上也有很多模板可以選擇適合的作使用。

履歷落在一頁以內,大致可以分為 Education, Experience, Honors & Awards, Leadership, Skills,以及電話和 Gmail,記得在學歷的部分要附上預期畢業的年月,並且在描述經歷時可以代入 "Accomplished [X] as measured by [Y], by doing [Z]." 更加具體化。

因為我是第一次寫投外商的履歷,參考了很多網路上的文章,下面就分享給大家我覺得不錯的一些文章和影片!

參考資源:

Cover Letter

非必填,但我當時還是有認真寫了一份,不確定對後續申請有沒有影響,大家可以自己斟酌(雖然我認為所有能展示的機會都不要漏掉是最好的!)。

參考資源:https://offerbang.io/resource/173

Information Collect Form

這是在提交申請後會收到的表單,需要填寫個人資訊以及下面的資料:

  • Available Date:會填寫暑假最早可以開始的日期以及最晚結束的日期,至少要有 10 Weeks 哦!
  • 面試時間:會以週為單位讓你複選方便面試的時間,也可以說哪幾天不行(有期末考或其他事情之類的)
  • 成績單(非必要,但沒有給的話在 Follow up 也會請你提供),應該在 Hiring Team Review 會稍作參考

🏠回目錄 / 🔽繼續閱讀

二、Technical Interviews Preparation

Google 的 Technical Interview 就是所謂的白板題,因為是 Online Interview,會使用 Google Meet + Google Docs 來面試。

實際在面試時是改版後的 Google Docs,在寫程式沒有什麼不方便之處,因此個人認為不用特別在 Google Docs 上做練習(縮排很大不方便)
只要避免在編輯器上使用自動補全以及像 Copilot 自動提示的功能就好。

準備的部分我是練習 LeetCode,大約保持 Easy : Medium = 1 : 2 的比例來練習,比較不會因為一直寫 Medium 而疲倦,最終在面試前一個月,期中與期末考之餘寫了 150 題 + 複習。

LeetCode Solved Problems

個人刷題方法如下:

  1. 看題目:先想資料範圍、資料儲存形式、正負與大小會不會有影響、加總、乘積會不會超過 INT_MAX 等,這個是當下要跟面試官討論的部分。
  2. 想暴力解:最簡單的方法就是直接 Brute Force,一開始可以跟面試官先提出這個方法,並給上時間複雜度 Big-O,再提出可以怎麼優化(提出的時候可以給自己想優化解的時間,也比起直接提出最佳解還要更循序漸進,心態上也會因為已經有一種解法而比較穩)。
  3. 想優化解:搭配一些資料結構、演算法、預處理等,看能不能得出比暴力解還更好的解法,例如使用前綴和、Two Pointer、DP、剪枝、排序+二分搜、單調隊列等,記得講完後也要分析 Big-O。
  4. 20 min 若想不到怎麼寫就看 Solution:對我來說想不到應該就是對該題的知識點不夠,因此我會直接看別人提供的 Solution,以及搭配 NeetCode 的題解。
  5. 若自己解完也會看 Solution:通常我在解完題目後會再看 Solution 參考更有系統,或更有效率的方法,也會看 NeetCode 的題解讓自己吸收講述題解的能力。

刷題建議:

  1. 不要一開始看到題目就開始邊寫邊想,而是先思考時間複雜度可以用什麼演算法以及時間複雜度會是多少。
  2. 變數命名要好看一點,避免使用 a, b, c 等無意義的命名(即便你可能在平常上機考習慣這麼做),在協同開發時讓程式碼容易理解是很重要的事情,因此用有意義的變數可以讓你的程式更加明瞭。

刷題使用題庫

  • New Year Gift — Curated List of Top 75 LeetCode Questions to Save Your Time:這個題庫我除了 Premium 的題目以外都有寫完並且二刷,個人覺得滿推薦在時間沒有很多時可以先刷這個題庫

由於 Top75 貼的都是連結不太好紀錄有沒有寫過,方便起見我當時有整理了 Notion 表格,若有需要的話可以自行 Duplicate 做使用~

🏠回目錄 / 🔽繼續閱讀

三、Technical Interviews

Disclaimer: Google 規定不能透漏面試題目,因此只會分享大概的流程和心得。

第一次面試(11:00–11:45,45 mins)

一面時非常緊張,再加上忘了開暖氣(當時人在新竹,非常地冷🥶),因此在一開始就瘋狂發抖,面試官提出問題後,先問了是否有負整數,但被丟回「若有負整數會有什麼影響嗎」(原先是為了爭取時間想解法而問的,因此馬上就慌了),以及在後續我問的問題幾乎都會被問回來「我提出的這個問題會有什麼影響」,因此在問問題的時候也要知道自己提出的問題是為了確認什麼情境而問的,才不會被面試官問住。

在提出解法之後面試官便說可以開始寫了,最終寫完已經快到 45min 了,因此在稍微加了一些可以優化的註解後便結束面試。

一面我自認為發揮不太好,身體在抖+很緊張,面試完有些崩潰,但馬上要振作面對下一場面試,因此開了暖氣、吃個午餐睡個午覺之後就靜坐等待二面(心態很重要,不能讓二面被一面的情況所影響)。

第二次面試(14:00–14:45,45 mins)

二面時心態相對來說穩定了很多,資料用什麼方式來存是可以由我們向面試官提出的,因此大家可以用自己平常習慣或比較擅長的資料處理形式來跟面試官們說,最終我有寫出一個最佳解的程式,並且正確分析時間複雜度,確認沒有更好的解法,時間也到了 45 min 就結束了。

面試總結

面試前,記得確認所有環境都準備好,太冷開暖氣、太熱開冷氣,耳機要充飽電,確認網路沒有問題,電腦通知要關掉(我在面試時電腦有跳出通知),手機記得開靜音勿擾。

在面試時,有些面試官一開始會先請你自我介紹,簡單自我介紹就好,我認為留越多時間給白板題越好。面試結束後,面試官通常會給問問題的時間,這個部分據面試官所說不算在評分裡面,可以問自己好奇的問題,但個人認為還是要準備至少一個提問。

我的兩個面試都是用中文(當時在 Information Collection Form 有問要幾場中文幾場英文),難度我認為都在 Medium 左右,基本上對資料結構要滿熟悉的,並且時間複雜度一定要會分析,刷 LeetCode 對我來說幫助也滿大的,在寫程式的架構上進步很多。

Host Match

What is a Host Match ? 如果有超過一個以上的 Team 選擇你,那麼你可以選擇一個;如果只有一個 Team 選擇你,那你就是拿到該 Team 的 Offer;如果沒有任何 Team 選擇,那麼就不會有 Offer。

在這裡值得一提的是,比起讓所有 Host 都覺得你還不錯,不如讓單一個 Host 覺得你超不錯,因為這關是依據志願序做填寫,因此只要有一個志願序在最前面,就可以獲得 Offer,否則要看前面的 Candidate 如何選擇,由於 Candidate > Headcount,所以有風險沒被選上(即便你在很多 Host 的前幾志願序)。

在這個階段需要填寫 Intern project preference questionnaire 表單,總共有三個區段要填:

  • Programming language skills:有分成最擅長、第二擅長、其餘擅長的程式語言,並且有對應大概寫了多少行 Code 的 Range。
  • Existing skills and experience:此部分有很多 Computer science disciplines 可以做複選。
  • Preferences:此部分跟上一個部分幾乎一樣,只是從你會的改成你 prefer 的

填完表單之後就等待 Host Match 的消息,Host Teams 會選擇各自的志願序,等待所有人都填完志願序才會開始。

今年的 Host Match Timeline 從過年延至 3 月底延至 4 月初,在經過煎熬的等待後,於 4/16 收到了 Phone Call,告知我位於一個 Team 的 Top Priority,以及該 Team 的主要內容,確認興趣匹配後便成功拿到 Offer!

🏠回目錄 / 🔽繼續閱讀

四、結語

一直到現在還是對於拿到了 Google 的 Offer 沒有什麼實感,在面試完後又等了整整三個月才收到確認的消息,因為自認為在演算法上面跟競程選手比起來真的差了很多,覺得自己非常幸運可以得到去 Google 學習的機會,若有機會或大家希望的話再分享暑期實習的生活和心得!

謝謝在我身邊一直鼓勵我的人,以及謝謝交大的土地公!!!

希望我的分享能夠讓對有意申請 Google STEP Intern 的人有所幫助,也可以讓大家知道 Team Match 真的要等很久,難免會很焦慮但請不要太過擔心!祝看到這裡的人都可以如期通過申請🌟

若有任何問題也歡迎到我的 IG 問我哦!謝謝看到這裡的你💕

--

--