去年面试google时recruiter问要走一般SWE流程还是embedded
当下觉得很难选,上网找又很少embedded SWE面试资讯
事后想想不如自己写一个吧
板桥办公室新启用应该也有些embedded SWE缺吧,面试进来可以把座位填满XD
主要关注在embedded SWE面起来有什么差,以及准备过程
不会提到问了什么题目
======== 背景 ========
一线IC设计厂5年经验,然后转战新创
之前面过两次google
第一次leetcode刷了大概40题,面到onsite被HC reject
第二次刷了大概300题,onsite不够好没送HC
(HC = hiring committee 一个会议决定这个人是否通过,详情不是很清楚)
======== recruiter 接触 ========
recruiter直接透过email来询问,大概是因为之前有面过吧
我回复有点忙几个月之后再说,就陆续信件往返了几个月
想说来面看看,recruiter也有大概说明面试流程
我当时的理解是这样:
phone interview => (virtual) onsite => team match => 谈判跟录取
事后回来看也是这样
======== phone interview 准备 ========
recruiter 给的资讯来看这边general SWE跟embedded SWE没差
另外先前不知道看哪篇文章说刷题分门别类刷比较有效率
这次尝试此方法来熟悉一些类别,的确很有效,尤其是找回记忆特别有效
熟悉的方法:
针对要熟悉的类别 (leetcode有帮题目分门别类)
先刷该分类的easy,刷了几题确定基础能写出来
再去刷mid,刷到10~15min能AC就差不多了
分类就array, tree, linklist, DP之类的,常见的资料结构跟算法都刷一刷
这边弄完大概一百出头题
======== phone interview ========
题目大概在leetcode easy~mid之间,follow up有到hard我只有口述想法
面起来感觉的确跟embedded无关
另外题目完全没看过但很有趣
======== onsite interview 准备 ========
过了几天recruiter说通过了并转介给另一个recruiter
先聊了一下并有问说我想要走general SWE流程还是embedded SWE流程
当时得到的资讯是说走 embedded SWE会有一些关是domain interview
面完通过之后team match主要会跟需要embedded SWE的主管谈
(这边印象模糊,不太确定是不是这个时候得到的资讯)
最后可以拿到offer的话job title也会是SWE
当时觉得很难选(所以有了这篇文章)
我选了 embedded SWE 流程,然后recruiter信件给了我一些资料跟说明
有提到面试包含domain interview / general SWE interview
/ system design interview / soft skill interview(?)
资料里面有提到embedded domain大概要准备哪些知识
列的超多,但大概七八成就是OS课本里面那些章节
我准备这些知识的步骤是这样
1. 先上网查相关知识有个概念
最好是能找到一些大学OS网站的投影片看一看概念比较全
2. 想一下它们跟之前工作做过的project有什么关联
或是实际上在linux写kernel driver or user space program怎么用这些知识
3. 上网搜寻Linux怎么实作这些知识(或直接看code)
或是各家硬件怎么运用这些知识
例如我可能想知道Linux怎排程的,或是CPU cache有什么实作技巧/各层多大之类
4. 试想如果我来面试别人,针对这些知识怎么问问题
列出这些问题的中英文跟我拟好的回答
(因为我有排到非台湾site的面试官所以英文变更重要)
当时是弄了很久,拟了大概三四十题吧(有些抄网络上的),最后被问得不多但还是有用
我不确定有没有更好的准备方法
刷题部分我是分类刷一刷后随机刷
有看 cracking the code interview 我觉得帮助算大
里面的trick都看过,但就当整理复习
快到面试的时候大概想了一下如果我是面试官我针对embedded SWE会问啥
针对这种问题去刷 (array / bitwise之类的)
面试前看了一下大概三百出头题 (包含phone interview前刷的)
======== virtual onsite interview ========
因为不能讲题目,列点列出一些经验
* domain interview 写白板题的时间还是占不少
写完对面有问我一些,跟题目有关的 OS 或 embedded 相关问题
然后题目的包装我感觉都比较像是日常工作会遇到的问题
(帮总统规划飞去各州演讲的最短路径我感觉就不像是日常工作会遇到的问题XD)
有这样的题目包装,蛮容易延伸问 embedded 相关知识
* general SWE interview 那关,对方应该还是知道你是面embedded SWE
我被问到的题目我感觉还是有embedded相关,但不知道是不是general case
* system design 也是 embedded 相关,一样要花时间写code
* coding难度(体感),一半的关卡有问到leetcode hard,至少都有问到mid
没有一题是网络上有看过的
* 有一关软实力,细节有点忘了,就问一些日常跟同事工作相处的经验
======== misc ========
* team match 就是了解一下 team 也让主管了解你
可以趁机问一下部门技术线或风气之类的
之后如果你要去主管也要你,就再往下走
* 在任何一个stage收到recruiter的信约时间说要short talk / small chat
我认为都没有正面或负面的意思
有收到reject消息过,也有收到pass往下一关消息过
电话接了才知道
* 整个面完我感觉embedded SWE需要更多一点 embedded or OS 相关知识
但没有被问到很疯狂的算法问题
整体面试差异比想像中小,没有因为是面embedded就很少code很多知识问答
(只能说我的经验是这样,不确定是不是普遍现象)
再让我选一次我还是选择走embedded SWE流程
因为跟之前工作有强相关准备起来还是比较有底
* 不用全部都面的超好也有机会上
我virtual onsite有几关事后知道自己有些地方讲错,还好还是有过HC
* virtual onsite都远端,我是分几天面,也有排到非上班时间面
(我排到有几场是一大早,所以就有猜测到是不同时区面了)
======== 刷题心得 ========
刷题我是leetcode另外开一个session刷,最后写了三百出头题
刷的时候卡十分钟就看讨论,看完不写,书签起来,隔天写
写的出来也一定看讨论,看有没有更好写法,有更好写法就比照前面步骤隔天写
有时候写完会发现,上次准备面试的自己,也有写过这题
回去看以前自己的写法,常常完全看不懂
才有感觉程式的可读性很重要,前一次大概是太注意刷很多题没管coding style
这样是不行的会炸开
但有些hard看完解法之后觉得解法太专一只能用在这题,我就会摆着不管他
有可能你之后真的一辈子没看过这种解法了,就自然忘记吧
但也有可能又在其他hard看到这种思路
看过两三次有点印象的话,那我还是会花时间吸收(仔细看懂+写个两题)
也因此学了一些思路
刷到面试前我hard大概可以解掉六成
另外刷到一半有体悟,刷题大概要锻炼两个部分
其一是写程式速度跟稳定性,各种基础工具写的越熟速度越稳
例如某题你可能一看就知道是array binary search
写的不熟会卡一些奇怪的地方,right index要指哪里,要不要加一之类的
写的熟你可以很快写出来,甚至直接呼API看面试官有没有叫你要自己实作
另个例子是写tree traversal就会想说recursion截止条件是要怎样
是要传进来node是null截止还是node的child是null就不往下继续呼叫
卡一些奇怪的地方,多想几分钟,就比较吃亏
其二则是用什么资料结构跟算法解题,也是一般比较会被注重的地方
二很重要,整关炸开通常是二没想到
但是一也很重要,一做得好,暖身题或题组第一题可以快速解决
等于是帮后面的难题争取思考时间,也有更多余力注意corner case之类的细节
另外有空的话找人帮mock interview会有很大帮助
习惯时间压力是一个点,有人帮你看,你的解释是否能容易被听懂,也是重要
要不然就多面几家练习也行(?)
======== 总结 / take away ========
* 体感来说,选embedded SWE面试,会被问一些 OS / embedded 相关问题
白板题比较像日常工作会碰到的问题,然后借助题目延伸问相关知识
跟general SWE 面试没有差到太多
* 面embedded SWE 进来就是挂SWE
* google 还在招人
祝大家2021都能快乐工作囉