ACID vs BASE
ACID 和 BASE 代表了不同的设计理念。ACID 更注重一致性而非可用性。在 ACID 中,C 表示事务保留所有数据库规则。而 BASE 更侧重于可用性,表示系统确保可用。
ACID 和 BASE 代表了不同的设计理念。ACID 更注重一致性而非可用性。在 ACID 中,C 表示事务保留所有数据库规则。而 BASE 更侧重于可用性,表示系统确保可用。
B 树和 B+ 树是磁盘数据库的主力数据结构。B 树在每个节点都存储数据;B+ 树把叶子节点连成链表、把所有数据都下推到叶子层。这一个结构差异决定了所有实际权衡——范围扫描、缓存行为、以及为何几乎所有关系型数据库都使用 B+ 树。
在 TAO 之前,Facebook 使用缓存旁路模式来扩展其社交图谱存储。存在三个问题:列表更新操作效率低;客户端必须管理缓存,且很难提供读后写一致性。通过 TAO,这些问题得以解决。
架构可以直接影响每个功能的成本。让我们在三个维度上比较紧耦合 MVC、Cocoa MVC、MVP、MVVM 和 VIPER:功能参与者之间责任的平衡分配、可测试性以及易用性和可维护性。
Lambda 架构 = CQRS(批处理层 + 服务层) + 快速层。它解决了大数据的准确性、延迟和吞吐量问题。
为了在广告中实现更高的投资回报率,Lyft推出了一款营销自动化平台,该平台由三个主要组件组成:生命周期价值预测器、预算分配器和竞标者。
动机
SOLID 是一组设计原则的首字母缩写,帮助软件工程师编写稳健的代码。S 代表单一职责原则,O 代表开放/封闭原则,L 代表里氏替换原则,I 代表接口隔离原则,D 代表依赖倒置原则。
结构化编程是一种对直接控制转移的约束。面向对象编程是一种对间接控制转移的约束。函数式编程是一种对变量赋值的约束。
云设计模式分为三类。可用性模式包括健康端点监控和限流。数据管理模式包括缓存旁路和静态内容托管。安全模式包括联邦身份认证。
Apache Kafka 是一个分布式流处理平台,可用于按主题进行日志记录、消息系统的地理复制或流处理。由于其零拷贝技术,它比其他平台快得多。
为了评估用户满意度,实施了机器学习模型。这些模型通过特征工程观察和测量现实,并通过召回策略进一步减少延迟。
授权决定个人或系统是否有权访问特定资源。这个过程是一个典型的场景,可以通过软件进行自动化。我们将回顾谷歌的 Zanzibar、受 Zanzibar 启发的解决方案以及市场上的其他 AuthZ 服务。
欺诈检测在登录过程中对抗账户接管和僵尸网络攻击。半监督学习比无监督学习具有更好的学习准确性,比监督学习花费更少的时间和成本。
你的信用卡是如何处理的?5 个参与方和 2 个工作流程。
有几种工具可用于公共 API、API 网关或前端后端网关。GraphQL 以其诸如尾随结果、批处理嵌套查询、性能追踪和显式缓存等功能而脱颖而出。
关系数据库是大多数存储使用案例的默认选择,原因在于原子性、一致性、隔离性和持久性。这里的一致性与 CAP 定理中的一致性有什么不同?我们为什么需要 3NF 和数据库代理?
任何网络系统都有三种理想属性:一致性、可用性和分区容忍性。系统只能拥有这三者中的两者。例如,关系数据库管理系统(RDBMS)更倾向于一致性和分区容忍性,因此成为ACID系统。
从硬盘读取数据时,数据库连接操作耗时,99% 的时间花费在磁盘寻址上。为了优化读取性能,引入了非规范化,并且四种 NoSQL 类型可以帮助解决这 个问题。
面试是员工寻找未来同事的过程。候选人将根据对三个关键问题的回答进行评估:能力、意愿和文化契合。 以上任何问题都无法在没有良好沟通的情况下回答。
AKF 规模立方体是思考 Web 服务扩展的心智模型,沿三个维度进行——克隆(X)、功能分解(Y)和数据分区(Z)。本文讨论每个轴何时起作用、应用它们的顺序,以及各自的运维成本。
API 可能不够健壮且不可预测。为了解决这个问题,应遵循三个原则。客户端重试以确保一致性。使用幂等性、指数退避和随机抖动进行重试。
移动设备上的 HTTP 视频服务面临两个问题:有限的内存或存储和不稳定的网络连接以及可变的带宽。HTTP 实时流媒体通过关注点分离、文件分段和索引来解决这些问题。
布隆过滤器是一种紧凑的概率集合成员结构——1% 假阳性率约 10 位/元素,零假阴性。本文讲解其工作原理、参数选择的数学、真实系统中的使用(Cassandra、HBase、Chrome、CDN),以及何时应改用计数型 / 布谷鸟 / 商数过滤器等变种。
五种并发模型——单线程异步、共享内存加锁、CSP、Actor 模型、软件事务内存(STM)——在状态共享、组合性和故障模式上的比较。附各自适用场景,以及为何语言选择往往比问题本身更能决定采用哪种模型。
设计一个从简单开始但可以随着业务扩展的身份验证解决方案,考虑安全性和用户体验,并讨论该领域的未来趋势
实施数据分区与路由的优点是可用性和读取效率,而一致性则是其弱点。路由抽象模型本质上是两张地图:键-分区图和分区-机器图。
架构为软件系统的整个生命周期提供服务,使其易于理解、开发、测试、部署和操作。O’Reilly的书《软件架构模式》对五种基本架构进行了简单而有效的介绍。
流处理和批处理框架可以以低延迟处理高吞吐量。为什么 Flink 正在获得越来越多的关注?如何在 Storm、Storm-trident、Spark 和 Flink 之间做出架构选择?
对于那些在领导职位上经验较少的人,我们提供一些面试建议。需要描述你之前的项目,包括挑战或改进。同时,记得展示你的沟通技巧。
对于客人和房东,我们使用关系数据库存储数据,并建立索引以按位置、元数据和可用性进行搜索。我们可以使用外部供应商进行支付,并通过优先队列提醒预订。
传统的基于 NFS 的设计存在元数据瓶颈:大的元数据大小限制了元数据命中率。Facebook 照片存储通过将数十万张图像聚合在一个单一的 haystack 存储文件中,消除了元数据。
Memcached = 丰富的客户端 + 分布式服务器 + 哈希表 + LRU。它具有简单的服务器,将复杂性推给客户端,因此可靠且易于部署。
设计一个可以接收、发送和支付的转账后端系统。它应涵盖扩展性、国际化、去重、单点故障、强一致性等问题。
免责声明:以下所有内容均来自公共来源或纯原创。这里没有 Uber 机密信息。
需求
如果你被要求设计一个系统,将用户提供的网址转换为缩短的网址,你会怎么做?你将 如何分配缩短的网址?你将如何实现重定向服务器?你将如何存储点击统计数据?
在线评测系统主要是一个可以远程执行代码的地方,用于教育或招聘目的。在这个设计中,我们专注于设计一个用于面试准备的 OJ,类似于 Leetcode。
如何设计一个实时的联想自动完成服务?Linkedin 的 Cleo 库通过多层架构(浏览器缓存 / 网络层 / 结果聚合器 / 各种联想后端)和 4 个元素(倒排索引 / 正向索引,布隆过滤器,评分器)来回答这个问题。
需求
设计一个 webhook,当支付成功时通知商家。我们需要汇总指标(例如,成功与失败)并在仪表板上显示。
需求
需求
大规模的网络服务处理来自全球的高流量,但单个主机只能处理有限数量的请求。通常会有一个服务器集群来处理所有流量。如何路由这些请求,以便每个主机能够均匀地接收请求?
负载均衡器的三大类别——DNS 轮询、L3/L4 网络负载均衡器和 L7 应用负载均衡器。本文说明各自在数据包层面的实际工作方式、不同算法(轮询、最少连接、一致性哈希)适合的使用场景,以及健康检查和会话粘性失效的地方。
跳表是一种概率性的多层链表,支持 O(log n) 的搜索、插入与删除。被 LevelDB 的 MemTable、Redis 的 Sorted Set 和 Lucene 的倒排索引采用。本文讲解其工作原理、为何相较于平衡 BST 被选中,以及每个真实实现中的具体权衡。
为了通过故障转移提高可用性,有几种方法可以实现这一目标,例如冷备份、热备份、温备份、检查点和全活动。
键值缓存用于减少数据访问的延迟。什么是读穿、写穿、写后、写回、写后和旁路缓存模式?