2022 新鮮人 軟體工程師面試分享- 研發替代役 (Synology, Nvidia, Trend Micro)

PL
Apr 6, 2022

--

背景

119學碩,大學資管會計雙主修,大學有延畢一年。資科雖然沒拿學位,但必修都有修完,連帶上了幾堂選修。碩班直升資管所,碩論做虛擬化相關。大學有跟著做資管專題,工作經驗了話大學有找了一個寫app的研究助理兼差,大四大五有在外商做一年半前端實習。大部分技能點在web上面,大學和碩班雖然修過不少ML相關的課,不過後來覺得沒什麼興趣,就沒有找相關工作。

原本預計當完兵再開始找工作,但是年前朋友貼研發替代役的資訊給我,認真研究了一下目前研發替代役的制度,還有爬了下之前當替代役的文,覺得似乎是一條可以試試的管道。目前台灣研發替代役需要當一年半,可以用高中大學軍訓課折底。期間薪水都是看公司決定,大部分都是比照正職辦理。部分外商的研發替代役福利會少。

稍微確定制度之後就開始找公司,找公司對我來說大概有三個要求,一個是職位要是做純軟體。第二個是預期的pay至少要能達到一定的期望,不然去當兵之後在找工作就好。最後一個是要在台北,不然在外面租屋很浪費錢。其實這三個條件篩選之後剩下的公司也不多,分別是Nvidia、Trend Micro、Synology 和 QNAP。投的職位基本上跟前後端的都有丟,不過有進面試的都是偏前端。可能跟中間有面試官說,履歷寫的經驗太偏重前端有關係(?

面試前準備

我大約是在1月底二月初開始準備,主要有分刷題跟專業知識複習。刷題的部分用Leetcode,我是點選Leetcode裡面有個study plan(底下藍色框框處點選),可以選data structure跟algorithm分別下去寫,裡面會幫你分門別類,然後規定好每天要刷的主題,基本上照著做所有的重要內容都會複習到。因為當時還在寒假,一邊寫碩論一邊刷題,刷題的速度大概是一天7–10題,在收到第一個面試之前大概刷了140題,中間陸陸續續到最後關面試題數大約170題。

專業知識複習了話,我覺得大概包括OS跟網路,但我沒有花很多時間複習,因為我研究的關係,我對於OS裡面process跟memory的章節十分熟習,synchronization之前有實作過,有大概複習了一下mutex跟semaphore的差異這樣而已。網路了話因為上學期才當網路課的助教,對於課本內容都還記得,花了一點時間複習一下TCP而已。程式語言跟Web開發相關的知識,平常在寫專案的時候遇到問題都還蠻認真去研究,所以沒有特別花多餘時間去複習。可能因為職位偏前端的關係,這次幾乎沒有被問到很難的問題。

面試流程

最後有收到面試的有三個公司,分別為Nvidia, Trend Micro, and Synology。以下大概講一下面試心得。

1. Nvidia — System Software Engineer — Geforce Now (RDSS Intern)

面試流程:三關技術面試,各約一小時。

第一關應該是台灣的工程師。整關全英文考兩題白板題,一題是Leetcode medium,另一題因為我投的是Web相關的職缺,所以就是考官提出一個要求,然後實作一個class出來,比較像是在考design pattern。不過全程用英文,而且考官說不用一些有auto-complete的IDE,我選用vim(雖然vim可以設定auto-complete就是)。第一題是一題graph的題目,大概5–10分鐘寫出一個次佳解,後續就是跟考官來回討論如何optimize,跟算時間空間複雜度,約莫20–30分鐘的來回修改之後,但考官表示可以了不過還有地方可以optimize。接下來就直接進入第二題,第二題是實作題,難度了話如果平常大部分都用框架或是library了話有可能會寫不出來,但如果有用原生api操作過DOM而且了解event loop了話,還算挺容易。我用TypeScript花了一點時間,一邊講實作的思路一邊跟考官討論實作細節,還有可能的use case跟memory相關的問題,略為修改之後就過了。最後考官表示這題對你太簡單了,然後就進入中文閒聊環節。面完晚上就收到二面通知,因為下一面的考官在美國,所以喬時間花了一點時間。

第二關的面試官是美國的主管(台灣人),好像前兩年轉調去美國。先英文自介然後用英文閒聊了一下。我完全沒準備英文的情況下要講什麼,這邊其實小尷尬,因為他一直問我還有沒有問題或是要補充,我都說沒有。後面考了一題DP,不過是easy程度。面試官口頭要求要時間空間最佳解,我用bottom up的方式寫了一個最佳解,然後解釋一下時間空間複雜度。主管請我設計一些test case,之後就進入閒聊環節。面試官好像是7 8年前的研發替代役出身,後面就一直留在公司。之後大概也是當天晚上就收到三面通知。

第三關面試官是台灣的工程師,除了剛開始用英文自我介紹之外都用中文。先針對履歷部份問一些問題,之後就開始有關專業知識的問答。先問了OS問題,例如stack heap差別、parallel concurrency差別、有沒有用過mutex、semaphore等等。然後問了一些JS的問題,例如解釋asynchronous跟synchronous差異、event loop是什麼等等。這邊有個部分蠻有趣的是,在解釋synchronous跟asynchronous之後,被問能不能不要從軟體的角度改用生活的例子舉例,突然有點卡住想了很久只想出一個很爛的例子。然後問了一些履歷的問題之後就進入coding環節。是一題 medium的題目,內容是binary search的變形,雖然我有刷過這題但我已經忘記內容了,他先請我解釋binary search,接下來實作一個binary search,然後丟一些test case測試。接下來寫題目的時候其實有一點卡住,不過在面試官的提示下,大概15–20分鐘就寫出最佳解。之後就是針對履歷繼續問問題,因為我有個side project做跟加解密有關,請我解釋一 下symmetric跟asymmetric 加密的區別,還有public key encryption的use case。後面就是閒聊,順便問了一下碩論。

當天晚上HR打電話來,詢問一下期望薪資,然後說主管還想要跟我面談一次,不是正式的面試。後面約了一次面談,基本上就是主管想提醒我一些研發替代役要注意的事項,好像他們以前福利不太好,這幾年才慢慢改過來,還有研發替代役在Nvidia其實算是intern的一種,不是正職,雖然過程的薪資跟福利比照正職,但不是真的員工。主管就表示應該不會有面試了,之後就照著人資跑流程。

之後按照HR發的信跑流程,體檢完之後一週收到電子offer,距離口頭offer相隔大約兩週。

面試心得

感覺得出來Nvidia的HR很積極,每一次面試後,幾乎當天晚上或是下午就會約下一次面試時間。在我投遞履歷當天晚上8 9點就打電話來要約第一次面試。技術面試的部分也蠻扎實,第一關完全不問履歷直接全英文寫兩題真的是有點驚訝,後續的面試就有慢慢適應過來。題目大部分都是Leetcode medium程度,平常有在刷題應該不會太難回答。專業知識大概問OS跟Web相關的問題,平常開發的同時,如果有認真研究當下遇到的問題,應該都還算簡單。看得出來每一次面試時間還蠻精準的壓在剛好一小時。

面試結果

Offer Get.

2. Trend Micro — Cloud Engineer

面試流程:線上測驗,一關線上面試(後續應該還有,但我被刷)。

投完履歷之後隔一個工作日收到線上測驗。線上測驗平台用 codelity,有三題。個人覺得難度大概是一題easy,一題easy — medium,然後一題medium程度。我前兩題大概15分鐘寫完,後面那一題寫了40 50分鐘。感覺應該是全對吧(?雖然後來沒機會看到成績。做完測驗大概隔一天人資就打來約時間,約了之後好像因為面試主管喬不攏,延後了一週。

線上面試有兩個主管,其實面試過程偏閒聊,會從你履歷裡面寫的作品跟實習經驗問問題。專業問題了話,前面被問了有沒有使用AWS、GCP之類的問題,我雖然有用過但都停留在最基礎的例如開個VM在裡面跑個server之類的,這邊問到蠻多問題都不太會。後續就是詢問關於Web開發相關的一些問題,這邊比較有印象就是有問client-side rendering, server-side rendering跟static rendering差異跟優缺點,還有問了PWA是什麼。其他就是例如在團隊扮演什麼角色之類的問題。把履歷上面所有經歷都問完之後,就是主管開始介紹分別介紹他們負責的產品,印象中一個是偏向消費者,一個是偏向公司內部產品這樣。然後就結束面試,整體時間大約一小時。大部分技術問題都有回答出來,也不會太刁難,如果沒聽過的他也會跟你解釋一下。

隔天HR打來follow up,順便詢問了一下替代役的名額的事情,因為我有注意到趨勢名額偏少,所以想確認一下名額,HR說名額會優先給之前曾經在趨勢實習的人,所以名額還要確定。

面試心得

測驗題難度適中,不會太難。應該是Codelity的題庫隨機撈,我事後有偷偷查題目,貌似查不到。線上面試過程也還不錯,面試官都很友善,也沒有遇到特別難回答的問題,大部分都是針對履歷的問題做延伸。面試官對於自己的產品跟開發流程介紹的非常清楚,也會針對如果未來要進來做個工作做蠻詳盡的解釋,蠻可惜最後收到感謝信,希望是因為替代役名額的關係吧。

面試結果

一個月後感謝信。

3. Synology — Product Developer (雲端前端軟體開發)

面試流程:總共4關,3關技術,1關人資。

ptt傳說中的白板大魔王,覺得必須來試看看。

第一關是兩個工程師,先問了履歷上面的經歷跟專案,因為投的職缺跟前端相關,就是問一些JS的基礎問題,有熟悉什麼框架和有沒有寫過unit test?用過什麼unit test框架、有沒有用過redux、redux的核心概念是什麼,還有詢問TypeScript熟悉度,考一兩題TypeScript語法,有一題比較有印象沒回答出來是,如果TypeScript無法確認某個型態然後要消除linter error要怎麼解,我第一個想到的是直接as any大法,考官表示可以用instanceof或是typeof的去消除。最後考一題我覺得是easy — medium的題目,我用遞迴寫出最佳解,解釋了一下思路之後,考官表示沒什麼能改進的,就請我休息一下,他們要討論一下。大約20分鐘之後,第二位考官進來。

第二關基本上也是先聊天,然後面試官表示有看了一下我履歷上寫的side project,他們表示他們也有在做類似的產品,有詢問我一些實作細節,還有討論當初實作上有遇到什麼困難點。然後花了蠻長一段時間解釋我的實作細節,主管也提了一些問題,問了一下如果要重新設計可能會如何設計,因為這個side project跟加密有點關係,最後請我解釋一下SHA、AES跟CBC mode是什麼就結束了。接下來就是一題medium的題目,一開始從時間複雜度O(nlogn)的解寫到O(n)的解,然後又要求空間要O(1),寫完一個解面試官就會要求分析時間空間複雜度。我中間有一段時間其實有點緊張導致整個放空,不過後來在面試官提示之下有寫出最佳解。後續追問為何在某些情況的case為什麼不用考慮的時候卡住,面試官好像為了節省時間就直接解釋了一下。後續閒聊了一下就結束了。原本以為涼涼了,隔兩天之後收到HR要約現場面試。

現場面試有兩關,第一關是HR,基本上就是聊聊天,問一些HR會問的問題。大部分跟履歷有關係。

第二關主管面試,先針對上一次的解題做一些follow up問題,大該花了20 30分鐘用反證法證明那個演算法是對的,不過中間還是有一個地方主管不太滿意,覺得假設不夠嚴謹,應該能用更嚴謹的方式表達,後續因為時間問題就直接進入白板題。白板題也是medium的題目,快速寫出一個版本之後,被指出有兩個edge case沒處理到,之後稍作修改之後就完成。因為時間還有剩,主管開了一個線上編輯器,把白板的code輸入之後,丟一些測資進去跑。一兩個小bug修了之後就跑過測資了。不過這一題寫的不是很漂亮,丟了一堆邏輯炸彈在裡面,最後修改的時候自己都有點不好意思,因為真的是蠻醜的。最後就是針對履歷問一些問題,大部分就是想知道之前的團隊開發的流程,還有有沒有接手過大型專案的經驗,也問了一些碩論的事情,因為主管看不太懂這題目在幹嘛,請我解釋了一下。後面就是一些關於公司的閒聊,諸如這個部門在做什麼,負責維護的產品有哪些等等。結束之後,主管表示因為還有人要面試,所以不會馬上知道結果。

面試心得

白板題我後來有回去查,都是medium題目。我覺得算蠻硬的面試,無論在履歷、專業知識和程式各個方面都有被檢視到,蠻感謝每個面試官花這麼多時間跟我討論問題,還有了解我以前的經驗,就算最後沒有上也學到蠻多東西,知道自己還有蠻多不足的地方。不過還是覺得好不容易面到最後一關,但沒有收到offer還是覺得小可惜。

面試結果

目前無聲卡。

總結

刷題部分,幾乎每一間公司都有考白板題,如果不是神人而且距離資料結構跟演算法有一段時間了話,建議還是要刷一下題目練習手感,考的題目大部分都是Leetcode medium程度。追求效率了話剛開始可以用easy練練手,之後都以medium為主。題目數應該是盡量將每個題型都刷一次會比較好,即使遇到的白板題沒寫過,也至少有個概念可以跟面試官討論。程式語言感覺沒什麼限制,我這幾次面試的時候,因為職位需求主要都是TypeScript,所以面試官都給我TypeScript的interface,但我其實超久沒寫了,我都直接問能不能用Python實作,沒遇到什麼太大的問題。

經歷相關的問題蠻注重專題跟實習經驗,幾乎都會問說在專題裡面扮演的角色,所以專題還是得認真做一下。實習經驗基本上會照著你寫的東西去問,所以建議在履歷上把實習經驗或是專題有用到的工具全部列出來,還有把自己真的負責且參與的東西都條列式寫出來,這樣比較有機會讓面試官可以從這邊去延伸問題。我面試前有特別整理一下我的github ,把我做的比較完整的兩個專案寫在履歷裡面。兩個專案都有被問,其中一個因為當時要交接的緣故,有非常詳細的交接文件,有被其中一個面試官稱讚寫得不錯。所以平常自己開發的時候,可以盡量寫一些文件幫助其他人了解你的專案。

面試一直都是一個很不錯可以用來檢視自己的程度的方式,這次也多少是想看一下自己目前的程度才去丟履歷。遇到的所有面試官都很友善,每一關都像是朋友一樣在討論問題,雖然面試前都會很緊張,但真的開啟鏡頭開始講話之後,緊張感就會慢慢消除。現在就是祈禱能順利畢業,8 9月準備上工囉。

--

--