准备过程 + Snap Twitter Confluent FB Airbnb senior offers

avatar 752663
abc123abc
39967
77
用马甲发个经验贴。

言归正传,最近面试结束,拿了几个包裹,分享一些经验教训。。背景:
在西雅图某大厂上班四年多, 上班不忙,工作舒适,当时还是tl,老板组员都很好,工作我也挺喜欢。。所以拖拖拉拉也没怎么认真准备跳槽,直到4year cliff,意识到自己好穷,才开始认真刷题。。因此楼主跳槽经济原因是一个主要因素,其次我也不想因此让生活变累很多(毕竟过去4年生活质量楼主还是满意的),最后楼主还想留在西雅图继续做相关领域,这三个因素都对我很重要。
楼主之前一两年断断续续刷了有两三百题,大部分都是以前毕业的时候刷过的题目重新做的(毕竟四年多也忘了)。所以去年后半年开始大概认真准备了半年多(因为移民的一些原因 今年年初才开始面试。不过坦白说 我觉得如果没有移民因素 我觉得刷题阶段1个月就够(下文阶段1)。。。)

准备阶段:
阶段1, 4-5个月: 重点刷题,大概每天晚上刷2-3题,(medium or hard) 当时和一个一起准备的小伙伴一起,每晚线上刷题一两个小时,然后各自散伙dota/lol/steam。。每周六晚上参加LC周赛。大概四五个月新刷了2,3百medium, hard..周赛>=3道的水平,好的时候ranking能到100+,差的时候做3道这个水平。我觉得周赛3道这个水平应该就够了,最后一题做不做得出来对面试其实影响很小很小,至少从我自己的面试体验看是这样.然后和小伙伴一起分类总结了各个类别的题目和常见技巧,提炼出了几十道题,重新写了一次,这个时候感觉刷题水平已经差不多了,然后开始侧重准备system design,进入第二阶段。

阶段2, 1-2个月:重点system design,首先,每周还是拿出一定时间刷题保持手感,基本就是每周比赛+随机做各种地里面经题,大部分时间准备system design了。
system design就是首先把design data intensive app和小伙伴一起又看了一遍(说“又”是因为 之前我们俩刚好各自刚好看了一遍这本书,说实话即使不面试,看一下这本书也很好。)。这次看的时候 每一章看完基本周末花30-60分钟左右讨论了一下,小伙伴工作以后和我做的方向不同,所以有些章节他理解深一些,有些时候我深一些,所以交流效果还是不错的,学到了不少东西。大概一个多月把ddia讨论完了。我们又把groking system design interview每题用mock interview的方式一两周过了一次,grokking虽然不是很深,但是我觉得coverage是够的,每题看几次,自己想一想还是有必要的。事实上grokking我每题前后应该也都看过三次以上,真的很快,看一次每题10+分钟也就够了其实。
接下来我做的事情基本就是看youtube各种视频:
youtube.com 小伙伴推荐的,讲得不错,基本每个我都看了,个别看了多次。
youtube.com 这个基本我也都看了。
还有很多随机找的system design视频,因为我上班说实话真不是很忙,所以每天时间很多。。基本就是打打游戏 刷刷题 看看视频。。后面家里买了个椭圆机,一边健身一边看视频(再后来开始用健身环健身,看视频就少了。。。

阶段3, 1个月: 找职位+内推+店面:一转眼到了今年一二月份,这个时候约了各种面试,因为楼主对未来职业规划希望做特定相关领域,所以花了一个周末,选了一些公司,然后开始找内推。。如果只对大的方向有要求 比如backend, fullstack,frontend这种的小伙伴我觉得基本所有公司都有很多岗位。。如果是特定的security,payment,database,storage这种,可能就要找一下,尤其是对于按组/岗位招的公司,得好好找找岗位再招人推。因为楼主面的领域基本是和自己背景相关的,且工作经历快5年了,按组招人的一些公司稍微argue一下 就直接waive一面了,比如apple,airbnb这种按组招人的...general hire的一般就不会waive,比如fb,snap(但gg这种估计5yoe 一般还是会waive).. anyways,2月份在店面中度过,同时看看面经,然后看看有名的几篇paper,比如cassandra, FB TAO, dynamodb...看看五花八门的博客。比如payment怎么注意idempotency啊,log/monitoring系统怎么设计呀,at least once vs at at most once啊,可能会涉及一些前面没见过的领域,不过多看看其实感觉system design也差不多。。

最后说一下多线程和behavior questions:
如果工作中接触多线程不多的小伙伴可以看看多线程,leetcode concurrency那几题做一下感觉差不多了,但要理解一下各种lock为什么这么用。楼主工作中用的不少,所以这方面没怎么花时间,一个周末做了那个leetcode的concurrency section就没怎么看了,不过面试中被问的真的非常多!!我觉得要面senior岗的小伙伴,可能要好好准备一下,下面提到的很多公司都面到了多线程。。比如楼主面试主要用java,可以想想比如condition为什么要bakced by a lock,reentrantlock.lock为什么写在try外面呀之类的。。细节多想想 或者看一下best practice 理解为什么这么写. critical section怎么样尽可能小一点之类的。即使别人不一定会问到,但你写的时候提一下这些我觉得会比较好.
BQ我觉得多准备几个例子就好,比如conflict怎么办,项目delay怎么办这种,说一个失败/自豪的项目,在职跳槽大家肯定都有素材,适当加工好好说就行了。。或者按照亚麻的leadership principles准备一下也不错。。这个一周肯定够了.能有一些例子体现scope会很好。。准备一个好的例子加分会很多,楼主工作中有一个很独特的帮助别人的例子,在面试中说了多次,每一次感觉都加分不少,我觉得好好挖掘一下自己的例子,不用准备太多,但准备几个很有说服力的就行。

virtual onsite 按顺序:(3个周)
Baidu -- 面他家是因为楼主有回国打算,另一方面做的项目还挺有意思的。。面试1轮店面+onsite4轮+2轮聊天....生生面了7轮。。。他家pkg给的是大厂水准,wlb也不错。

Amazon --- 面他家一个原因是想看看自己bq怎么样,但其实体验不好,尤其是recruiter竟然在一面和onsite之间离职了(难怪朋友跟我说他在公司上班四年多beat了大部分员工的在职时间。。),导致本来argue了半天面senior岗,最后变成了5/6..我理解亚麻很少给5年以内senior,但同一个问题going back and forth让我很心累。。最后一面的时候面试官又多花了20多分钟超时面试,用这20分钟不停的教育我为什么亚马逊的level很值钱之类的,为什么我现在的公司level不如亚马逊之类的,说的有些东西让我觉得offsensive(面完已举报)。。不过他家特点是bq比较多,算法和design我面到的非常简单。。不过bq要答出他们想要的scope倒是不容易,我已经反复吹自己tl的经历了,还是不行。。。Amazon是一家我个人觉得前途很好的公司,用离职率相对其他几家可能是最高的工程师团队作出了世界上最稳定的产品(aws),这个还是很厉害的。楼主本人如上文所说,很看重wlb,所以不是首选。

Apple --- 这家面试很看组,面试很hardcore,面经没什么意义,因为每个人面试完全不同,除非你面同一个组。。面的题很有新意,好几道多线程。。每轮一小时,两题。最后给了ic4,应该是他家的senior.他家特点,pkg跟hm关系很大我感觉,ic4的范围很大很大,即使在瞎图.

Confluent --- 面经地里挺多的就不多说了。。感觉表现还可以,coding全是多线程,因为楼主工作中写过不少多线程,应该面的不错.两轮system deisgn回答的也很好。。因为楼主对immutatable db/database cdc/streaming db这个方向其实很感兴趣,最后bq和老板聊的也很开心。。给了senior之后match了三次包裹,用了一个周末convince自己去赌一把,一度以为要去了,最后airbnb来了个更有竞争力的包,加上一些其他原因-------因为楼主很想留在瞎图,wfh一年来真的感觉有点无聊(尤其外卖已吃吐),去他家在瞎图要永久wfh这种生活还要继续,所以最后还是没去。。虽然没去,还是祝他们上市成功!!楼主一直觉得发大财靠运气,发小财靠实力,不知道自己有没有发小财的实力,但发大财我是一直没这个运气和魄力的,四年多前毕业的时候也错过了一些致富的机会。

twitter --- 没什么面经题,不过面试也不是特别难,最后一轮bq很有意思,hm把人生各个阶段都问了一下,面之前可以清晰的回想一下自己人生的过程,从大学时代一直到最近一份工作,好好总结一下,不仅仅是准备面试,也是一个回顾的自己的机会。楼主平时过的日子如水,面试前回忆过去的时候,还是有些感慨的,也感谢这个契机让我好好总结了一下自己,looking back很多事情都会清晰,想想自己机缘巧合得到了很多人的帮助,也更坚定了自己做这个领域的想法。

snap --- 面的什么我说实话记不太清了,不过每个面试官都挺nice,体验感觉挺好的。题也不难,地里包裹data points(dp)很多了.. 就是最后聊包裹的hr感觉太aggressive,我知道地里有很多dp,知道这个差不多是顶包他也没办法继续match了,但是能不能不要老说snap股票比其他公司股票都要好。。。反复跟我说snap股票比其他公司的更有潜力,让我觉得这个不是很舒服,我自己也是天天上班炒股的人,高收益不是高风险?。。。不过有一说一 其他方面还是挺负责的,feedback给的比较transparent.面试官也很nice.

tableau --- 楼主当时找工作时候3个标准,工资可以,别太忙,继续做相同领域。。tableau符合楼主要求,所以就去面了,面试题也不怎么难,不过后来研究了一下,好像收购之后包裹变得不是特别给力。。也没继续了。

google -- system design和bq面的应该不错,有2轮算法我挺无语的,题都很简单,在那跟我争一些很trivial的细节,楼主真的couldn't care less的那种细节...我不想具体说了,我后来和朋友说也都挺无语的。。g在西雅图做楼主方向的也不多。。看地里的dp 这一两年的4.5yoe 的l5好像也怎么看到match fb和airbnb的顶包。。(吃不到葡萄说葡萄酸一下,g肯定是一家很棒的公司毫无疑问..)

fb --- 真真是刷题公司啊,全秒,记得onsite一轮做太快了,有一题写了三个做法..好好刷面经题 感觉问题肯定不大。。。system design我记得我答的一般,明显感觉答的方向不是他预期的,不过我觉得system design很多时候就是你justify自己的选择就好,比如async还是sync处理,要async那可能要用message queue, 那是用kafka(e.g.需要有order,可以多个noncompeting consumer groups) 还是admqp的比如rabbitmq/amazon sqs(可以有多个competing consumers,不会被一个slow message block), 甚至用一个table with incremental id当queuet,总之尽量讲的细一点为什么要用这个产品... 再比如要存数据为什么nosql 不是sql或者相反.. 选了nosql 比如为啥用dynamo(e.g. leaderless每个replica都能写),或者为啥用cassandra(除了leaderless,还有storage engine是lsm tree所以small write很快,messager 这种很适合)... zookeeper怎么用(楼主最近刚好在看zk的书,memebership management, 存metadata, service discovery, leader election...)我觉得只要把这些问题说好了,我感觉问题不大。。面试结果也都还可以。

tiktok --- 面试的时候就感觉很不寻常,全是晚上半夜10点面试,最后面到2-2(去年面试 或者国内面试听说订到3-1比较容易)。level2-2就不是很满意,把所有包裹发过去之后,弯曲pkg给的和fb西雅图包差不多少,wlb据里面同学说也不行。。所以最后也没考虑。。我个人觉得tt最后很可能会是中国最大互联网公司,上市之后即使现在180股价也会有不错增长,但lz很看重wlb,就没考虑。

airbnb --- 因为公司已经上市了,地里也没什么印象深刻的dp,所以本来没想去。但后来一起面的小伙伴当时刚拿了offer,说他家面试挺简单的对员工也不错,然后另一个小伙伴跟我说她朋友L5去拿了一个大包。。所以我就去面了一下。。当时都准备签confluent了,没想到和hm聊的很投缘,于是周4onsite,然后周1马上cross functional,周2出结果,当时地里dp很少,楼主也没报太大希望,因为当时其他公司全都面完互相match完了,就直接把所有一堆包裹发过去了。。。。最后周3 给了个诚意包,再加上做的领域很接近,又在西雅图就去了。面试真不难,多看看地里问题不大,两轮system design倒是不按套路,不过我觉得system design就是一个拼积木的过程,你知道这种时候该用什么形状的积木,什么材质的,为什么,基本就一步步肯定没问题了。。模块其实也不多,就那么些,db,object storage, msgq, serverless pool(amazon lambda/k8s...), zookeeper/etcd, btree db/lsm db, different partition algorithms(range, [consistent]hash,...), different types of replications(master-slave, leaderless, master-master), cdn,cache。。。基本差不多了感觉。。

因为楼主卡在4.5y 并不是所有公司都给了senior,不给senior确实也不可能去,毕竟不可能再花几年去升值,给了senior的有如下几家
baidu(staff),confluent(senior),apple(ic 4),twitter(senior sde),fb(e5),airbnb(l5), snap(level 4)

offer具体数字就不说了。。有些也签了nda..match到最后,基本都跟地里瞎图顶包都差不多,airbnb没啥数据点,但是楼主最后去了他家,也签了nda,就不说了,见谅。。
但感觉senior在西雅图地区,只要准备充分,想找400k上下的还是不难的,地里fb,apple的包不少满足这个,再大可能要看运气了。。不过400k以上的钱,赚一块得**其实差距还行。

这次求职最大感想就是 刷题真的不是那么重要,多线程 bq system design也都被问的很多。。如果时间有限,刷题不用刷的太多,周赛3题水平我觉得就可以很有信心了,如果有时间design data intensive app建议看一下,然后grokking system design interview虽然很多人说不好,我觉得看一下还是挺好的,至少每题都想一下。。如果不想多看论文,dynamodb论文和facebook tao这两篇强推,很多分布式的东西,或者cache的一些有意思的问题就会了解到。

最后,祝贺大家找工求职顺利. 码字不容易 求大米~
  • 676
77条回复