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

[学习资料] 系统面试题精讲资料

全局:

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

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

x
一份是下面系统面试题的解析

  • 分布式ID生成器
  • 短网址系统(TinyURL)
  • 信息流(News Feed)
  • 定时任务调度器
  • API限速
  • 线程安全的HashMap
  • 最近一个小时内访问频率最高的10个IP
  • 负载均衡
  • Key-Value存储引擎
  • 网络爬虫
  • PageRank
  • 搜索引擎
  • 大数据
  • 数据流采样
  • 基数估计
  • 频率估计
  • Top K 频繁项
  • 范围查询
  • 成员查询


您好!
本帖隐藏的内容需要积分高于 150 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 150 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies


一份是讲uber系统设计

https://www.enginego.org/%E5%9F% ... 9D%A2%E8%AF%95-101/
系统设计面试 101 __ Engine GO.pdf (999.38 KB, 下载次数: 153)





补充内容 (2019-8-26 09:22):
soulmachine系统设计

https://legacy.gitbook.com/book/soulmachine/system-design/details

评分

参与人数 2大米 +4 收起 理由
kraken1 + 2 很有用的信息!
fififi1323 + 2 给你点个赞!

查看全部评分


上一篇:求问设计Distributed Blacklist
下一篇:Head First Design Pattern学习笔记
推荐
 楼主| fby0656 2019-8-26 09:42:43 | 只看该作者
全局:
来自Co-founder at Educative.io谈系统面试

https://hackernoon.com/anatomy-o ... erview-4cb57d75a53f


与白板编码不同,系统设计中很少有“Aha”时刻。
换句话说,系统设计不是取巧,而是更多关于实际艰苦工作中获取知识。 在这面试中的表现取决于以下两个因素。
1.你的知识 - 通过学习或实践经验获得。
2.你表达自己想法的能力。

当提出设计问题时,他们希望评估你在设计大型分布式系统时的设计技巧和经验。 你在这种面试中的表现经常决定你的招聘等级(在某些情况下是薪水)。 因此,制定计划并为这些面试做好准备。

系统设计面试的7个步骤

学习的过程中,我建议采用一个7步框架来解决每个问题。为了保持示例的真实性,我们将提出一个常见的面试问题:设计一个可扩展的服务,如Twitter,看看每个步骤如何应用于设计Twitter。

第1步:需求收集:
许多候选人认为系统设计访谈都是关于“规模”的,忘记把重点放在“系统”部分。
在扩展之前,需要有一个可用的“系统”。
作为面试的第一步,你应该提出问题以找出问题的确切范围。设计问题大多是开放式的,他们没有一个正确的答案。这就是为什么在面试的早期澄清含糊不清的原因变得至关重要。花时间明确定义系统最终目标的候选人总是有更好的成功机会。
以下是设计Twitter的一些问题,在继续下一步之前应该回答这些问题:
1.谁可以发推文? (回答:任何用户)
2.谁可以阅读推文? (回答:任何用户 - 因为所有推文都是公开的)
3.推文是否包含照片或视频(答案:现在,只是照片)
4.用户可以关注其他用户吗? (回答:是)。
5.用户可以“喜欢”推文吗? (回答:是)。
6.用户提要中包含哪些内容(答案:你所关注的所有人的推文)。
7.按时间顺序提供推文列表吗? (回答:现在,是的)。
8.用户可以搜索推文(回答:是)。
9.我们是设计客户端/服务器交互还是后端架构或两者兼而有之(答案:我们想要理解客户端/服务器之间的交互,但我们将关注如何扩展后端)。
10.有多少用户(答案:我们预计第一年将达到2亿用户)。
11.有多少每日活跃用户(每天有1亿用户登录)

如果你注意到,这些答案中的一些与真正的Twitter并不完全相似,那没关系。这是一个旨在评估方法的假设问题。你只是要问这些问题,以确定今天要解决的问题。不必担心使用算法等处理视频或生成时间栏。

第2步:系统接口定义


如果你已经收集了需求并且可以识别系统公开的API,那么完成了50%。
定义系统所需的API。这不仅可以确定系统预期的确切合同,而且还可以确保你没有遇到任何错误的要求。我们类似Twitter的服务的一些例子是:

postTweet(user_id,tweet_text,image_url,user_location,timestamp,...)
generateTimeline(user_id,current_time)
recordUserTweetLike(user_id,tweet_id,timestamp,...)

步骤3:封装容量估计

估计设计的系统的规模总是一个好主意。当你专注于扩展,分区,负载平衡和缓存时,这也会有所帮助。

1.系统预期的比例(例如,新推文的数量,推文视图的数量,每秒的时间线生成次数等)
2.我们需要多少存储空间?这取决于用户是否可以在推文中上传照片和视频?
3.我们期望的网络带宽使用量是多少?这对于决定如何管理流量和平衡服务器之间的负载至关重要。

第4步:定义数据模型

尽早定义数据模型将阐明数据如何在系统的不同组件之间流动。稍后,它将指导你进行更好的数据分区和管理。候选人应该能够识别系统的各种实体,他们将如何相互交互以及数据管理的不同方面,如存储,传输,加密等。以下是我们类似Twitter的服务的一些实体:


User:UserID,Name,Email,DoB,CreationData,LastLogin等.
Tweet:TweetID,Content,TweetLocation,NumberOfLikes,TimeStamp等.
UserFollows:UserdID1,UserID2FavoriteTweets:UserID,TweetID,TimeStamp

我们应该使用哪个数据库系统?像Cassandra这样的NoSQL最适合我们的需求,或者我们应该使用类似MySQL的解决方案。我们应该使用什么样的blob存储来存储照片和视频?

第5步:高级设计

绘制一个框图,其中包含5-6个框,代表系统的核心组件。你应该确定从端到端解决实际问题所需的足够组件。
对于Twitter,在高层次上,我们需要多个应用程序服务器来为所有读/写请求提供服务,并在它们前面设置负载均衡器以进行流量分配。如果我们假设我们将拥有更多的读取流量(与写入相比),我们可以决定使用单独的服务器来处理读取vs写入。在后端,我们需要一个高效的数据库,可以存储所有的推文,并可以支持大量的读取。我们还需要一个分布式文件存储系统来存储照片(和视频)以及搜索索引和基础设施,以便能够搜索推文。

第6步:所选组件的详细设计

深入挖掘2-3个组件;面试官的反馈应该始终指导你进一步解释系统的哪些部分。你应该能够提供不同的方法,它们的优点和缺点,为什么你会选择一个?请记住,没有一个答案,唯一重要的是考虑不同选项之间的权衡,同时牢记系统约束。例如
1.由于我们将存储大量数据,我们应该如何对数据进行分区以将其分发到多个数据库?我们是否应该尝试将用户的所有数据存储在同一个数据库中?它会导致什么问题?
2.我们如何处理高流量用户,例如拥有数百万粉丝的名人?
3.由于用户的时间线将包含最新(和相关)的推文,我们是否应该尝试以优化的方式存储我们的数据以扫描最新的推文?
4.我们应该在多大程度上引入缓存以加快速度?
5.哪些组件需要更好的负载平衡?

第7步:识别并解决瓶颈问题

尝试讨论尽可能多的瓶颈和不同的方法来缓解。
1.我们的系统中是否有任何单点故障?我们在做什么来减轻它?
2.我们是否有足够的数据副本,这样如果我们丢失了一些服务器,我们仍可以为用户提供服务?
3.同样,我们是否有足够的不同服务副本运行,这样一些故障不会导致整个系统关闭?
4.我们如何监控服务的表现?当关键组件发生故障或性能下降时,我们会收到警报吗?
简而言之,由于软件设计访谈的非结构化特性,组织有明确计划来解决问题的候选人有更好的成功机会。
回复

使用道具 举报

🔗
 楼主| fby0656 2019-8-26 09:58:47 | 只看该作者
全局:
第二篇是讲如何设计netflix

https://hackernoon.com/how-not-t ... erview-64953391a054

要求你在45分钟内设计Netflix(或具有数亿用户的其他可扩展服务)。这是一个看似荒谬的问题。即使讨论任何一个组件的细节,45分钟也太短。这些服务是由数百或数千名工程师在多年的时间里开发出来的。如何压缩所有工作并在5x5白板上绘制草图?

这里的关键是要了解面试官正在寻找什么。他希望你给他一个50,000英尺的概述,识别高级组件并尽可能简洁地描述组件之间的相互作用。以下是此类讨论的3个阶段。

1 画一个代表系统的大盒子。
2. 放大并将大盒子分成5-6个组件。
3. 简要讨论每个组件的作用,例如计算,存储,前端,后端,缓存,排队,网络,负载均衡等

面试官会希望你更深入地讨论1-2个组件,他将指定哪个组件。在这些讨论中,你很少需要编写任何代码。

以下是候选人在面试中常犯的一些错误。

我知道20个流行语,所以我应该没事

你可能会想,如果我必须在抽象层面进行设计,我可能会在设计面试中胡说八道。没那么快。你的面试官正在寻找每天与他一起工作的队友 - 而且在面试期间试图胡扯的人会一次又一次地这样做。任何有经验的面试官都会留意那些试图引用“No-SQL”,“Mongo DB”和“Hadoop”等流行语的人。总是,总是希望你的面试官会要求更多的细节和理由。仅使用流行语和时尚技术,例如如果你理解它们并且可以证明并捍卫你的方法,才可以谈“GraphQL”。

规则1:在面试之前的一个晚上阅读“ High Scalability” http://highscalability.com/ 并不能使你成为分布式系统的专家。

我可以假装自己是专家

我听过几个令人尴尬的故事,候选人假装是一个专家,只是意识到面试官是该领域的知名行业专家。我自己曾经在这种情况下几次 。

2006年,我接受了微软面试,我的面试官询问我是否了解B树(或B +树)。我告诉他我知道B-Trees是什么,它们在数据库中很有用,但不记得其他任何东西。他转到其他主题。后来我发现我的采访者是James Hamilton,他是数据库和分布式系统的最厉害的专家。后来我开始为微软的Azure存储实现B + Trees(包含TB数据的大型B +树),现在我对B +树了解了一两件事。即便在今天,我还是害怕告诉James Hamilton我知道B + Tree是什么。

一旦面试者告诉我他已经在某个代码库中实现了某些功能。他不知道的事实是我在加入该团队之前曾经在该代码库上工作。我意识到他只为该代码库实现了一个客户端,但声称更多。

上述事件显然很少见。更有可能是两件事:

你的面试官可能正在研究你正在谈论的技术,并且可以轻松区分冒名顶替者和专家。
他可能已经问了1000次这个问题并且精通可能的解决方案。他会很快发现你真正理解了多少。

规则2:永远不要假装成为专家。面试你的人几乎总是比你更了解这个领域,甚至可以成为行业专家。

这真的是我的领域。我将在15分钟内完成

对你有好处但速度慢一点。不要跳到你已经知道的解决方案,而是采取以下操作:

1.收集需求。
2 问问题。你的面试官有兴趣了解你的思维过程。
3 评估多种解决方案,讨论利弊,并了解讨论的对象。

实际上,无论你是否了解领域,最好都这样做。

规则3:不要急于求解决方案。收集需求,建议多种解决方案并对其进行评估。这是一个开放式的讨论。

面试官:让我们设计Twitter。你打算如何存储所有推文?
候选人:我将使用像MongoDB这样的NoSQL数据库。
面试官:为什么不是MySQL?
候选人:RDBMS没有扩展。我们需要一个可扩展的数据库,如MongoDB或BigTable。
面试官:但是我们在Twitter上存储了MySQL中的所有推文,而且它的扩展性非常好。
候选人:嗯,那我就改了。也许你的规模不是那么大。像Facebook这样需要更大规模的服务使用NO-SQL解决方案。
面试官:但Facebook也使用MySQL。
候选人:我不知道他们怎么能扩展。我得查一查。也许他们在BigTable支持的前端有一个MySQL。
面试官:没关系。我们应该在哪里存储我们的分析数据
候选人:显然是在MySQL中。
面试官:但这对MySQL来说太过分了。我们将它存储在HDFS中。
候选人:你可能在MongoDB成熟之前开始构建Twitter。 MongoDB可以轻松处理你的推文和分析数据。
面试官:好的,谢谢你的时间。很高兴和你交流
回复

使用道具 举报

🔗
drenched 2022-6-28 07:29:36 | 只看该作者
全局:
hi lz, 读了你staff面试准备的过程和资料受益匪浅。想问一下,你在面试时关于 步骤3:封装容量估计 你会每次都用到吗 会在面试过程中花几分钟时间去计算和estimate吗 谢谢
回复

使用道具 举报

🔗
 楼主| fby0656 2022-6-28 08:32:35 | 只看该作者
全局:
drenched 发表于 2022-6-27 16:29
hi lz, 读了你staff面试准备的过程和资料受益匪浅。想问一下,你在面试时关于 步骤3:封装容量估计 你会每 ...

不一定,看面试官的喜好,还是要跟他说好
回复

使用道具 举报

🔗
soulmachine 2022-10-20 18:06:15 | 只看该作者
全局:
年久失修,链接失效了,新链接 soulmachine.gitbooks.io/system-design/content/cn/
回复

使用道具 举报

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

本版积分规则

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