ShatangAI 面试深挖 · 项目入口
本页是本项目的入口页(属于「面试项目深挖」栏目)。先读本页建立全局认知,再按下面的文档地图进入正文。
一句话说明材料来源:全部内容基于仓库
/Users/binhy/Binhy-Projects/shatangAI的源码逐行核对,带文件名的技术事实可以直接在 IDE 里跳转验证。核对基线是 HEAD17440c78(2026-09-18)。⚠️ 本项目的材料比同栏其它项目多一件事:简历上的描述与代码有 7 处不一致,所以本套材料在讲"怎么讲好"之外,还专门用
00和10两篇处理"怎么体面地修正"。这两篇优先级最高。
一、一句话定位
鲨堂 AI(shatangAI)是一个电商 AI 视频生成平台,已上线 shatang.top。 它的本质是一个调度器:自己不生产视频,而是把 14 种生成方式编排到外部 AI 供应商上(腾讯云 VOD AIGC 做视频生成与超分、阿里云 DashScope 做分镜理解与出图、腾讯 MPS 做字幕擦除与换脸),所以后端的能力集中在三件事——任务别丢、状态别乱、钱别错。
平台上有四条最能体现工程含量的链路: ① Agent 式对话 + Skill(玩法包)体系——提示词按 L0~L4 分层编译、token 预算显式记账、运营片段越权句式剥离(见
14); ② 长视频分段生成——依赖图调度(同场景拆段桥接串行、跨场景段并行)+ 五层一致性约束 + 自研 ffmpeg 拼接(见15); ③ 任务全生命周期——状态机 + 双轨崩溃恢复 + 并发收尾抢占(见04); ④ 积分资金一致性——"余额 + 流水 + 冻结"三表模型 + PostgreSQL 部分唯一索引 + 小时级对账巡检(见06)。技术栈:Express 5 + TypeScript(tsx 直跑)+ PostgreSQL 17 + Redis 7 + BullMQ 5;前端 React 19 + Vite 8 + Zustand 5 + TanStack Query 5;管理后台独立 React 项目。规模:2,500+ 提交、后端 15 万行 TS、135 组数据库迁移、约 350 个后端测试文件。
被问「介绍一下这个项目」,先给这句,再用 01-项目口述介绍-多版本 的 30 秒 / 2 分钟 / 5 分钟版展开。
这个项目打什么牌:异步任务的一致性(队列 + 状态机 + 崩溃恢复)与资金一致性(积分冻结/结算/退款 + 对账巡检)。这是你本人提交占比最高的两块,也是字节面试官最愿意深挖的方向。
二、文档地图(本目录文件清单与优先级)
| 文件 | 对应简历 bullet | 用途 | 优先级 |
|---|---|---|---|
00-使用说明与事实校正 | — | 7 处事实校正表、作者归属边界、3 天路线、三个记忆锚点、保命话术 | ⭐⭐⭐ 先读 |
01-项目口述介绍-多版本 | 全部 | 30 秒 / 2 分钟 / 5 分钟 / 10 分钟口述稿 + 数字卡 + vibecoding 坦白话术 + 雷区清单 + 反问清单 | ⭐⭐⭐ 必背 |
02-架构全景与一次生成的完整时序 | 全部 | 白板架构图、部署拓扑、数据模型、一次生成的四阶段时序(提交 / 轮询 / 收尾 / 展示)、选型理由表、架构弱点 | ⭐⭐⭐ 白板必用 |
03-简历四条主线拆解 | ①②③④ | 逐条核对"简历原文 → 代码事实 → 你的贡献 → 60 秒回答",末尾附可直接替换的简历修改版 | ⭐⭐⭐ 先读 |
04-任务队列与状态机深挖问答 | ② | 22 个 Q:为什么拆两条队列、jobId 三个坑、条件更新 vs 乐观锁、幂等三层、恢复的启动/周期差异、自管链路为什么会被误杀、2 小时超时、并发收尾抢占 | ⭐⭐⭐ 深挖主战场 |
05-多供应商与多段一致性深挖问答 | ① | 18 个 Q:6 家供应商与"唯一通道"、Provider 抽象退化、能力表、四层一致性、段三态机与指纹复用、首尾帧桥接的真实效果、自研 ffmpeg 拼接的坑、14 种生成方式、提示词工程 | ⭐⭐⭐ |
06-积分计费与支付深挖问答 | ②④ | 22 个 Q:三表模型、两套冻结语义、部分唯一索引、行锁与隔离级别、双余额拆分、对账五类异常、支付四层幂等、关单风险、X-Login-User 与 SECRET_KEY | ⭐⭐⭐ |
07-前端架构与管理后台深挖问答 | ③ | 24 个 Q:技术栈实测、状态管理分工、请求层、进度条其实是伪随机、上传三条链路、管理后台、类型共享真相、工程质量现实 | ⭐⭐ |
08-基础设施与部署深挖问答 | ④ | 部署架构、发布脚本为什么不静默失败、配置与密钥欠账、存储抽象(只有 2 个后端)、数据库与自研迁移、备份容灾为零、可观测性缺口 | ⭐⭐ |
09-生产事故与踩坑故事集 | 全部 | 10 个 STAR 故事:假 DDoS、68 小时悬挂 57.6 积分没退、重复扣费 37 单 370 分、2.6 秒收 75 积分、OSS 误删事故(4 次)、空 prompt 烧钱… | ⭐⭐⭐ 弹药库 |
10-压力面与简历修正话术 | 全部 | MySQL 怎么补救(三套话术)、十类压力问题与标准答法、三条保命话术、反问与收尾 | ⭐⭐⭐ 防守必读 |
11-白板手写题与设计题 | — | 17 道题:手写题(并发池 / 退避重试 / 限流 / 分布式锁 / LRU / 抢占收尾 / 状态守卫 SQL / 分页)+ SQL 题 + 系统设计题,代码与 SQL 均实跑验证 | ⭐⭐ 字节常考 |
12-速背卡片 | — | 考前 30 分钟只看这篇:90 秒主线 + 12 个数字 + 十个必答 + 六个缺陷 + 雷区表 + 三个锚点 | ⭐⭐⭐ 考前只看这个 |
13-代码地图与事实索引 | — | 按主题的文件索引 + 30 秒复查脚本 + 作者归属复查命令 + 口径漂移高危点 + 文档陷阱清单 | ⭐⭐ 抽查用 |
14-Agent对话与Skill体系深挖问答 | 新增(Agent / Skill) | Agent 式对话的请求流、Skill(玩法包)体系与品类包正交组合、L0~L4 提示词分层与 token 预算(禁止静默截断)、越权句式剥离、流式与降级、批量编排与剧本助手、Agent 运行记录 | ⭐⭐⭐ AI 应用岗必备 |
15-长视频分段生成与一致性深挖问答 | 新增(长视频) | 把"你当年的 Seedance 分段经验"逐条对到现在的代码:依赖图调度(同场景桥接串行 / 跨场景并行)、段长上限来自能力表、尾帧→首帧实现、五层一致性(含角色锚图)、两代音色方案取舍、拼接的三个 ffmpeg 坑、部分交付与按比例退款 | ⭐⭐⭐ 你的经验主场 |
三、推荐阅读顺序
完整 3 天路线见 00-使用说明与事实校正,浓缩版:
| 时间 | 做什么 |
|---|---|
| Day 1 · 建主干(约 3h) | 读 03(先搞清哪条 bullet 能讲硬、哪条必须修正)→ 读 00 的事实校正表 → 读 01 并把 2 分钟版念出来录音 → 读 01 第八节 vibecoding 话术(决定基调)→ 背 12 的 12 个数字 |
| Day 2 · 三块硬骨头(约 4h) | 精读 04 的 Q3 / Q4 / Q7 / Q9 / Q12 / Q13(主动加分点)+ 06 的 Q3 / Q5 / Q7 / Q9 / Q17;15 全篇(长视频是你亲手做过的,要把"当年的做法 vs 现在的实现"讲顺);05 的 Q1 / Q5 / Q15("唯一通道"与"首尾帧降级"最容易被问穿) |
| Day 3 · 模拟收口(约 3h) | 14 精读提示词分层与 token 预算(AI 应用岗会被深挖)+ 白板默画 02 第一节架构图并讲 5 分钟;随机念简历 bullet 即时展开 60 秒;只读 12 把「六个缺陷」练到脱口而出;读 10 的反问与收尾 |
只剩 1 天 → 00(事实校正表)+ 10(MySQL 话术)+ 15(长视频,你自己做过的)+ 12(速背卡片)。
投 AI 应用 / Agent 方向 → 额外重点读 14(Skill 分层与 token 预算)+ 05(供应商编排与提示词工程)。
四、诚实边界(不能吹的点)
这一节的每一条,被问到都要主动交底,不要等面试官挖:
- 🔴 数据库是 PostgreSQL 17,不是 MySQL。 简历写错了(根源是项目
README.md至今写着 MySQL)。这是唯一建议主动更正的一条,话术见10第一节。 - 🟠 "6+ 供应商"要改成"历史接入 6 家 / 当前新任务只走腾讯云 VOD 1 家";老实现保留不是为了灰度,而是为了让发布时在途的任务还能被轮询(删掉就是"钱付了、片子拿不到")。
- 🟠 "首尾帧桥接"在多数生产场景被上游降级。 腾讯 VOD 只要请求里带任何参考图/参考视频,就会把
FirstFrame/LastFrame强制降级成Reference;而元素替换/爆款复刻入口是"有参考视频时不桥接"。能讲"接口支持 + 通道降级 + 部分链路刻意关闭",但不能说"我们靠首尾帧做到了完全连贯"。 - 🟠 长视频的段间音色一致性,当前默认走的是较弱的路径:整片 TTS 音轨方案(物理保证一致)代码保留但默认关闭(
LONGVIDEO_ENGINE_AUDIO)。要讲成一致性 vs 交付速度的取舍,而不是"我们音色一定一致"。 - 🟠 "引用计数保护"不存在 —— 真身是"引用存在性判定 + DB 触发器 + 唯一约束 + 30 天延迟删除"。
- 🟠 "Docker Compose 一键部署"不成立 —— compose 只起 PG 与 Redis,应用是 pm2 + nginx + 自研发布脚本。
- 🟡 "TS 全栈类型安全"要降级 —— 只有管理后台开
strict且构建时校验;后端有 54 个文件@ts-nocheck。 - 🔴 三个必须主动交底的欠账:数据库没有备份/PITR(而它是资金账本)、CI 因账户欠费从 2026-08 起实际未运行、没有可观测性基建(无 metrics/APM,告警靠人肉 grep 日志)。
- 🔴 作者归属:这是 8 位以上作者的团队项目。
productionWorker(脚本库分段生产)与modelCatalog是同事主导,你 0 提交。主动划界,别把团队成果说成自己的(详见00第四节)。 - 没有线上指标基线(QPS / P99 / 用户量都不可编);能给的最硬量级是代码规模与日志里可验证的次数(如
PixelCountTooSmall1348 次)。 - 行号对应生成这批材料时的代码版本,面试前请用
13的复查脚本抽查几处。
五、三个记忆锚点(全程反复用)
- 提交与轮询分离:提交只负责调供应商拿任务号(秒级),拿到就交给轮询队列(分钟级)。拆分的本质是让占用槽位的时长与任务真实耗时解耦——队列的并发度必须匹配任务的资源占用模型。
- 部分唯一索引防重复扣费:
credit_holds (task_id) WHERE status='held'。用数据库约束而不是应用层判断兜住不变式,因为应用层判断在并发和重启下都会漏。 - 权威状态在服务端,不在浏览器:凡是"任务能不能收尾"的判断,都必须由服务端对照真实供应商状态得出。这是拿一次 68 小时悬挂 + 57.6 积分没退 的生产事故换来的结论。
再加两条(本项目新增链路用得上) 4. 并行段之间没有通信 → 一致性必须显式写进每一次调用(长视频的角色/服装/场景/音色约束都靠这个)。 5. 提示词的优先级应该是显式分层与数组序,不是让模型自己理解谁更重要;超预算要显式报错而不是静默 slice。
➡️ 开始阅读:00-使用说明与事实校正 | 返回栏目:面试项目深挖总览 | 同栏项目:Vistack · BinRag · EasyCoding