硬货:如何做好一名系统架构设计师以及面试技巧


系统架构师在拥有知识经验上要高于一般软件架构师或领域架构师,承担整个系统的权衡设计,搭建一个可伸缩、可扩展、高事务、高一致的系统架构是其工作目标,同时针对运营中出现的重大问题进行诊断以及提出改进意见。这个Github存储库提供你如何在短时间内掌握系统设计以及应对面试,如果有时间,您可以深入了解每个主题,Jdon网站基本都是围绕这些主题进行了翻译和延伸以及讨论:

系统设计是一个非常广泛的主题,即使是在顶级IT公司拥有多年工作经验的软件工程师也可能不是系统设计方面的专家。如果你想成为一名专家,你需要阅读许多书籍,文章,并解决真正的大规模系统设计问题。

澄清约束并识别用户案例
花几分钟询问面试官并就系统范围边界达成一致。记得要确保你知道面试官在开始时没有告诉你的所有要求。
用户案例use case指示系统的主要功能,约束要求列出了系统的规模,例如每秒请求数,请求类型,每秒写入的数据,每秒读取的数据。

高级架构设计
绘制重要组件及其之间的连接,但不要详细介绍。通常,可伸缩系统包括webserver(负载均衡器),服务(服务分区),数据库(主/辅助数据库集群插件缓存)。

组件设计
您需要为每个组件编写特定的API,您可能需要完成特定功能的详细OOD设计。您可能还需要为数据库设计数据库模式。

系统设计基础知识
以下是一些有关系统设计相关主题的文章。

公司工程博客
如果您要与公司合作,您应该阅读他们的工程博客。


产品和系统
以下论文/文章/幻灯片可以帮助您了解不同实际产品和系统的一般设计理念。

热门问题和参考
每个问题都有一些很好的参考。这里的参考资料是幻灯片和文章。
设计CDN网络参考:

设计Google文档系统参考:

设计随机ID生成系统参考:

设计键值数据库参考:

设计Facebook新闻源功能参考:

设计Facebook时间线功能参考:

设计一个函数以在过去的时间间隔内返回前k个请求参考:

设计在线多人纸牌游戏参考:

设计图搜索功能参考:
  • 构建图搜索的基础架构
  • 图搜索中的索引和排名
  • Facebook [url=https://www.facebook.com/notes/facebook-engineering/under-the-hood-the-natural-language-interface-of-graph-search/10151432733048920]搜索[/url]和Erlang [url=https://www.facebook.com/notes/facebook-engineering/under-the-hood-the-natural-language-interface-of-graph-search/10151432733048920]的自然语言界面[/url]

设计图片共享系统参考:

设计搜索引擎参考:

设计推荐系统参考:

设计tinyurl系统参考:

设计垃圾收集系统参考:

设计可扩展的Web爬网系统参考:

设计Facebook聊天功能参考:

设计趋势主题系统参考:

设计缓存系统参考:

好书:

面向对象设计:
OOD采访提示
澄清场景,写出用户案例
用例是对事件序列的描述,这些事件序列一起导致系统执行某些有用的操作。谁将使用它以及它们将如何使用它。该系统可能非常简单或非常复杂。
特殊的系统要求,如多线程,读或写。

定义对象
将标识映射到类:一个类的一个方案,此方案中的每个核心对象用于一个类。
考虑类之间的关系:某个类必须具有唯一的实例,一个对象具有许多其他对象(组合),一个对象是另一个对象(继承)。
确定每个类的属性:将名词更改为变量,将操作更改为方法。
使用设计模式,使其可以在多个应用程序中重用。

有用的网站