在分布式系统领域,CRDT和OT的争论从未停止。大多数技术团队在这两个方向之间做选择时,往往陷入了“哪个更先进”的思维陷阱。真相是:这不是技术选型问题,而是业务场景的匹配度问题。Notion选择CRDT不是技术崇拜,亚马逊机器人团队用OT也不是技术落后——他们各自在约束条件下做出了最优解。

对于正在准备亚马逊机器人团队PM或工程师职位的人来说,理解这个技术选型的底层逻辑,比背诵任何框架都重要。因为在L6及以上的面试中,面试官真正要考察的,是你能不能在信息不完整的情况下做出合理判断,并且能清晰解释你的推理过程。


一句话总结

Notion的CRDT选择和亚马逊机器人团队的OT方案,本质上是两种不同约束条件下的最优解——前者面对的是高并发、去中心化的用户协作场景,后者处理的是低延迟、强一致性的机器人控制需求。选择哪种技术,不取决于技术本身的高低,而取决于你要解决的核心问题是什么。在面试中真正能让你脱颖而出的,不是你选择了哪个方案,而是你能否说清楚“为什么这个场景下这个方案是对的”。


适合谁看

这篇文章的读者画像非常明确。你要么正在准备亚马逊机器人团队的软件工程师或PM面试,要么是希望深入理解分布式协作系统技术选型的技术管理者,要么是那些在简历上写了“熟悉CRDT/OT”但实际上只停留在概念层面的求职者。

第一类人需要这篇文章来通过面试。亚马逊机器人团队在L5及以上的面试中,几乎必然会出现系统设计问题,而实时协作是高频考点。你需要能够从业务场景出发,推导出技术选型的合理性,而不是背一段Wikipedia上的定义。

第二类人需要这篇文章来避免选型失误。我见过太多团队在协作工具选型时,要么盲目追新(“CRDT是未来,我们也要用”),要么保守僵化(“Google Docs用OT,我们抄就行了”)。这两种心态都会导致技术债。

第三类人需要这篇文章来回答“简历上写的这个技术点到底是什么意思”。如果你在简历上写了“参与过实时协作系统开发”,面试官很可能会追问你们用的是什么并发控制方案,如果你只能说出缩写而不能解释原理,这个面试基本就结束了。


CRDT和OT的本质区别:不是技术优劣,而是并发模型的根本分歧

在深入具体场景之前,必须先把这两个概念的核心差异讲清楚。不是哪个更先进,不是哪个性能更好,而是它们处理的根本问题完全不同。

OT(Operational Transformation)诞生于1989年,最初是为了解决多用户同时编辑文档时的冲突问题。Google Docs早期用的就是这套方案。

OT的核心思想是:当两个用户同时做出修改时,通过变换操作的顺序和参数来消除冲突。想象一个场景——用户A在位置5插入了“hello”,用户B同时在位置5之后插入了“world”,OT会通过变换操作,让最终结果无论谁先到达服务器都是“helloworld”。

CRDT(Conflict-free Replicated Data Types)则走了一条完全不同的路。CRDT不试图变换操作,而是设计了一种特殊的数据结构,让任意顺序合并操作都能得到一致的结果。最简单的例子是G-Counter——每个节点维护自己的计数器,合并时取各节点的最大值。无论操作顺序如何,最终状态必然一致。

这不是技术选择问题,而是对“一致性”定义的根本分歧。OT认为一致是“操作经过变换后结果相同”,CRDT认为一致是“无论以什么顺序应用操作,最终状态相同”。这两种定义在不同的业务场景下有不同的适用性。

在Notion的实际实现中,他们用的是Yjs框架,这是一个基于CRDT的开源库。Notion的工程师在博客中提到过,他们选择CRDT的核心原因是:Notion的协作者数量没有上限,一个文档可能有上百人同时编辑,传统的OT方案在这种情况下会产生指数级复杂度增长。而CRDT的合并操作是确定性的,无论并发程度多高,复杂度都是线性的。

这意味着什么?意味着Notion不是在做技术选型,而是在为他们的核心产品特性做技术约束。Notion的核心卖点之一就是“无限制协作”,如果选择OT,这个特性就无法实现。


> 📖 延伸阅读Asana vs Notion: A PM Tool Comparison and Review

亚马逊机器人团队为什么选择OT:不是技术落后,而是场景约束

亚马逊机器人团队的实时协作场景和Notion完全不同。在亚马逊的履约中心里,成百上千台机器人同时运动,每台机器人需要实时感知其他机器人的位置、速度、任务状态。如果用CRDT来处理这种场景,会遇到一个根本性问题:CRDT的最终一致性在机器人控制领域等于不安全。

想象一个具体场景。在亚马逊的某个履约中心,机器人A需要绕过机器人B去取货,同时机器人B正在执行一个优先级更高的任务。CRDT的最终一致性意味着,在某个时间窗口内,不同节点可能看到不同的“真实状态”——机器人A认为B还在左边,机器人B的本地决策系统认为自己在右边。这种状态不一致在消费级应用里可能只是显示错误,在机器人控制领域可能是碰撞事故。

亚马逊机器人团队的OT方案,本质上是一个中心化的协调系统。所有机器人的状态变化都通过一个中央协调器处理,操作会经过严格的排序和变换,确保每个机器人看到的“世界状态”都是一致的。这种方案的好处是确定性——给定同样的初始状态和输入,任何时候都能推算出系统的精确行为。

这不是技术落后,这是安全优先。航空航天领域的控制系统几乎都采用类似的中心化方案,不是他们不懂分布式的好处,而是他们更清楚失控的代价。

在亚马逊机器人团队的内部技术分享中,工程师提到过一个关键指标:延迟要求必须控制在50毫秒以内。这个数字不是拍脑袋的。在机器人高速运动场景下,50毫秒的延迟意味着机器人能够在可接受的距离内做出反应。

如果用CRDT的最终一致性模型,这个延迟是不可控的——网络波动可能导致合并操作延迟几秒甚至更久。而OT的中心化协调器可以精确控制响应时间,因为每个操作都经过同一个节点处理。

这就是为什么在面试中,面试官会反复追问“你认为CRDT好还是OT好”这种陷阱问题。正确答案是:取决于场景。能够清晰解释两种方案各自适用场景的候选人,比坚持“CRDT就是比OT好”的候选人要强得多。


为什么大多数人会答错这道题:不是答案错了,而是推理过程错了

在亚马逊机器人团队的L6系统设计面试中,我观察到一个规律:能够通过面试的候选人和被拒的候选人,核心差异不在于他们选择了CRDT还是OT,而在于他们如何得出结论。

被拒的候选人通常是这样回答的:“我认为CRDT更好,因为它是去中心化的,更现代,Google也在用。”这个答案暴露了两个问题:第一,候选人把“去中心化”等同于“好”,这是技术崇拜而不是技术判断;第二,候选人用“Google在用”来论证自己的观点,这是诉诸权威而不是逻辑推理。

能够通过面试的候选人通常是这样回答的:“这取决于一致性的要求程度和延迟容忍度。如果是一致性要求极高、延迟必须精确控制的场景,OT是更合适的选择。如果是高并发、允许最终一致性的场景,CRDT更有优势。具体到亚马逊机器人团队的场景,考虑到安全性和延迟要求,OT更合适。”这个答案展示的是候选人的推理能力,而不是知识储备。

面试官在系统设计环节真正要考察的,是候选人的权衡能力。任何技术选型都是权衡,牺牲了某些东西换取了另一些东西。能够清晰说出自己牺牲了什么、获得了什么的候选人,才是真正理解这个问题的候选人。

在L6及以上的面试中,还有一个常见的失败模式:候选人试图给出“正确答案”。他们认为面试官心里有一个标准答案,自己的任务是猜出来。这种心态会导致候选人过度迎合,而不是展示真实的思考过程。我见过一个很聪明的候选人,在面试中反复试探面试官的立场,一旦感觉面试官可能偏好CRDT,立刻转换立场。结果是面试官认为这个候选人没有独立判断能力,而且不诚实。

面试不是考试,没有标准答案。面试官要看到的是你如何思考,而不是你猜对了什么。


> 📖 延伸阅读PM Tool Comparisons: Asana vs Trello vs Notion

面试准备清单:不是看完就完了,而是每个点都要能展开

准备亚马逊机器人团队的面试,不能只停留在概念理解层面。每个知识点都要能够展开,要能回答“然后呢”和“为什么”。

第一,系统性地拆解CRDT和OT的实现原理。不是说能说出G-Counter和LWW-Register的区别就够了,而是要理解为什么CRDT能够保证最终一致性,OT的变换函数需要满足哪些性质(commutativity、associativity、idempotency)。

在PM面试手册里有完整的分布式系统实战复盘,里面详细拆解了面试中可能遇到的各种变体问题,可以参考。

第二,理解亚马逊机器人团队的真实架构约束。亚马逊的机器人系统是围绕“安全第一”设计的,所有决策都要可审计、可追溯。这种约束会影响技术选型。理解这些约束,比理解某个具体技术更重要。

第三,准备一个你自己经历过的技术权衡案例。面试官很可能会问:“你有没有遇到过需要在两个方案之间做选择的情况?你是怎么权衡的?”这个案例不能太简单,比如“我选了更快的那个”。要能够展示你考虑了哪些因素,做了哪些权衡,最终结论是什么。

第四,练习用简洁的语言解释复杂概念。系统设计面试通常只有45到60分钟,你需要能够在10分钟内把核心逻辑讲清楚。如果你在解释CRDT和OT的区别时用了超过5分钟,面试官会认为你的表达能力有问题。

第五,理解CAP定理的实践含义。不要只是背诵CAP定理的内容,要能够解释:在CRDT和OT的语境下,分别牺牲了什么?什么情况下这种牺牲是可接受的?

第六,研究亚马逊机器人团队最近的公开技术分享。亚马逊的工程师团队会定期在re:Invent和其他场合分享技术细节。这些内容能够帮助你在面试中展示你对目标团队的真诚兴趣。

第七,准备好反问面试官的问题。面试结尾通常会有“你有什么问题要问我”的环节。不要问那些能从网上搜到答案的问题,也不要问太私人的问题。问一些关于团队技术挑战、架构演进方向的问题,展示你的思考深度。


常见错误:不是知识不够,而是方法论有问题

在准备亚马逊机器人团队面试的过程中,常见的错误不是知识储备不足,而是方法论和心态问题。

第一个常见错误是把技术选型当成信仰而不是工具。我见过候选人在面试中坚持认为“CRDT就是比OT好”,当面试官追问“为什么”时,开始背诵各种技术细节来支持自己的立场。这种态度在L6及以上的面试中是致命的。

技术选型不是宗教信仰,面试官真正要考察的是你能不能根据具体场景做出合理判断。如果你对某种技术有强烈的偏好,面试官会担心你在实际工作中会不会因为个人偏好而做出错误决策。

好的回答方式不是“我认为CRDT更好”,而是“在高并发、去中心化的场景下,CRDT更有优势;在需要精确一致性、低延迟的场景下,OT更合适”。这种回答展示的是判断力,而不是偏好。

第二个常见错误是过度依赖类比而不是理解本质。有候选人用Google Docs的例子来解释OT,用区块链的例子来解释CRDT。这些类比在某些情况下有帮助,但如果过度依赖类比,面试官会认为你没有真正理解底层原理。类比是理解新概念的工具,但不是解释复杂系统的语言。

在面试中,如果面试官追问“你说的这个类比,具体是怎么实现的”,而你答不上来,这个类比就成了减分项。好的做法是用类比来建立初步理解,然后尽快深入到具体机制。

第三个常见错误是忽视业务约束。技术选型从来不是纯粹的技术问题。面试官会问:“如果你的方案需要三个月开发,但业务只给你一个月,你怎么办?”或者:“如果你的方案在99%的情况下表现很好,但1%的情况下会导致数据丢失,你认为可以接受吗?”这些问题没有标准答案,面试官要看到的是你如何权衡技术收益和业务风险。

我见过一个候选人的回答让我印象深刻。面试官问:“如果CRDT的实现有已知的bug,可能导致1%的合并操作产生错误结果,你认为在Notion的场景下可以接受吗?”这个候选人没有直接回答“可以接受”或“不能接受”,而是反问:“这个bug会导致什么后果?是文档内容损坏还是文档丢失?用户有没有办法发现和修复?”这种追问展示了候选人的系统思维能力和风险评估能力。



更多PM职业资源

探索来自硅谷产品负责人的框架、薪资数据和面试指南。

访问 sirjohnnymai.com →


更多PM职业资源

探索来自硅谷产品负责人的框架、薪资数据和面试指南。

访问 sirjohnnymai.com →


更多PM职业资源

探索来自硅谷产品负责人的框架、薪资数据和面试指南。

访问 sirjohnnymai.com →

FAQ

Q:亚马逊机器人团队的面试流程是什么样的?每轮考察重点是什么?

A:亚马逊机器人团队的面试通常分为五到六轮,总时长大约四个小时到五个小时。第一轮是招聘经理筛选,通常是45分钟的电话面试,主要考察你的背景是否匹配团队需求,以及你的沟通表达能力。这一轮不是技术深挖,而是确认你对这个职位有真实的兴趣和基本的技术理解。第二到第四轮是技术面试,每轮大约60分钟,包括编程题(通常是LeetCode中等难度)、系统设计和行为面试。

系统设计环节几乎必然会出现实时协作相关的场景题,比如“如果你要设计一个多机器人协调系统,你会考虑哪些因素”。第五轮是Bar Raiser面试,这是亚马逊特有的环节,由一个跨团队的资深面试官来评估你是否符合亚马逊的14条领导力原则。最后一轮通常是薪资谈判,由HR来跟你讨论offer。

关于薪资,亚马逊机器人团队L5软件工程师的package通常是这样的:Base Salary在$150,000到$180,000之间,具体数字取决于你的工作年限和之前的薪资水平;Sign-on Bonus第一年通常在$20,000到$40,000之间,第二年会有一个较小的续期bonus;

RSU(限制性股票单位)的四年总量通常在$80,000到$150,000之间,按照亚马逊的标准四年 vesting schedule分发(L5通常是第一年15%,第二年25%,第三年35%,第四年25%)。

总包(Total Compensation)在第一年通常在$220,000到$280,000之间。L6的package会显著更高,Base通常在$200,000到$250,000之间,RSU总量通常在$150,000到$300,000之间,总包可能超过$400,000。需要注意的是,这些数字会随着市场情况和你的谈判能力有所浮动。

Q:在面试中,如果被问到“我认为CRDT更好,你同意吗”,应该怎么回答?

A:这个问题是一个典型的陷阱问题。面试官不是在问你的技术观点,而是在考察你的判断能力和独立性。如果你直接同意,你可能被认为缺乏批判性思维;如果你直接反对,面试官可能会追问你的理由,如果你没有充分的理由,同样会被认为缺乏判断力。

正确的回答方式是把问题拆解:“这个观点需要看具体场景。在高并发、允许最终一致性的场景下,CRDT的优势明显;但在对一致性要求严格、延迟必须精确控制的场景下,OT可能更合适。”然后结合你申请的具体团队来分析:“考虑到亚马逊机器人团队对安全性和延迟的严格要求,我理解为什么他们选择了OT方案。”

我观察到一个现象:很多候选人在遇到这种问题时,会试图猜测面试官想要什么答案。这是一种错误的策略。面试官通常是资深工程师,他们能够分辨出真诚的技术观点和迎合性的回答。与其猜测他们想要什么,不如展示你真正是怎么想的。如果你真的认为CRDT更好,就解释你的理由,但同时要承认OT在特定场景下的合理性。这种诚实的态度在亚马逊的面试文化中是被鼓励的。

Q:如何在面试中展示对亚马逊机器人团队的真实了解,而不是泛泛而谈?

A:展示真实了解的最好方式不是背诵公开信息,而是展示你的思考深度。亚马逊机器人团队的技术挑战不是秘密——你可以从re:Invent演讲、技术博客、公开论文中了解到他们面临的规模和性能要求。但知道这些信息不够,你需要能够形成自己的观点。

举一个具体的例子。面试官可能会问:“亚马逊的机器人协调系统每秒处理数百万次状态更新,你觉得用CRDT还是OT更合适?”如果你只是回答“OT更合适因为需要强一致性”,这只是泛泛而谈。

如果你能够进一步分析:“强一致性只是原因之一,更重要的是,机器人控制系统的决策需要是可预测的。CRDT的最终一致性模型在某些边缘情况下可能导致合并结果出乎意料,这在安全关键系统中是不可接受的。”这种分析展示了你不只是知道答案,而是理解为什么答案是这个。

另一个展示深度的方式是提出有价值的问题。在面试结尾的反问环节,你可以问:“亚马逊机器人团队在处理状态协调时,如何平衡一致性和可用性?有没有在某些场景下尝试过CRDT?”这种问题展示了你的技术好奇心,而且如果面试官愿意分享,还能让你获得内部视角的信息。

最后需要提醒的是,展示了解不等于炫耀知识。有候选人在面试中过度引用亚马逊的技术博客,试图证明自己做过功课。但这种表现方式可能会适得其反——面试官会认为你是在表演,而不是在真诚地交流。更好的方式是自然地引用你的了解,把它作为你分析问题的基础,而不是作为展示的材料。

相关阅读