题目重点:建模用户、内容和交互,支持文字图片视频以及一条内容分享到私聊。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练content包含多个media assets,interaction按一次动作/事件,share引用content并有目标受众;不把DM正文塞公开Feed事实。
解题路线
- dim_user、content(contentId,author,type,createdAt,visibilityVersion)、media(assetId,type,metadata),content_media桥支持多图片/混合媒体,type可描述主格式但不能限制只有一个asset。
- 曝光与like/comment/watch等事实分开,eventId/session/seq唯一,user/content/time关键字段。观看heartbeat需累计/增量合同,直接与曝光表多对多join会放大。
- share一行一次分享动作,share_content引用content,target type区分DM/group/public;DM conversationId有权限保护。后续回复可通过shareId建立归因,但不将私聊内容公开。
- 权限版本与内容删除保留tombstone,分析只保留允许字段。creator与viewer两角色user外键不可混用,指标如engagement per exposure需先在各自粒度汇总。
- schema支持新media类型而不每加类型复制所有表;高频watch facts与低频content维度分别partition,维度历史保证当时格式/权限用于受控分析。
手动走一遍
一个content有文字+3张图,一次share到DM并产生两条回复。不能将3media×2reply join得6次share;按shareId先数一次,再单独分析回复。
规模与取舍
数据量主要由曝光/观看事件而非content数驱动,桥表O(media links),事件按time分区。指标join注意一对多关系与前置聚合,不能只画实体图不写grain。
易错点与追问
容易失分的边界
- content一张大表只有imageUrl字段无法支持多asset和版本。
- 用DM分享事实直接公开目标用户列表,超出分析最小需要。
继续深挖
- 用户编辑content后,历史曝光看的是哪个revision?
- 同互动跨多表面归因时,first/last touch政策需要怎样存引用?
