# 面試心得 最近剛獲得人生中第一個業界 offer,雖然只是中型公司,但是寫心得除了記錄自己的心路歷程也希望可以給在迷惘的人一些方向。 ## 個人背景 喜歡寫程式,成績普通,必修清一色B和C開頭,但程式課都有A以上(朋友carry+自己努力)。修過計程、前端程式設計、資料結構和機器學習。大學畢業之後當了快兩年的研究助理做~~套模仔~~ ML 相關,去年離職之後開始找後端工程師/軟體工程師的工作。 ## 心得建議 以下純屬個人觀點。每一點可以展開。 :::spoiler 1. **如果不知道自己想要什麼,可以先了解自己不想要什**麼。 \ 大學時期也不知道畢業要幹嘛,有機會就探索不同主題。個人自己有修過金融科技、經濟學和前端程式的課,發現自己沒有很喜歡這方面。當研究助理之後也是發現自己沒有很喜歡隨機的事情,所以也沒有打算念研究所。基本上都是通過刪除法才可以確定自己現在想要什麼。 ::: :::spoiler 2. **盡量去實習** \ 個人大學時期自認很爛也沒勇氣去找實習,感覺蠻可惜的。應該蠻多人都是實習轉正的。 ::: :::spoiler 3. **技多不傷身** \ 有時學了某個技能也不一定直接會用到,但是某天就意外發現會需要。比如我之前在朋友推坑下開始用 terminal 之類的 CLI,雖然當初只是因為感覺比較帥才開始,但後來當研究助理和面試的時候會用 Ubuntu terminal 蠻加分的。 ::: :::spoiler 4. **學程式挑個自己喜歡或者好入門的就好,程式邏輯比較重要。** \ 個人覺得 Python 算好入門,推薦可以買課程或書。我沒上過完整的 Python 課,Coding的時候都是 Google 找怎麼做,結果就是寫了很久的程式才知道什麼是 Class,但這個應該是很基礎的內容。之後自學 Java 的時候基本就只是在看語法。但先學 Python 通常不太會在意形態,所以學 Java 的時候要適應一下。 如果有明確目標就直接挑常用的語言,比如遊戲開發一般上會是 C#/C++。 ::: :::spoiler 5. **要學會某個技能最快的方法就是做個人作品。** \ 自學 Java 時和朋友拿了 OOP 作業,做一個 terminal-based 的大老二卡牌遊戲,有學到語法和一點 OOP 概念。之後自己寫了一個簡單的後端 Server API,裡面用到 Spring、MySQL 和 Postman,雖然沒有到很熟但至少履歷上可以多一些東西寫。 ::: :::spoiler 6. **ChatGPT 很好用,但是不要過度依賴。** \ 目前的ChatGPT比較擅長自然語言處理,所以寫 Code 不一定準確。個人使用方式是請它寫一段 Code,如果我看不懂就請它解釋,然後稍微跑一下看是不是符合自己要的,最重要的是知道自己在寫什麼。 有一家公司take home測驗是要實作特殊的 LRU Cache(可以去leetcode搜原版的 LRU Cache),寫了要求放在github上。雖然有說要設成非公開但是有些人大概是看不懂敘述所以可以找到超多別人的解答。 很多人都會選 Heap 來做這題,但是我自己覺得不對。後來和面試官確認說不能用 Heap,開始出現用heap的解答都是ChatGPT出來之後的時間。 但寫英文履歷和自我介紹還真好用。 ::: :::spoiler 7. **技術文件和原始碼是你的好夥伴。** \ 我一開始都會去看別人寫的教學,但是教學有時比較舊了就不適用了。 Debug不要 trial and error,盡量去看 error log、技術文件和原始碼,可以順便看別人怎麼寫和學一點點 Design Pattern。 ::: :::spoiler 8. **提升英文能力到可以習慣看技術文件。** \ 接著上一點,印象中技術文件都是英文,所以要讓自己習慣。我英文沒有特別強,大概就裸考全民英檢可以及格的程度,英文語法超爛,文件裡面的英文好像也不會到太深奧。 ::: :::spoiler 9. **有空刷一刷 LeetCode** \ 可以熟悉資料結構和演算法,雖然面試不一定會用到。 個人感覺刷 LeetCode 的重要程度是:ML工程師>後端>前端 朋友是做ML的,面試幾乎都會考LeetCode。我面後端工程師偶爾會有考試但是比較多是問後端經驗。 感覺前端的重要程度比較低是因為遇到的前端工程師都不知道資料結構是什麼。之前面試一家 AR 公司的後端,面試官是技術長兼前端工程師表示他們公司都是後端然後不會資料結構,像資料夾怎麼放就不知道。我當時OS想那個不是資料結構。 但技多不傷身,有空就刷一刷。 刷題時可以做筆記寫一下解題思路,一開始可以不用排斥看答案,腦內 Dependency 裝好了刷題比較有效率。 個人沒有很勤勞刷,主要都是離職後刷題,目前 Easy 106/Medium 121/Hard 2 ::: :::spoiler 10. **寫履歷** \ 個人履歷沒有到很亮眼的內容,基本就寫了學歷、之前研究助理工作內容、技能、個人作品和語言。如果沒有什麼作品可以把修課的作業整理放上去。 成就盡量量化成果,有寫過履歷應該知道要按照 STAR 原則。 技能那裡盡量多一些關鍵字,HR都是用關鍵字搜尋的。我起初只寫了 Python/Java/Git 這種比較具體的技能,後來某公司PM不小心把她在104的視角發給我,裡面出現了下面這些: ![image](https://hackmd.io/_uploads/H1UjZrYCa.png) 最後我是把 DSA、Design Pattern 和 OOP 加進履歷,雖然在這之前就有offer了。 ML那裡的關鍵字有看過 Pandas和NumPy。有趣的是甚至 VS Code都有。 我的履歷是用 Overleaf 的模板寫的,基本上就黑白,沒有顏色沒有照片。 Offer的公司面試官說很少看到履歷只有一頁的人,但他喜歡這個風格。 ~~我和他說一方面我也沒其他東西寫了~~。面試的時候應該最好不要示弱,但當時聊得很嗨加上我人比較老實一點就直接把實際情況說出來的。 面試前可以把履歷印出來備用,但我自己最後是都沒用到。 ::: :::spoiler 11. **投履曆** \ 我是去年12月初開始投,那時主要是在 Yourator 投,偶爾有面試但基本沒上。年後 Yourator 幾乎沒什麼新職缺了就轉投104。 有一點點小技巧是職缺都投當天更新的,回覆率比較高。 關鍵字也有點影響,本來搜後端工程師幾乎都是比較小型公司,但是搜軟體工程師/Java工程師會出現比較多大公司。 拿到offer前投了約100多家,沒有投Google那種大巨頭,有回覆的 17 家,有面試的11家。12月到現在3月,扣掉新年大概花了3個月。 ::: ::: spoiler 12. **面試** \ 面試前可以去找找面試趣有沒有其他人分享面試題目或心得。 通常要自我介紹。我大概說了大學開始寫程式的過程、研究助理的工作做什麼、為什麼不繼續做研究、未來規劃。比較是履歷上沒有的。喜歡寫程式好像有加分的樣子,我當初以為當工程師的人都喜歡寫程式,後來發現並沒有,所以後來自我介紹有稍微提一下。 大部分面試官都是問有沒有用過某某東西。比較少數是純刷題,印象中要刷題的大概只有兩家。面試前可以稍微複習自己的職缺需求和公司是做什麼的。 有時PM會問BQ,可以準備一下,我自己感覺都沒有回答到很好。 面試官如果問有什麼問題嗎最好問一下,表示你有興趣。自己之前忘了就沒問。後來大致上會問部門有多少工程師、上下班時間、公司福利、有沒有遠端等等,反正就算104有寫了還是可以問。 勞基法寫的那些不是福利,那些是應該的。 ::: ## 結語 我覺得自己是真的很幸運遇到一些貴人才可以在這裡寫這篇文章。找工作的過程真的很焦慮,尤其沒有offer的時候都會懷疑自己。面試的當下開薪水被面試官告知我一定可以更高時內心差點流淚。希望這篇心得可以幫助到各位。 最後送大家一句最近看葬送的芙莉蓮很喜歡的台詞: $$ \textbf{日積月累的努力不會背叛你。} $$