查看: 45321| 回复: 59
跳转到指定楼层
上一主题 下一主题
收起左侧

[找工就业] 普通人的系统设计和BQ准备经验

   
👋 1
💯 1
全局:

2021(4-6月)-CS硕士+5-10年 | 内推| 码农类General全职@google

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
继续上一篇的面试算法准备经验,来谈一下系统设计和BQ的准备经验。这里只针对senior及以下的面试,staff+对系统设计和BQ的要求会有较大区别。最后应要求会稍微提一下我是如何用general系统设计的方法来面ML design并拿到senior MLE offer的,可能不具有普适性,仅供参考。

系统设计
相比于算法题,系统设计对于很多人(包括我自己)来说,可能都是感觉比较难准备的点,毕竟大家都会用leetcode刷题,做完点一下提交就好了,但是系统设计却没有一个标准答案可以对比。然而在经过了一系列的准备和面试以后,我个人的感觉是其实系统设计是比算法题更有套路,面试发挥也更稳定的。算法题不管怎么准备,总有可能遇到不会做的难题怪题,如果没有思路是真的会卡住,在面试中卡住会非常影响发挥。对于很多公司来说,算法题做不出来就是0分,做的出来就是100分,很难说我通过努力拿个75分。然而系统设计因为没有标准答案,只要按照事先准备好的套路,是不会发生卡住说不出东西的情况的。只要你能自圆其说,不踩到red flag上,基本上能至少拿个75分,对于拿G和F的5应该是足够了。通过读完这篇文章,希望大家都不会再恐惧系统设计面试,可以自信的和recruiter说“我要用系统设计轮来代替算法轮"。
另外通过准备系统设计面试,我是由衷的认为自己的工作能力有所提高,写design doc的时候思考的会更加全面。因此即使没有很快面试的计划,也可以通过准备系统设计面试来提升工作能力,一举两得。. From 1point 3acres bbs



系统设计的面试分为内功修炼和面试准备。这两者相辅相成。就像算法篇的先按tag刷提升内功,再刷fb tag来巩固提高一样,不要花太多的时间在纯内功修炼上。通过对于面试的准备内功也会随之提高。

内功的修炼指的是大规模分布式系统的设计模式,这个内容地里有很多的讨论。平时养成习惯阅读各大公司的engineering blog,看看youtube上的公司engineering talk会很有帮助。这里既然是为即将到来的面试做准备,我们自然没有足够的时间来慢慢修炼内功。我大概花了两个多月的时间来速成。
[Design Data Intensive Applications] 这本书相信不用我来安利了,大家都懂。这里我是想说这是一本好书,但是如果你只有一个月的时间就要面试的话,从这本书开始并不是一个好的选择。首先书里有很多的证明过程,对于面试本身来说是不需要的。比如对于senior的面试来说,我可以提two phase commit的适用情况以及performance hit就足够了,而不需要记住它是如何implement的。其次阅读需要花不少的时间,阅读的过程中我学到了很多,但是因为没有巩固练习,之后也忘掉了很多。如果时间充裕大家可以精读一遍,然后google搜索一下这本书的读书笔记。如果时间不充裕可以直接用下一条。

. Waral dи,
[Scott Shi's System Design Seminar]地里大神Scott Shi的讲座系列。Scott把每一章DDIA在一个小时左右串讲了一遍,可以花读书几分之一的时间来学到DDIA里的精华,非常推荐。
. .и
. check 1point3acres for more.
[Facebook TAO, Amazon Dynamo, Kafka, RabbitMQ, Zookeeper]这几篇paper建议读一下,可以学到很多实际分布式系统设计的模式,以及如何容错。read repair?consisten hashing? how to choose partition key?master election?这些问题读完这些paper以后就迎刃而解了。对于面试本身也有直接的帮助。比如high scale系统就一定得上NoSQL么?SQL database更改schema很麻烦么?Facebook TAO就是搭载MySQL上的,value就是一个json,schema都是application定的。我就在某一轮面试时说用SQL,面试官追问那schema不好更改怎么办,我就直接说如果expect schema会经常变,用json就行,TAO就是这么干的。面试官表示OK。另外有些公司的面试题就有design key value store,那基本上就按照dynamo来答就好了。


之后建议直接开始系统设计面试的准备,边准备边继续巩固内功。
[System Design Interview by Alex Xu][Grokking system design interview]这两个放一起说了。我两个都有,感觉没有必要,建议大家买一个就行,alex的书略好一点。这本书的用处有两个:一是给出一个面试的template;二是提供大量的例题来参考。建议第一遍精读,第二遍看到题之后先不要读内容,自己按照面试的流程来先走一遍,把这道题重点要讲的部分过一遍,再速读巩固。


下一步就是练习。不得不说对于面试者来说facebook是一个好公司,上一篇说算法题只要刷穿了fb tag的题就基本足够了;系统设计也是一样,只要刷够fb的面经就差不多了。fb的面经题地里有大神总结过,传送门。这时候就按照一个template来练习就好,大家可以在地里以及网上找到很多template,可以选一个自己喜欢的来准备。这里给出一个我用来练习系统设计题的大致template,仅供参考:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
. Χ


之后就可以开始练习每一道题了。可以先用白板,假装在面试,把每道题都走一遍。然后去google搜索题目,看一下各大公司都是怎么做的,学习一下亮点。比如design facebook video live commenting 这道题,FB自己有blog,重点就是write local, read global。那么面试如果能答出这一点一定会拿到很多分数对吧。
. 1point 3acres
.google  и
现在来说一说在面试中需要注意的地方,不要发生肚子里明明有很多东西,却因为面试技巧上的失策而痛失offer。
在真正的面试中,注意千万不要见到自己准备过的题就心里暗喜,开始滔滔不绝地讲心里的答案。系统设计面试模拟的是真实工作中工程师之间解决问题的过程,需要大量的交流,而不是像回答BQ一样一个人一直讲。而且面试官的题目有可能侧重点和你准备的有所不同,一定要仔细交流,确认每一个requirement。每一道题都按照template来一步一步的走。当然有时候不需要把template全走一遍,比如有的面试官会直接把QPS给你,不用做计算。有的面试官会说咱们直接讨论怎么scale,跳过requirement的部分。面试中要多多和面试官进行确认,比如你可以给出两个方向,我们下一步是讨论数据库还是讨论API。有的面试官会让你自己来主导,有的面试官会告诉你下一步。如果可以自己主导,那么就可以往自己准备过的方向上面引。比如design news feed,那么一定要把交流引到push vs pull mode上面。不同的题目需要侧重的地方不同,最好能自己提出重点方向。比如design calendar system,需要book会议室的题目和只需要online meeting的题目侧重点会完全不同。这里强烈建议找到一个一起面试的朋友或者愿意帮你的朋友来mock面试。我自己经历了几次mock以后对于面试交流的掌握有了很大的提高。


以上的部分都是对于比较typical(i.e. FB style)的系统设计面试来说的,对于大部分公司都适用。我这次还遇到了一些非常不典型的面试。比如Google就不按套路出牌。面试官直接给了一个非常简单的app后端设计图,说有的用户report他们的app latency很高,我作为engineer怎么来debug并解决问题。讨论到后面面试官还问起“好,现在你说你要建一个新的data center,你要给VP写一个doc来justify这么多的cost,你怎么写”。这一类的面试对于平时工作的经验要求会更高,prepareability不高,只能现场发挥了。

这里还有一点common trick,肯定不完全,之后想起来会继续补充。
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies

最后讲一下我是怎么在对于ML design毫无准备的情况下硬着头皮面了ML design的,可复制性有限,仅供参考。首先MLE的范围非常的广。有的MLE是algorithm expert;有的MLE是ML infra engineer;有的MLE是调参侠;还有的MLE是给scientist打杂的。公司面试的中心也不一样,不好一概而论。
一开始我面试官设好expectation:我不是ML algorithm expert,我也没有花时间复习ML concept,但我是一个solid engineer。我可能说不出应该用什么model,但是我可以design一个system来support这个model。比如我遇到了一道题目是design outlook的smart folder system。大概就是用户可以建几个smart folder,然后手动放一些email进去。放了一些以后outlook就可以自动的把新邮件分类到这几个folder里去。我和面试官agree说假设有个algorithm expert和我一起做这个project,我们要一起ship这个feature。那么很快可以分析出重点:1. latency不要求lighting fast,但不可能是batch prediction,所以这是一个realtime system 2.每个用户的model都不一样,因此不可能训练一个通用的model。那么假设有100M的active user,我们就要host100M个model,在服务器端是不现实的。那么这个model的training和inference必须要放在客户端。后来面试官问我你知不知道word embedding,我说知道,就是把一个string转换成一个vector。然后面试官问我假设你有办法做这个转换,我们怎么来设计这个系统?我说那就input email转成vector,然后和已经有的每个group里的email做个inner product,放到最大值的folder里去呗。面试官说好,这个算法叫KNN。其实KNN我是学过的,但是因为很久不用也没有准备ML面试就忘了。然后就继续说这个算法的好处是不用train,坏处是如果已有email太多,inference会比较慢。最终这轮面试也通过了

BQ
BQ应该是所有面试里最好准备的部分了,有过一些工作经验的话都比较简单,尤其是对于香蕉厂员工来说,每天工作的一部分就是互相扔贝索斯语录。大家按照leadership principle的14(现在是16)条来准备就好。大家可以准备5到8个例子,利用STAR method (Situation, Task, Action,Result)来把例子写下来。尽量写的详细一些。最好是那种一个例子可以cover很多个问题的,写下来每个例子可以cover的LP。核心要义就是体现你是一个good team player, good problem solver 。然后在练习讲的时候可以针对具体问题对例子进行删减。远程面试的好处是可以直接把例子打开现场快速查找。不过不要照着读,一定要现场组织语言。准备足够以后基本上听完面试官的问题就大概知道面试官想听到的点是什么。一个小技巧是听完题以后,不要着急回答。和面试官说give me 30 seconds to think about a good example,利用这个时间来组织一下语言,想一下用哪个例子,侧重点是什么。
在面试中如果遇到非常规题,不要慌张,还是通过那30秒来快速回想一个例子。如果实在想不到合适的例子,千万不要现场编造。可以直接和面试官说想不到一个例子。这是没关系的,我谷歌和fb的面试都遇到了没有例子的问题,面试官就直接move到下一题了。
最后还有一类面试题不是“tell me about a time when xxx”的,而是比较虚的问题。比如我遇到过"what is your ideal team culture" "if you were to give some advice to a junior new member, what would you say"。这一类不太好准备,就只能根据经验现场发挥了。这里体现了香蕉厂的一个好处,把平时乱丢的LP jargon讲一讲,面试官就很满意哈哈。
. 1point3acres.com

写了很久了,但是感觉miss了一些东西。先发出来之后想起来会补上的。也欢迎大家提问哈。

评分

参与人数 136大米 +310 收起 理由
小亩_h04rnh0 + 1 很有用的信息!
yzl916 + 1 赞一个
xy2316 + 1 赞一个
freecarefree + 2 给你点个赞!
laoyst09 + 1 很有用的信息!

查看全部评分


上一篇:2022ng ds转码简历求批,回复加米!感谢!
下一篇:求一个近期可以互相mock系统设计的伙伴

本帖被以下淘专辑推荐:

推荐
akdhfikbk 2021-7-5 08:57:35 | 只看该作者
全局:
热乎的!抢沙发
刚从另一个贴追过来的我就想喊一句:
“你再说你普通!!!!“
回复

使用道具 举报

推荐
shark999 2021-7-5 11:49:02 | 只看该作者
全局:
蕉厂是BQ蓝翔技校
回复

使用道具 举报

推荐
hydrology 2021-7-10 13:26:09 | 只看该作者
全局:
athran88 发表于 2021-7-6 06:42
请问这里有什么好的设计方式吗?
我开始也以为对于like这种就是开一个额外的服务/表,先用redis做缓存, ...

HLL看一看 https://redditblog.com/2017/05/24/view-counting-at-reddit/

评分

参与人数 1大米 +2 收起 理由
athran88 + 2 很有用的信息!多谢推荐!

查看全部评分

回复

使用道具 举报

全局:
写的真好 谢谢你!.google  и

收藏了 上一篇我也要去看看
回复

使用道具 举报

🔗
甜瓜小窗 2021-7-5 11:07:28 | 只看该作者
全局:
大佬强啊
回复

使用道具 举报

🔗
lixicici 2021-7-5 11:25:54 | 只看该作者
全局:
总结非常实用
回复

使用道具 举报

全局:
多谢楼主分享

有一点没看懂,不知有没有好心网友详细解释一下?

Don't repeatedly update a database record.-baidu 1point3acres
E.g. facebook like count; updating existing count is a big red flag

.1point3acres
不是很理解具体含义,这个指的是当有大量updates时需要加上cache么?
回复

使用道具 举报

🔗
王岐海 2021-7-5 13:51:22 | 只看该作者
全局:
谢谢分享 学习一个  
回复

使用道具 举报

全局:
感谢分享!!!
回复

使用道具 举报

🔗
hello_yyx 2021-7-5 15:39:33 | 只看该作者
全局:
mark 学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表