Contents

2022 上半年軟體求職心路歷程紀錄

Contents

 

本文為 2022 上半年的軟體職缺求職心得分享.

個人背景:

國立科大畢業 + 國外碩畢,除了幾個短期的實習/研究助理經驗跟在校期間修課做的專案以外,其餘沒有特別的表現或成就.在 2019年畢業回台後參加日商集團在台的招募會後有幸錄取應用程式工程師的工作機會,並在旗下的網路銀行工作了兩年。

 

轉職動機:

有感於在IT金融業公司的職涯發展受限比想像中的還要大,加上對於未來的生活規劃及些微家庭因素,最終決定提前結束在日本的職涯生活 ( 原本預計想待滿五年的 XD ) 回到台灣。

 

可能很多人看到這裡會覺得很納悶,為什麽要放棄在國外的發展機會跟生活跑回台灣,感覺在日本過的很開心,放假都可以去好多不同的地方玩。

事實是,即使是現在,我仍然認為日本的生活的確是很爽,儘管消費水平高,但相對的品質也高,不過有於要深入探討離開回台的原因需要另一篇超大篇幅的文章來分享,所以在這裡就不多著墨。( 有時間會再發另一篇文做分享給對日本IT職涯生活有興趣的人 )

 

求職目標:

在剛決定要離職時,並沒有非常明確的目標,所以鎖定的目標除了台灣的職缺外,也同時試著找了日本跟新加坡的職缺.領域方面則鎖定了 DevOps, QA 以及 Backend相關的職位。至於為何會鎖定的方向這麽雜則是因為我在銀行的工作經驗並沒有專精於某一特別領域 ( 講難聽一點就是碰了不少東西,但沒有一項是足以在面試上拿來說嘴的。) 能做的只有盡量回顧先前的工作經驗,練好 Live Coding 及面試節奏,以展現自己的潛力為主。

 

面試準備:

除了必要的履歷更新修改外,還包含對於工程師職位最重要的技術面試, 內容包含但不限於:

Coding : 除了把都快忘光的資料結構跟演算法翻出來重讀之外,同時持續刷題並專注在練習 Coding 面試。( 我覺得單純埋頭刷題跟 Live Coding 面試是完全兩碼子的事,這部分又可以另外寫一篇文 )

OS / Network basic knowledge : 大致上都是複習以前大學學過但幾乎都還給老師的東西,舉凡 context switching, process v.s thread, deadlock, OSI network layers, TCP v.s UDP, how does DNS resolution work 等這些問題都要有基礎的認知並能夠清楚的闡述其運作原理.

如果是面 Backend相關的職缺會問到比較多跟 HTTP, Restful API, Database schema 設計的問題.

Project deep dive : 除了技術面試外,面試官經常透過列在履歷上的經歷與做過的 Project 去做提問來試著了解你,因此除了前一份工作經歷外,還需要把N年前做過已經許久沒維護的專案重新挖出來更新維護.

Behavioral Questions : 相較起能夠快速努力準備的技術面試,這種 cultural fit 面試的準備方式比較難捉模,畢竟這牽扯了一定程度的人格特質與主觀意識。自己的準備方式不外乎:把所有可能常見的問題列出來並模擬紀錄自己會如何回答 ( 回答的內容注重架構跟邏輯性,最重要的是要能夠回答到問題真正在問的點 ), 回顧自己之前的求學,工作上遇到的困難與解決過程,和同事遇到摩擦衝突時如何面對等。

 

講了這麽多,還是先來攤開一下上半年慘烈的面試戰績跟幾場印象比較深刻的面試經驗吧:

累計投遞 : 12間

無聲卡:AWS TW ( SDE ), Amazon ( SDE II ), SmartNews JP ( SDE, Platform ) , CHANGING.AI ( Backend )

OA / TA 被刷 : Netbase Quid TW ( Backend ), Line JP ( SRE )

有面試:Line TW ( Automation ), Yahoo TW ( Backend ), Indeed SG ( SDE ), Foodpanda TW ( SDET ), Microsoft TW ( Support ), Paypay JP ( Backend )

Offer : N/A

 

Indeed Singapore ( SDE )

Indeed 是在決定要轉職後所投遞的第一間公司,當時是 HR 透過 LinkedIn 聯繫並介紹位於新加坡的職缺。因其名氣與著名的面試難度,對於自己轉職或許是個不錯的起手式,因此決定投遞並安排了第一輪面試 。

Indeed的 Recruiter 算是我遇到過數一數二專業的,面試安排好後沒多久便收到了面試準備資料,內容完整地列出了 Coding Interview 的準備技巧和一些非常有幫助的文章連結,會讓你有種:『即使沒有榮幸可以面上,這些仍然對提升自己的面試能力有幫助』的感覺。

Indeed 的面試是委託 Karat ( 一間線上技術招聘服務公司)做第一輪面試的,通過後才會進到下一輪和 Indeed 內部人員面試,如果第一輪的表現失常,公司提供第二次的機會挑戰。

面試流程:

第一輪共考了兩題 ( 難度大概為 leetcode medium ) 以及根據面試者所選主題所問的 General question ( 當時選了 Object-oriented design 及 Software Testing )

想當然而在準備不充足的情況下當然 Failed 了,但也很難得從 HR 那拿到了完整的 Feedback. 雖然 HR 提出要不要再試第二次,但那時已經決定要回台灣也希望找台灣的職缺,因此忍痛拒絕了。

結果:Withdraw ( 放棄第二次機會)

 

Line JP ( SRE )

日本獵頭透過 LinkedIn 直接寄信聯絡,通過電話後才知道是 Line 的相關職缺。雖然知道 SRE 是個非常 Senior 等級的職位,以現在的經歷跟實力上的機率微乎其微,但還是抱著試試看的機會去申請,幸運一點說不定可以經過幾輪面試。

獵頭投遞後的不久便收到了 OA ( 共五題,難度介於 Leetcode Easy ~ Medium ),但由於那時刷題力道跟練度還不足,想當然而在 OA 就翻車了。但比較訝異的是有從獵頭那拿到完整的 Feedback。( 被拒的原因最主要還是因為缺乏對大型分散系統的實務經驗以及 OA中的一題 : Implement a queue 犯了個很蠢的錯誤 )

結果:OA被刷

 

Microsoft TW ( Cloud Support )

當時台灣的 Azure 技術支援團隊正在積極擴編,經由友人的詢問與內推,沒多久便收到上海人資的電話。( 其實以前從來沒想過要嘗試技術支援的領域,一直以來也對這塊很陌生。)因為接洽的時候人還在日本還未離職,人資方面一直在確認能夠 onboard 的時間(感覺得出來真的要人要的很急)。

雖然不是開發職位,但面試關卡也是層層嚴謹,加上第一關的 Phone screening 總共有五輪面試,比較有趣的地方是最後一輪是模擬情境面試來看面對客戶在使用微軟產品遇到問題後要如何去幫客戶解決問題 ( 當然是用英文 XD )。其他的部分則會根據履歷去做很廣泛的提問來確認面試者的技術知識與英文溝通能力,外加一些確認人格特質的 Behavioral questions。

技術方面由於提及了擅長 Java,所以就被問了很多有關 Java 的基礎問題 ( e.g. JRE v.s JDK, JVM options, Java stack v.s heap memory, memory leak ) ,除了 OS 跟網路相關的問題外也問了不少像是 Docker 跟 K8s 相關的問題 ( e.g How to check or monitor a running container ? how to checked persistent volume ? )

雖然有完整的跑完所有的面試流程,但由於回國時間對不上所以最後很遺憾地跟這個機會擦肩而過。

結果:Rejected

 

Paypay JP ( Backend )

一樣是日本獵人頭透過 LinkedIn 聯絡並介紹後得知的機會。Paypay 附屬於日本軟銀集團下,算是日本的第三方支付龍頭,用戶量佔了幾乎日本快三分之一人口,近年來也是積極地在招募海外工程師。

OA : 共三題 ( 兩題 Leetcode medium + 一題 Leetcode hard ) 時間 1.5 hr,當時做的時候最後一題沒辦法在時間內做完,想說應該吹了,沒想到之後收到獵人頭通知說通過 OA 進入第一輪。

第一輪為跟後端 Tech Lead 的技術面試,除了自我介紹跟問及現在團隊的合作方式之外,還問了許多跟 Database 與 API 實作跟測試相關的問題。像是知道 transaction 是什麽嗎?如何優化 DB query 的效能?以及會如何測試新開發的 API endpoint ? ( 這邊真的深刻體會到自己的後端知識有多麽的貧乏 )程式的部分則非常基礎,不需要實際寫 code 只需要講解會如何去實作而已 ( 找出第 K 大的值、找出 unique string )

第二輪是系統設計面試,面試官是澳洲人 ?( 好像是 Merchant Team 的 Lead ),從面試的流程感覺得出面試官的專業度與親切( 比起直接扔出說:『麻煩設計一個 URL shortener 』這種方式,面試官採取的是從履歷去逐步了解面試者經驗並再延伸到系統設計相關的問題,像是會問說:有沒有在 microservice platform 上做過開發? 有做過 API 測試? 那是如何做的? 會不會遇到 Authentication 相關的問題 ? 跟 monolithic 比起來 microservice 的架構可能會有什麽樣的問題? 如果 database transaction performance 太差的話可以如何從架構層面著手來改善效能?

總之就是問的非常廣泛,但又隨時都可以切入探討到很深層的部分。

之後可能面試官感覺得出來我對系統設計這塊非常的生疏也明顯缺乏經驗,所以就把題目的範疇縮減成:如果今天要增加一個使用者可以設定點數回饋使用狀態的功能,從前端API 到後端會怎麽去設計跟實作 ? 資料庫的 schema 需要做修改嗎 ? 如果不存到資料庫只靠 in-memory storage 會遇到什麽問題 ?

這大概是自從 2019 年在舊金山面 Reddit 以來面系統設計被洗臉洗的最徹底的一次吧…. 面試到了尾聲面試官也知道我對這一塊還很欠缺火候,便鼓勵可以再多練習這方面的問題。

第三輪是 Coding + 資料結構和演算法面試,面試官是位台灣工程師 ( 很隨性地在英文自介過後我們便用直接中文面試 )。

資料結構的部分問了:比較 Array 和 Linked List 的差異,如何確認 Linked List 有沒有存在 cycle 等問題,這邊被問了 LRU cache 的實作方式,雖然腦中有印象 Leetcode 做過,但也是非常久以前的事了,只憑藉著微薄的記憶邊講解邊回想的方式去對應。

之後演算法的部分簡單地問了知道什麽排序的方法,這邊我好死不死選了個最不熟悉的 Quick Sort, 在被問了平均以及最差的 Time complexity上回答出包。

最後貼了一題 Leetcode Medium 難度的題目,但因為練習還不充足加上信心已經被前面的面試及問題磨耗殆盡,沒辦法在時間內給出一個跑得出來的解答。( 中間好長一段時間都是很尷尬地盯著螢幕 debug 但遲遲解不出來腦袋一片混亂的狀態 )

想當然最後是在技術輪被刷掉,但也深刻地體會到 Paypay 重視技術的程度以及面後端職缺會遇到的各種問題.

結果:Rejected

 

Line Taiwan ( Test Automation )

在回台灣前透過 Facebook 的技術群組得知台灣 Line 的 QA 自動化測試團隊在招募,抱著前份工作有自動化相關經驗與熱興趣便直接透過官網投遞履歷.回到台灣後在隔離期間收到了 OA測驗.

OA測驗內容除了一題難度大約 ( easy ~ medium ) 的程式問題外,其他都是用來了解面試者經驗與程度的英文問答題 ( 內容主要針對自動化測試開發以及軟體開發流程, CI/CD等 ) OA 交出後過了差不多兩週後收到第一輪面試邀請.

第一輪有兩位面試官 ( 感覺都是 QA 的 lead ),在自我介紹後便請我用英文來回答一些問題( 確認面試者的英文口說 ),之後便是各種廣度和深度的測試和自動化測試相關的提問,主要根據履歷上的經驗去做延伸及提問 ( 例如:在撰寫測試腳本時有遇過 Flaky test 的問題嗎? 最後是如何解決的 )

除了專業知識的提問外,還花了點時間來討論當初在 OA 時所填寫的回答,像是在頁面載入過慢時會如何處理?如果某個元件不存在的話會怎麽 debug ? 在最後 20分鐘考了一題難度 Easy 的程式題,這邊感覺得出面試官注重的是面試者會如何去撰寫 test case,有沒有考慮到所有可能的 edge cases 等.

結果:Rejected

後來等了兩個禮拜都沒有回覆,大概相當於無聲卡.有仔細想過可能的原因有兩個:一個是其實我對於 QA 及自動化測試的專業知識與經驗沒有達到門檻,另一個可能就是年初時投過日本 Line 被刷還在冷凍期 XD ( 未求證過,純屬個人臆測 )

 

Netbase Quid TW ( Backend )

透過朋友介紹的獵人頭得知的機會,為一家專門做數據分析平台的美商.以前曾經在學校修過有關搜尋引擎的課,課堂上也做過類似資料 Indexing & Parsing 的作業,因此對這種大量資料處理的領域也是有興趣嘗試.

履歷送出後便收到了第一輪回家作業 ( 資料處理相關 ),除了一頁文件及範例資料之外其餘什麽都沒有.雖然卯起勁來做,作業本身其實也不是非常困難,但實在是太久沒有做寫扣開發的工作,最後無法在期限內完成回傳.

( 但最後還是在即使期限超過的情況下硬著頭皮做完 )

結果:Rejected

 

Foodpanda TW ( SDET )

最近幾年在台灣積極拓展的外送平台,在回台灣沒多久後新加坡的 Recruiter 透過 LinkedIn 聯繫並詢問有無興趣.自己一直以來雖然都有在找 QA 的打算,但主要還是以有寫程式做開發的自動化或SDET為目標,便把握機會投遞申請.

OA : 共有兩部分 Coding test 和多選題

Coding test 難度大約介於 Leetcode Easy ~ Medium 左右,多選題則涵蓋了各種有關測試以及自動化相關的問題,特別是自動化的題目算是問得很仔細,還包括了一些版本控管,軟體開發流程相關的題目. 寫完交出的當下蠻意外地直接秀出做題的分數 ( 分數不太理想 )

第一輪面試

面試官為新加坡的資深QA工程師,為全英文面試.除了一題難度 Easy 的程式題之外,主要還是著重於履歷上描述前份工作的測試相關經驗與知識.面試中被問了很多測試的相關術語與 Selenium 核心 API 的使用情境, Relational Database 的基本問題 ( e.g. 知道 joint 嗎?Truncate 和 Delete 的差別等 ) ,Git 版本控管 ( git fetch vs. git pull 等 )

第二輪面試

直接跟台灣的技術主管做英文面試,這應該算是我第一次跟台灣面試官做全英文的面試.除去自介和個人背景經驗了解之外,也問了些有關工作上協同合作的情境行為問題 ( 像是跟人發生衝突時如何面對與解決 ) ,專案上遇到困難時的解決方式等.

What’d you do if you have a conflict with your colleague ? ( From Joma Tech )

結果:Rejected

老實說在跑到最後一關後被拒還是讓人挺難受的.仔細檢討了原因大概可能有兩個:1. 對軟體測試與自動化測試的經驗( 特別是行動裝置的 )與知識仍然不足.2. 在行為面試關卡被問到:『在工作上遇到的最大困難是什麽?』的時候,我回答了語言溝通.在前份工作由於四周同事幾乎都是日本人,自己當時處於完全不會一句日文的情況下,經常要花精力在『如何達到有效溝通 ( 提前準備投影片,列出關鍵詞,回家狂讀日文等 )』這件事上.雖然這的確是我在前份工作上所遭遇到的最大阻礙,但感覺在面試技術職時面試官期望聽到的有可能是比較偏技術上的挑戰與問題,而不是比較工作溝通上的問題.也不排除以後可能會有面試官想說:『都在日本工作了這會算是挑戰嗎? 在日本不是本來就會用到日文?』

這有點像是你今天問一個游泳選手說比賽中最有挑戰性的是哪一部分結果對方回你憋氣。

所以之後的面試如果被問到『遇到的困難與挑戰』這類的問題,我都會盡量避免提語言溝通這方面.

( 如果讀到這有人好奇說一句日文都不會是怎麽進去的? 這是個有點長的故事,有機會的話會再發一篇文好好聊聊 XD)

 

總結:

在回國休息一陣子求職的這段期間應該算是近三年來的人生最低潮期,求職到處碰壁,一面拼命刷題拼命讀書,也擔心自己之前的工作經驗無法銜接到其他公司的技術職位,同時疫情也讓不少公司或職缺陷入人事冷凍的狀態.

值得慶幸的是也因為經歷過在國外求學與工作的過程後,讓我對『你喜歡什麽?想過什麽樣的生活?想成為怎麽樣的人?』這些問題有更深一層的探討,並得知自己想往哪個方向去前進.

儘管過程很艱辛,但比起剛畢業還毫無頭緒像台空燒的引擎般,還是稍微有一那麽一點動力再繼續堅持下去.