题目重点:企业维护商品详情页与可追踪分享链接,按有效点击序号触发奖励,区分匿名用户、幂等计数和分析口径。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版每个分享链接有 linkId,指向某个 productPageId;图片走对象存储/CDN,商品内容有版本和权限。
- 匿名访问不能可靠识别独立自然人;主奖励规则暂定义为每第 100/1000 个经风控接受的有效 clickId,而不是唯一用户,须向面试官确认。
- 奖励触发阈值按 linkId 独立计数;同一次 clickId 重试只计一次。若业务要跨产品/企业全局序号,分片与事务边界要重定。
- 奖励发放异步且幂等,用户匿名时领取需要一次性凭证或后续可验证身份。
解题路线
- 商品管理 API 创建/更新 pageId、描述、图片对象引用和发布状态;分享 API 建 linkId→pageId、campaignId、创建者及可选过期,redirect 不泄露内部管理权限。
- 点击入口先生成/接收 clickId,执行反滥用校验后把有效点击事件持久化。单 link 的有序计数要原子地‘去重 clickId + 增加序号 + 判定序号是否 100/1000 的倍数’,否则并发会重复或跳号。
- 对极热门 link,单计数键会成热点;可将奖励序号分配交给该 link 的单一序列化分区或预留连续号段,保证唯一全序,同时异步扩展分析聚合。
- 奖励事件放入 outbox/消息流,发放服务以 (linkId,ordinal,rewardType) 为幂等键;失败重试与人工审核不改变已分配序号。
- 分析层从不可变点击事件按 link/product/campaign/时间窗聚合 reach、click、转化;匿名情况下 reach 只能报告设备/会话代理或估计,不称精准独立用户。
- 安全边界包括伪造点击、循环自刷、奖励库存、短链滥用、图片审核;题目未明确具体风控阈值,设计时只定义验证位置。
手动走一遍
某 link 已有 99 个有效 clickId。两个新点击并发进入,原子序号分配为 100 与 101,仅 100 触发奖励;同一 clickId 因响应丢失重试仍查到原序号 100,不再次发奖。若访客始终匿名,系统只知道这是两次有效点击,不能证明是两名不同人。
规模与取舍
商品/链接主表存储 O(P+L),点击事件 O(C) 随保留期增长。redirect 目标查询可缓存为 O(1) 预期;强序号分配每 link 至少一处串行化,吞吐上限取决于热点 link,需依据实际峰值估算。分析异步聚合可水平分区,但奖励序号不能随意分片后再把局部‘第 100’相加。
易错点与追问
容易失分的边界
- 在匿名条件下承诺精确‘每第 100 个独立用户’而没有身份依据。
- 先加计数再写点击去重记录,重试时奖励重复。
- 把奖励发放同步压在 redirect 热路径,外部奖励服务失败导致链接打不开。
- 每个分片各自维护 100 倍数,产生多个第 100 次奖励。
- 报告 reach 为精确独立人数,实际只有 click/会话代理。
继续深挖
- 如果奖励必须按独立自然人,匿名访问如何设计领取与去重?
- 极热门链接如何维持序号正确性和低延迟?
- 商品页面被删除或分享链接过期后已有统计/奖励如何处理?
- 如何在 privacy 限制下做跨平台归因?
