代表性面试主题

系统设计面试:设计一个遵循 Global Privacy Control 的隐私偏好服务

系统设计困难
Offer.cc 编辑团队发布 更新

题干

设计一个服务:接收 Global Privacy Control 信号,结合登录用户选择和地区政策,阻止不允许的数据共享,覆盖 Web、移动端和合作伙伴 API。请解释优先级、传播、审计、撤回和故障模式。

题目与范围

公司运营 Web 应用、移动端、分析系统和广告集成,需要遵循浏览器级 Global Privacy Control 信号、用户明确选择与变化中的地区规则。请设计控制面和请求时执行路径,覆盖匿名访客、登录用户、多设备、合作伙伴和政策更新。

核心能力是分布式政策执行与隐私状态建模,因此归入 system-design

面试官考察什么

第一,能否区分信号与法律决定?Sec-GPC 请求头或浏览器属性是输入,是否适用以及允许处理哪些目的由政策和上下文决定。

第二,能否定义优先级与作用域?全局退出可能按浏览器、账户、家庭或地区适用,系统不能静默合并不同作用域。

第三,能否在数据离开边界前执行?分析、广告技术、导出和合作伙伴 API 都需要共享决策点,而非只有横幅。

第四,能否让决定可解释、可撤回?保留政策版本、来源、时间和有效期,同时最小化个人数据。

第五,能否安全失败?政策存储、缓存或地区判断异常时,对可选共享默认最严格模式,并输出可观测原因。

先澄清的问题

  • 覆盖哪些地区和目的,权威规则来自哪里?
  • 登录后 GPC 是作用于账户,还是只作用于浏览器上下文?
  • 阻止哪些目的:出售、共享、定向广告、度量,还是所有可选处理?
  • 撤回需要多快到达缓存、队列、仓库和合作伙伴?
  • 需要保留哪些证据,哪些数据要删除或匿名化?
  • 所有出站集成是否都能调用同一政策决策服务?

30 秒回答框架

“我会把浏览器信号和明确选择规范化为带版本的隐私意图,在每个数据出站边界结合地区和目的政策评估。决定包含作用域、政策版本、有效期和原因;可选共享采用短缓存和失败关闭。撤回事件传播到队列与合作伙伴,追加最小审计证据。测试匿名转登录、冲突作用域、政策更新、缓存陈旧和合作伙伴失败。”

分步作答

第一步:规范化输入并避免过度识别

边缘层记录 GPC 信号、来源、用户代理上下文、账户状态和声明地区。匿名浏览器标识与账户标识分离,只有政策允许时才关联。把明确选择规范化为出售、共享、度量和个性化等目的。

第二步:评估带版本的政策

政策服务接收主体作用域、目的、地区、信号来源和时间,返回 allowdenyunknown,并带政策版本、有效期和原因码。GPC 本身不是所有地区所有目的都禁止的证明,评估器必须应用对应规则。

第三步:在每个出站边界执行

分析、广告技术、导出和合作伙伴 API 发送前都要求短期决策令牌。SDK 可以减少误采集,但服务器必须执行,因为客户端可被修改。队列和批处理在投递前再次检查,而不是只在入队时检查。

第四步:传播变化与撤回

按作用域主体引用发布隐私意图事件。消费者使缓存失效、停止后续导出,并标记需要删除或抑制的数据。合作伙伴只接收目的、作用域、生效时间和验证信息,令牌足够时不要广播原始身份。

第五步:审计决定而非载荷

记录请求类别、主体作用域哈希、目的、政策版本、信号来源、决定和时间。加密访问、限制保留期,并将运维日志与用户解释分离。审计应能回答为何允许或拒绝传输,但不要复制敏感事件内容。

第六步:失败关闭并观测

政策查询或撤回传播失败时,阻止可选共享并排队重试。指标包括未知决定、陈旧版本、拒绝传输、合作伙伴确认和撤回耗时;告警要区分政策故障与真实退出增加。

第七步:测试边界与对抗场景

测试匿名浏览后登录、多标签页、账户与浏览器作用域冲突、时钟偏差、地区变化、重放信号、缓存过期、队列重投、合作伙伴超时和政策回滚,确认拒绝决定不能通过另一条导出路径绕过。

示例回答

“我会构建带版本的隐私决策服务,并在每个可选数据出站边界要求短期决策令牌。边缘层规范化 GPC 与明确选择,同时保持浏览器和账户作用域分离。政策评估结合目的、地区、来源和生效时间,返回原因与版本。队列和合作伙伴投递前再次检查,撤回事件使缓存失效并触发抑制流程。

服务对可选共享失败关闭,保存最小决定证据,并观测未知决定、陈旧缓存、确认和撤回耗时。测试覆盖登录转换、冲突作用域、重放、地区变化、重试和替代导出路径。横幅本身不是执行机制。”

常见错误

  • 把 GPC 当成通用布尔值 → 丢失作用域和地区 → 一起评估信号、目的和政策。
  • 只在浏览器执行 → 修改客户端可绕过 → 在服务器出站处执行。
  • 立即关联匿名与账户身份 → 产生不必要画像 → 无正当依据不要关联。
  • 只在入队时检查 → 撤回与投递竞态 → 发送前再次检查。
  • 政策故障时放行 → 可选数据泄露 → 失败关闭并重试。
  • 审计完整载荷 → 日志变成隐私风险 → 保存最小决定证据。
  • 忽略合作伙伴确认 → 无法证明传播成功 → 跟踪回执和时限。

追问

追问 1:GPC 会取代同意横幅吗?

不会。它是浏览器级信号,含义取决于适用政策。界面可以收集额外选择,但执行必须遵循评估结果。

追问 2:登录后如何处理?

保持浏览器与账户作用域分离,再应用明确的关联规则。没有政策依据时,不要静默扩大到账户偏好。

追问 3:决定可以缓存多久?

只能在风险和政策允许的时间内缓存。使用短 TTL、版本失效和无法证明新鲜时的失败关闭。

追问 4:合作伙伴离线怎么办?

超过确认时限就停止可选投递,保留最小重试记录,合作伙伴恢复后再对账。

追问 5:审计记录应包含什么?

作用域引用、目的、信号来源、政策版本、决定、原因和时间通常足够,避免复制事件载荷。

追问 6:如何证明没有绕过路径?

盘点所有出站路径,在共享中间件强制决策令牌,并对 SDK、批处理、导出和合作伙伴重试运行拒绝测试。

公开来源

同类题目

相关面试工具

用 Solve 整理系统设计回答

从澄清需求开始,展开规模、架构、组件选择和取舍。

查看工具