Files
interview/questions/07-系统设计/社交信息流设计.md
yasinshaw 0e46a367c4 refactor: rename files to Chinese and organize by category
Organized 50 interview questions into 12 categories:
- 01-分布式系统 (9 files): 分布式事务, 分布式锁, 一致性哈希, CAP理论, etc.
- 02-数据库 (2 files): MySQL索引优化, MyBatis核心原理
- 03-缓存 (5 files): Redis数据结构, 缓存问题, LRU算法, etc.
- 04-消息队列 (1 file): RocketMQ/Kafka
- 05-并发编程 (4 files): 线程池, 设计模式, 限流策略, etc.
- 06-JVM (1 file): JVM和垃圾回收
- 07-系统设计 (8 files): 秒杀系统, 短链接, IM, Feed流, etc.
- 08-算法与数据结构 (4 files): B+树, 红黑树, 跳表, 时间轮
- 09-网络与安全 (3 files): TCP/IP, 加密安全, 性能优化
- 10-中间件 (4 files): Spring Boot, Nacos, Dubbo, Nginx
- 11-运维 (4 files): Kubernetes, CI/CD, Docker, 可观测性
- 12-面试技巧 (1 file): 面试技巧和职业规划

All files renamed to Chinese for better accessibility and
organized into categorized folders for easier navigation.

Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-03-01 00:10:53 +08:00

17 KiB
Raw Blame History

社交信息流系统设计

需求分析和数据量评估

需求分析

  • 核心功能:信息流展示、个性化推荐、社交互动、内容管理
  • 业务场景:微博、朋友圈、抖音等社交应用
  • QPS评估日请求100亿+峰值QPS 20万+
  • 数据规模用户5亿+内容100亿+关系数据1000亿+

数据量评估

  • 用户表5亿条日均查询1亿次
  • 内容表100亿条日增1亿+
  • 关系表1000亿+条日均更新10亿次
  • 互动表500亿+条日增5亿+
  • 推荐系统日处理1000亿次推荐请求

核心技术难点

1. 海量内容处理

  • 亿级内容的存储和检索
  • 内容的实时分发和推送
  • 内容的审核和过滤

2. 个性化推荐

  • 用户兴趣建模
  • 实时推荐算法
  • 推荐效果评估

3. 高并发读取

  • 信息流的实时性要求
  • 用户关系计算
  • 数据缓存优化

4. 社交图谱构建

  • 用户关系网络
  • 关系强度计算
  • 图算法优化

系统架构设计

总体架构

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   移动端APP     │    │   Web网页       │    │   API接口        │
│      (iOS/Android)│   │      (PC/移动) │   │     (第三方)     │
└─────────────────┘    └─────────────────┘    └─────────────────┘
         │                       │                       │
         └───────────────────────┼───────────────────────┘
                                 │
            ┌─────────────────────┼───────────────────────┐
            │                     │                     │
    ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
    │   负载均衡      │ │   API网关       │ │   CDN加速      │
    │   (Nginx)      │ │    (Gateway)    │ │     (Edge)      │
    └─────────────────┘ └─────────────────┘ └─────────────────┘
                                 │
            ┌─────────────────────┼───────────────────────┐
            │                     │                     │
    ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
    │   Feed服务      │ │   互动服务      │ │   推荐服务      │
    │   (微服务)      │ │   (微服务)      │ │   (微服务)      │
    └─────────────────┘ └─────────────────┘ └─────────────────┘
            │                     │                     │
            └─────────────────────┼───────────────────────┘
                                 │
            ┌─────────────────────┼───────────────────────┐
            │                     │                     │
    ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
    │   缓存集群      │ │   数据库集群    │ │   消息队列      │
    │   (Redis)      │ │   (MySQL分库分表)│ │   (Kafka)       │
    └─────────────────┘ └─────────────────┘ └─────────────────┘
                                 │
            ┌─────────────────────┼───────────────────────┐
            │                     │                     │
    ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
    │   搜索引擎      │ │   图数据库      │ │   数据仓库      │
    │   (Elasticsearch)│ │   (Neo4j)      │ │   (ClickHouse)  │
    └─────────────────┘ └─────────────────┘ └─────────────────┘

关键组件

1. 流量层

  • 负载均衡Nginx L7负载均衡
  • API网关:请求路由、限流、认证
  • CDN加速:静态资源缓存

2. 服务层

  • Feed服务:信息流生成和分发
  • 互动服务:点赞、评论、分享处理
  • 推荐服务:个性化推荐算法
  • 社交服务:关系管理

3. 存储层

  • Redis集群:缓存、计数器
  • MySQL集群:用户数据、内容数据
  • MongoDB集群Feed流数据
  • 图数据库:社交关系数据

4. 基础设施

  • 搜索引擎:内容全文检索
  • 消息队列:异步处理、削峰填谷
  • 数据仓库:离线数据分析
  • 推荐引擎:机器学习平台

数据库设计

用户表

CREATE TABLE `feed_user` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `nickname` varchar(50) NOT NULL COMMENT '昵称',
  `avatar` varchar(255) DEFAULT NULL COMMENT '头像',
  `gender` tinyint DEFAULT 0 COMMENT '性别',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `location` varchar(100) DEFAULT NULL COMMENT '位置',
  `bio` varchar(255) DEFAULT NULL COMMENT '个人简介',
  `interests` json DEFAULT NULL COMMENT '兴趣标签',
  `follow_count` int NOT NULL DEFAULT 0 COMMENT '关注数',
  `follower_count` int NOT NULL DEFAULT 0 COMMENT '粉丝数',
  `post_count` int NOT NULL DEFAULT 0 COMMENT '发布数',
  `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

内容表

CREATE TABLE `feed_content` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `content_id` varchar(64) NOT NULL COMMENT '内容ID',
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `content_type` tinyint NOT NULL COMMENT '内容类型',
  `title` varchar(255) DEFAULT NULL COMMENT '标题',
  `content` text NOT NULL COMMENT '内容',
  `media_urls` json DEFAULT NULL COMMENT '媒体URLs',
  `tags` json DEFAULT NULL COMMENT '标签',
  `like_count` int NOT NULL DEFAULT 0 COMMENT '点赞数',
  `comment_count` int NOT NULL DEFAULT 0 COMMENT '评论数',
  `share_count` int NOT NULL DEFAULT 0 COMMENT '分享数',
  `view_count` int NOT NULL DEFAULT 0 COMMENT '浏览数',
  `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_content_id` (`content_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_created_at` (`created_at`),
  FULLTEXT KEY `idx_content` (`title`, `content`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

用户关系表

CREATE TABLE `feed_relationship` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `follow_user_id` bigint NOT NULL COMMENT '关注用户ID',
  `relation_type` tinyint NOT NULL DEFAULT 1 COMMENT '关系类型',
  `strength` decimal(5,2) DEFAULT '0.00' COMMENT '关系强度',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_follow` (`user_id`, `follow_user_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_follow_user_id` (`follow_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Feed流表

CREATE TABLE `feed_stream` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `content_id` varchar(64) NOT NULL COMMENT '内容ID',
  `feed_type` tinyint NOT NULL COMMENT 'Feed类型',
  `priority` decimal(10,4) NOT NULL DEFAULT '0.0000' COMMENT '优先级',
  `is_read` tinyint NOT NULL DEFAULT 0 COMMENT '是否已读',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_priority` (`priority`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

互动记录表

CREATE TABLE `feed_interaction` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `target_user_id` bigint DEFAULT NULL COMMENT '目标用户ID',
  `content_id` varchar(64) DEFAULT NULL COMMENT '内容ID',
  `interaction_type` tinyint NOT NULL COMMENT '互动类型',
  `content` text DEFAULT NULL COMMENT '互动内容',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_target_user_id` (`target_user_id`),
  KEY `idx_content_id` (`content_id`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

缓存策略

Redis缓存设计

// 用户信息缓存
const USER_INFO_PREFIX = 'user:';
const USER_INFO_TTL = 3600; // 1小时

// 内容信息缓存
const CONTENT_INFO_PREFIX = 'content:';
const CONTENT_INFO_TTL = 86400; // 24小时

// Feed流缓存
const FEED_STREAM_PREFIX = 'feed:';
const FEED_STREAM_TTL = 1800; // 30分钟

// 互动计数器
const INTERACTION_PREFIX = 'interaction:';
const INTERACTION_TTL = 300; // 5分钟

// 推荐结果缓存
const RECOMMEND_PREFIX = 'recommend:';
const RECOMMEND_TTL = 300; // 5分钟

// 社交关系缓存
const RELATION_PREFIX = 'relation:';
const RELATION_TTL = 3600; // 1小时

缓存策略

  1. 多级缓存

    • 本地缓存Caffeine
    • 分布式缓存Redis Cluster
    • CDN缓存静态资源
  2. 缓存更新策略

    • Write Behind异步更新
    • Refresh Ahead预加载热点数据
    • Cache Invalidation定时失效
  3. Feed流缓存

    • 分页缓存
    • 用户个性化缓存
    • 实时更新策略

Feed流生成算法

public class FeedGenerator {

    // 基于时间线的基础Feed
    public List<FeedItem> generateTimelineFeed(String userId, int offset, int limit) {
        // 从Redis获取用户关注列表
        List<String> followUsers = getFollowUsers(userId);

        // 获取关注用户的最新内容
        List<FeedItem> feeds = new ArrayList<>();
        for (String followUser : followUsers) {
            List<FeedItem> userFeeds = getUserRecentFeeds(followUser, offset, limit / followUsers.size());
            feeds.addAll(userFeeds);
        }

        // 按时间排序
        return feeds.stream()
            .sorted(Comparator.comparing(FeedItem::getCreatedAt).reversed())
            .skip(offset)
            .limit(limit)
            .collect(Collectors.toList());
    }

    // 个性化推荐Feed
    public List<FeedItem> generateRecommendFeed(String userId, int offset, int limit) {
        // 获取用户兴趣标签
        List<String> interests = getUserInterests(userId);

        // 基于协同过滤推荐内容
        List<String> recommendContentIds = collaborativeFiltering(userId, interests);

        // 基于内容的推荐
        List<String> contentBasedRecommend = contentBasedRecommend(userId);

        // 合并推荐结果
        Set<String> allRecommend = new HashSet<>();
        allRecommend.addAll(recommendContentIds);
        allRecommend.addAll(contentBasedRecommend);

        // 获取推荐内容详情
        List<FeedItem> feeds = getContentDetails(new ArrayList<>(allRecommend));

        // 排序并返回
        return feeds.stream()
            .sorted(Comparator.comparing(FeedItem::getScore).reversed())
            .skip(offset)
            .limit(limit)
            .collect(Collectors.toList());
    }

    // 混合Feed流
    public List<FeedItem> generateHybridFeed(String userId, int offset, int limit) {
        List<FeedItem> timelineFeeds = generateTimelineFeed(userId, 0, limit / 2);
        List<FeedItem> recommendFeeds = generateRecommendFeed(userId, 0, limit / 2);

        // 合并并去重
        Set<String> seenContentIds = new HashSet<>();
        List<FeedItem> result = new ArrayList<>();

        for (FeedItem feed : timelineFeeds) {
            if (!seenContentIds.contains(feed.getContentId())) {
                result.add(feed);
                seenContentIds.add(feed.getContentId());
            }
        }

        for (FeedItem feed : recommendFeeds) {
            if (!seenContentIds.contains(feed.getContentId())) {
                result.add(feed);
                seenContentIds.add(feed.getContentId());
            }
        }

        // 按权重排序
        return result.stream()
            .sorted(Comparator.comparing(FeedItem::getScore).reversed())
            .skip(offset)
            .limit(limit)
            .collect(Collectors.toList());
    }
}

扩展性考虑

1. 水平扩展

  • 无状态服务Feed服务、推荐服务无状态化
  • 数据分片按用户ID分片
  • 读写分离:主库写入,从库读取

2. 垂直扩展

  • 服务拆分Feed服务、推荐服务、互动服务
  • 数据分层:热数据、温数据、冷数据
  • 多级缓存本地、Redis、CDN

3. 推荐算法扩展

  • 实时推荐:基于实时行为更新
  • 离线推荐:批量处理推荐结果
  • 冷启动:新用户推荐策略

4. 容灾备份

  • 多活架构:多机房部署
  • 故障转移:自动故障检测和转移
  • 数据备份:定时备份和实时同步

实际项目经验

1. 技术栈选择

  • 前端React + TypeScript + Mobile
  • 后端Spring Boot + Node.js + Python
  • 数据库MySQL + MongoDB + Redis
  • 消息队列Kafka + Pulsar
  • 搜索引擎Elasticsearch + ClickHouse

2. 性能优化

  • Feed缓存:多级缓存策略
  • 数据库优化:分库分表、索引优化
  • 算法优化:推荐算法优化
  • 网络优化HTTP/2、Keep-Alive

3. 运维部署

  • 容器化Docker + Kubernetes
  • CI/CDJenkins + GitLab
  • 监控告警ELK Stack + AlertManager
  • 压测JMeter + Locust

4. 安全设计

  • 内容安全:内容审核、过滤
  • 用户隐私:数据脱敏、权限控制
  • 防刷机制:频率限制、行为分析

阿里P7加分项

1. 架构设计能力

  • 高可用架构99.99%可用性
  • 高性能架构支持亿级QPS
  • 扩展性架构:弹性扩缩容

2. 技术深度

  • 推荐系统:协同过滤、深度学习
  • 实时计算Flink、Kafka Streams
  • 图算法:社交图谱、关系计算

3. 业务理解

  • 社交业务:理解社交网络特性
  • 用户行为:分析用户互动模式
  • 内容生态:掌握内容分发逻辑

4. 团队管理

  • 技术团队带领50人+团队
  • 项目管控:管理亿级用户项目
  • 技术方案:主导架构设计

5. 前沿技术

  • AI应用:智能推荐、内容生成
  • 边缘计算:边缘节点处理
  • Serverless:函数化服务

面试常见问题

1. 如何生成个性化信息流?

  • 用户画像:用户兴趣建模
  • 推荐算法:协同过滤、基于内容
  • 实时更新:实时行为追踪
  • 多目标优化:点击率、停留时间

2. 如何处理高并发Feed请求

  • 缓存策略:多级缓存
  • 数据预加载Feed预生成
  • 异步处理:异步更新
  • 分页优化:游标分页

3. 如何保证Feed流实时性

  • 实时推送WebSocket推送
  • 增量更新:实时增量计算
  • 事件驱动:事件总线
  • 缓存预热:热点数据预热

4. 如何实现推荐算法?

  • 协同过滤:用户行为相似度
  • 内容分析:内容特征提取
  • 深度学习:神经网络模型
  • 多臂老虎机:探索与利用

5. 如何处理海量数据?

  • 分库分表按用户ID分片
  • 数据归档:冷热数据分离
  • 缓存优化:热点数据缓存
  • 计算优化:批量处理、并行计算