中级农民
- 积分
- 112
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-10-14
- 最后登录
- 1970-1-1
|
2021(4-6月)-CS硕士+3-5年 | 内推| 码农类General全职@
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
本帖最后由 白菜3383 于 2021-7-16 12:58 编辑
. ----
最近这几个月紧锣密鼓面了几家公司,度过了一段犹如高考一样的日子,以至于经常做梦面试,被问到不会然后惊醒... 还好最后终于如愿拿到了一些比较满意的offer,得益于地里的各种经验贴(准备、面经、谈package等),也想来分享一些经验和感悟吧。楼主只有三年工作经验,所以这个帖子更多的是针对mid level左右的candidate...
. 1point3acres
【Timeline】
二月底开始刷题,四月底投简历 + 开始看design,五月一整个月电面,六月一整个月onsite,最近才签了offer。
【面试结果】
Snap - 电面拒-baidu 1point3acres
Roblox - onsite拒-baidu 1point3acres
Databricks - onsite拒. 1point 3acres
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】. Waral dи,
第二大重点就是design。 地里强调了无数遍的DDIA,确实有用,后悔自己没有早点看,对自己的工作也很有用。这本书值得精读,但是如果时间有限的话,推荐精读第2章的data model部分和第5、6、7、9章,略读10,11章。-baidu 1point3acres
有了这些基础知识,再结合一些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啥的肯定要求就非常不一样了...
. Waral dи,. check 1point3acres for more.
【BQ】
网上有太多例题了,按照麻厂LP,大概选两三个project能体现自己各种leadership就行。 在答的时候切忌长篇大论讲project细节,面试官根本不关心你DB是怎么设计的,他们就只想听各种点,你能很快的把这些点说出来就足够了。 这一步我觉得花两个晚上准备就OK,我是参照这个帖子里的问题做准备的: https://www.1point3acres.com/bbs/thread-551630-1-1.html-baidu 1point3acres
【Project Deep Dive】
这个还是很重要的,有些公司很喜欢问你以前的project的细节,所以起码找一个你认为有tech难点的project,认认真真的想一下各种细节,细到一个完全没有接触过这个project的人在听完你讲述之后能够搞懂你为什么做各种选择和decision、为什么用某种技术,以及各个design细节等等。 按照能讲30分钟的时长做准备,才不会被问到卡壳。
-baidu 1point3acres
【Compensation】拿到offer就可以开始讨价还价了,一定和HR客客气气的。 我知道很多HR很难沟通,还有点爱答不理的,这个时候如果你表现出来很生气,甚至和HR搞僵了,其实对自己没有任何好处。。
Competing offer很重要,最好不要只拿到一个offer就心满意足把剩下的面试都推掉。Mid level compete和不compete,年薪可能轻松差七八万甚至还多!Compete我参照了这个帖子:https://www.1point3acres.com/bbs/thread-718586-1-1.html 这个帖子说第一步,相互试探initial number的时候不要给对方透露任何数字,但是我后来发现如果一开始什么信息都不透露,对方很可能拿一个极低的包来试探你。。这就有点浪费时间和心情了。 所以我感觉如果你有几个offer,可以第一部第二部合并起来:选一个不那么低的,一开始就告诉HR,同时说还有其他offer正在finalize数字,会keep you posted。 这样起码对方上来就能给你一个能看的数。
但是最好不要上来就把最大包告诉对方,要给自己留一手... 不然对方选择性忽略最大,给你match个次大的,你说难受不难受。 反正salary negotiation就是和对方磨嘴皮子的过程,这个过程也很劳神费心,但是想一想动动嘴几万块到手,也还是值得的!
理想情况当然是几个offer同时出结果,然后互相compete,所以自己在安排面试的时候也应该把各种时间线合理安排一下。如果各个公司时间时间差的有点多,那也别慌,就说自己需要多点时间考虑就行,也可以让HR帮忙安排再和组里聊聊什么的,这样妥妥一个星期就拖出去了。
最后祝大家都找到心仪的工作!
. 1point3acres
补充内容 (2021-07-17 04:14 +8:00):
顺便补充一下面试体验:
Snap, Databricks, Compass, Instacart, Linkedin的HR都超级好,有问必答也都非常耐心也很有激情。
. Waral dи,
Robinhood的HR团队刚刚扩充,不太熟悉业务,还有点联系不上,比较难受。
.1point3acres
Facebook的HR一开始鸽了我两次,后来意识到这个人在欧洲,他以为我投的是欧洲的岗位... 转成US的就好多了。
最差劲的就是Google的HR,来回换了两三个HR体验都不是很好,放鸽子、team match给match了两个team就不进行下去了,以及讲价的时候不耐烦、卖情怀。给了个超级low的包,纵使其他家比他家多几十万股票,也不match。
.--
最后楼主还想替Tiktok家HR鸣个不平,地里给人的感觉是字节家HR人人喊打,但是我聊了一下感觉他们非常nice,很耐心也很细致,问到一些敏感话题 比如是否需要和国内开会等等,也都如实回答。我最后因为一些个人原因没面完他家,但是面的时候没有感觉到任何red flag... |
上一篇:苹果的面试机制是不是需要改进? 下一篇:请问大家有做过这个caliper assessmen吗?
|