系统设计准备指南
软件工程师的系统设计面试指南
系统设计面试的目的是评估应聘者在设计涉及多个组件的真实软件系统方面的技能。系统设计问题通常会提供给更资深的应聘者(具有几年经验)。实习生通常不会被问到系统设计问题,因为很难指望实习生拥有足够且相关的行业经验来很好地回答这类问题。
系统设计面试
系统设计问题可以采用不同的形式:
后端/分布式系统设计:考生需要设计跨多个服务器或数据中心运行的系统。主题包括后端架构、数据库模式设计、数据复制、容错、消息队列、一致性模型等。
API 系统设计:设计大型系统内的 API,可能是 HTTP API(例如 REST),或者软件组件内的方法。
面向对象设计:面向对象设计面试侧重于设计类、对象及其关系。应聘者经常被要求创建类图、定义接口并讨论设计模式。
前端系统设计:设计复杂客户端应用程序或 UI 组件的架构。重点在于客户端内部发生的事情以及客户端与服务器之间的 API 设计。
作为软件工程师,您遇到的最常见的系统设计类型是后端/分布式系统设计类型。一些常见的后端系统设计面试问题包括:
设计一个 URL 缩短器(例如 Bitly)
设计社交媒体网站(例如 Twitter)
设计一个视频观看网站(例如 YouTube)
设计聊天服务(例如 Telegram、Slack、Discord)
设计文件共享服务(例如 Google Drive、Dropbox)
设计拼车服务(例如 Uber、Lyft)
设计照片共享服务(例如 Flickr、Pinterest)
设计一个电子商务网站(例如亚马逊、eBay)
设计一个求职门户网站(例如 LinkedIn、Indeed)
设计一个网络爬虫(例如 Google)
优质资源
免费资源
书籍
Last updated