当前位置: 首页 > news >正文

系统设计入门:成为更优秀的工程师

系统设计入门指南

动机

现在你可以学习如何设计大规模系统,为系统设计面试做准备。本指南包含的是一个有组织的资源集合,旨在帮助你了解如何构建可扩展的系统。

学习设计大规模系统

学习如何设计可扩展系统将帮助你成为更优秀的工程师。系统设计是一个广泛的话题,网络上有大量的资源分散在各处。这份指南整理了所有你所需的学习资源,帮助你系统化地学习。

系统设计面试准备

除了编码面试外,系统设计也是许多科技公司技术面试过程中的一个必要环节。你可以练习常见的系统设计面试问题,并将自己的结果与样本解决方案进行比较,包括讨论、代码和图表。

补充的面试准备主题包括:

  • 学习指南
  • 如何处理一个系统设计面试问题
  • 系统设计面试问题及其解决方案
  • 面向对象设计面试问题及其解决方案

Anki 卡片

提供的 Anki 卡片组 利用间隔重复的方式帮助你记住关键的系统设计概念。可以下载的卡片包括:

  • 系统设计卡片
  • 系统设计练习卡片
  • 面向对象设计练习卡片

非常适合在外出时使用。

互动编码挑战资源

寻找帮助你为 编码面试 做准备的资源?

你可以查看姐妹库 互动编码挑战,该库包含一个额外的 Anki 卡片组:

  • 编码卡片

系统设计主题索引

了解系统设计主题的良好开始是在多个主题间获得简明总结,包括它们的优缺点。每部分包含链接以获取更深入的研究资料。

以下是一些建议的学习步骤:

步骤1:回顾可扩展性视频讲座

可以从 哈佛的可扩展性讲座 开始。

覆盖的主题:
  • 垂直扩展
  • 水平扩展
  • 缓存
  • 负载均衡
  • 数据库复制
  • 数据库分区

步骤2:回顾可扩展性文章

阅读关于 可扩展性 的文章,了解更多。在该文章中你将学到:

  • 克隆
  • 数据库
  • 缓存
  • 异步

针对性能 VS 可扩展性、延迟 VS 吞吐量、可用性 VS 一致性等高层次的权衡将被详细讨论。

性能与可扩展性

一个服务是 可扩展的,如果分配的资源能有效提升 性能。通常增加性能意味着可以处理更多的工作单位,但也可能意味着处理更大的工作单位,例如,当数据集增加时。

性能和可扩展性的区别

  • 如果你有 性能 问题,系统对单一用户依然速度缓慢。
  • 如果你有 可扩展性 问题,系统对于单一用户速度正常,但在负载过重时变得缓慢。

有关 可扩展性 的理解。

延迟与吞吐量

延迟 是执行一些操作的时间或产生结果的时间。

吞吐量 是单位时间内完成的行动或产生的结果的数量。

你通常应该瞄准 最大吞吐量可接受的延迟

详细内容和内容

通过本文献继续理解延迟与吞吐量的关系。需要访问的链接包括:

  • 延迟与吞吐量的理解

可用性与一致性

CAP 定理


来源:CAP 定理重审

在一个分布式计算系统中,你只可以保证下面两个特性中的任意两个:

  • 一致性:每个读取操作接收到最近的写入或产生错误。
  • 可用性:每个请求都接收到响应,但不能保证最新版本的信息。
  • 分区容忍性:系统在因网络故障而导致的任意分区由于其子网仍然能继续操作。

网络并不可靠,因此你需要支持分区容忍性。在一致性和可用性之间需要进行软硬件的权衡。

发布的不同一致性模式和可用性模式将进一步详述。

同类项目

以下是一些与本项目类似的系统设计资源和工具:

  1. 系统设计速查表 - 提供快速转向常见系统设计概念的资源。
  2. LeetCode - 针对系统设计问题的一整套练习题库。
  3. Grokking the System Design Interview - 一门详细的在线课程,帮助你准备系统设计面试。

通过上述资源和工具,能够帮助您更好地理解和掌握系统设计的复杂性与实用性。

http://www.xdnf.cn/news/1247725.html

相关文章:

  • iptables 里INPUT、OUTPUT、FORWARD 三个链(Chain)详解
  • MATLAB实现的机载合成孔径雷达回波生成和处理
  • zyh贪心类题目补题报告
  • 灰色优选模型及算法MATLAB代码
  • GoLand 项目从 0 到 1:第五天 —— 角色权限中间件实现与事务控制
  • 三极管三种基本放大电路:共射、共集、共基放大电路
  • 使用公众号的消息模板给关注用户发消息
  • Pycaita二次开发基础代码解析:参数化模板创建与设计表驱动建模
  • RHCA03--硬件监控及内核模块调优
  • MCP与Function Calling
  • SAP FI模块凭证增强逻辑的策略
  • C++ string类
  • NLP自然语言处理 02 RNN及其变体
  • GPS信号捕获尝试(上)
  • 基于 Ubuntu 的 Linux 系统中 Vivado 2020.1 下载安装教程
  • Modbus tcp 批量写线圈状态
  • 【STM32】HAL库中的实现(四):RTC (实时时钟)
  • ES 模块动态导入
  • BeanFactory 和 ApplicationContext 的区别?
  • centos通过DockerCompose搭建开源MediaCMS
  • 如何让 RAG 检索更高效?——大模型召回策略全解
  • 字符串匹配--KMP算法
  • Arxiv-Daily
  • 【机器学习】算法调参的两种方式:网格搜索(枚举)、随机搜索
  • Spring AI 系列之三十六 - Spring AI Alibaba-nl2sql
  • 【Git学习】入门与基础
  • 调试|谷歌浏览器调试长连接|调试SSE和websocket
  • SELinux加固Linux安全
  • python的高校班级管理系统
  • 技术部实习总结