不藏私拆解軟體工程師technical interview,讓你狀態顯示沒在怕!

要加入龍頭科技公司成為軟體工程師,是很多人的夢想和日思夜想;號稱軟體工程師界的面試天堂路,聞風喪膽的technical interview原來不是很會解題就可以?也不是解題很快就包中?那些藏在面試官心中的名字,到底是不是你?臥底美國天字第一號高科技產業的作者,把多年觀察化成文字告訴你「實際上的technical interview長什麼樣?」、「平常要怎麼mock interview才有效呢?」

不藏私拆解軟體工程師technical interview,讓你狀態顯示沒在怕!

在疫情還沒降臨前,我很幸運地曾到幾間科技公司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!整個冗長的面試過程中,運氣絕對是不可或缺的要素!

Photo by Michael DeMoya / Unsplash

準備好了,那就開始吧! Onsite Interview Starts

(避免文章太長我們直接進入正題)

面試官進門,他會請你用一分鐘自我介紹。不過並不是每位面試官都會請你自我介紹,有些也只是為了幫助你放鬆才請你自我介紹。(但當然還是要好好準備,畢竟是門面)

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

實作前請思考思考再思考

在尚未implement前,多花一些時間在思考edge cases絕對是值得的投資!(例如:input是空array、input是null、數字會不會小於零等)edge cases可以想的越多越好,當然也要跟面試官確認output,避免實作時才發現未考慮的條件而亂了手腳,甚至太緊張而想不到如何修改自己的程式。如果所有情況都考慮到了,實作也不會佔太多時間。edge cases可以寫小小的在旁邊,包含input和output,最後實作完可以用來驗證你的程式。

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

One of our designers presents a UI wireframe to the CEO.
Photo by Tool., Inc / Unsplash

確認完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較花時間與版面,如果有面試官糾結你格式是否正確更是浪費時間!所以建議只要用英文依順序條列你會做的事即可。

別忘了面試官還在,實作也請動動嘴巴繼續講話

終於要實作程式啦!

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

實作完後可別急著說你做完了!一定要用test cases遍歷你的程式(遍歷=test coverage 100%):用test cases走過你每一行程式,看每走完一行你的test case與各變數會變成什麼。想一個中等規模的正常例子,前面寫下來的edge cases也要拿來用。這個步驟類似單元測試,仍算實作的一部份,所以遍歷的時候若發現程式錯了,修正是可以被接受的!因為例子是你想的,錯誤也是你自己發現的,修正當然也是合理的。

Photo by Amy Hirschi / Unsplash

你以為的結束不是結束,實作完別忘了這個

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

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

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

面試官最後的問題:「你有什麼問題要問我嗎?」前面討論了這麼多技術問題,後面搞不好還有下一關,所以這邊提供大家一些operation或culture相關的問題:「面試官在公司負責什麼?」、「公司怎麼run project的?不同組之間如何運作?」、「requirements通常都怎麼來?工程師可以參與requirements的設計嗎?」、「How’s life at company?」

Photo by Christina @ wocintechchat.com / Unsplash

請內心強大面對結果,實力、運氣外還得講緣分

影響面試結果的因素,除了你面試前的準備,面試官也是關鍵因素!面試官願不願意引導你解題、面試官是否熟練於引導面試者解題、面試官個人對簡單和難的定義、甚至是面試官是否想和你工作的個人主觀意願,都會影響你的面試結果。如果你問題都答出來了,最後還是被刷掉,也不一定是你能力的問題,單純就是運氣不好。提升自己的心理素質、找到適當宣洩負面情緒的管道,絕對是支撐你走完每段漫長的面試之旅的必備技能。希望大家都運氣滿滿!(是在恭喜新年好???)

認識本文作者:Mia Chen

在高雄長大,高中畢業就開始漂向遠方的遊子。工作時是理性的工程師,下班後是情感豐沛的追劇少女。喜歡聽別人的故事之餘,也在想著自己的故事可以如何幫助別人。

執行編輯:I Cheng Huang
核稿編輯:Sophia Cheng

《NEX媒體實驗室》為NEX Foundation台灣未來基金會提供給讀者與作者的意見交流平台,所有言論不代表NEX媒體實驗室與NEX Foundation台灣未來基金會立場。本文章內容僅反映作者個人意見,並經作者保證文章內容並未侵犯任何人之權利或違反相關法令。