2022 菜鳥軟體工程師面試心得
文/Dylan
前言
趁著最近面試完之後,來寫一下自己第一次找正職的心得及面試過程,希望藉由文章來分享業界需要哪些技術以及為何需要這些技術,另一方面是希望多年後的自己回來看這段歷史時會發現自己已經進步了許多。
在準備面試到面試的過程中受到了許多幫助,感謝以前的教授及工研院同事願意當Ref. Check,也感謝各間公司的面試官在面試過程中給我的幫助。
首先先介紹一下自己的背景 :
1. 學歷 : 四中EE學士
2. 技能 :
[程式語言Programming Language]
C、C++、Javascript、Java、Python
[專長Skill]
Nodejs(Express)、Linux System Programming、ML/DL(Tensorflow&Keras)
[其他Other]
TOEIC700、JLPT N2、一些創客松比賽經歷以及工研院實習
HTML、CSS
在介紹各間公司面試之前,先大致整理一下各個職位需要的技能
共同技能 : 資料結構、物件導向、作業系統、Git版控處理
1. 系統工程師(包含多媒體) : C/C++、CPU/GPU處理、ARM
2. 後端工程師 : Java、資料庫、Go、CI/CD、K8s&Docker
※重要程度高的越靠前,越靠後的為某些職位要求的技能。
※另外技能並不是像學校考試,而是有點概念知道哪時候要用什麼技術、分析這個技術能帶來什麼優缺點。
※面試時面試官想要的是你多與他交流,分享彼此想法與一同討論如何解決問題,這樣才能讓Offer get機率上升。
※另外在投遞心儀的公司之前,最好先找幾間公司磨練面試技巧,這個比擁有什麼技術更為重要……
[ 後端工程師的業界需求 ]
業界以Javascript(簡稱JS)開發的不多,因為JS是Single Thread無法實現平行計算來實作高負載伺服器,所以主流是Java以及Go兩項語言。
針對新人通常只測試演算法撰寫能力以及基本知識(可用任意語言,本人使用C++),並了解對於網站開發有沒有基本認識,例如RESTful、MVC、Cookie/Session、API的概念等等。
另外在資料庫的問題中,並不會只問SQL語法如何操作,而是會是否對Transaction、Index的處理是否有概念,因為這才是商用軟體真正會遇到的問題所在。若對此不熟可參考以下課程 :
https://www.udemy.com/course/database-engines-crash-course/
面試
接下來來談談面試的流程吧!(N=45)
- 訊連Cyberlink — 多媒體工程師
這間是做威力導演的公司,在收到面試邀請後要先進行線上程式測試,有三題大致為兩題Easy一題Medium,主要要實作字串處理以及模擬Cache的設計。
二面則是先進行邏輯/英文測試,接下來與主管會談,此時要展現自己得意的300行以上的程式碼,這部分一定要對自己設計的程式夠熟悉,會詢問當時設計時的一些想法,為何要這麼設計? 現在讓你重新設計你覺得怎麼做更好? 那時候準備的不太充裕所以就掰了(゚´Д`)。
這個職缺主要會處理到Codec(編解碼器)設計,另外由於影像處理的計算量大,所以要將威力導演中的計算任務拆分CPU-GPU處理,甚至有些要以非同步方式丟去雲端做計算,感覺工作上算是蠻有挑戰性也挺有趣的。
Result : 無聲卡 - 湛研ActionApp — 後端工程師
這間是蠻小間的新創,專注在電腦視覺的開發,老闆是留美讀電腦視覺相關的所以技術背景很硬。做的產品主要有智能影片剪輯Montagg.io以及與政府合作導入電腦視覺來解決一些傳產的問題。
一面是線上面試,主要是確定你的經歷以及知識,像我實習時接觸過虛擬機開發所以被問很多相關的問題,例如瞭不瞭解k8s&docker與虛擬機的差異,是否有實作過等等。
二面是現場面試,有三個面試官輪流進來
(1) 第一關給了一個File System叫你寫虛擬碼處理內容重複的檔案。
(2) 第二關給一段Python2.x版本的程式碼找錯及寫結果,2.x的程式與3.x的有點差異可以當下問面試官,例如xrange的功能等等。
(3) 第三關是老闆親自面試,主要是系統實作,假設用戶數10億的情況下設計Facebook好友搜尋的功能; 另外由於有一些ML/DL的背景,所以被狂問猛問了好多資料標記以及電腦視覺的問題,被問到我都懷疑我真的是報後端工程師職缺嗎XD 不過老闆人真的蠻不錯的,對技術開發真的是很有熱忱感覺希望找到一起打拼的夥伴。
Result : Rejected。雖然老闆最後很開心的跟我握手,但想到他中間有說想找能獨立開發的人,大概我還沒到那火侯所以被拒絕了吧。 - 全景Changing — 軟體工程師
這間是緯創底下做身分認證與電子簽章的子公司,在台灣算是蠻成功的市佔率達到8成也是竹科少數做純軟開發的,因為要和各個系統串接,所以會接觸到蠻多技術的,內部也利用6年時間引入CI/CD的系統來加速開發流程,除了軟體開發之外也會接觸到密碼學、ML/DL在身分驗證的應用。公司算有一定規模,所以各個部分都有相應的工程師合作處理而非單槍匹馬,然後基本上不加班也不鼓勵加班。
一面是到現場寫考卷,一張正反兩面在50分鐘內完成,內容大概是資料結構/程式語言/網站開發/密碼學/資料庫等等,都不難只是測驗你有沒有一些概念而已。接下來部門會有協理跟主管進來面試,針對你以前做過的實作來討論。
二面則是要到現場和另一部門的主管做面談,一開始覺得很奇怪怎麼是另外一個部門的主管 ?後來主管解釋說因為兩部門常常需要合作,所以兩邊的主管都要確認面試者是否合適。這部分比較像聊天,技術面在一面就結束了二面偏重性格測試,基本上兩個部門主管人都還蠻不錯的,也在裡面待蠻久的。
Result : Offer get (薪資有保密條款) - 宏達電HTC — VR軟體工程師
想說看看自己有沒有機會搭上元宇宙的浪潮(雖然好像在退潮了),所以就丟履歷了(^u^)宏達電的部門蠻特別的沒有程式測驗,而是面試官直接問你幾個問題就能大概知道程度在哪裡了。
這個部門是做SLAM演算法開發的,也有一些工作需要將演算法寫到ARM裡面,所以問題非常的廣,從C++中比較進階的概念如volatile、smart pointer等等、資料結構(Tree)、物件導向的概念(封裝、繼承、多型)、相機的內外參數用途、現場給一個深度學習的Case請你講述有哪些演算法可以處理以及Pros&Cons。
另外面試官有點出演算法的難點在於大部分論文都只有做到cm等級的手部位置估測,但真的要實踐到VR上需要到mm的精確度。在面試完後認為重點應不是在於演算法,而是在於Sensor的error covariance要降到夠低才能實現到mm,不過當下有點緊張就沒想這麼多了有點可惜இдஇ
Result : Rejected - 悠福Ucfunnel — 後端工程師
這間主要產品是做智能廣告交易,做的東西算是蠻厲害的。這間公司主要分成一面和二面,一面是在線上進行,會有三個面試官輪流做技術測試。第一位會給類似Leetcode的考題來現場解,總共有四題但不需要全部做完,重點在於能不能寫出”最佳解”(最佳的時間複雜度以及空間複雜度); 第二位則是問觀念居多,例如作業系統裡面Thread vs. Process、Concurrency的概念、造成Deadlock的原因等等; 最後一位則是進來再確認一些你的能力,然後聊聊工作的事項,三個面試官給人的感覺都蠻不錯的。
二面則是要到現場與主管會談,時間很短大概不到一個小時主要是針對工作會遇到的情境來確認你會如何處理,並確認想加入公司的動機。不過這間公司在發展中,要做的事情非常多所以加班蠻頻繁的,能接受常常加班的再去面試吧。
Result : Offer get ( N+20 * 13 ) - 鈦坦Titansoft — 全端工程師
面試的部門主要是做線上遊戲伺服器的維運,並且每個月須有一週支援輪班,不過由於這間公司做的東西很多都有簽保密協議所以不能透漏太多。面試總共有四關
(1) 第一關會先由人資發線上測試給你,兩個禮拜內要做完,觀念題(資料結構)2題+Easy難度4題+資料庫操作1題,不過有些效能沒過所以沒有全拿。
(2) 第二關會由人資打電話稍微聊個半小時,確認你的人格特質以及技術、為何想進入鈦坦,接下來邀約技術三面。
(3) 第三關要和兩個面試官面試,這部分問很多物件導向的觀念,並且問一些如依賴反轉之內的概念以及是否有在專案中使用過。除此之外也問是否了解什麼是ORM、高併發處理等等,比較像是確認面試者對於伺服器後端的了解深度有多深,並強調這是每天都會接觸到的技術(聽到這句話心裡大概覺得GG了),果不其然三天後就被婉拒了(〒︿〒)。
Result : Rejected - 亞勳Unex — V2X軟體工程師
我想可能大部分人看到V2X都不知道是什麼,所以先解釋一下 :
V2X指的是Vehicle — to — Everything的車聯網技術,詳細技術可以參閱以下文章https://ictjournal.itri.org.tw/Content/Messagess/contents.aspx?MmmID=654304432061644411&MSID=1073041765432164773
首先這間公司蠻小的(大約30人),是近期轉型成功的公司,V2X的技術未來也有機會解決很多自駕車在影像/雷達無法處理的問題,例如位於十字路口相異側的異常車輛警告如下圖
一面時要到公司寫一張大約有8頁的考卷,考題範圍大致為C跟作業系統,並且再加上幾題RTOS的設計題目,對大學是從Code底層教起的學生而言不算難,大致上要熟Pointer、Static的功用(不是只有設為全域變數)等等,設計題則是會給一個實際的資料流處理的系統問如何設計。
二面也是要到公司,這次是要與主管實際討論系統設計,非常的刺激且有趣 ?不過這部分就不透漏了,有興趣的自己去體會看看吧。
Result : Offer get(N+17 * 14 + 績效約2)
總結
面試除了是謀個飯碗外,也是確認自己在市場上有多少價值的過程。如同知名Youtuber泰瑞的影片「為什麼我要面試?你的職場護城河?」內提到科技變化的這麼快,確保自己永遠在市場上擁有競爭力的方式就是面試,這樣才是最快了解這個業界需要什麼技術的方式。
對於初入職場的軟體工程師而言,我想大部分人都沒辦法很準確地說自己想要做什麼。最好的方式就是多面試幾間,了解業界各間公司到底在玩些什麼東西,這些東西如何產生價值? 在這過程中也會越來越了解你未來想要發展的方向與目標,從而對自己的未來更有規劃。
雖然許多人都說台灣的軟體工程領域發展不太好,但我覺得台灣很不錯的地方是做軟體工程的各個領域都還是找的到相對應的職缺。無論是自然語言、量化交易、遊戲製作、區塊鏈……等等,在二月時多看看104或其他求職網站就會知道有哪些公司在做這些東西,要求的技能為何。
回到現實面,初次找工作我想還是有些重要的技能是必備的,剩下的再針對不同領域做延伸。至少能讓你得到幾份Offer,但能不能進入期望的公司就看緣分了,這邊整理如下 :
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
(1) C++ : 要懂的如何使用標準函式庫中的Vector、Stack等等來撰寫演算法
(2) 資料結構 : 針對問題要能想出對應的資料結構,並且分析複雜度。除了悠福的考題需要用到演算法的動態規劃(Dynamic Programming)外其他都是資料結構可解決的範圍。
(3) 物件導向 : 了解什麼是封裝、繼承、多型。最好自己設計過一遍確定概念,這部分建議看程結的大話設計模式來學習。
(4) 一些能代表自己能力的作品集
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
文章太長了就先寫到這邊吧(面試公司大概只列了一半XD)!雖然不知道有多少人能完整地看到最後,但還是感謝各位 ? 也期許有人看完我的文章能有些啟發。
祝大家都能找到自己喜歡的工作!
瀏覽 12,568 次