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