Loading...
1. 厘清需求(Requirements)
功能性需求:
非功能性需求:
2. 容量估算(Capacity Estimation) —— 这一步很多人会漏,但评分里通常占分
假设每月新增 1 亿条短链,读写比约 100:1。
3. API 设计
POST /shorten body: { longUrl, customAlias?, expireAt? } -> { shortUrl }
GET /{shortCode} -> HTTP 301/302 重定向到 longUrl
重定向用 302(临时) 还是 301(永久):301 浏览器会缓存、减轻服务器压力,但你就拿不到点击统计;302 每次都回服务器,便于统计。面试里能说出这个权衡是加分点。
4. 数据模型
一张核心表即可:
url_mapping( short_code PK, long_url, created_at, expire_at, user_id )
因为是 key-value 式的查询(用 short_code 查 long_url),用 NoSQL(如 DynamoDB/Cassandra)或带缓存的关系库都行。
5. 核心:短码怎么生成? —— 这是这道题真正的考点
6. 整体架构 & 扩展性
读路径(重定向)是性能关键:
7. 收尾:可补充的点
POST /shorten body: { longUrl, customAlias?, expireAt? } -> { shortUrl }
GET /{shortCode} -> HTTP 301/302 重定向到 longUrl
重定向用 302(临时) 还是 301(永久):301 浏览器会缓存、减轻服务器压力,但你就拿不到点击统计;302 每次都回服务器,便于统计。面试里能说出这个权衡是加分点。
读路径(重定向)是性能关键:
4. 数据模型
一张核心表即可:
url_mapping( short_code PK, long_url, created_at, expire_at, user_id )
Deep dive into 2-3 key components. Explain how they work, how they scale, discuss tradeoffs, capacity, and any relevant algorithms or data structures.