前篇面試心得分享: https://www.ptt.cc/bbs/Soft_Job/M.1478494372.A.792.html
(1) 公司: 誠蜂(honestbee) 職位: Android Developer
honestbee為新加坡商,主要是做代購服務(台灣官網:https://honestbee.tw/zh-TW/)
,先前有在mit.jobs和Soft_Job版上徵才,由於他目前在台灣的業務僅限於台北,因
此團隊尚在擴大中,算是已經有一定規模的新創事業,衝著它在板上表示不限資深職
位便斗膽丟了CV過去,人資確認條件符合便會請你填phone interview的時間,面試分
4個階段(皆英文面試):
1) Phone Interview: 這部分人資會先請你自我介紹,並且會要求你說明你為何認為
自己適合這個職位? 過去有無做過android相關的專案,成效是如何? 對於honest
-bee的了解為何? 以及你個人未來3~5年的職涯規劃? 最後你為何想要加入honest
-bee? 你能替公司做什麼? 公司又能給你什麼?
2) Technical Interview: 自我介紹及專案成果說明,然後就是直接考白板題
3) Culture Interview: 這部分在測試面試者人格特質是否符合企業文化
4) Founder Interview: 過前3關就有機會和創辦人面對面接觸,聽說會壓力測試XD?
面試過程: 在第一階段很需要面試者展現自己的motivation,最好能先思考過申請的
intention是什麼,這會影響人資對你的觀感,並且回答盡量能夠和申請職位有相關性
,例如我表示我所學技能和這職位相符,過去也已經有參與專案開發的經驗,順道比
較新創事業和一般大公司的優缺點,強化自己非這工作不可的動機,然後說明過去在
碩論上所得到的成果,期望未來可以在工作上做另一層次的突破...,人資覺得ok便會
口頭邀請進入第2階段面試; 第二階段是到honestbee台北公司面試,面試官為新加坡
Sr. Technical Manager,先做自我介紹以及android作品demo,面試官會從你的作品
裡面問你可能已經需要具備的概念,甚至可能問你的作品在其他國家是否有應用價值
? 這部分仰賴面試者對於自己專案的熟悉程度,做完初步了解後便會開始請你上去解
白板題如下,多數都是考android和Java問題:
[1] 請在白板上畫出life cycle的流程圖,並解釋每個state運行時的作用?
這部分最好能夠熟悉每個state基本上會處理的事情,例如:
onCreate(): 通常會先做parameters setup或是resources configuration
onPause(): acticity進到這state會先將需用到的變數或資源暫存起來
onDestroy(): 回收運行時記憶體資源並關閉activity
...
[2] 你目前知道android中有哪幾種儲存資料的方式?
# 儲存在local file
# 儲存在SQLite DB
# upload至遠端server
# 使用ContentProvider
# 利用SharedPreferences儲存; 不過這項當下我沒有想到,因為真的沒用過...
[3] 說明你用過幾種layout?
這題應該是要考5大布局,然後我傻傻地只回答前兩個QQ
LinearLayout/RelativeLayout/FrameLayout/TableLayout/AbsoluteLayout
[4] 說明finalize()這個function的作用為何?
主要是可以覆寫(override)base class的同名函式,由使用者自定義資源釋放的
機制
[5] 如何使activity進不去onStop()和onDestroy()這兩個狀態?
這題我倒了...,以前沒遇過這個狀況,聽說是在這兩個state前先呼叫finish()
,實務上是可以這麼做啦,不過應該不會有這種寫法出現才對?
[6] 今天給你兩個class分別為A, B,請在白板上寫A如何繼承B
public class A extends B{
//do stuff
};
[7] 承[6],假設在class A裡面有一個private member 'str',實作一個function,
比較兩個字串是否相同?
public class A extends B{
private:
String str;
public:
boolean strcmp(String s){
if(str.equal(s))
return true;
return false;
}
};
[8] 舉例說明什麼是function overloading? function overriding?
[9] 假設今天有一個interface C,寫下你要如何在class A實現C?
public class A implements C{
//do stuff
};
[10] abstract class和interface有什麼差別?
[11] 假設今天有其他class D, E, F,class A可否繼承這3個class?
無法,Java無法多重繼承
[12] 承[11],那你要如何實現多重繼承概念?
將D, E, F寫成interface,再由A去實作三個interface的protocol
public class A implements D, E, F{
//do stuff
};
[13] Java和C++的差別在哪裡?
考完這些面試官就沒有再問下去了,進入聊天時間想知道我還有哪些問題,我大概跟
他問了一下這個職位上需要做哪些事? 另外順道分享我最近求職的歷程,想知道目前
新創公司大概都會需要哪些類型的即戰力,雖然面試官認為我答的不錯,但是他還是
希望這位置是由資深人員擔任(心碎~),因為新加坡公司步調和壓力都比較快,幾乎每
個月就需要開出新的project,因此有快速上手能力的人最需要,他也建議我或許可以
嘗試嵌入式系統,面試官先前是在CyberLink服務,聊到這就差不多換下一位,結束面
試。
結果: 感謝函,沒有3面。老實說面試到這一家我大概感受的到一般新創對沒有工作經
驗的新人看法是如何?雖然有違我當初求職的初衷,但是想了想也不無道理,沒有工作
經驗要闖新創簡直跟衝入火海沒兩樣,沒燒死也半殘,因此我稍微調整了一下求職方
向改以一般外商or大公司為主,雖然後續還是有其他新創面試,多半是不期不待。
(2) 公司: 米波國際(MeepShop) 職位: Software Engineer
這是一家電商(https://www.meepshop.com/),老闆似乎是由攤販起家的,累積了10年
多的銷售經驗,以既有的客戶群為基礎,轉向作為銷售平台提供者,但我也必須說,
這家公司大概是我面試以來最無感的一家了XD,因為全程其實沒有被問到太多技術問
題,反倒是對於我的背景及個人特質比較好奇,老闆喜歡看到個人背後的"質"在哪。
面試過程: 這部分分別和CEO及CTO面談
CEO: 由於我早到了,老闆先請我到他的辦公室面談,請我先做自我介紹,順便問了我
一下最近求職的類型和方向,並且和我介紹目前公司的規模和未來走向,聽聞我最近
找新創的歷程,也給予我部分建議,多數新創為了成本的考量其實不會想要用新人,
接受Junior的公司還是有,但是可能要碰運氣。此外他也表示公司未來不太可能朝向
大型企業方向發展,畢竟規模一大起來勢必要更多管理成本,終端用戶的訴求便不太
容易被聽到,因此會讓它保持彈性成長,講到這裡就差不多請CTO進來和我面談。
CTO: 由於CTO是比利時人,全程英文面談,看完我的Linkedin後他問我過去在校時擅
長做哪種工作,我回答數理建模及分析,並且有自行閱讀文件的能力,因此學習新技
能並非問題,接著他詢問我對於backend的工作是否有興趣? 由於SQL的經驗其實不到
一年,這部分我便誠實跟他說我的狀況,但是他並不是很在意這件事,反倒是從我過
去的學術經歷裡推敲我可能擁有的潛質,另外有詢問到我是否懂前端的技術(EX:html,
css, javascript...),再來則是要我說明過去有做過哪些專案,如何實現要求的功能
等等,最後他問了我的期望薪資,依它在Inside Job Board上的開價是N-5k起跳,不
過因為我也沒有太多backend的技能,所以就先開N-5K給他,CTO點點頭,結束面試。
結果: 無聲卡
(3) 公司: Animoca Brands Co. Ltd. 職位: Software Engineer
這是一家做遊戲開發的港商(http://www.animocabrands.com/),聽head hunter講述
應該是這兩年在台灣設立的據點,從1998年至今應該已經有開發超過上百款遊戲了,
據我面試中得知,台灣團隊中僅有4位台灣人,其他都是外國人,所以環境應該算是滿
國際化的,這家是在Inside Job Board上投遞的職缺,104上也有在徵才,不過建議投
英文CV比較適合。
面試過程: 面試分兩階段,第1階段和台灣工程師面談,第2階段和香港技術主管SKYPE
面談(皆英文面試):
第一階段到中正區辦公室面試,面試前會先考邏輯測驗和C/C++筆試,筆試部分主要出
題方式都是給你一段CODE,選出執行完後會印出的答案,這部分主要考的內容大致上
是pointer/reference用法, inheritance/polymorphism/virtual觀念,少數有考到用
recursion方式對tree做traversal,熟悉的話其實不會太難,都是選擇題。
面試時主要是2位工程師面談,一開始先做自我介紹以及展示android專案成果,由兩
位工程師分別針對作品提問,接著下來開始會問滿多OOP概念,不論是C++還是Java,
以及少數OS:
[1] 請說明什麼是OOP?
[2] 請解釋data encapsulation的意義是什麼?
[3] 請說明struct和class的差別?
[4] 請說明什麼是inheritance?
[5] 請解釋polymorphism是什麼?
[6] 請說明什麼是abstract class? 它和interface有什麼差異?
[7] 請說明process和thread的差別?
[8] 解釋何謂deadlock? 原因是什麼?
[9] 承[8],你要如何解決deadlock的狀況?
講到這就差不多了,接著其中一位工程師便接著和我介紹公司的營運狀況和工作時需
要用到的技能,順便跟我說明一下在香港總部的情形,基本上他們會定期和香港的技
術團隊視訊會議,一年會有不到一個月的時間出差和香港團隊合作,總之英文很重要
,隔天就收到二面通知,準備skype和香港主管面談。
第二階段主要會考DS和Algorithm,這部分先前有耳聞過,所以讓我緊張了一陣子,不
知道會問出什麼題目來,因此面試前把常考的DS和Algo重新實作了一遍,面試當天技
術主管會分享一份google doc給你,會要求你在上面寫code給他看,他也會寫部分程
式要你回答問題,由問答的過程中由淺入深逐步問出你的能力到哪,也會依據你的回
答決定出題類型,以下為印象中有考過的問題:
[1] 考官要求我寫一個 class A,要產生A的instance有哪些方式?
class A{ A obj_a;
//do stuff A* p = new A();
};
[2] 承[1],面試官將我的code貼到一個function裡面,問這樣這兩者有何差別?
void foo(){
A obj_a;
A* p = new A();
}
這應該就是要你解釋stack和heap的差別了
[3] 承[2],寫一段code釋放heap的記憶體
void foo(){
A obj_a;
A* p = new A();
delete p;
}
解釋delete這個運作會發生什麼事
[4] 面試官寫一段類似fibonacci的程式碼,問我這段code會發生什麼事?
uint fib(uint n){
printf("%d ", n);
return fib(n-1)+fib(n-2);
}
ex: fib(3);
一開始我回答會run time error,因為參數要求為unsigned,recursion往下走應
該會遇到negative value,不過考官給了提示,unsigned value有一段範圍,超
過就會"重新循環",所以會印出 3 2 1 0 UINT_MAX, UINT_MAX-1......
[5] 承[4],既然我都講到recursion,請修改這份code,寫成遞迴版本的fibonacci
uint fib(uint n){
if(n == 0 || n == 1)
return n;
else
return fib(n-1) + fib(n-2);
}
[6] 承[5],上述code的複雜度是多少? 為什麼?
O(2^N),在遇到boundary condition前,每次都會產生兩個branches,各branch
又會再產生另外兩個branches...,依此類推複雜度(2*2*2*2*....)
[7] 既然如此,有沒有什麼辦法降低複雜度?
當時第一個想法是利用dynamic programing,實作一個cache儲存每個子問題的解
這樣就可以減少重複計算的次數
class cache{ uint fib(uint n, cache& tmp){
//do stuff //do stuff
}; }
[8] 承[7],那還有沒有更快速的方式可以比這個更快?
(靈光!) 這可以用iteration方式解決,複雜度O(N)
uint fib(uint n){
int n1 = 0;
int n2 = 1;
int val = 0;
if (n == 0) {
return n1;
}
else if (n == 1) {
return n2;
}
else {
for (int i = 2; i <= n; i++) {
val = n1 + n2;
n1 = n2;
n2 = val;
}
}
return val;
}
[9] 假設今天給你一堆integer values,你會如何有效率的儲存或存取他們?
當下回答用hashtable
[10] 承[9],你會如何實作hashtable,假設hashtable是fixed size?
利用modulo operator(%),將不同integer儲存到對應的index
index = key % size
[11] 承[10],hashtable是固定size,勢必會遇到不同值的index相同的狀況,你要如
何解決?
當下我以為是要處理race condition問題,就答使用mutex/semaphore的機制,考
官再次說明了題意。我突然理解他想講什麼XD,可以實作list儲存相同index的整
數值。
問到這裡面試官就沒有再問下去了,接著稍微說明了一下如果進入這間公司我大概會
做哪些事情,然後就換hr和我面談,詢問我對於這間公司的了解和求職意願,由於這
間公司有和台灣人力公司合作,所以核薪部分會依據台灣薪資水平去計算,不過還是
有到我要的標準啦。
結果: offer get,薪資為N
(4) 公司: 洪量科技(HLX Technology) 職位: Software Engineer
洪量科技在板上的幾乎是沒有任何討論,先前在Inside Job Board上看到這一家,稍
微研究了一下HLX的背景(http://www.hlxtech.io/),主要是做FinTech的公司,可能
須要用到machine learning/modeling/finance等背景的知識來應付他們的工作,另外
在官網上也有看到paper發表,所以剛開始我有點不明白這家到底是研究機構還是真的
有在進行FinTech技術開發,但是從它職缺來看技能幾乎相符,還有用到matlab,這幾
乎在其他家看不到,而且Job Board上package開 1500K up,照理來說應當是板上的熱
門焦點才對,因此我便抱著越級打怪的心情丟了CV過去,一探公司的神秘面紗。
面試過程: 分兩階段,筆試 -> 面試,筆試當天有幸進到該公司,發現總人數應該不
超過10人,辦公室是由透明玻璃隔開,因此你可以清楚的看到所有人的舉動,人資一
會給了我一份7頁考卷,作答時間共1小時,結束後會在依作答結果決定是否2面,大致
考題不脫離以下幾種類型:
1. Linux網路管理相關指令
2. Design Pattern
3. Function Implementation
4. Algorithm Analysis
(ex: best case/worst case/average time complexity/recursion/DP...)
5. OS
以下列舉我還有印象的考題,大抵上Algorithm考題占多數,OS相關很少,由於本
人沒學過Design Pattern,所以考試時一律跳過QQ,但大抵上就是你得用c++實作
Design Pattern,看來小的我要前來踢館還是太早了:
[1] 請寫出linux command line,你要如何釋放一個運行中的process?
[2] 請寫出linux command line,你要如何讓一個process在背景中執行?
[3] 請寫出linux command line,將一個路徑下的所有檔案copy到另一個路徑下?
[4] 請寫出linux command line,你要如何知道目前有哪些connection和自己相連?
[5] 請寫出linux command line,你要如何判斷目前network的連線狀況?
[6] 請實作一個swap function交換兩整數,但是禁止使用暫存變數
(hint: bit operation)
void swap(int& x, int& y){
x = x^y;
y = x^y;
x = x^y;
}
[7] 題目給一個階乘函數的數學式,請實作Divide and Conquer方式
1, if n equals 0
/
fact(n)
\
n!
int fact(n){
if(n < 0) return -1;
if(n == 0 || n == 1) return 1;
else return n * fact(n-1);
}
[8] 承[7],請問是否有更快速的方式? (改成iteration)
int fact(n){
int val = 1;
if(n < 0) return -1;
if(n == 0) return 1;
for(int i = 1; i <= n; i++) val *= i;
return val;
}
[9] 承[7][8],請說明這兩種執行方式有何差異?(比較recursion和iteration優缺點)
[10] 給定兩個任意長度的整數陣列,請用最快速的方式實作一個function,印出在此
兩個陣列中只出現一次的整數(彼此不重複)?
ex: A = {1,2,5,3,6}
B = {1,8,2,6,4,7,9}
result: 5 3 8 4 7 9
這題當時因時間關係我只有寫出O(n^2)的算法,不過應該還有更快的方式,例如
可以用cache紀錄已經重複的值,這樣在後續比較時就可以減少重複比較的次數
[11] 給定長度為1000的整數陣列,所有數值介於1~1000,彼此不重複(unique),並且
是以random方式排列,並未做sorting,假設現在我將陣列中某個值更改為0,請
找出該值的"前一位"數值? 請實作一個function
[12] 承[11],best case的複雜度是多少? worst case的複雜度是多少?
平均複雜度是多少?
[13] 你要如何預防locking的狀況?
考完當下沒有啥特別感覺,只知道還是先練幾年功再來踢館吧,便離開公司
結果: 不意外的感謝函,不會Design Pattern真的很傷
(5) 公司: 商凱捷管理顧問股份有限公司(Capgemini) 職位: Developer
Capgemini的主要業務可以參閱官網https://www.capgemini.com/,大抵上有很多面向
,舉凡保險, 房地產, 金融科技, i-Service等等都有涉略,而我應徵的是南港研發部
門,由於HP是Capgemini的客戶之一,因此為了強化合作,直接在南港HP部門對面也開
一個LAB出來,由Capgemini協助HP開發整合測試平台,會徵人是因為HP研發部門人數
擴張,為了因應擴張的業務必須找人進來分擔loading
面試過程: 面試分3階段,筆試 -> PM, CTO面談 -> HR面談
第一階段筆試HR會寄一份試題給你寫,寫完後回傳,交由CTO看過後,認為你OK便會安
排2階段面試,筆試主要語言是C++/C#/pseudo-code,挑你熟悉的寫就好:
[1] 實作一個function決定每個integer轉成binary時,有多少bits為'1',例如5轉為
binary為101,有2個bits為1,依此類推~
(hint: bit operation)
[2] 給定一個singly-linked list,請實作一個演算法可以找出"倒數第3個元素",若
list長度不足3則回傳0,例如 1->3->6->2,回傳3
[3] 給定一個tree diagram,請寫出以DFS(Depth First Search)方式搜尋某個節點時
,會經過的節點
[4] 給定一組字串,請實作一個function找出"第1個","非重複"的字元並回傳
ex: apple,回傳 'a'
[5] 請實作一個function決定一組字串是否為palindrome,禁止使用recursion
[6] 請說明在c++/c#中,你分別用何種方式處理race condition的問題?
[7] 說明abstract class和interface的差異
其實考題都不難,程式的部分我在自己工作站上完成便一併寄過去,不久就收到通知
第二階段須到南港部門面試,先後由PM及CTO提問,前者問題多偏向臨場反應及個人特
質,CTO則是針對你目前現有的知識背景做了解,這部門算是比較願意給Junior機會,
一開始先行做自我介紹,並demo作品,由兩位主管分別對作品提問,由於作品裡用到
G-Sensor,兩位順便和我分享一下筆電裡的G-Sensor有哪些功能? 再來是兩位提問:
PM: [1] 可以說一下你對我們公司的了解嗎?
[2] 在履歷中你分別列出3項過去曾經參與的專案,可否說明一下你在這些專案裡
所扮演的角色? 以及你所負責的部分?
[3] 你在履歷裡有寫到IoT專案經驗,可以分享一下你對這個平台的了解嗎?
[4] 假設今天團隊要共同完成一個project,但是主管可能loading上分配不均,
你會如何因應這個情況?
[5] 由於我們是和HP lab合作,因此勢必會時常和對方討論測試結果,倘若客戶
堅持自己的觀點才是對的,你會如何說服他?
[6] 說說你3~5年內的職涯規劃?
[7] 你有任何英語檢定的成績嗎? 你要如何證明你的語言能力?
CTO: [1] 可以說一下你認知中的軟體開發流程是如何?
[2] 說明user mode和kernel mode的差別?
[3] 你是否懂c#?
[4] 你目前用過哪些Windows-Based/Linux-Based的作業系統?
[5] 說明你對於X86/X64/ARM架構的了解?
[6] 說明今天一台電腦從boot時到完全run起來,內部的運作方式?
[7] 說明你對linux kernel的了解程度?
以上大致為印象中有問到的問題,不過CTO的問題答不太出來沒有關係,他主要是希望
了解你目前的背景知識有多少? 因為試用期有6個月,所以可以想像有不少東西需要學
習,內部有許多e-Learning的資源,對內部員工是完全開放的,看你要不要使用而已?
最後PM口頭給我第3階段面試機會,要我回去等通知,結束第2階段。
第3階段是到信義區大樓和HR面談,這部分就比較像是閒聊了,HR要我說明一下目前對
這間公司的了解程度? 另外對於這個職位上我需要做哪些事情? 目前求職過程中大多
是傾向哪些類型? 至今求職歷程大概是怎樣的狀況? 未來職涯規劃? 認為我們公司和
其他公司有什麼不一樣? 最後還有講到目前台灣求職平台的現況等等,然後結束面試
,等候通知。
結果: 等候中,整體而言這家公司氣氛應該不差,可以學到很多東西。