Leetcode 刷題 pattern - 美國軟體工程師求職有趣經驗


Posted by Po-Jen on 2020-12-15

前言

又是一年的年末了,先祝大家聖誕節快樂 & 新年快樂!

雖然 3D Deep Learning 入門 系列還有一篇,不過就讓我明年再放吧,因為我覺得用這篇當作一年的結尾頗適合。

前陣子應一位大神學長的邀請,跟一些學弟妹們分享了之前找工作的經驗,我後來想想這些經驗也許可以幫助更多人找到理想的工作,於是把投影片截出來,再寫一篇文章,以後有需要的人,我可以直接跟他分享這篇,會比看投影片有更深入的理解。

我從 2019 年的 6 月開始準備,最後是 2019 年底拿到理想的 offer,過程中有一些有趣的經驗,我把這些經驗摘要出來,所以比起那種很詳細的教學,這一篇比較不連續,而是我對自己求職過程中,重點經驗的記錄。

刷題

累積解題實力

我在剛開始刷題的時候,先花了一些時間,上一畝三分地查了很多經驗總結,想辦法找出看起來最適合我的方法,後來讓我找到這篇 - 我是如何拿到硅谷顶级科技公司的10个offer的。這篇最吸引我的地方就是,作者號稱只要掌握前 150 題,就能攻克所有面試。哇賽,這樣要刷的題不就很少(我最後找到工作時還是刷了 400 題左右,要只刷 150 題,就能把解題能力推廣到所有面試都能克服,還是不太容易,也許對於應用力超強或有程式競賽經驗的人來說可以吧)!於是我就開始兩個月專心刷題的生活。

我投影片裡面提到的 刷題筆記連結,裡面還有不少好資源可用。

發現 Leetcode 解題 pattern,也開始寫文章分享

以方法上來說,我是一個不太安分的人,我會一直想能不能有更省力的方法(大概是因為懶?),結果讓我發現了 educative.io 上面的 coding interview pattern 課程,看到一個新世界,於是我就開始學習,也很興奮地想把這個方法分享出去,所以才產出了 Leetcode 刷題 pattern 這系列的文章(延伸閱讀有附上文章連結)。

我本來就很喜歡寫文章分享知識經驗,所以有好幾篇我寫得很開心,雖然出發點只是想要分享,但在過程中讓我又複習了一遍觀念,而且也因為要把概念寫清楚,會再好好學懂一些原本不很通的地方。裡面的 pattern 我在三個以上的面試中應用過,而且寫起來超順。(但是 pattern 也容易讓人落入背答案的陷阱,我在 Leetcode 刷題 pattern - 一週年特典 有論述,大家使用起來還是要注意一下)

讓自己習慣面試

有一天在通勤去學校的路上,我一邊看著 Youtube 上找工作的經驗分享,結果一邊就給我聽到了影響我很深遠的方法 - 定期模擬面試。

講者說的故事是,他有個讀書會,裡面有三五好友一起會定期模擬面試,有個朋友本來有的面試機會,都泡湯了,但那個朋友還是繼續練習。結果有一天,突然有 recruiter 問那個朋友要不要去面試,然後他就去了,也因為平常很習慣面試的感覺,所以即使沒幾天可以準備,他還是表現得很好。

於是我開始上 pramp.com 跟陌生人練電面、找朋友去圖書館練 onsite interview,我覺得在這過程中,我確實習慣了 think out loud (就是把思考過程都說出來讓面試官知道你的思路),而這讓我在面試的時候,可以不用分心去想我有沒有 think out loud,把心力集中在解題上。

讓自己盡量享受刷題的過程

刷題是一件很漫長的事,不是你用力刷一個禮拜就結束了(除非你超級幸運神速拿到 offer,或你是 ACM 大神可以完全無視刷題),所以讓自己能盡量享受過程,才能走得長遠走得開心。

我個人很常需要在不同方法中切換,保持新鮮感,所以試過很多方法:

不過如果你是習慣用一種方法好好走到底的類型,那也很好,找到適合自己的方法是最重要的。

投影片中的 TripleByte 連結在這 ,只要通過他們的面試,他們就會幫忙你直接去一些合作的公司 onsite,我後來是還沒用到,不過如果有急需找工作的朋友可以用用看,反正也免費。

履歷

履歷的話我沒有太多東西可以分享,我覺得重點就是不要想做到完美才開始投,只要足夠好就可以開始了,然後在過程中不斷打磨出更好的版本。然後因為公司都會想找 skillset 盡可能符合職缺需求的人,所以客製化履歷是不可少(我當初有 5 個比較常用的版本)。

釋放你的心力與腦力,聚焦在重點

在找工作時,你可能還有很多其他事情要顧,例如課業、刷題、跟 recruiter 來回聯絡、生活起居大小瑣事,所以如果能用一些方法降低你的腦袋負荷,就能提升其他方面的表現。所以我當時有紀錄自己投履歷的資訊,這樣我就不用花額外的腦力去記我什麼時候投了什麼公司、狀態如何、要不要再跟進寄信給 recruiter 等等。另外,我在 onsite interview 前還可以把職缺要求再複習一遍,總之我覺得這樣做很有幫助:

一個很重要的觀念是,把很多障礙你的因素移除掉,你的表現自然就會提升,我們常常都覺得要多做一點什麼,才能達到更好的狀態,但其實你只要改進拖累自己的習慣,就能發揮意想不到的力量。

這一點在我最近讀的一本書 - 怦然心動的工作整理魔法:風靡全球的整理女王╳組織心理學家,首度跨國跨界合作 裡面得到印證,作者 Marie Kondo 提出的核心概念是,如果你能讓留下的物品(包含非實體的東西,像 email、smartphone apps、甚至時間分配、需要認真做的決策)都是必要、或能讓你更愉快的,那麼你的生活品質就會大幅改善。

如果你喜歡看 Netflix,可以去看 Tidying Up with Marie Kondo,第一集就能看出上面提到的核心概念,能夠怎麼改善外在環境跟心境,但假設你想實踐並體會箇中好處,書中還有很多值得學習的細節。目前我的書桌、房間、冰箱、手機 app 都優化過了好幾輪(非實體的部分還在逐步實驗中),確實減少許多生活中的小摩擦(例如以前手機裡 app 的位置安排很隨意,要找某些常用的 app 常常需要兩三個步驟,現在整理過後幾乎都一個步驟就能找到),這自然讓我的心理狀態更加清明、也提升了注意到各種小摩擦的敏銳度,於是能再進一步優化。

口說無憑,附上優化前 v.s 優化兩輪之後的書桌比較(主要差別是,以前會把沒有在使用的筆記本或雜物放在桌上,現在是要用到才拿出來,不然就放回到該物品專屬的位置上):

另外附上優化後的手機首頁(可惜沒拍到優化前),我只留下常用跟不時會用到的 app,一個月以上沒打開過的一律刪除,首頁只放幾乎每天會用的 app,這樣就很少需要滑到另一分頁找 app。我也把各種社群軟體的通知都關掉,只留下紅色 badge,把使用習慣調成我想看才去看,而不會被通知打擾,這讓我使用手機的感覺變得非常單純、少了很多小小的不適感:

哈哈,看起來扯有點遠,不過我覺得改進自己的整體狀態,其實才是找到理想工作的根本,如果你太在意刷題,也許可以停下來稍加思考;因為在我看來,刷題的本質就是為了改進你在面試時,解題的狀態;而改進自己的整體狀態,自然會讓刷題的效率提升。還有,若要細究,面試時,面試官一定也會觀察你整個人、判斷你適不適合一起共事。

發揮你的熱情

在找工作的時候,一方面技術能力要到位,另一方面就是,你對這間公司的熱情能否傳遞出去?

我記得我在 career fair,在 PlayStation 攤位前爆長的隊伍等待時,突然想到,recruiter 應該也很累吧,要跟這麼多人聊天,想辦法吸收各種資訊找出好的人才,如果我能讓他們覺得好玩一點,也算是功德一件?說不定也能讓我的履歷更被看見?

於是我打開 iPad,連上 Youtube 訂閱+開啟小鈴鐺(不好意思,聽太多自然脫口而出),開啟我之前跟組員做的遊戲 demo 影片(感恩讚嘆以前修網路與多媒體實驗,助教隆哥的要求),在輪到我的時候給 recruiter 看,結果他非常欣賞,也跟我在 LinkedIn 上互加好友。我當下很驚訝,沒想到有這樣的效果。

另一個小故事:我第一個 onsite intreview,是去 Microsoft。我在電面的時候雖然沒把程式寫完,但電面結束後,我花了點時間完成(也寫了幾個 test cases 並可以跑過)寄給面試官。面試官很快就回我信,跟我說他欣賞我解決問題的熱情。我想,就算這不是拿到 onsite 機會的決定性因素(因為電面問的問題不是 leetcode 題,感覺面試官也沒有預期我要寫完,只是想看我的思考過程跟程式架構設計),但起碼展現了自己願意多花時間,來得到進入這間公司機會的心情。

不過,以上能發揮熱情的點也不是天天有(我也有很多間的面試經驗普普通通),也未必每間公司都能做到盡善盡美,所以不需有壓力。當你遇到你真心想要進去的公司,你就會開始嘗試一些原本可能想不到的作法,這樣就好了。

總結

今天跟大家分享了我求職過程中,對於各種方法的探索跟心得(當然,還有很多細節或失敗的嘗試沒有寫出來),這篇最主要的目的是鼓勵大家透過各種探索,更了解自己、觀察出適合自己的方法,讓找工作這件事情變得更加好玩。如果你更享受這個過程,你的整體狀態就會越好,也就有更高機率得到好的結果。如果你想更深入探討怎麼提升求職的整體狀態,也可以看看我之前寫的 如何成為專家 - 心態篇(用心讓學習變好玩) 以及 如何成為專家 - 體力篇

感謝各位讀者這一年來的支持,希望未來能持續分享,寫出越來越深入、具有洞見的文章。老師再見,同學再見,大家明年見!

最後放個 Zoox 車車的帥圖跟 reveal 影片宣傳一下(有興趣加入的朋友歡迎到 zoox.com 投履歷):

點擊下圖會連到影片:

15 minute oral presentation at IROS 2020

延伸閱讀

  1. 美國軟體求職心得 (電腦視覺/自駕)
  2. 美國軟體求職 FAQ (電腦視覺領域)
  3. Leetcode 刷題 pattern - Two Pointer
  4. Leetcode 刷題 pattern - Sliding Window
  5. Leetcode 刷題 pattern - Next Greater Element
  6. Leetcode 刷題 pattern - Fast & Slow Pointer
  7. Leetcode 刷題 pattern - Breadth-First Search
  8. Leetcode 刷題 pattern - Merge Intervals
  9. Leetcode 刷題 pattern - Cyclic Sort
  10. Leetcode 刷題 pattern - Two Heaps
  11. Leetcode 刷題 pattern - Top K elements
  12. Leetcode 刷題 pattern - Topological Sort
  13. Leetcode 刷題 pattern - Bitwise XOR
  14. Leetcode 刷題 pattern - 一週年特典
  15. Google Software Engineer 實習經驗
  16. 2020 秋季找工作分享 new grad (這篇有專門給女生的 tips,個人覺得寫得很不錯)

#Interview #Software Engineer









Related Posts

[day 01] this & bind: 你不能不知道的

[day 01] this & bind: 你不能不知道的

ASP.NET Core Web API 入門教學 - 同時取得父子資料

ASP.NET Core Web API 入門教學 - 同時取得父子資料

ES6 語法中有什麼新東西?

ES6 語法中有什麼新東西?




Newsletter




Comments