【學長姊帶路】新鮮人軟體工程師準備面試分享

原標《2023軟體新鮮人求職心得》

文/WeiLe

前言

本人背景為台大資料科學碩士學程以及成大數學系,碩論是做推薦系統相關的研究,也有嘗試把研究成果投稿至conference。碩士期間完成了兩份產學合作以及一份實習(都是機器學習相關的),感興趣的領域為推薦系統和圖神經網絡,畢業後自學SQL,求職方向為機器學習(或AI)工程師以及資料科學家。(我沒有考慮前後端、軟體工程師以及需要c++能力的職缺)

本實驗室的學長們都曾在此平台分享求職心得,很高興今年總算輪到我了XD,他們的求職文章對我的幫助非常大(也非常感謝他們的鼓勵以及內推),附上鏈接讓大家參考:
(睿修)2021求職心得(先灝)2022面試心得

去年10月研究所畢業後,原本計劃12月找到工作,結果跌跌撞撞,竟然到了今年4月才找到工作!對我來說,求職的期間蠻痛苦的,第一是不知要準備到什麼程度才足夠,出去玩也會感到罪惡;第二是我沒和家人索取生活費,我在研究所期間透過實習、獎學金、實驗經費,存了一筆錢,用到現在已經寥寥無幾(台北房租好貴!)… 面試了蠻多家後,才大概有一些心得,在此分享給大家,希望能幫助大家。

此文共分為5個部分:履歷、刷題、機器學習知識、Behavior questions、心得總結。

【學長姊帶路】新鮮人軟體工程師準備面試分享
若非本科系學生有相關經歷(實習/專案/論文/有排名的競賽)的話,應該可以嘗試投遞履歷。

先為以下長文總結出求職懶人包:

  1. 把履歷、PPT、Cover Letter準備好,寫好了請業界學長姐給你建議,盡可能透過內推的方式投遞履歷。面試前透過查詢相關公司的面試心得來準備面試題目
  2. 刷LeetCode,NeetCode 150最好刷2遍(刷完一遍再投),定期打LeetCode的Weekly Contest
  3. 複習機器學習知識
  4. 準備Behavioral Questions

1. 履歷、簡報與公司

一份把自己包裝好的履歷是基本的入門票,附上我的不專業履歷讓大家參考。呼籲大家盡量以內推的方式投遞,這是最快拿到面試機會的道路。我投了超過70家公司(其中有5家為內推),大約拿到15家的面試機會(包括Online Assessment)。相信大家也對薪資感興趣,所以我把獲得面試機會的公司,根據本人得到的資訊以及網路公開資料進行薪資(不含加班)劃分:

年薪150up:TikTok, Taboola, AICS, Expedera

年薪100up:Inventec, Dcard, Polymer Capital, Yahoo, E.SUN, IBM

不確定/不到100:CMoney, ClickForce, ioNetworks, iiNumbers, Nogle, Dentsu, Compal, Synpulse

軟體業通常都不需要加班啦,所以年薪100up是蠻香的。

(PS. Taboola、TikTok和Dcard我的愛,畢竟是推薦系統相關的,可惜了)

當時由於想快點找到一份高薪又感興趣的工作,所以都先往年薪150up以及自己感興趣的投,但這本身就是一個錯誤的策略,因為在初期,在面試經驗以及刷題數量完全不足夠的情況下(甚至履歷和PPT都有待改進),面試後當然都被啪啪拒絕(80%都敗在Leetcode)。我覺得比較理想的方法應該是先把想投遞的公司做排序,再分兩半,先從後半段開始投遞,迅速累積面試經驗,再投排序前面的。在投遞或等待面試期間都請乖乖的努力準備(刷題、複習知識)。當然,這是最適合我的方法,不一定對每個人都適用。若你對LeetCode很有自信,那就全部同時投遞就好啦,畢竟從投遞到拿到面試機會,快則1週內,慢則需要好幾週,我甚至遇過12月投遞,2月才找我去面試的,面試通常有兩關以上,完整面完一家到通知錄取與否可能需要一個月;也有些人會先投遞,確認有面試機會後,在面試前一周瘋狂刷題準備,因為有目標(一周後的面試),所以專注力也會提高。

此外,PPT也是非常重要的,請做一份關於你自己的PPT(我用全英文製作,內容包括自我介紹 + 碩論 + 產學合作),再根據不同的公司的職缺內容進行更改或刪減;CoverLetter也可以先寫好以備不時之需;還有要準備英文的自我介紹以備不時之需。面試之前,可以上網查詢別人在該公司的面試心得,就可以大概了解該公司/產業通常會詢問什麼題目。

面試到現在,我發現其實主要是自己太放鬆了,常常一邊刷題一邊耍廢,期間甚至還跑回馬來西亞渡假一個月,才導致刷題進度緩慢。

2. 刷題

我的不專業刷題記錄 (until 03/27/2023)。7月:開始刷題 →覺得無趣而放棄。9-11月:發現許多行業都會考LeetCode,所以勤奮刷題。12月:面試了一些公司,覺得自己已經很努力刷題了,卻還是無法應付面試,所以回國休息放鬆。1月-3月:重新刷題,由於有前幾個月的鍛煉了,所以比較得心應手,也豁然開竅,LeetCode contest除了Hard題基本上都能寫出來,應付面試也沒什麼問題!

請看看上面提過多少次“刷題”。沒錯!撇除薪資,我所投遞(不管有沒有面試機會)的公司,80%以上都會考LeetCode。

有人會說:我機器學習超強,還發過paper,面試機會應該很大吧?
我的回答:沒錯,得到面試的機會很大,但現實很骨感,學經歷只是入門票,LeetCode寫不出一概byebye。

許多公司一面都會請你先自我介紹,介紹完畢後考個1-2題的LeetCode,寫得出才有後續。以AICS和TikTok為例,面試大約3關,每一關都考你LeetCode。有些公司只有第一關考LeetCode,剩下的關卡則問你相關的技術、做過的專案的細節等等。當然也有些公司不考LeetCode,而只問你相關經驗(但通常薪資比較低),但我面的大部分都有考LeetCode。

或許有許多人抱怨,LeetCode並無法判斷一個人的專業能力,嗯…這就見仁見智啦。我覺得它是其中一種能體現程式能力(邏輯思考、如何解決問題)的方法。不然面試還能問什麼?機器學習相關的面試題目來來去去就那些,網路上也都有答案,背下來就完事了。大家看看Linkedin,會包裝自己的人很多,許多人都說自己學過機器學習,專案或履歷則放上自己的課堂作業,所以機器學習已經無法判斷一個人的程式能力了。透過LeetCode是最能確定程式能力的方法之一。再來,現在求職的人非常多,透過LeetCode刷人也是最快的方法。像AICS和TikTok就先給你一份Online Assessment,都寫對才有下一關。

2.1 刷題建議

LeetCode說穿了就是“資料結構與演算法”,是我從來沒有學過的東西。我都是透過自己這幾個月的摸索,才慢慢學會各種演算法和資料結構,所以我非常理解不知從何開始學起的感覺以及無法短時間內學會的挫敗感。我的建議是:了解某個資料結構的概念 →刷相關題型。剛開始想不出怎麼做是正常的,若20分鐘內想不出,請直接看解答。

我的刷題之路:
1. Labuladong的算法網站,我願稱他為最強,非常完整的說明了各個資料結構以及演算法的框架,並附上相關題目以及思路。
2. NeetCode,可以先刷裡面的Blind 75,先寫完每個單元的easy題,了解各個資料結構和演算法之後,再開始刷medium。強烈建議刷NeetCode 150,它是基於Blind 75題,再加上作者覺得重要的75題。
3. DSA林軒田,記得剛開始我一直都不了解Linked list和Heap,看了老師的影片才恍然大悟。

Labuladong和NeetCode 150可以同時進行,裡面有蠻多重疊的題目,加起來大約200題左右,DSA影片用來輔助了解一些概念(比如heap是什麼,它是如何演變的,老師講解得非常好)。

我總共刷了400多題,其中NeetCode 150我刷了超過3遍(寫完這150題後,再額外寫一些題目,面試前再集中重新刷這150題),現在每天寫個幾題,面試前一天大量複習,偶爾參加LeetCode contest。現在基本上能解決Medium題目,就算限時內寫不出也能說出解法。可惜的是我太遲把LeetCode熟練度點滿了(到了3月才真正點滿,之前刷題效率超低,都是放鬆的頹廢狀態),不然剛開始面試的公司應該都沒問題。

建議大家題數刷到300題,刷完300題之後,就開始刷新題目,在刷新題目的同時也要定期重刷NeetCode 150。真的沒時間的話,至少也要把NeetCode 150刷個2遍。為什麼是2遍?因為第一遍通常都會因為不熟悉而看解答,像我剛開始刷NeetCode 150時,看了約70%的解答。隨著你重刷的次數越多,你對DSA的概念也會隨之加深,進而越來越不依賴解答。

強烈建議:先刷一遍,對DSA有初步的了解 → 開始投遞履歷 → 邊投遞邊複習/刷新題目/上網查面試公司比較注重哪些類型的題目。

2.2 刷題心得

剛開始刷題的時候,真的感到很挫敗。舉例來說,寫完Tree的題目之後,再回來重寫Tree的題目時,哇為什麼當初寫過的現在寫不出了?Graph裡的UnionFind演算法一陣子沒寫怎麼就忘記了?

沒事的,重新了解此演算法和資料結構,再重新寫過,就會慢慢抓到精髓(它讓我回想起了數學系的時光:這個定理看1次看不懂沒關係,看10次應該可以大概看懂吧),我刷了幾遍之後,真的對資料結構和演算法更了解了,也可以generalized到其它的題目,不局限在這300題。有點像是:新手剛開始學武功,再透過不斷的實戰領悟武功的精髓,進而能利用領悟到的精髓自創招數。熟能生巧!熟能生巧!熟能生巧!手感也很重要,盡量每天都堅持刷題維持手感。

刷到一定程度之後,你應該可以發現:算法的本質是窮舉以及如何聰明的窮舉;Tree和Backtrack的遞回概念是差不多的;有些能用Backtrack解的題目,可以透過改用DP減少時間複雜度;Heap不需要透過窮舉就可以找出最大/最小的元素,而在Heap中插入或刪除的時候透過聰明的窮舉(complete max binary tree)把時間複雜度減少至logN;etc……

不得不說,經過這幾個月的LeetCode訓練,我的思路和程式能力明顯增長了許多,有了DSA的訓練之後,看到一個程式問題,腦海就會想到可以用什麼方法解、時間和空間複雜度大概多少。

2.3 刷題面試

回顧我之前的面試,我幾乎都沒向面試官尋求幫助,就算想不到也不敢詢問,這是不對的!應該要適時向面試官溝通(或者尋求幫助、詢問想法),確保你們都還在同個頻道上。除了成功解題,面試官想看到的是你面對難題時,你會如何思考,並有邏輯的解決它。此外,面試官也能透過你們之間的溝通來判斷你和這個team是否契合(畢竟以後大家都會一起共事)。

3. 機器學習複習

這方面應該不難,重看李宏毅老師的機器學習或者林軒田老師的機器學習基石技法應該就可以解決你大部分的疑惑和面試會問的問題,而機器學習相關的問題大多都是從你放在履歷上的專案/論文/競賽等進行延伸,但主要還是得看你投遞的公司focus在哪一方面(比如有些公司偏影像的機器學習,那你至少要有影像辨識的經驗和了解相關技術,面試往影像辨識方面準備)。當然,在相關領域有經驗的人是非常佔優勢的,畢竟他們了解學界以及業界的差別,也曾經面對並解決過業界的實際問題。

P.S. 若是資料科學家的職缺,有可能會考SQL,或者pandas的應用。

4. Behavioral Questions

有些公司會在面試前給你一些相關問題請你回答並提交;有些公司會在面試時問你相關問題,內容大部分都關於人格特質以及處事能力,常見的問題:

1. 你的優缺點是什麼?在別人的眼裡你是什麼樣的人?
2. 你成長中影響你最深的人是誰?你遇過最大的挫折是什麼?
3. 為什麼應徵我們公司?未來規劃?

不管是簡報或者behavioral questions,都能透過不斷的面試,收斂到一個比較固定的說法。

心得與總結

最近經歷科技寒冬以及裁員浪潮,我深深感受到工作比以往難找(去年的3月至6月是各科技和軟體行業的起飛時期,那時隨便投履歷都有得到面試機會,門檻也相對低,可惜當時趕著論文和口試所以都放棄了)。現在許多公司都還有徵才,只是門檻變高:當5個面試者成功地寫出LeetCode,但其中兩個面試者有相關工作經驗,在名額有限的情況下,會聘請誰?原本考Medium題,也會為了刷人變成考Hard題;許多在去年3 — 6月看到的新鮮人職缺,也都陸續下架。看到實驗室的朋友們都趕在7、8月前找工作,真後悔當初沒加入他們…

今年在台大甄才博覽會看到許多非相關科系的人都到攤位詢問:“我不是本科系,但我有自學ML,請問可以投AI相關的職缺嗎?” 這時人資會給你尷尬而不失禮的微笑。這非常正常,就連本科系的都經歷求職困難了,其它科系的怎麼分得到這杯羹呢?再來,通常自學ML的並無相關經驗,怎麼比得過有相關實習/專案經驗/競賽的人呢?最後,非本科系的人通常都不會想到去刷LeetCode。往人資的角度思考,對方每天都收到好多履歷,看到和Computer science相差甚遠的科系,又沒相關經驗,就把你淘汰了。我有問過某公司的HR(不在上面介紹的公司)會怎麼篩選AI職缺的履歷,對方回答:履歷上沒有相關publication或沒有嘗試投稿的話,就直接刷掉;或者你是某領域的大神,但此職缺的工作內容和你的領域相差甚遠,也會被刷掉。由此可見現在的門檻比之前科技起飛時期還高出不少。

若非本科系學生有相關經歷(實習/專案/論文/有排名的競賽)的話,應該可以嘗試投遞履歷。若無,那我的建議是,先認真練功學習,比如先到中小型公司,或者相關研究單位的研究助理,雖然薪資可能不如預期(大部分非本科系想應徵AI缺的原因不是因為感興趣,而是因為薪資比較高,但要想想你的競爭者們都是本科系的),等到有一定的能力之後,再往上跳。
P.S. 若你沒有研究所學歷,而大學時期也沒有亮眼的表現(實習、發paper、競賽拿獎等等),那就別對薪資抱有太大的期望。

經過了面試的洗禮和刷題之後,我覺得其實自己距離夢想,並非那麼的遙遠,只是自己的實力以及付出不足以得到offer而已。之前太廢了= =,又把有興趣的在求職前期投遞了,導致後面比較常在懷疑人生哈哈哈!若讓我重新全力衝刺兩個月,求職之路應該會順遂許多。此外,刷題真的非常非常重要,建議大家每天都寫個幾題維持手感,求職時一定會比較順利。

小插曲:在我印象中金融業應該是門檻比較低的(看以往的面試心得,頂多問問機器學習和一些情境題),但其實不然。
最近到一家金融業面試,要求帶筆電(有技術測驗),我還以為是考機器學習相關的知識,所以沒什麼準備就開心的到現場面試。結果點開測驗…..哇勒,6題LeetCode(看起來是4 easy 2 medium,只有一小時的作答時間)。
錯愕了幾分鐘後,突然想起我可是寫了400題的男人,怎麼可以敗在這裡!所以就開始寫,題目不難,但時間緊湊,所以我只寫了5題,剩1題我知道解法但是沒時間寫QQ。在1小時內解了5題(皆通過所有test cases),應該對得起我這幾個月的努力吧哈哈哈!

哎呀…求職是人生的必經之路,運氣和實力都佔一定的比例,大家都要加油R。最後感謝台大和中研院的教授&學長學弟們、幫我內推的朋友們、聽我說求職心酸的朋友們、以及覺得我一直在玩但其實我也有認真(?)找工作的家人們XD。

本文由 WeiLe 授權轉載, 原文: 《2023軟體新鮮人求職心得》

___________

你也有經驗想分享嗎?快來投稿賺稿費吧!

瀏覽 300 次

覺得不錯的話就分享出去吧!

發佈留言

Back to top button