注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
花了很长时间研究各种系统,读paper,和行业的一些技术大牛讨论相关的技术,并且结合自己在大公司工作十几年的经验,在这里分享一下一些系统 设计的总结,希望对大家有用。设计题被普遍认为是很难的一轮面试,很多公司都用这轮面试决定录取员工的级别。下面我总结一下10道比较流行设计题,并且附上high-level 的system设计图。因为空间有限,所以很多细节就不在这里详细解释了了。感兴趣的可以到我的网站查看其中一些题完整的详细设计。https://systeminterview.com/
1. Design a Chat System (Facebook messenger, Whatsapp)
聊天系统总体来说可以分为三个模块:
1). Stateless service模块. Stateless service往往是建立高扩展系统的基础,很多常用系统往往都是stateless的。比如,authentication service, group management, user profile等等.
2). Stateful service模块。这是一个比较独特的模块。用户和chat service之间会有persistent连接,比如WebSocket。
3). Third party模块.最重要的third-party是push notification service。当聊天用户不在线的时候,消息将会以push notification的方式发布。
![]()
2. Design a Video Streaming Service (YouTube, Netflix)
视频播放和视频上传是两个最重要的话题。下图主要列举视频上传和转码的的过程。转码后的视频将放在CDN里。大家可以去网站上看完整的设计
![]()
3. Design a Key-value Store
随着键值系统变得越来越流行,比如Cassandra, Google BigTable, Amazon DynamoDB。键值存储也变成很多公司常考的面试题。键值存储系统设计很复杂,在这里我们只列举数据读取的流程。下图主要是参考Cassandra的数据读取流程。这个只是整体系统的一个部分。
![]()
4. Design a URL shortener
短网址看起来很容易实现,但是这题的考点可以很多,而且实现方式也有多种。下图主要讲解怎么样从长网址转换为短网址。
![]()
5. Design a Web Crawler
关于网络爬虫,有一篇很有名paper: Mercator: A Scalable, Extensible Web Crawler. 很多网络爬虫的设计都是基于这paper上的。网络爬虫的设计本身不难, 但是如果加上高效率,高性能,分布式读取,“礼貌”等等,设计就复杂了。下图是关于网络爬虫的设计轮廓。
![]()
6. Design a Shared Cloud Drive (Google Drive, Dropbox)
设计网络硬盘也是一道颇受欢迎的一道面试题。其中比较重要的考点有文件的上传和异地同步。文件上传的高层次设计图如下。
![]()
7. Design a News feed System
这道设计题应用比较广泛,比如设计Facebook, Twitter或者Instagram。动态新闻的设计主要包括两方面。第一是feed publishing的流程。第二是news feed retrieval的流程。下面的设计图包括feed publishing的流程。
![]()
8. Design a Search Autocomplete System
一提起autocomplete system,很多人都会想到Trie数据结构。Trie确实是被广泛应用到autocomplete system里,但是系统的设计要远多于此。从高层次来说,系统主要可以分为两部分。第一,搜索的数据是如何采集的,并且Trie是如何建立的。第二,但用户输入搜索关键字后,系统是如何取得结果的。下面的设计主要集中在数据的采集和Trie的建立。
![]()
9. Design a Notification System
推送系统的应用非常广泛,基本上所有的应用都有这个feature.这里的消息推送包括三种: mobile push notification, email and SMS message. 下面高层次的设计图主要包括苹果的推送,但是可以应用到其他的推送方式。
![]()
10. Design a scalable system that supports millions of users
设计一个可以支持百万用户的网站。这道题是很多系统设计题的基础,其中会涉及到怎么样扩展web server, cache, database, multi-data center, logging, monitoring等等。高层次的设计图如下。网站有每个部分的详细讲解
![]()
如果觉得这个帖子有用或者想要看到更完整详细的设计讲解,请查看
https://systeminterview.com/
|