干货总结 | 系统设计七问七答

807 阅读3分钟

系统设计面试,对于有经验跳槽的软件工程师来说,是必考的,很多人披荆斩棘,最终还是跪在系统设计题目上。而对于应届毕业生来说,也有可能考到,通常在加面或Headcount不多的时候会被考到。

在系统设计面试中的表现,可以反映出你处理复杂系统的能力,面试公司甚至以此为据为你提供相应的职位和薪酬。今天给大家总结了系统设计的七问七答,快速帮你扫盲系统设计

1. 常见的系统设计面试问题有哪些?

设计某某系统 Design XXX System

  • 设计微博 Design Twitter

  • 设计滴滴 Design Uber

  • 设计NoSQL数据库 Design NoSQL

设计某某系统中的某某功能

  • 设计一个功能实现对用户访问频率的限制

  • 设计删除一个 Tweet 的功能

  • 设计邮件系统中将所有邮件标记为已读的功能

2. 系统设计还有哪些典型题?

短网址系统设计;新鲜事系统设计。

3. 系统设计面试的评分标准是啥?

  • 可行解 Work Solution 25%

  • 特定问题 Special Case 20%

  • 分析能力 Analysis 25%

  • 权衡 Tradeoff 15%

  • 知识储备 Knowledge Base 15%

4. 系统设计和面向对象设计有什么区别?

形式上:面向对象设计是手把手的 Coding;系统设计则是高屋建瓴的“扯淡”

**考察的知识点上:**面向对象设计考的是Class, Object, Method, Inheritance, Interface等;系统设计则考的是Database, Schema, SQL, NoSQL, Memcached, File System, Distributed System, QPS等。

5. 关于系统设计有什么建议吗?

1.Ask before design

问清楚再动手设计,不要一上来就冲着一个巨牛的方案去设计,切忌不要做关键词大师

2.No more no less 不要总想着设计最牛的系统,要设计够用的系统

3.Analysis is important than solution 记住答案是没用的 ,系统设计没有标准答案。

6. 系统设计有哪些辅助性学习资料推荐?

Intro to:Architecture and Systems Designs 来自前Facebook工程师的关于如何处理系统设计问题的 Youtube 教程。 网址:t.cn/EzFLeYN

Designing Data-intensive Applications 这是一本书籍,是学习如何设计规模(design pattern)的另一个好资源,Amazon上有卖。它讨论了数据库(MySQL和NoSQL)是如何工作的,什么时候使用哪一个,各种处理规模技术的利弊等。

Github: 老外写的《系统设计入门》 这是别人翻译的一个Github中文文档。在翻译前,应该是从上万Github文档里面精选过的,值得一读。里面关于系统设计的理论非常全面、深入,而且有各种图例帮助理解,非常清晰。网址:t.cn/RXVkSUL

7. 系统设计有哪些在线课程推荐?

Grokking the System Design Interview 这套课程是Educative的付费的全英文视频课程,其中有几节是免费的。课程包括很多系统设计实例,如Dropbox, Twitter, Facebook Messenger, Uber 等系统设计。网址:t.cn/EInHDXQ

System Design for Tech Interviews 这是一套英文网络课程, 可以补充看看。

8. 那么怎么样才算真的掌握系统设计呢?

  • 掌握系统设计面试时的技巧和要点
  • 对系统设计问题有更深入和全面的了解,能独立设计系统;
  • 在实际案例中能更好的运用系统设计思想,能深入分析系统功能;
  • 能解决在面试中会遇到的大部分系统设计问题。