請更新您的瀏覽器

您使用的瀏覽器版本較舊,已不再受支援。建議您更新瀏覽器版本,以獲得最佳使用體驗。

人際

聽說你最近在刷題?工程師必定遇到的關卡

換日線

更新於 2021年01月26日10:15 • 發布於 2021年01月19日10:20 • 半路出家軟體工程師在矽谷
聽說你最近在刷題?工程師必定遇到的關卡
聽說你最近在刷題?工程師必定遇到的關卡

這篇文章,要介紹的是軟體工程師在應徵美國知名科技公司時,進入面試階段後,必會遇到的「資料結構及演算法」(Data Structures & Algorithms)考試難關。

由於美國多數科技公司,在這項「必考」的入職測驗上都行之有年,「題庫」也在大家口耳相傳下越積越多。因此如今許多工程師在計畫求職或轉職前,也都會花上好一陣子時間「刷題」。

在此要先強調一下,我現在並沒有在為了準備轉職「刷題」(這樣講絕不是怕很多同事會看到我的文章 XD),但周遭不乏在求職時「刷」數百題、甚至題庫中每題都練習 2-4 次的人──我很佩服他們為此投入的時間及毅力,也自知無法做到,有小孩後更連「刷一遍」都難。但說實在的,我覺得大家好像太過度強調刷題的「刷」,來回刷很多遍考古題雖然比較心安,卻若沒有藉此培養出正確的解題邏輯/ 習慣/ 步驟,未必真能在臨場應試時得到高分。

因此,本文將從個人和朋友們的經驗出發,分享一下「資料結構及演算法測驗」的準備方式, 如果你想要了解「有效率」的刷題方式,或覺得自己實在無法刷數百題很多遍,歡迎往下閱讀:

一、 3 步驟確定「考題要問的是什麼」

先簡短介紹一下我自己半路出家成為軟體工程師的「刷題」經驗:2015 年上完 Coding Bootcamp 到找到工作,我大概做了 60 題左右的 LeetCode 問題; 2016 年底找工作時比較認真,大概共完成了 100 題左右。

2015 年上完 Coding Bootcamp 後,我陸續有一些電話面試, 每天可能會有 1~3 個電話面試, 所以既要研究公司、依照職缺來做面試的複習,同時因為面試前端相關的職缺,所以也有一部分的精力在前端的資料複習。關於資料結構及演算法(Data Structures & Algorithms) 的練習,我大概僅維持一天練習 1-2 題的步調;到了 2016 年底的面試,因為還要上班,所以基本上也只有晚上有時間,可能一天只能練習 1 題,假日有比較多時間才可以多做幾題。在如此有限的練習機會下,我因此培養出自己一套「解題原則」:

首先,在看到題目的時候,我會先確保自己「確實了解題目的意思」──畢竟在真正面試的時候,第一步通常也是確認面試官真正想問的問題,和我們的認知是否一致,不要花了一大段時間回答後,才發現一開始的理解及假設就是錯誤的。因此,我通常會在一看到題目時,立刻判斷並寫下:

1.題目給予的input 有什麼;
2.格式是什麼;
3.(題目的)期望結果(
desired output)又是什麼?

確認好 input & output 後,再來思考題目可以用什麼類型的資料結構或演算法來解。在實際面試的時候,我通常會向面試官說明自己會先就一個「大概可行」的方式來做解答,如果他 / 她覺得沒什麼問題的話,我再做後續的優化。

在我開始有一些思路後,也會先寫下 pseudo code,用來大致說明我的解法會是怎麼樣。每個步驟和面試官確認沒有問題後,才會正式開始寫 code 。

二、「卡住」時不用擔心,重點在思考過程

當然,有些時候也會遇到「不論怎麼想都解不出來」的困境:如果是自己練習的時候,我大概在 「卡關」15 分鐘後,才會開始看一些討論,嘗試學習別人的思路;如果再花 10 分鐘還是解不出來,才會參考別人的解法;即使看完別人的解法,我還是會用自己的 code 再實現一次。

如果面試中卡住的話,則務必先不要擔心「評價」,請儘快和面試官討論:我會把我對題目的理解、可能的解法直接告知面試官,同時也說明在這個情況下自己不確定的部分有哪些,讓面試官在適當的時候可以給予提示。許多人會擔心「求助面試官」會導致考時成績低落,實則不然:一般來說,公司還是希望有順利的面試經驗,面試官也都願意在溝通正常下給予協助。畢竟真正到了職場上,遇到難解問題時同事互相討論、協助,都是再正常不過的事情。

自己練習完題目之後,我會再寫出解法的空間及時間複雜度(Space & Time Complexity):通常正式面試時也會詢問這個部分,所以每個練習後最好也練習「自我歸納」一下。如果我發現自己的解法可能不是太理想,也會再參考不同人的討論,研究更優化的解法──接著再練習自己寫出不一樣的解法。

有些比較棘手的問題,我甚至可能會寫出 2 到 3 個解法,並比較彼此的優缺點。 

三、重點不在「多」或「快」,而在解題的邏輯思路

在之前密集準備求職面試的時候,我買了一本筆記本,每次寫完問題後,我會寫下自己在哪一天寫了哪一個問題,並用很精簡的方式總結問題及解法;隔天要做下一題之前,我會先看一下前一天的問題,嘗試回想自己是否可以再次想出大致的解法。如果不行的話,重新看我自己的總結並做上記號,隔天再做一次同樣的步驟,直到我可以順利複習出「解題的邏輯思路」為止。 

如果實際參加面試,不論是電話或 onsite,面試完後我會再檢查自己遇到的題目是否和過去做過的題目類似:如果有的話,就檢討我的思路在面試中是否清晰及正確;如果沒有的話,我是否利用正確的觀念來解答。面試結束後,會花時間在盤點及複習,從面試中的題目和過往的練習做統整。

你可以看到我的練習方式,都不強調(速度)「快」、(解題)「多」。這是因為我希望在做完問題後,可以對題目有很深的理解,所以花很多時間在整理、複習與確認上──複習及思考的次數多了,才能真正把題目真正想要考的「觀念」融會貫通。

畢竟儘管題庫中有千百題,但到了實際面試時很難真的遇到「原題」──重點在我們對資料結構及演算法的理解,以及遇到難題時如何應對的思考過程。 

以上就是我個人在「資料結構及演算法測驗」上的準備方式,由於之前的系列文章好像沒有特別提到這塊,所以特別再寫出來分享。

當然,「條條大路通羅馬」,每個人準備面試的方法、習慣都不太一樣,沒有絕對「正確」的模式。我也不是每次可以動輒收割 5 到 10 個以上 offer 的「大神」,所以本文僅供你參考,請斟酌評估最適合自己的學習方法。 

文末分享:知名演算法題庫

我在 2015 、2016 年準備面試的時候,有許多練習演算法的網站;但到了今日,似乎 LeetCode 和練習演算法的關係,已如同  Google 和搜尋一樣,大部分準備面試的人都在用 LeetCode 來「刷題」了。 

綜合周遭朋友意見,LeetCode Premium 最大的好處就是可以看到「問題」和「公司」的標註(即這個題目來自哪家公司)——以過去拒絕我 2 次的 Google 為例(XD), LeetCode 上面就有 925 道題目,被大家回報有在 Google 面試中看到(925 道好多啊!@@)──當你正要 phone or onsite interview 的時候,可以相對快速地鎖定你要面試的公司進行練習。

我當初也想在自己的粉專上,直播訪問在 LeetCode 工作的這位朋友,近一步探討矽谷的「刷題」趨勢,可惜目前這位朋友還沒有意願。如果大家對這個題目有興趣的話,歡迎請在文章下方留言, 讓她可以看到大家的意願,加強她現身說法、和我們分享經驗的動力(XD)。 

2021 年,如果你要找工作的話,祝你轉換順利,拿到許多理想的 offers!如果你有什麼面試準備的技巧及心得,也歡迎留言分享。 

執行編輯:蔡文晴
核稿編輯:張翔一

【延伸閱讀】

●工程師要怎麼進矽谷的四大軟體巨頭 “FANG"?——「不廢話,先刷 900 道考古題再說!」
●【矽谷求職戰】為什麼資歷差不多,你辛苦求轉職,他卻被「獵人頭」直接面試?

※本文由換日線授權報導,未經同意禁止轉載

加入換日線LINE好友,每日接收全球議題包

0 0
reaction icon 0
reaction icon 0
reaction icon 0
reaction icon 0
reaction icon 0
reaction icon 0

留言 1

  • 🐞👉 Quan Sheng Wang
    這種模式不適用台灣 台灣連這種都會考慮用背的
    2021年01月21日05:29
顯示全部