文/Kipper
我因為出國遊學又去當兵,因此畢業後拖了快一年才開始找工作,我2023/08畢業,一直到2024/06才退伍,退伍後開始刷題+投履歷,在這科技寒冬僥倖拿到一些的offer,覺得自己很幸運,所以來分享一下自己的心得,希望能幫助到有需要的人。
▲2024 群暉/Garmin/訊連軟體工程師面試心得(圖/freepik)
本人畢業於中央資工學+碩,大學在學校單位當過網管(主要維護,不太需要開發,偶爾寫幾個簡單的小功能,使用PHP+JS),也在新創實習過(C#開發簡易API,用來parsing封包訊息,其實就是字串拆解而已XD),碩班有去聯發科暑期實習,論文做的是和Arm相關的,常常碰開發版,所以其實面軟韌比較吃香?
一面有兩關,是使用線上會議的方式,兩關我都是先自我介紹,我有準備投影片,介紹論文、實習、Side project等等,接著會考一 些基本的OS(Thread vs Process之類的)、計組的問題,再來才是白板題,白板題的難度大概是easy~medium,一題和linked list有關另一題和圖有關(BFS、DFS),兩關都有被考follow up,follow up都不算有完全解出來,大概的方法有出來,但來不及寫,linked list的follow up改了一些些題目要求,然後要我用原本的code改一改,圖的話則是問有沒有辦法更省空間。
二面則是實體面試,一關是主管,一關是HR,,主管這邊因為是去現場,我就沒用投影片自我介紹了,於是就多了很多時間來解白板題,應該算是解了兩題,第一題和區間總和比較有關,我先用brute force的方法解出,之後再自己想到更快的方法,最後主管問說能不能更快,時間複雜度大概是由O(n²)->O(n)->O(log n),我就不會了,主管有引導,但他說不用寫出來,跟他說我的想法就好,最後應該是有符合他的要求,就下一題了,這題的難度應該算是medium,但是後面log n的解法,真的要寫我可能也寫不出來。第二題跟stack比較有關,有點像是算Postfix的那種題目,但時間不太夠,所以也是講想法而已,並沒有寫出所有程式碼。HR的部分就是問問一些以前合作的經驗或是以前碰過的難題等等的BQ,應該都能直接套STAR大法來解。
最後,因為當天大主管沒空,所以我的口頭offer隔一天才發,其實我當下覺得涼了,因為網路上分享都說是當天發,我以為我在第四關被刷掉了。還好真的只是大主管沒空,所以隔天才發。
解白板題的時候最好先講講自己想怎麼解,然後和主管確定方向沒問題再開始,因為我有朋友就是解到中間才發現方法不對,雖然最後有解出來,但是就被刷掉了,另外自我介紹的內容要很有把握或是複習一下,因為有些面試官會問得很細,太久沒碰真的會忘,還有純軟多少都會談到OOP的部分,像我軟工、OOP和SQL的部分比較弱就答不太出來,常使用的語言有最好熟悉Class相關的使用方法,就算平常沒用,另外,只刷leetcode解題我覺得稍嫌不構,原因是只會練到解題的部分,這個語言的一些特性或是專案常用的寫法都沒辦法練到,不過這部分可能就要靠平常參與專案才能累積經驗。
推薦文章>>Google/Shopee/Synology/AICS/MixerBox/Canonical 等 8 間軟體工程師面試心得
三次面試都是線上,一面主要是向主管們自我介紹,有要求要介紹自己參與過的專案,並且主管也會針對這些專案做出題問,一面的時候,主管也會介紹了部門負責的項目,然後比較特別的是,Garmin會做簡單的英文測試,因為會需要與國外的同事合作,可以事先準備英文自我介紹或是有把握能隨時用英文聊天就沒問題了。
二面的話,主要是技術相關的問題,有一份考卷要寫,內容與JAVA、OOP、SQL有關,不過這部分線上作答的話,並沒有螢幕錄影,所以有沒有查資料,就屬於自由心證的部分了,交卷之後稍作休息後,就會開始和主管面試,會先檢討考卷內容,並且主管會一題一題問你原因,以防作弊,再來就是程式題,我被考Sort相關的題目,當下有點錯愕(太久沒寫了,都用內建的sort()函數XD),當下有寫出來,後來面試結束發現自己其實有寫錯哈哈,除了一題程式題外,還有一題類似系統設計的情境題,給一個情境,然後設計對應的Class和方法,我覺得這就比較難,除非有特別練過系統設計。最後,會和HR聊天,大概聊一個小時,主要也都是一些BQ和HR的專業問題。
三面的話就是對大主管,主要談談對公司有沒有什麼問題,我和主管那時候聊了蠻多公司產品相關的問題,或是公司的一些background,順便問了一下apple watch和garmin watch怎麼選XDD。
我一開始以為我應該沒機會了,因為系統設計的部分,我解的一蹋糊塗,但是最後還是有幸拿到offer,運氣真的很好,Garmin的考試比較不像是leetcode這樣子寫一個func就好,而是需要寫出整個程式來執行,所以平常都只用leetcode練習的人要稍微回憶一下IDE怎麼用,另外,這邊考的SQL和Design pattern我完全不會,事後才開始惡補,才發現要從寫embeded system轉成寫後端真的還有好多要補足的部分。
投遞履歷的時候,有看到一個線上程式測驗的連結,就順手做了,印象中有三題程式,語言的話忘記有沒有限制了,我是使用c++,題目本身不難,大部分麻煩的地方都在於處理input,因為input都是string要自己轉成適合的data structure來裝,難度應該都再easy~medium左右,印象中都是直觀解就能解出來了,最後主管有跟我說我三題有兩題全對,一題有一個edge case沒過。
一面的話會先線上測驗,包含英文與類似性向測驗那種人格分析,接下來會與主管面談,包括自我介紹,針對做過的專案提問,也有一些OS、計組等等的基本問題,主管也會介紹部門相關的事,最後是提問階段。
去年在遊學時,其實就有機會拿Offer了,但是我那時還沒當兵,也還不想一回國就先工作,再留停去當兵,說實話就是還想再面面其他公司,因此拒絕了HR當時的提案,退伍後,主動聯繫當時面試我的主管(他有留email給我),並拿到面試機會,這次的面試就不用再測驗,直接與主管面談,也有拿到offer,雖然最後都沒有去,我很抱歉Orz。這邊的面試算是很經典,程式題算是中規中矩,問題也都不會太難,如果平常就有再接觸寫程式,資結演算法上課的時候都有好好學,OS、計組稍微複習一下應該不會有太大的問題。
我平常就有刷Leetcode的習慣,不過主要都是以Daily為主,後來有針對不同的主題來刷,面試的時候大概是刷了600題左右。刷題的分類主要參考這個github,後來也刷了leetcode top interview 150,其中一定會有重複的題目,重複的題目會希望做到秒解,不熟的題目也可以透過重複刷來增加熟練度,刷到後期最好是看完題目,就可以知道大概用什麼方法來解會比較好,也就是看完題目大概就知道題目的分類,而不是說看完題目馬上就能解,因為每題解法上可能還是有些差異,前期刷題的時候,卡太久就可以先看解答,了解一下作法,之後再回來刷這題,看看自己是不是學起來了。
另外,解題時可以練習不要用submit看哪個過不了,或一直輸入測資並執行方式來debug,可以試著自己想想看edage case時程式會怎麼執行,程式碼在哪邊會不會出錯,這對解白板題有很大的幫助,多數時候解白板題,並不會讓你用測資在那邊試來debug。
然後,leetcode的周賽也可以打一下,雖然現在的排名越來越沒參考價值,因為越來越多人用抄的了,不過可以練習一小時內寫出前三題,第一題easy應該都是秒殺,接下來兩題medium,一題盡可能在20分鐘左右解出來,然後最後一題hard,我大概100次才解得出來1次吧,不過賽後的檢討也非常重要,最好確認一下自己的方法時間複雜度是否是最佳解,或是有沒有更好的方法,hard題也可以多少看一點,越看才越有機會在未來自己解出hard。
最後,雖然面試準備的過程是漫長且辛苦的,每天都在刷題地獄,但是持之以恆,很快就會發現自己的成長,而且在拿到offer的時候,一切的辛苦都會值得的,祝大家都能進到自己心目中理想的公司。
※本文由 Kipper 授權勿任意轉載,原文《2024 純軟面試心得分享 (群暉/Garmin/訊連)》