2020年底碩士新鮮人軟體找工作紀錄跟心得分享(前端為主)

Kuo Jennifer
20 min readFeb 5, 2021

--

一個程式能力普通努力程度也普通的人的經驗分享,提供一個不是神人文的普通人視角,希望可以增加大家的一點信心。

照片是新竹的將軍村,就在我家附近,算是一個隱藏景點嗎? XD
照片是我家附近的將軍村,應該算是新竹的一個隱藏景點吧?

前情提要

本來預計2020年八月口試完,隔年春天的學期要去美國交換,中間變成一段空白期,九月十月就在打工換宿跟打混中度過,中間一邊觀察那邊學校的情勢。但因為疫情似乎只有越來越慘烈,老爸表示:你就認命去找工作吧~

基本上的時間線是,十一月初開始準備履歷+個人網站+面試準備,十一月中左右有用Meet.jobs的快速面試來試水溫,十二月開始大量投履歷,一直到一月底才確定工作,差不多經歷了快兩個月的面試期。因為都沒有存錢,所以不敢把準備時間拉得太長,怕自己找到工作前就餓死,也因此刷題的數量很少T_T 結果表現其實算很普通,拿到offer我覺得主要是靠運氣而非實力,所以會整理一些我的血淚經歷跟建議,希望可以讓看到的人有更好的表現~ 期待未來再找工作的時候,我可以靠能力拿下更多offer,而不是很心虛的祈禱自己運氣好QQ

背景經歷

清大資應所畢業,大學中山資管系畢業,算是資訊本科,只是大學時跟演算法比較相關的就只有大二時修過的資料結構,可想而知到現在是忘的光光了。資料庫因為比較少寫後端,也忘的差不多。研究所因為我碩論做跟VR還有HCI比較相關的主題,所以跟技術也沒太大的關係。碩一暑假有在台北的IBM實習過,主要是寫Java後端跟Angular前端。大學時做過的project,寫過的東西都比較偏向Web/Mobile application,沒有什麼技術高深的東西。

我的優勢是:學經歷不錯(謝謝清大讓我洗到學歷),加上大學時有蠻多跟前端相關的project以及實習,所以如果是找Frontend Engineer的話。履歷上有蠻多東西可以塞的。加上算是有UI/UX的經歷,對於前端工程師來說算是加分的素質。這部分讓我比較容易拿到面試邀請,雖然沒怎麼找內推,但大部分主動投遞的履歷都有收到回應。

我的劣勢是:CS fundamental的東西很差,比如說資料結構演算法,網路的觀念,線性代數,C/C++等等,我基本上不會。這也是我研究所不敢往太技術的方面發展的原因,也讓我一直不敢拿ML/AI當研究主題,因為我知道我的數學很悲慘QQ 所以如果成功進到面試,被考白板題或是其他Online Technical Review的話,我壓力就會很大,因為解題算是我非常不擅長的方面。加上以前寫程式,基本上都是邊查邊寫,其實也沒有到了解的很透徹,往往求能動就好,根本不能說是有什麼好的系統架構設計甚至Clean Code... 所以如果我要投Backend Engineer的話會比較容易露出弱點。

投履歷跟其他準備

在這邊要感嘆一下,研究所如果有做Data/ML/AI/CV相關的同學真的比較吃香,雖然除了Data Scientist以外這類職缺的需求較少,但會開這種職缺的基本上也是比較大的公司,薪水會比單純的Web/Mobile開發好很多(畢竟門檻較高)。經過考量之後,我覺得我投前端工程師比較適合,所以大部份履歷都是投Frontend Developer。不過要注意的是,這個職缺也是最競爭的,因為現在有大量非本科的人想要切入工程師,都是從前端開發開始。

由於我投遞的以前端為主,所以我認為準備一個可以讓人瀏覽的線上作品集還蠻重要的,就花了兩三天做了一個靜態的個人網站來放之前做過的作品。整理過去作品的確很花心力,有些程式碼都已經不知道到哪裡去了,不過做好之後好處蠻多的,投履歷的時候多了一個可以展示實力的東西,面試時公司如果要求你demo也會很方便,不會找不到散落各地的作品。

雖然最一開始是從LinkedIn開始投,不過我大部分的面試邀約都是透過104拿到的,可見104仍然是台灣最廣泛使用的求職平台,所以花一個下午的時間把104履歷建好還是蠻划算的,雖然過程有點麻煩。其他像是Yourator, CakeResume, Meet.jobs等等平台,可以查到一些新創的徵才消息,也可以投遞看看。我自己的習慣是,如果該公司官網有投遞窗口的話,我就會從官網投履歷,沒有的話才會從人力銀行投。

104網站可以選擇把自己的履歷公開,讓公司可以查看到你的個人資料。我還蠻推薦一開始找工作就先公開履歷的,因為真的有很多公司HR會在上面找人。撇除一些比較奇怪的公司,我大概有收到三四十個面試邀約。因為你的功力會隨著準備面試的期間越來越進步,所以一開始可以先從這些面試邀約中挑一些比較沒興趣的公司來當練功,後來抓到節奏後,再來挑戰比較想去的公司。我犯的一個錯誤就是,一開始就先搜尋我想去的公司來投履歷(新鮮人眼高手低啊),但是初期面試表現真的爛,所以就白白的浪費了很多好機會,不然說不定本來有機會拿到更多offer的,哭哭。

現在好像有規定薪水四萬以下的話就要註明,所以如果看到網站寫薪資面議的話代表至少有四萬以上。考慮到自己是碩士畢業,我給自己立的目標是月薪至少五萬,所以如果看到薪資五萬以下的職缺就不投遞了。這方面Yourator跟CakeResume的薪資都寫得蠻透明的,是一個不錯的參考。另外要注意有很多看公司官網看不太出來在幹嘛,但新鮮人薪水又開的很不錯的公司,有很高的可能性是博弈公司XD 找工作後才知道原來台灣有那麼多博弈軟體公司,但因為我個人興趣考量就都忍住沒投。

在準備的過程中當然也少不了看網路上各種面試經歷分享文,比如說ptt的soft_job版,但看太多神人文的副作用就是會不斷地對自己的信心產生打擊。在看面試經歷的時候,往往感想都是「靠~他也太努力了吧~到底要怎麼準備那麼認真啊,我Leetcode才剛開始練人家都刷兩三百題」「他也太強了吧,到底要怎麼面對白板題然後回答出來這種答案啊」然後越看越想哭。所以我建議面試文不要看太多,適量就好XD 這也是我寫這篇文的原因,以此來提供一個超普通人的心得,程式能力普,連題都沒刷多少的我也能找到工作,相信你也可以!

關於面試的準備,因為我想說都投前端為主,所以注重在javascript上面,花了蠻多時間在看ES6的特性,刷題時也都用js來練習。但現在前端工程師職缺,幾乎都會要求要懂一點框架,尤其是React可以說是目前最熱門的,幾乎公司都會要求使用,所以我也花了兩三個禮拜從零開始學,最好是React Component跟React Hook的寫法都要懂。除了js以外,HTML/CSS/browser知識也要複習,比如說semantic html的觀念,還有瀏覽器載入跟渲染頁面的流程,都是我以前沒學過的。網頁效能的優化也是很常會被考的題目。如果有人有興趣的話,我再整理有看過的學習資源出來。

面試公司

以下的面試經歷是按照時間順序排列。因為自我介紹是每間公司面試的起手式,就不特別寫了。中英文都準備一個版本會比較好,有些外商會要求用英文自我介紹。

新加坡鈦坦 TitanSoft

投遞管道:Meet.jobs 快速面試
一開始想說唉呀這什麼沒聽過的公司呀,來試試水溫好了,後來才發現有眼不識泰山,可是知名的博弈軟體公司呢,薪水聽說也給很好。

先丟一個6題的Online Assessment,平台是HackerRank,時間我記得是兩小時。HackerRank的題目會比Leetcode敘述長很多,比較像講一個故事,所以光是把題目英文看完就已經花掉很多時間了,這部分要習慣一下。雖然我是面試前端,但其中一題還是有考到SQL,讓我查了好一陣子。

線上面試時是由一位人資搭配一位工程師,技術相關的問題我只記得這兩個:
1. 解釋一下OOP
2. POST跟GET差別
都非常基本,也有可能因為我表現太差所以他們只是敷衍一下XD

他們會問你介不介意博弈公司以及輪班on-call,這部分我很老實地說會考慮,所以也毫無意外的掰掰了。

新加坡蝦皮
先丟一個8題的Online Assessment,平台是GLIDER,時間是 60mins,裡面包含一些javascript相關的選擇題跟程式題。這個平台蠻神的,會要求你開麥克風跟攝影機,如果他偵測到可疑的行為,比如說你頭離開電腦畫面,或是攝影機背景出現了兩個以上的人,系統就會跳出視窗,警告你不要作弊XD
第一關線上人資關,會先用英文對話請你自我介紹,然後再切回中文。我聊了之後才發現我烏龍投到新加坡的職缺了,因為剛畢業想先在台北工作,所以請人資姊姊幫我把履歷轉到台北的辦公室,然後就沒有然後了…

PicCollage

投遞管道:官網
線上面試是一個歪國人主管跟你談,人感覺很好,相信辦公室氣氛應該也很不錯。所以這間的面試是全英文,主要都在聊你的經歷跟興趣,也會問你有沒有做什麼side project之類的。聊完之後,會做一個簡單的線上程式測試,他會用一個程式共編平台讓你寫,語言自選,題目是將一句含標點符號的英文句子裡的每個單詞反轉。後來這關之後就被reject了,不然這本來是我最想去的公司之一。

Hahow

投遞管道:官網
線上面試也是一個主管跟一個HR,我只紀錄一些我記得的題目:
1. CSS box model是什麼
2. 如果不用bootstrap 會用什麼方法實作RWD/grid system
3. 使用框架跟原生JS有什麼差別?
4. ==和===的差別? 其中的原理是什麼?
其他就是比較基本的問經歷等等。結果這關之後也掰掰了。

街口支付

投遞管道:Yourator
丟了一個作業,是使用React實作一個和設計圖一樣的登入頁面,並且有一些基本的驗證功能。我那時候剛開始看React,發現沒辦法在幾天內學會,所以就放棄了。

StyleMap 美配 / Frontend Developer

投遞管道:Yourator

這家單純是在平台上亂逛看到,主要做的是美髮設計師的作品展示跟顧客之間的媒合,感覺是想要達到一個美髮沙龍店的去中心化(?),這樣設計師就不用被店家抽很重的成本。CEO感覺技術實力滿深厚的,初期網站跟app都是他自幹,現在公司應該有十人左右。由於團隊成員蠻工程師導向,所以相當注重Clean Code 和 System Design。由於算很新的新創,面談主要都在談公司的營業內容還有一些想法契合度的東西,最後有拿到offer,以新創小公司來說薪水跟福利給的蠻有心的。

玩美移動 / Fronetend Developer
投遞管道:104主動邀約
這家是訊連的子公司,內容是做AR上妝,也有跟很多化妝品公司合作,算是我蠻有興趣的產品。工時聽說比訊連正常許多,薪水也還不錯。

流程是直接到公司面試,一開始會給一份紙本js測驗,考題好像很久沒換了。寫完後會用旁邊的電腦做類似邏輯測驗的東西,每題的時間都很短有點刺激,這種東西沒辦法準備所以就放寬心做吧。再來會有類似多益的英文測驗,但因為聽力可以重播,所以簡單很多。

都寫完後主管會進來跟你面談,一樣大多都是問經歷相關的東西。這部分又是我要深刻反省的部分。因為我以前沒什麼做筆記的習慣,常常都依賴短期記憶,但記憶太不可靠,過了一年多很多細節會忘記,而且並不是所有project的程式碼都可以保留。所以主管問我一些去年暑假實習的技術細節時,我花了很多精力在努力回憶,這應該是一大扣分點,會造成面試的人的不信任感。我在前期的很多面試會掰掰應該有很多是這個因素導致。現在痛定思痛,決定以後做每個project,一定要把遇到的技術問題,克服他的細節過程都好好筆記下來。

中強光電 CiCS / Android Developer (AI Team)

投遞管道:104主動邀約

這家從團隊組成到面試流程都很神奇。中強光電是一家傳統的公司,有做投影機之類的,但這個CiCS部門是另外獨立出來的子公司,主要是想發展AI和雲端這類比較新潮的研發。Team leader的經歷感覺蠻屌的,待過Google, 聯發科, htc等等,基本上完全主導這個小團隊的方向跟招募。團隊成員大多是phd,他們找我的原因是想找一個寫Android但又稍微懂AI的人,來幫忙他們把AI技術實作出來,會找Android Developer是因為很多顯示器都是用這個作業系統。

Round1
主管email了英文小quizz來讓你回答,題目跟統計機率有關,回答完之後會繼續寄下一階段的quizz,這部分主要是想看思考過程,沒有正確解答。

Round2
主管會打來做phone interview,了解你的背景經歷跟意願等等,還有更仔細的說明團隊工作內容。

Round3
這部分比較神奇,是要你讀一篇短的paper,內容是跟機器學習和量子力學(聽起來是不是很潮?)。讀完之後,會用問答的方式,來看你對這篇paper的理解程度。據說是為了要測試面對到全新的知識領域,能否有獨立解決的能力。
paper連結:https://arxiv.org/abs/1901.11103

Houzz / Frontend Developer (remote)

投遞管道:獵人頭電話聯繫
這家是矽谷知名新創公司,做的是跟室內設計有關的平台。可能因為今年疫情,許多公司發現既然都是remote job,那怎麼不找更便宜好用的台灣人呢!(誤) 總之Houzz今年開始在台灣要成立團隊,目前才在剛開始找人的階段。Recruiter一開始就開宗明義的亮出薪水,開給Junior Frontend Developer的package是一年100w-150w!簡單來說就是一個台灣純軟公司不可能給出來的數字,讓我直接驚呆。歡迎各路程式高手前去挑戰。

他們使用的平台是CoderPad,面試官會在上面貼出題目,你就直接在上面一邊跟他討論一邊打程式,然後執行結果給他看。面試是用全英文溝通。

Round1
1. 請舉出三種可以優化網頁載入速度的方式
2. 他是問完POST跟GET差別之後
問說所以可以更詳細解釋為什麼POST比GET安全嗎
除了GET是會顯示在url以外
有沒有什麼其他的原因?
3. What is CSS box model
4. 設定position跟使用transform的差別是什麼?
5. 解釋在browser輸入完url送出之後 發生了什麼事情
6. 解釋CSS的每種position,fixed跟absolute的差異
7. flatten nested array
8. extract url query to json

很酷的是其中一個面試官就是我之前在網路上看到分享在Houzz的台灣女生Hsu Hsu,我在事前甚至有在LinkedIn上請教她一些關於這個工作的意見。面試中她也有問我一些問題,希望我沒有講得太爛。

Round2
這一關我簡直慘到不行,準備不足的問題暴露無疑,有些題目幾乎有寫出來卻卡在一些細節部分跑不出來,甚至因為寫太久,沒有時間公布第二題題目就結束面試了。這邊會分成兩輪,每一輪會考兩個程式題。如果都有寫出來的話應該就沒什麼問題了。不過根據別人分享,如果是應徵Backend的話題目會考到兩題hard的程度,難度真的高... Frontend就是考到medium的程度。

Q1
// Leetcode 150
/*
Evaluate the value of an equation in Reverse Polish Notation.

Eg: (3 + 5) * (7–2)
In RPN: 3 5 + 7 2 — *

3, 5, + = 3 + 5 = 8

Input: [“2”, “1”, “+”, “3”, “*”]
Output: 9
Explanation: ((2 + 1) * 3) = 9
Input: [“4”, “13”, “5”, “/”, “+”]
Output: 6
Explanation: (4 + (13 / 5)) = 6
Input: [“10”, “6”, “9”, “3”, “+”, “-11”, “*”, “/”, “*”, “17”, “+”, “5”, “+”]
Output: 22
Explanation:
((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22
*/

參考答案

var evalRPN = function(tokens) {
let stack = [];
for(let n of tokens){
console.log(n);
if(isNaN(parseInt(n))){
let operator = n;
let b = stack.pop();
let a = stack.pop();
let sum = eval(a + operator + ‘(‘+b+’)’);
stack.push(parseInt(sum));
}else{
stack.push(n);
}
}
return stack.pop();
};
```
Q2
```javascript
/*

Create a sum function that will calculate the sum of arguments. if there aren’t any arguments, return the result, if there are any arguments, return a function that can be used for the next calculation.
For example,
sum() // return 0;
sum(1)() // return 1;
sum(1, 1, 1)() // return 3;
sum(1)(1)(1)() // return 3;
sum(1)(1, 1, 1, 1)(1)() // return 6
sum(1) // return a function
sum(1)…….(1, 1, 1,…1) // return a function
*/
```
參考答案
```javascript=
function sum(…a) {
var sum = 0;
for(let n of a){
sum += n;
}
function f(…b) {
for(let n of b){
sum += n;
}
return f //<- from second call, f is returned each time
// so you can chain those calls indefinitely
// function sum basically got “overridden” by f
}
f.toString = function() { return sum }
return f //<- after first call, f is returned
}
console.log(sum(1)()(2,1)().toString());
// output: 4
Q3
// Leetcode 102
/*
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7

return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
*/const root1 = {
val: 3,
left: {
val: 9,
left: null,
right: null
},
right: {
val: 20,
left: {
val: 15,
left: null,
right: null
},
right: {
val: 7,
left: null,
right: null
}
}
};

QNAP / 前端工程師

投遞管道:104主動邀約
開發使用ext.js
先考一份HTML/CSS/Javascript紙本考題,題目都很基本。

白板題:
input = [6,1,4,2,8,7,9,0]
output = [6,7,8,9]
找最長的連續數字的序列

普安 / 應用全端工程師

投遞管道:104主動邀約
使用AngularJS, Java。一樣是先給紙本考題。

JAVA 部分考題
1. 複製兩字串結合
2. throw Error
3. 印出””abc””會不會有錯
4. int跟Integer的差別是什麼
5.
String str = new String(“Java”);
String str = “Java”;
這兩個的差別?

WEB
1. 用按鈕實作angular ng-show去改變div顯示
C語言
1. memcopy, strcpy 差別
2. global, local , static變數差別
3. struct 指標size

這家後來有拿到offer,做的內容很多應該可以學到不少東西,薪水我覺得也算是不錯的。

91App / 前端工程師

投遞管道:104投遞
直接現場面試,兩位前端主管,會給你螢幕讓你demo你的作品。

1. IIFE是甚麼? 什麼樣的時候會使用他?
2. document load/ready這兩個event的區別
3. hoisting是什麼? 這樣可能會造成什麼錯誤? 如何避免?
4. \==和\===的差別,實作上哪一個比較常使用
5. 白板題: 實作quick sort

Behavior Question:
1. 你在以前團隊,如果發現上線了但出錯了,會怎麼處理?

IBM / Cloud Application Engineer
投遞管道:HR電話聯繫

這個職缺也比較神奇,並沒有被公開在求職平台上。是南港的研發部門要找人,HR說本來開這個職缺是要找資深的,後來好像找不太到,所以決定找一個之前實習過的junior來培養看看。

Round1
線上面談,由兩位南港部門的主管來聊聊經歷,大約一小時。理所當然的主題focus在去年的實習經歷上,這部分又讓我懊悔當時沒有好好做筆記,本來以為這關之後就完蛋了,還好後來還是奇蹟般的進到第二輪。

Round2

第二輪就是到現場面試,一開始會議室裡只有三位主管,後來另外兩位當時線上面談我的主管也進來了,變成被五個人包圍著問問題的狀態XD 除了一樣重複問經歷以外,這次技術題主要focus在Java的部分,然後可以搭配白板說明。

1. stack, queue, list這三種資料結構有什麼不同? 使用場景是什麼? 搜尋的時間複雜度有沒有不同?
2. Thread safe是什麼? 在Java裡怎麼做到? (Synchronize)
3. Class和Object是什麼? 如何讓同個class的Object存取共同的變數? (static)
4. 泛型是什麼? 如何寫一個有Generic type的class?
5. MVC是什麼?
6. 現在來看Model的部分,假設資料庫有兩個table有共同的欄位,如何讓他去處理這部分的資料? (寫SQL JOIN)
7. 在Model這裡,怎麼處理妳拿到的資料? 這種處理資料的class叫什麼?(DAO, data access object)

問完後,有被要求用英文自我介紹一遍,但因為我前面已經用中文自我介紹過了,所以英文部分就講講自己的興趣之類的,他們也只是想大概了解一下你的英文程度。結束後,一個大主管再進來會議室,跟我談之後工作相關的內容,然後第二輪就終於結束了。

後續的審核流程
大概一個禮拜之後,HR打來通知說主管有意願要錄取我,但因為這個職缺比較特別,還需要通過美國Global部門的審核等等,所以也沒辦法保證offer一定會過。然後就開始了約三個禮拜的漫長等待流程…

因為我不是走Campus Hire流程,所以IBM的線上智力測驗面試事後還是要補做。跟去年實習不一樣的是,智力測驗已經從數理邏輯選擇題,變成好玩html遊戲了,我有稍微紀錄一下遊戲內容XD 還好這部分分數應該僅供參考,不然我應該又要被刷掉了。每一關都是靠直覺反應那種,速度都很快,刺激刺激。

Online Assesment 智力測驗遊戲
1. 找最短路徑把球球滾到終點
2. 俄羅斯方塊拼拼圖
3. 拼出旋轉圖像 (身為空間感超差的人最苦手的一關,分數奇慘)
4. 考反應速度 點符合目標數字的泡泡
5. 考反應速度 選左右數字群比較大的那邊

最後經過許多繁雜的文件跟冗長等待之後,終於等到了offer letter,能夠上岸感動到想哭。

--

--