阶段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各种视频: https://www.youtube.com/c/ScottShiCS/videos 小伙伴推荐的,讲得不错,基本每个我都看了,个别看了多次。 .. https://www.youtube.com/channel/UC9vLsnF6QPYuH51njmIooCQ 这个基本我也都看了。
还有很多随机找的system design视频,因为我上班说实话真不是很忙,所以每天时间很多。。基本就是打打游戏 刷刷题 看看视频。。后面家里买了个椭圆机,一边健身一边看视频(再后来开始用健身环健身,看视频就少了。。。. 1point 3acres
阶段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:. From 1point 3acres bbs
如果工作中接触多线程不多的小伙伴可以看看多线程,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会很好。。准备一个好的例子加分会很多,楼主工作中有一个很独特的帮助别人的例子,在面试中说了多次,每一次感觉都加分不少,我觉得好好挖掘一下自己的例子,不用准备太多,但准备几个很有说服力的就行。
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这种生活还要继续,所以最后还是没去。。虽然没去,还是祝他们上市成功!!楼主一直觉得发大财靠运气,发小财靠实力,不知道自己有没有发小财的实力,但发大财我是一直没这个运气和魄力的,四年多前毕业的时候也错过了一些致富的机会。
. check 1point3acres for more.
twitter --- 没什么面经题,不过面试也不是特别难,最后一轮bq很有意思,hm把人生各个阶段都问了一下,面之前可以清晰的回想一下自己人生的过程,从大学时代一直到最近一份工作,好好总结一下,不仅仅是准备面试,也是一个回顾的自己的机会。楼主平时过的日子如水,面试前回忆过去的时候,还是有些感慨的,也感谢这个契机让我好好总结了一下自己,looking back很多事情都会清晰,想想自己机缘巧合得到了很多人的帮助,也更坚定了自己做这个领域的想法。
google -- system design和bq面的应该不错,有2轮算法我挺无语的,题都很简单,在那跟我争一些很trivial的细节,楼主真的couldn't care less的那种细节...我不想具体说了,我后来和朋友说也都挺无语的。。g在西雅图做楼主方向的也不多。。看地里的dp 这一两年的4.5yoe 的l5好像也怎么看到match fb和airbnb的顶包。。(吃不到葡萄说葡萄酸一下,g肯定是一家很棒的公司毫无疑问..). From 1point 3acres bbs
这次求职最大感想就是 刷题真的不是那么重要,多线程 bq system design也都被问的很多。。如果时间有限,刷题不用刷的太多,周赛3题水平我觉得就可以很有信心了,如果有时间design data intensive app建议看一下,然后grokking system design interview虽然很多人说不好,我觉得看一下还是挺好的,至少每题都想一下。。如果不想多看论文,dynamodb论文和facebook tao这两篇强推,很多分布式的东西,或者cache的一些有意思的问题就会了解到。
我觉得肯定是不必要的。。但system design是个面试者drive的过程。。所以多说点肯定没坏处。。。
我也不是很懂message queue,基本都是自己瞎看总结的:
kafka是每个consumer有自己的offset,那肯定不能有competing consumer,比如电商网站把用户order先放kafka,然后异步去处理payment... 肯定只能有一个consumer去处理payment,因为kafka的message是persistent,处理完不删,你有两个consumer每个按照自己offset都去处理payment,那每个message都会处理两次(payment做两次),肯定不对,at least once也不可能这么设计。但kafka 你可以有多个noncompeting consumer,比如一个consumer管每个Order的payment,一个consumer管shipping,一个把它写进hdfs等会做offline ML model training,一个统计top k items这样,每个consumer做不同的事情。。。因为每个consumer有自己的Offset,message被一个consumer处理完也不会被删除,所以可以有non competing consumer。毕竟kafka更像一个log,immutable db的感觉。
sql based queue好处就是你可以query每一个message的status.这个视频这么用的,我觉得比较方便。不过一定要用sql,因为你需要transactional support,可能会有多个worker试图更新同一个request,下面这个视频就是这么用的。https://www.youtube.com/watch?v=FI8G3VeI94w