Figma Specs:把设计图和「为什么这样做」放在一起
Figma Specs 是放在设计画布上的协作文档。团队可以把需求、界面和讨论放在一起,再把这份说明交给开发者或 AI 使用。
先尝试拆解问题、设计和实现,再展开思路,检查状态、边界与取舍,并设计验证用例。思路提供分析路径,不给出完整实现。
01
代码思考进阶
导出带引用的需求资料时,怎样避免缺项和循环
场景:为自己的协作文档设计交接包导出器。一个文档可以引用其他文档或设计画面,导出时需要带上所有能访问的引用对象。
- 输入约定:输入是同一版本快照中的对象表和起点 ID。每个对象有唯一非空 ID、正文和按顺序排列的引用 ID 列表;输入最多十万个对象、二十万条引用。权限检查针对每个对象,导出期间快照与权限判断结果固定。
- 小例子:A 依次引用 B、C、D、E;B 引用 C;C 又引用 A。D 无权限,E 不存在。请说明 A 的输出如何避免重复,以及遇到 D、E 时如何报告。
- 限制条件:允许循环引用。导出只收集可访问对象;遇到无权限对象后不能读取其正文或继续遍历它的引用。不得向用户区分「不存在」和「无权限」来泄漏对象存在性。
- 请交付:遍历与去重思路、确定输出顺序的规则、缺项报告格式、时间与空间复杂度,以及测试表。不写完整实现。
查看思路
- 先规定输出顺序。 例如按引用出现顺序做广度优先遍历,使用队列和已访问集合;发现节点时就记录已访问,防止同一节点反复入队。A、B、C 的例子最终各出现一次。
- 在读取内容前检查可访问性。 无权限和不存在统一显示「无法取得引用」,仅指向用户原本就能看到的引用位置,不回传受限对象的标题、正文或引用数量。
- 保留关系,不把引用强行变成树。 用对象列表和引用关系表示共享节点与指回已访问对象的引用。循环本身不是错误,问题是遍历是否会无限继续。
- 固定快照才能解释结果。 题目已固定内容和权限;真实系统若做不到,需加版本检查或中止重试,不能声称零散读取天然一致。
- 核算复杂度与反例。 在对象查找和权限查询摊还为常数的假设下,令 V 为输入对象数,E 为全部输入引用项数,B 为实际导出的正文总字节数。建立索引并完成遍历的安全上界为 O(V+E),复制正文另需 O(B) 时间;索引、集合和输出合计占用 O(V+E+B)。受限对象的引用不能展开,实际处理量可能更小。测试空引用、重复引用、自环、长链和全部引用不可取,并说明查询代价变大时如何调整估算。