拆解軟體工程師面試過程:Onsite interview和實作時要注意什麼?

拆解軟體工程師面試過程:Onsite interview和實作時要注意什麼?
Photo Credit: iStock

我們想讓你知道的是

號稱軟體工程師界的面試天堂路「technical interview」,不是很會解題就可以通過?任職高科技產業的作者,將分析technical interview長什麼樣子?平常要怎麼mock interview才有效?

文:Mia Chen

在疫情還沒降臨前,我很幸運地曾到幾間科技公司進行onsite interview。以下和大家分享我的面試經驗,希望能為大家解惑。也希望疫情趕快結束,讓onsite interview不再是艱難的virtual onsite。

Onsite前要先過五關斬六將

在onsite interview之前,通常還有兩關考驗:

Online Assessment(OA):在線上軟體根據題目要求寫程式,通常有三題到八題不等,且每題都會有幾十個test cases,自動測試你的程式是否達成題目的要求,只要通過所有test cases就算通過。沒有面試官,但有時間限制。個人覺得這階段的體驗最差,因為沒人討論,再加上剩餘時間會顯示在畫面上,眼看時間一點一滴流逝,心理壓力很大。

Phone Interview:面試官打電話給你,在線上共同的編輯器解題目,通常會考一或兩題,每間公司限時不同,大約都是45至60分鐘。你可以在自己的紙張上寫自己的思考過程,或是列出可能的edge cases,但也因為面試官看不到,他比較難知道你的思考邏輯或給你其他思考方向。所以你必須不停地講話,讓面試官跟上你的思考,或是在共同編輯軟體上盡可能以最簡單的方式表達你的想法。

有些公司只有OA或只有phone interview,甚至有些人很幸運直接onsite interview。

進入重頭戲:Onsite interview

面試官進門,他會請你用一分鐘自我介紹。不過並不是每位面試官都會請你自我介紹,有些也只是為了幫助你放鬆才請你自我介紹。

面試官接著會開始講題目,但不一定會把所有需求或限制都講完(這同時是考驗你是否思慮周到的一環)。建議你可以先用你自己的話講出你理解的題目,並舉一個最簡單且有input與output的例子,跟面試官確認你的理解無誤後,再開始想其他edge cases。

在尚未implement前,多花一些時間在思考edge cases絕對是值得的投資(例如:input是空array、input是null、數字會不會小於零等)。edge cases想得越多越好,當然也要跟面試官確認output,避免實作時才發現未考慮的條件而亂了手腳,甚至太緊張而想不到如何修改自己的程式。

如果所有情況都考慮到了,實作也不會佔太多時間。edge cases可以寫小小的在旁邊,包含input和output,最後實作完可以用來驗證你的程式。

在思考的時候,也要記得告訴面試官你需要時間思考,不要莫名就陷入自己的思考,把面試官晾在那,畢竟面試官也在思考:「如果這個人未來是我同事,會不會很難合作或溝通?」

確認完edge cases後,你要先描述你的解法(切勿直接實作程式):演算法或是資料結構的關鍵字可以講在最前面,例如「find a cycle in the graph」、「store the data as linked list」、「solve the problem by using Stack」、「use Kruskal's algorithm」,讓面試官清楚知道你會做什麼,也向面試官傳遞「你對題目的了解是否正確」的訊息。如果面試官沒有阻止你,通常就是在對的路上。

描述解法細節時,可按順序條列你程式裡會做的事(寫關鍵字就好):用來紀錄你的想法,以確保你不會實作時太緊張而忘了下一步,也用來取代pseudo code向面試官傳遞想法的功能。因為pseudo code較花時間與版面,如果有面試官糾結你格式是否正確更是浪費時間。所以建議只要用英文依順序條列你會做的事即可。

iStock-1255928059
Photo Credit: iStock

實作的重點:邊寫邊講,每實作下一行前請確保面試官跟上你的進度,當你偏離面試官心目中的正解時,他才能適時地給你引導,或是提醒你這行有更多edge cases要處理。你可以想像你們在pair programming,隨時注意面試官給的回饋。

實作完後可別急著說你做完了,一定要用test cases遍歷你的程式(遍歷=test coverage 100%):用test cases走過你每一行程式,看每走完一行你的test case與各變數會變成什麼。想一個中等規模的正常例子,前面寫下來的edge cases也要拿來用。

這個步驟類似單元測試,仍算實作的一部份,所以遍歷的時候若發現程式錯了,修正是可以被接受的。因為例子是你想的,錯誤也是你自己發現的,修正當然也是合理的。

實作完的其他注意事項

接著面試官會問你time/space complexity,這裡就沒有什麼訣竅,倒是刷題的時候需要多練習(這是刷題時很常被忽略的步驟)。分析複雜度是考驗你對程式的理解程度,你是否知道這個程式的瓶頸在哪:哪裡需要花最多時間執行、哪裡需要花最多空間儲存。知道瓶頸在哪也才知道如何改善程式。

你知道瓶頸在哪,面試官也就順理成章地問你:「你要如何改善?」這時你要思考其他解法以改善你的程式,通常就是用別的資料結構存取更多資料以空間換取時間。如果面試還有時間,面試官可能會請你修改你的程式來實作改善方案,也會問你新解法的time/space complexity。

在某些面試官眼中是nice to have,可能是你太強寫太快,面試官只好多給你一些挑戰,解不出來也無傷大雅;但某些面試官可能認為題目很簡單,改善方案本就是他測驗的一環,解不出來或是時間不足無法解到會有些許扣分。


猜你喜歡

Tags: