跳到主要内容

45 篇文档带有标签「系统设计」

查看所有标签

B 树与 B+ 树

B+ 树可以被视为 B 树,其中每个节点仅包含键。B+ 树的优点可以总结为更少的缓存未命中。在 B 树中,数据与每个键相关联,可以更快地访问。

Lambda 架构

Lambda 架构 = CQRS(批处理层 + 服务层) + 快速层。它解决了大数据的准确性、延迟和吞吐量问题。

SOLID 设计原则

SOLID 是一组设计原则的首字母缩写,帮助软件工程师编写稳健的代码。S 代表单一职责原则,O 代表开放/封闭原则,L 代表里氏替换原则,I 代表接口隔离原则,D 代表依赖倒置原则。

三种编程范式

结构化编程是一种对直接控制转移的约束。面向对象编程是一种对间接控制转移的约束。函数式编程是一种对变量赋值的约束。

什么是 Apache Kafka?

Apache Kafka 是一个分布式流处理平台,可用于按主题进行日志记录、消息系统的地理复制或流处理。由于其零拷贝技术,它比其他平台快得多。

今日头条推荐系统:P1 概述

为了评估用户满意度,实施了机器学习模型。这些模型通过特征工程观察和测量现实,并通过召回策略进一步减少延迟。

今日头条推荐系统:P2 内容分析

内容分析和用户标签的数据挖掘是推荐系统的基石。内容分析从原始文章和用户行为中提取中间数据。通过内容分析,我们能够标记用户,推荐和准备内容。

公共 API 选择

有几种工具可用于公共 API、API 网关或前端后端网关。GraphQL 以其诸如尾随结果、批处理嵌套查询、性能追踪和显式缓存等功能而脱颖而出。

关系数据库简介

关系数据库是大多数存储使用案例的默认选择,原因在于原子性、一致性、隔离性和持久性。这里的一致性与 CAP 定理中的一致性有什么不同?我们为什么需要 3NF 和数据库代理?

副本、一致性与CAP定理

任何网络系统都有三种理想属性:一致性、可用性和分区容忍性。系统只能拥有这三者中的两者。例如,关系数据库管理系统(RDBMS)更倾向于一致性和分区容忍性,因此成为ACID系统。

四种 No-SQL

从硬盘读取数据时,数据库连接操作耗时,99% 的时间花费在磁盘寻址上。为了优化读取性能,引入了非规范化,并且四种 NoSQL 类型可以帮助解决这个问题。

在软技能面试中我们可以沟通什么?

面试是员工寻找未来同事的过程。候选人将根据对三个关键问题的回答进行评估:能力、意愿和文化契合。 以上任何问题都无法在没有良好沟通的情况下回答。

如何编写稳健的代码?

同理心在编写稳健代码中扮演着最重要的角色。此外,您需要选择一个可持续的架构,以减少项目扩展时的人力资源成本。然后,采用模式和最佳实践;避免反模式。最后,必要时进行重构。

布隆过滤器

布隆过滤器是一种数据结构,用于以时间和空间高效的方式检测一个元素是否在一个集合中。查询返回“可能在集合中”或“绝对不在集合中”。

并发模型

您可能想了解的五种并发模型:单线程;多处理和基于锁的并发;通信顺序进程 (CSP);演员模型 (AM);软件事务内存 (STM)。

微服务中的身份验证和授权

设计一个从简单开始但可以随着业务扩展的身份验证解决方案,考虑安全性和用户体验,并讨论该领域的未来趋势

快速介绍 Optimism 架构

什么是 Optimism?它的架构是什么样的?它的构建组件是什么,它们之间如何相互作用?

数据分区与路由

实施数据分区与路由的优点是可用性和读取效率,而一致性则是其弱点。路由抽象模型本质上是两张地图:键-分区图和分区-机器图。

架构导论

架构为软件系统的整个生命周期提供服务,使其易于理解、开发、测试、部署和操作。O’Reilly的书《软件架构模式》对五种基本架构进行了简单而有效的介绍。

流处理与批处理框架

流处理和批处理框架可以以低延迟处理高吞吐量。为什么 Flink 正在获得越来越多的关注?如何在 Storm、Storm-trident、Spark 和 Flink 之间做出架构选择?

深入体验

对于那些在领导职位上经验较少的人,我们提供一些面试建议。需要描述您之前的项目,包括挑战或改进。同时,记得展示您的沟通技巧。

设计 Airbnb 或酒店预订系统

对于客人和房东,我们使用关系数据库存储数据,并建立索引以按位置、元数据和可用性进行搜索。我们可以使用外部供应商进行支付,并通过优先队列提醒预订。

设计 Facebook 照片存储

传统的基于 NFS 的设计存在元数据瓶颈:大的元数据大小限制了元数据命中率。Facebook 照片存储通过将数十万张图像聚合在一个单一的 haystack 存储文件中,消除了元数据。

设计 Uber

免责声明:以下所有内容均来自公共来源或纯原创。这里没有 Uber 机密信息。

设计一个网址缩短器

如果你被要求设计一个系统,将用户提供的网址转换为缩短的网址,你会怎么做?你将如何分配缩短的网址?你将如何实现重定向服务器?你将如何存储点击统计数据?

设计在线评测系统或 Leetcode

在线评测系统主要是一个可以远程执行代码的地方,用于教育或招聘目的。在这个设计中,我们专注于设计一个用于面试准备的 OJ,类似于 Leetcode。

设计实时联想搜索或自动完成功能

如何设计一个实时的联想自动完成服务?Linkedin 的 Cleo 库通过多层架构(浏览器缓存 / 网络层 / 结果聚合器 / 各种联想后端)和 4 个元素(倒排索引 / 正向索引,布隆过滤器,评分器)来回答这个问题。

设计支付 webhook

设计一个 webhook,当支付成功时通知商家。我们需要汇总指标(例如,成功与失败)并在仪表板上显示。

设计负载均衡器或 Dropbox 修补程序

大规模的网络服务处理来自全球的高流量,但单个主机只能处理有限数量的请求。通常会有一个服务器集群来处理所有流量。如何路由这些请求,以便每个主机能够均匀地接收请求?

负载均衡器类型

通常,负载均衡器分为三类:DNS 轮询、网络负载均衡器和应用负载均衡器。DNS 轮询很少使用,因为它难以控制且响应不佳。网络负载均衡器具有更好的粒度,简单且响应迅速。

跳表

跳表本质上是一种链表,允许您在其上进行二分查找。它通过添加额外的节点来实现这一点,使您能够‘跳过’链表的某些部分。LevelDB MemTable、Redis SortedSet 和 Lucene 倒排索引都使用了这种结构。

通过故障转移提高可用性

为了通过故障转移提高可用性,有几种方法可以实现这一目标,例如冷备份、热备份、温备份、检查点和全活动。

键值缓存

键值缓存用于减少数据访问的延迟。什么是读穿、写穿、写后、写回、写后和旁路缓存模式?