前篇面试心得分享: 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要我说明一下目前对
这间公司的了解程度? 另外对于这个职位上我需要做哪些事情? 目前求职过程中大多
是倾向哪些类型? 至今求职历程大概是怎样的状况? 未来职涯规划? 认为我们公司和
其他公司有什么不一样? 最后还有讲到目前台湾求职平台的现况等等,然后结束面试
,等候通知。
结果: 等候中,整体而言这家公司气氛应该不差,可以学到很多东西。