成大學士生找工作歷程(後端工程師)
Created on 11/25, 2016
這篇主要給資工系,大學畢業就要找工作的人,所以碩博資工畢業看看就好,也麻煩鞭小力一點,或是可以給我一點回饋感謝 ><
然後會想寫這篇是因為答應了 jserv 老師,以及回饋網路上分享各種面試經驗的大神們。
如果你只想看面試階段的可以直接往下面拉!
關於我
先來介紹一下我自己,本魯我大四下學期初時,是連 Linux 上 $ps
$grep
這類基本指令都不知道的資工肥宅 (還算資工嗎?)。
我在大一、大二的時,各種跑社團 (流舞社)、校友會、系上活動,早上都在睡覺,晚上到處玩,排名當然是系上的倒數。
我在大三時決定不讀研究所,因為我不想要考試,但我大一、二成績並不好,如果那時就被丟出去找工作,應該是連 22K 都領不到的標準學店生,所以意識到這點,就開始努力在本科系上面。
這邊先說我是不討厭資工的,jserv 老師也曾說想賺錢不要來打程式,所以沒熱情的我還是建議找別條路吧
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
大三我才自己打工存錢買了一台筆電(大三才有筆電就知道多廢了),認真修了當時的兩個重要科目「演算法」、「作業系統」 (我蠻愛張大偉老師的 :smiling_face_with_heart_eyes:),打好了我蠻重要的底,以及修了各種課程,和普物…
我的想法很簡單,就是在畢業的最後兩年好好充實自己。
這邊偷推薦成大資工的學生幾堂不錯的課:
- 莊坤達 - 知識挖掘與資料工程導論。(每個小課程都能接觸到不同面向的東西)
- 李信杰 - Java, 軟體設計。(物件導向的關念我個人覺得挺重要的,老師教的也不錯)
- 焦惠津 (電機) - 軟體工程導論。(從美國 google 回來的強者,讓你了解 software engineer 和 programmer 的差別,也是我大學第一堂乖乖看原文書的課)
最後就是大四下時,我修的 jserv 老師開的系統軟體課程,因為我覺得這是我能在最後半年中進步最快的方法,而這堂課也確確實實成了我找工作時的基底,有興趣的可以看我在這堂課研究的 final project MT7688 + cgi-server + facebooc,但可惜的就是太晚修了 (太晚給老師嘴?),不然我還想繼續研究下去,好好跟牢 jserv 老師!!
真心推薦,學弟妹不要退選了,熬過去就是你的了!👊
畢業後的準備
以下這個段落所說的,完完全全可以在大四下就開始準備,甚至大四上,但我太晚意識到了,所以只好自己去探索。
STEP 1 : 選定工作類型
畢業後我選定的工作是「後端工程師」,這有兩個原因:
- 與我系統軟體課程最後的 final project 相關,可以直接做銜接。
- 職缺要求比較沒有需要碩士學歷,我個人不太喜歡投不符合資格的職缺被面試官洗臉。
而在「系統軟體課程中學到」跟「後端工程師所要具備的」相關的有:
- 以純 Linux 為開發環境。(建議不要用虛擬機,因為當在研究 CPU、Memory 等硬體使用時可能會有些微出入)
- 用 git 做版本控管,以及學習在 Github 做出貢獻。(第一次的 pull request 就在這了)
- Concurrency 的扎實觀念。
- Web Server 之架構與研究。(上面有連結)
- 當然 cache、debug skill 也是很重要,但我在面試當中沒什麼提到。
STEP 2 : 別急著丟履歷、面試
其主要的原因是:
- 反正我還要等當兵
- 我履歷寫不出什麼鳥 (可悲大學生)
- Github 上一片慘白,實在是不能看
所以我決定在當兵前好好充實自己,當兵結束後在開始找工作的階段。但已經準備好的就快去當一當兵,直接上了。
STEP 3 : 找出各家公司後端工程師所需相似條件
這是一個大方向,才不會你只專心準備一家公司的資格條件,結果卻落空。像以「後端工程師」為例,常有的條件有:
- Have cloud platform experience (AWS, Google Cloud Platform or others)
- Experience in integrating Elasticsearch
- Familiar with 某某 framework (MVC)
- Familiar with 某某 database or 某某 NoSQL database
- Experience in version control system
STEP 4 : 去滿足所欠缺的條件
我的做法式就寫一個小 project 把這些條件給兜起來。
我就選定了
- PHP 的 Laravel 框架,決定寫一個影片串流的網站(像 YouTube 那樣)
- 用 git 作為版本控管
- Mysql 資料庫作為主要 data 儲存庫
- Redis 作為 cache、session 儲存庫
- 搭配搜尋引擎 Elasticsearch
- 最後把整個專案它架在 AWS (免費一年可以用)
這之間大概花了三個禮拜~四個禮拜,而上面的需求我都達成了。
這些東西在你面試時「很好說嘴」,還會讓你 Github 上面多了許多綠色點點。
題外話,畢業一開始我原本想找偏系統後端的工程師,但之後發現學歷要求「碩士」佔大多數,我就直接出局了,但那時有寫了兩個偏系統的小專案「簡單的防火牆」和「Linux Live Stream」,也是在面試時可以拿出來講的 (對於網路的了解、TCP、UDP 協定等)。
STEP 5 : 寫履歷
充實完自己後,就可以開心寫履歷了(其實是痛苦的寫了很久),履歷的寫法我是參考這位 M157q 大大的 部落格 和 Github 連結 ,中英履歷都有寫。
在成大的同學絕對要給 jserv「模擬面試」一下,肯定會受益良多 (我畢業已經回北部了,不然真的很想去r )。
這邊簡單說一下履歷該注意的:
- 不要寫你的跑活動的經歷,因為主管不是要看這個,但可以放在自介當作人格特質 (雖然我也沒寫)。
- 盡量濃縮在一頁,讓主管一下就能看到重點,其他當 references 放第二頁。
- 寫上相關的作品就好,但作品太少的就只好都寫吧 XD 但順序一定是最相關的擺上面。
- 會的程式語言,別把你寫過 "Hello, World!" 的語言也拿來說嘴阿,只寫上與你投的那家公司所需要的和你真正的熟悉的。
- 每家公司要客製化一下,寫上與那公司最相關的東西。
- 其他要注意的去那個部落格看吧,非常詳細!
STEP 6 : 選公司、丟履歷
這邊就看每個人是否有理想中的公司了,可以問問老師、學長姊,或是 ptt 爬一爬。
我總共投了 Pinkoi、KKBOX、Garena 這三間 (照順序),主要是我比較想要自由、年輕一點的公司,然後不選擇過於新創,是希望能學習一些前輩們的經驗,以及中、大型公司內部的管理及營運模式。
面試
這才是重頭戲,誰要看你前面的屁話 qq
Pinkoi
這是我九月初投的,當時想說試試看一下,沒想到被慘電,但也算是得到了之後面試該如何應對的經驗。
第一關
先是 HR 介紹公司,聊一些基本資料,問一些為何選擇這裡當第一家面試的公司還有人格特質、想法等等的問題。
第二關
- 與工程師 A 一對一。
- 先是自我介紹,他給我五分鐘,而「我只講了三十秒…」(因為是第一次實在太緊張了)
- 再來是白板題
- 畫出及描述 web server 的運作 (這裡很輕鬆只要你研究過 jserv 老師的 web server),他有稱讚我很清楚 XD
- Linux 的檔案權限問題
- 會問這題是因為,像 Apache 在 run scripts 時,會是以使用者 www 去跑,若權限沒調整會發生 internal error 500 。
- 考一些指令
$chmod 777 file_name
是什麼之類的。
- 這邊算是我沒準備好的部份。
- Leetcode 題,給數字
12345
,求 1+2+3+4+5
的值。(主要是看你會不會打 code)
- 資料結構 binary tree 走訪、link list 節點交換等。(考資結,被 jserv 期初考電過的,一定就很輕鬆)
第三關
- 與工程師 B 一對一。
- 他有與前一個工程師了解一下我的狀況,所以直接就白板題
- 他秀出一段我 Github 上面的程式,請我提出這段程式寫不好的點,以及要如何改進。(我覺得蠻有意思的哈)
- 再度刷了幾題 Leetcode。
- 考了我 regular 。(我都是用到才查,直接爆掉!)
結果及感想
- 感謝函 qq 。 (第一次收到這種東西真的蠻沮喪的哈哈)
- Leetcode 題寫的太卡了,一方面是緊張 (寫白板式完全不同的感覺r),一方面太久沒刷有點生疏。
- 一開始 HR 有提到,他們公司是只有 50 人左右的新創公司,所以不太招收新人,希望一進去的工程師就能蠻厲害 (他們職缺開 junior backend engineer 我還以為很樂意招收新人)。
- 但我覺得工程師還願意跟我面試三個小時蠻有誠意的,我也藉此學習到了寶貴的初次面試經驗,以及了解自身的不足。
- 在面試結束後就知道大概不會上了,這是一種 feeling 哈哈。
KKBOX
KKBOX 的整個面試過程是出名的久,有些會到三面 (看部門),應徵的人可能要有些心裡準備。(從投履歷到 offer get 經過 25 天)
一面
-
一位工程師和一位官威比較大的 XDD (忘了 title) 和我對談。
-
首先自我介紹,別於 Pinkoi 面試,這次的自我介紹沒有限時間,(面試官當時只叫我自我介紹,我主動問能講多久,因為我要適當地調整內容,他就說能講盡量講),我就不客氣的講了三十分左右,當然中間有穿插他們的提問 (面 Pinkoi 時我只講 30 秒…wtf)。
- 就是把你大學時期做過的專案或是自身的想法講一講,記住要講的東西一定要先預習,不然面試官常從你的介紹中提問,很容易問到你忘掉的東西 (像我就不小心忘了專題的一些細節 qq),當然切記別說謊!!!
-
再來和我介紹進去後加入的 team 會做什麼事情。
這邊我說「等等我拿個筆記一下」,個人覺得會加分,但本來就會忘順便記有何不可? (二面他們又提到時,我說我記得並講給他們聽,他們還稱讚我記的太清楚了吧 XD)
-
給你不同格式的音樂 meta data (xml, json 等)你該如何處理並存進資料庫。
- 這裡要考的就是你如何設計程式的架構,和資料庫表格的設計。
- 我稍微用了物件導向 (不同格式都繼承 Document 類別) 設計方式,但別浮誇,讓面試官知道你懂這些東西就好,而不只是自我介紹說說而已。
-
[3,6,8,4,7,3,1] 這是一天股票的漲幅陣列(有照時間排),算出一天最大的獲利
- 面試官要的只是一天一次買、一次賣而已,我寫成可以多次買賣,然後會比較難寫所以有點卡 (但,是有寫出來的),最後我講了我的想法後,工程師似乎滿驚訝我這樣想的,但還是一開始就問清楚題目最好,因為他們看我寫的時候,樣子很 confuse XD
- 再來就是開心的問問題時間
- 這邊就建議去面試之前就先準備幾題要問的,再針對他的回答提出接下來的疑問,我問的有「該具備的技能?」「若有過初試,之後面試的流後程?」「未來產品的走向?」等。
一面結果及感想
原本面試官有說大概一個禮拜才通知結果,但我露出失望的表情後,面試官說可以幫我橋早點通知,結果當天晚上六點就打來了,有點嚇到哈哈
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
但也很感謝!
二面
KKBOX 的二面是要做一個 presentation,從通知到二面有整整十二天可以準備 (有點久r ),而這之間我有去請教 jserv 老師該如何去準備一個 presentation,以下就是老師提到的一些 tips:
- 我的題目是「 json-ld 」。
- 通常進二面就代表你蠻有希望的,所以要好好表現。
- 你必須要知道,聽你 presentation 的是一群工程師,他們肯定對你的題目有所了解,所以介紹什麼的就快速帶過吧,他們要聽的是亮點。
- 看到 presentation 的題目先去 Github 撈一下,你可以看到別人拿這個東西是在做什麼,作為你呈現的內容。
- 做後端很重視「多人連線」和「效能」問題,所以可以多多探討這方面的問題,像是我的題目是一種資料格式,那我就能探討資料壓縮,以及和其他資料格式之間的優缺比較。
- 拿這個題目與其公司做連結,面試官不會出一個跟公司毫無關係的題目,所以你必須想出他的各種應用。
- 實做!!!! 秀出一段 demo,像我就把它跟我的專案 VideoSharing (仿 YouTube 的影音串流網站) 做結合,並在 web browser 上面做出應用的呈現。
實做的程式碼 認真寫、好好寫,因為這是你寫出來的!程式的結構設計要好,coding style 要檢查!
有做這個非常加分rrrr ,主管聽你打嘴砲幹嘛?那就做給他看,這頁他真的特別叫我停下來看個清楚 XD
- 再來就是簡報做完自己計時瘋狂對空氣講,記得與電腦螢幕同一個面向練習,因為你是對著主管講,講不順的地方就修正、必要就更改投影片。(我講了十幾遍有了,也真的改了不少東西)
- 把之前研究、寫過的東西印成紙本,在談話之中可以不經意的說出「這我之前做過…」,並以文件佐證。
- 如果問到為什麼不讀研究所,不要說什麼成績很爛、沒考上的爛回答,說你想先到業界看看生態,若真的覺得研究所是必要再回去讀這個學位,但老話一句別說謊。
再來正式進二面階段:
- 兩個面試官和上次一樣的,在加上一個 HR,一個工程師?(忘了 title 抱歉)
- 一開始就直接叫你簡報,沒有在客氣的哈。
- 再來就是問問題,因為另一個工程師還不了解我,所以問的跟上次差不多,主要是針對做過的東西問。
- 還有問簡報怎麼準備的、準備多久。
- 很多履歷上的東西,學校都沒教你是如何學習。
- 再來就是 HR 了解你的人格特質,講公司待遇和環境,然後叫你題問題。
- 這邊的我提出的問題主要是針對公司問的。
- 像公司的學習資源有哪些。
- 工時、工作環境、加班等等。
- 進去一定要用 Mac 嗎? 就被笑了XD,KKBOX 會配給我們。
- 要離開前我問工程師們我 presentation 的表現,因為也準備了一陣子,想得到一些正面回饋。他們說不錯 ><,但若能用故事去包裝會讓演講更生動 (好難r )。
- 結束送離大門口。(記得道謝阿,禮貌很重要)
二面結果及感想
- Offer Get (等了四天r ,那幾天超級煩躁哈哈)
- 有些問題還是沒答好,像是他有問會寫推薦系統嗎?我一時轉不過來,因為我之前有寫過 Kaggle 的預測問題,這兩個的原理其實是一樣的,但我答沒有 qq
- 然後一個工程師提了幾個伺服器的名子我還真的完全沒聽過,功力真的還不夠深厚 r
Gerena
這是有同學跟我說那邊薪水還不錯我就投了一下,而且那時也正在等 KKBOX 的二面,順便練練面試功力。(有進的話還能跟 KK 說另一邊也在等我考慮之類的哈)
一面
- 面試前有寄信,叫我準備之前的作品,現場會 demo , 結果完全沒有QQ 應該是要自己秀給他看吧。
- 面試我的是 Garena CTO 的助手
- 首先叫你自我介紹,因為他看起來很大咖我就直接挑大重點講 XD
- 之後他出了三題簡單的問題:
- HTTP 的方法,GET 與 POST 差別。
- 講出你知道的 sort 排序法,並討論時間及空間複雜度。
- MySQL 的語法,SELECT,INSERT, UPDATE,DELETE,DROP。
- 最後介紹這公司的營運模式,和問問題時間。
- 他們有一點特別強調,很重視人才,強的人會送去新加坡培訓哦!
- 他說我們新人一開始會先做網路遊戲活動頁面的部分,看看程度在做職務的更動。(這部份我蠻不喜歡的)
- 最後問了一下我期望薪資。
- 不錯的是當下就說會有工程師與我二面,就不用渡過痛苦的等電話時間。
一面結果及感想
- 約二面就是隔天,線上與新加坡那邊的工程師面談。
- 松菸真的挺氣派的 XD
二面
可能有點忘記了,想到盡量寫囉。
- 和新加坡工程師一對一。
- 先叫我自我介紹。
- 他說他們想招收的人是「全端工程師」,因為一開始進去是做遊戲活動頁面,後端工作感覺就很少。 (我猜的哈)
- 然後說後端要用 Python,但職缺明明開 PHP 阿 XD
- 開始問問題。
- 問會不會 React 。(我不會 qq)
- 問會不會 Bootstrap (我是用到才查的那種),出了幾題他就放棄了,我都用最鳥的方式做。
- 設計一個抽獎活動所需的資料庫 table,他有講詳細的需求。
- 問知不知道 MySQL 的 index,拿來做什麼的,又要如何實做?
- 這邊我說我不知道
- 但我提出自己的實做想法 hash (memcached 還真的是)
- 但 innodb 的應該是 b+ tree 的變化,當初系統軟體課應該順便研究另一組的 TAT
- GET、POST 的差別。 (這誰都會,但每個公司都考)
- 難在我提到 RESTful API, 他問了為何要分 POST 和 GET,參考資料
- 問會不會 Ajax 。(我也只是用過…)
- 問他問題。
- 結束。
二面結果及感想
- 感謝函
- 前端的問題被問爆了也沒辦法
- 其他後端問題也是我覺得面過比較難的,還要在修煉r
- 不過蠻欣賞他們回函的神效率,一直拖的真的讓人很焦躁 (兩天吧)
總結
大學畢業的新鮮人最會遇到的問題就是「沒籌碼」,你想想你和一個碩士生如果面試情況差不多,我是老闆會選碩士碩士生,因為他多讀兩年書阿! 比工作經歷你也沒有,所以我覺得要錄取一個學士生,完完全全取決於你履歷和 Github 的亮點,以及你面試是否有突出的表現。
另外我想說的是,以我這種大一、大二都在玩樂跑活動、成績總是班上倒數五名的人都可以做到了,沒道理你們不行,重點在於「態度」!你是否有想好好把一件事做好、你是否有認真去規劃你的下一步,而不是佛系求職,以為老天會自己把機會丟給你,機會是靠自己爭取的!
Yeah,終於寫完這篇文章了!如果有什麼問題的話可以 email 給我 「cort8573@gmail.com」能力所及之內,我會盡量回答的,也感謝花時間看完這篇廢文的你們 🙏。