查看原文
其他

Mid Level码工跳槽经验分享,大厂面试体验最差劲的是狗家?

白菜3383 一亩三分地求职与职场 2021-08-11
作者@白菜3383
发布在一亩三分地

欢迎大家点击左下角“阅读原文”到原帖与作者交流讨论哦!

最近这几个月紧锣密鼓面了几家公司,度过了一段犹如高考一样的日子,以至于经常做梦面试,被问到不会然后惊醒... 还好最后终于如愿拿到了一些比较满意的offer,得益于一亩三分地的各种经验贴(准备、面经、谈package等),也想来分享一些经验和感悟吧。楼主只有三年工作经验,所以这个帖子更多的是针对mid level左右的candidate...

【Timeline】

二月底开始刷题,四月底投简历 + 开始看design,五月一整个月电面,六月一整个月onsite,最近才签了offer。

【面试结果】

Snap - 电面拒
Roblox - onsite拒
Databricks - onsite拒
Compass - Senior
Instacart - L5
Facebook - E4
Google - L4
Linkedin - Senior
Robinhood - L2

【刷题】

不管是转专业,还是科班出身,刷题估计是大部分人最头疼的部分,好像和平时的工作没有半点关联,还劳神费心,刷到直薅头发。

然而真的半点关系没有吗?

楼主这次面试下来的体验就是,刷题其实并不是要考察你到底会不会某种算法 - 手撸红黑树、Quad tree什么的。而是考察candidate的解决问题和沟通能力。很多时候面试官并不期待你会最优解,包括FB、Google的面试,也并非最优解不可。楼主有很多次都是从Brute force说起,然后一点点优化,到最后得出一个“比较”efficient的解法。可能Brute force + memoize就是我一开始能想到的最优解了,然后面试官也OK,那就开始写。写的过程中就会意识到很多可以优化的地方,或者重复计算的地方,反正就是某些规律。有了这些规律,之后就方便找更优解了,也由此给面试官留下一个很好的印象 - 有清晰的解决问题的思路。

另外一个重要的点就是沟通

一定要在有了一个比较清晰的思路之后再开始说,切忌反反复复、随意推翻自己之前说的,不然面试官很难follow你的思路。可以把最核心的一些data structure列出来,比如我在写题的时候,如果需要用到诸如map,set,stack,queue等结构的时候,都会在讲思路的时候就把他们列出来,并且起很descriptive的名字。这样几个核心structure写下来,再随便添几个if else,一段很明确的pseudo code也就出来了,等你实际写的时候,这个就是一个非常明确的步骤,你只需要把他们翻译出来就行了。

写完后有的面试官会要求手动跑test case,那同样,把最关键的一两个data structure列出来,每跑一步的时候更新一下他们的值,就能更直观的看出你的算法是如何修改这些关键值的,如果有问题也更容易debug。

【System Design】

第二大重点就是design。

一亩三分地强调了无数遍的DDIA,确实有用,后悔自己没有早点看,对自己的工作也很有用。这本书值得精读,但是如果时间有限的话,推荐精读第2章的data model部分和第5、6、7、9章,略读10,11章。

有了这些基础知识,再结合一些design的例题,差不多就能应付比较初级的design了。例题可以去System design primer(github)上找,也可以看youtube。需要注意的是,primer里总会讲到什么CDN、load balancer等各种fancy的部件,甚至还有前端怎么设计等等,然而楼主面了8场design,没有一个是让我设计这么high level, 从前端到后端到DB的大系统的。更多的是给定一个非常实际的应用问题,然后设计后端的service以及data model. 比如有一道经典题目 - 如何query全站过去五分钟内最popular的posts. 如果是一小时、一整天呢?要考虑如何存数据才能更快的索引,如何query DB才能不overload,是online service还是offline等等。根本不会问你前端怎么搞,CDN怎么能让系统变快。另外好多人提到估算数据量或者QPS,我觉得估算出是GB还是TB还是PB级别的数据量就够了,不需要算的很准确。更不需要根据你设计的表来算每个field是多少byte。

当然,design没有边界,花10小时准备和花1000小时准备那肯定是不一样的。我说的也都是针对mid level的,不适用于更高级别的哈,senior啥的肯定要求就非常不一样了...

【BQ】

网上有太多例题了,按照麻厂LP,大概选两三个project能体现自己各种leadership就行。在答的时候切忌长篇大论讲project细节,面试官根本不关心你DB是怎么设计的,他们就只想听各种点,你能很快的把这些点说出来就足够了。这一步我觉得花两个晚上准备就OK,我是参照这个帖子里的问题做准备的:

扫码回原帖

【Project Deep Dive】

这个还是很重要的,有些公司很喜欢问你以前的project的细节,所以起码找一个你认为有tech难点的project,认认真真的想一下各种细节,细到一个完全没有接触过这个project的人在听完你讲述之后能够搞懂你为什么做各种选择和decision、为什么用某种技术,以及各个design细节等等。按照能讲30分钟的时长做准备,才不会被问到卡壳。

【Compensation】

拿到offer就可以开始讨价还价了,一定和HR客客气气的。我知道很多HR很难沟通,还有点爱答不理的,这个时候如果你表现出来很生气,甚至和HR搞僵了,其实对自己没有任何好处。。

Competing offer很重要,最好不要只拿到一个offer就心满意足把剩下的面试都推掉。Mid level compete和不compete,年薪可能轻松差七八万甚至还多!Compete我参照了这个帖子:Offer谈判教程 - 我是怎么多拿到400K股票的(点击看原文)

这个帖子说第一步,相互试探initial number的时候不要给对方透露任何数字,但是我后来发现如果一开始什么信息都不透露,对方很可能拿一个极低的包来试探你。。这就有点浪费时间和心情了。所以我感觉如果你有几个offer,可以第一部第二部合并起来:选一个不那么低的,一开始就告诉HR,同时说还有其他offer正在finalize数字,会keep you posted。这样起码对方上来就能给你一个能看的数。

但是最好不要上来就把最大包告诉对方,要给自己留一手... 不然对方选择性忽略最大,给你match个次大的,你说难受不难受。反正salary negotiation就是和对方磨嘴皮子的过程,这个过程也很劳神费心,但是想一想动动嘴几万块到手,也还是值得的!

理想情况当然是几个offer同时出结果,然后互相compete,所以自己在安排面试的时候也应该把各种时间线合理安排一下。如果各个公司时间时间差的有点多,那也别慌,就说自己需要多点时间考虑就行,也可以让HR帮忙安排再和组里聊聊什么的,这样妥妥一个星期就拖出去了。

面试体验

Snap, Databricks, Compass, Instacart, Linkedin的HR都超级好,有问必答也都非常耐心也很有激情。

Robinhood的HR团队刚刚扩充,不太熟悉业务,还有点联系不上,比较难受。

Facebook的HR一开始鸽了我两次,后来意识到这个人在欧洲,他以为我投的是欧洲的岗位... 转成US的就好多了。

最差劲的就是Google的HR,来回换了两三个HR体验都不是很好,放鸽子、team match给match了两个team就不进行下去了,以及讲价的时候不耐烦、卖情怀。给了个超级low的包,纵使其他家比他家多几十万股票,也不match。

最后楼主还想替Tiktok家HR鸣个不平,地里给人的感觉是字节家HR人人喊打,但是我聊了一下感觉他们非常nice,很耐心也很细致,问到一些敏感话题:比如是否需要和国内开会等等,也都如实回答。我最后因为一些个人原因没面完他家,但是面的时候没有感觉到任何red flag...

最后祝大家都找到心仪的工作!

大家都爱看

👍华人娃娃脸,不适合职场发展吗?

👍Blind上科技公司WLB评分大排名!

👍Facebook工作体验

大家如果还有相关的问题和看法,欢迎点击“阅读原文”到一亩三分地讨论

源于一亩三分地,版权归原作者所有
本文禁止任何形式的转载,请与一亩三分地联系
欢迎小伙伴们爆料提供新闻线索发送到:1point3acres.ops.1@gmail.com,会加米哟

生活|投资|职场|留学

与百万华人一同关注我们4个公众号!

别错过北美最新热点干货

商业合作:1point3acres.com/contact

百万级月活,品牌精准投放

 

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存