面试刷题网——技术方案
# 需求prompt
我想做一个对标面试鸭的面经分享网站。希望对面试中的知识点做更加细化的处理,核心的功能是:
1,我需要大量的程序员同学(c端用户)来维护该题库,并且管理员可以删除数据来确保题库质量
2,知识点细化处理,树状处理。分公共面经(知识点)和私人面经(知识点)
每个知识点可以有对应的解题或者链接,解题每个人都可以发,其他用户可以对该解题评分或者评论
3,每个知识点需要有多维度标签:校招、实习、1-3年、3-5年、5-10年;公司、一面二面三面hr面。并且这些标签会直观的展示给用户,比如这个题目1-3年出现了3次,3-5年出现了7次
4,泛化能力(可选),该网站面试的时候可以用,那后续考公、考研,不是也可以用这个吗。我们可以将面经分类
5,用户上传面经需要二次审核(可配置取消审核),我们会给出一份标准的面经示例。在上传面经的时候需要该面经基本信息,比如是校招还是社招、哪个公司。我们需要拆分面经中的题目,保存到树中。即每个知识点需要感知到是哪个公司哪个组说的、就是需要对属性做统计并且展示统计结果
具体流程是,用户上传面经-》管理员审核-》通过-》拆解面经知识点-》保存到私人知识库-》可选择是否保存到公共知识库
6,做解题排行榜功能
现在你需要完成的工作是: 1.为我生成一份完整详细的需求文档并且保存。该需求文档会用于后续的代码生成 2.给出技术选型,并且标记版本,防止后续生成代码时出现版本不一致的问题
# 生成的技术方案 check
# 面经分享平台需求文档
# 1. 项目概述
# 1.1 项目背景
本项目旨在打造一个对标面试鸭的面经分享网站,通过社区协作的方式,帮助程序员更好地准备面试。平台强调知识点的细化和结构化处理,通过树状知识体系、多维度标签、解题评价等功能,提供高质量的面试准备资源。
# 1.2 项目目标
- 建立一个开放、高质量的面经知识库
- 通过社区协作机制,持续更新和完善题库内容
- 提供细化的知识点分类和多维度标签系统
- 支持多种面试场景(校招、社招、考公、考研等)
- 通过评价和排行榜机制,激励用户贡献高质量内容
# 1.3 目标用户
- C端用户:准备面试的程序员、学生
- 管理员:负责内容审核、数据管理、系统配置
# 2. 功能需求
# 2.1 用户系统
# 2.1.1 用户注册与登录
- 支持手机号/邮箱注册
- 密码找回功能
- 用户信息完善(昵称、头像、个人简介)
# 2.1.2 用户角色与权限
- 普通用户:浏览、搜索、上传面经、发布解题、评分、评论
- 管理员:所有普通用户权限 + 内容审核、数据删除、系统配置
- 超级管理员:所有权限 + 用户管理、角色分配
# 2.1.3 用户中心
- 个人信息管理
- 我上传的面经列表
- 我发布的解题列表
- 我的收藏
- 我的评论历史
- 用户积分/等级系统
# 2.2 题库管理系统
# 2.2.1 知识点树状结构
- 支持多级树状分类(如:高并发 -> 线程池 -> 线程池具体知识点,比如线程池的参数配置、线程池的工作原理等)
- 树节点的增删改查
- 树节点的搜索与筛选
每个知识点需要展示详细的基本信息,比如x公司出现这个知识点y次,校招面试中出现了这个知识点z次,社招面试中出现了这个知识点w次。
# 2.2.2 公共知识点与私人知识点
每个人发表面经都可以被其他人看到,但是知识点是区分私人还是公共的。这一设计是为了防止用户上传一些垃圾知识点污染公共知识库。
- 公共知识点:所有创作者的知识点合起来就是公共知识点,需要管理员审核后发布
- 私人知识点:创建者自己的知识点,可以通过知识点构建一套自己的知识库
- 私人知识点转公共知识点的审核流程。支持自动审核
# 2.2.3 知识点详情
面经中会有多个知识点
- 知识点基本信息(名称、描述、所属分类)
- 关联的解题列表
- 关联的面经列表
- 知识点统计信息(出现次数、难度分布等)
- 相关知识点推荐
# 2.3 面经管理系统
# 2.3.1 面经上传
基本信息填写:
- 面试类型:校招、社招、实习
- 公司名称
- 面试部门/组
- 面试轮次:一面、二面、三面、HR面
- 面试时间
- 工作年限:1-3年、3-5年、5-10年、10年以上
面经内容编辑:
- 富文本编辑器支持
- 代码块高亮
- 图片上传
- Markdown支持
知识点拆分:
- 自动识别题目(基于规则或AI)
- 手动拆分题目
- 将题目关联到知识点树
# 2.3.2 面经审核
如果想将自己的私人面经中的知识点转成公共知识点,需要先通过审核。审核流程如下:
- 审核流程:
- 待审核队列
- 审核员查看面经详情
- 通过/拒绝操作
- 拒绝时填写原因
- 审核历史记录
# 2.3.3 面经浏览与搜索
- 面经列表展示
- 多维度筛选(公司、岗位、时间、标签等)
- 关键词搜索
- 面经详情查看
- 面经收藏与分享
- 面经举报功能
# 2.3.4 面经统计
- 知识点出现次数统计
- 按公司统计知识点分布
- 按工作年限统计知识点分布
- 按面试轮次统计知识点分布
- 热门知识点排行
- 热门公司排行
# 2.4 解题系统
# 2.4.1 解题发布
- 选择对应的知识点
- 解题内容编辑(富文本、代码、图片)
- 关联相关链接(博客、文档等)
- 设置解题可见性(公开/私有)
# 2.4.2 解题评价
评分系统:
- 1-5星评分
- 评分维度:准确性、完整性、易懂性
- 评分统计展示
评论系统:
- 评论发布
- 评论回复(支持多级回复)
- 评论点赞
- 评论举报
- 评论排序(时间、热度)
# 2.5 标签系统
# 2.5.1 多维度标签
- 面试类型标签:校招、社招、实习
- 工作年限标签:1-3年、3-5年、5-10年、10年以上
- 面试轮次标签:一面、二面、三面、HR面
- 公司标签:阿里巴巴、腾讯、字节跳动等
- 岗位标签:前端、后端、算法、测试等
- 自定义标签:用户可创建自定义标签
- 分类标签:核心,需要知道用户上传的面经是属于哪个分类的
# 2.5.2 标签统计与展示
- 每个标签的出现次数统计
- 标签关联的知识点列表
- 标签关联的面经列表
- 标签热度排行
- 标签趋势分析(时间维度)
# 2.5.3 标签管理
只有管理员才可以管理标签
- 标签的增删改查
- 标签合并
- 标签禁用
# 2.6 泛化分类系统
# 2.6.1 分类管理
面经和知识点都需要做分类。知识点分类后应该是树状结构,面经分类后是线性结构。
- 面试分类:技术面试、产品面试、运营面试、java 后端开发等
- 考公分类:国考、省考、事业单位等
- 考研分类:计算机、数学、英语等
- 其他分类:证书考试、技能认证等
# 2.7 内容管理系统
# 2.7.1 数据删除
- 管理员可删除任何内容
- 删除前二次确认
- 删除原因记录
- 删除日志
- 批量删除功能
# 2.7.2 内容编辑
- 用户可编辑自己上传的内容
- 编辑历史记录
# 2.9 搜索系统
# 2.9.1 全文搜索
- 面经内容搜索
- 知识点搜索
- 解题内容搜索
- 用户搜索
# 2.9.2 高级搜索
- 多条件组合搜索
- 搜索结果排序
- 搜索历史记录
- 热门搜索词
# 2.10 数据统计与分析
# 2.10.1 平台数据
- 用户数统计
- 面经数统计
- 知识点数统计
- 解题数统计
# 2.10.2 内容数据
- 热门知识点排行
- 热门公司排行
- 热门解题排行
- 活跃用户排行
# 2.10.3 用户行为分析
- 用户浏览路径
- 用户搜索行为
- 用户互动行为
- 用户留存分析
# 3. 非功能需求
# 3.1 性能要求
- 页面加载时间 < 2秒
- 搜索响应时间 < 1秒
- 支持并发用户数 > 1000
- 数据库查询优化,复杂查询 < 500ms
# 3.2 可用性要求
- 系统可用性 > 99.5%
- 数据备份频率:每日
- 容灾恢复时间 < 4小时
# 3.3 安全性要求
- 用户密码加密存储
- SQL注入防护
- XSS攻击防护
- CSRF防护
- 敏感信息脱敏
- 操作日志审计
# 3.4 可扩展性要求
- 支持水平扩展
- 支持模块化开发
- 支持插件机制
- 支持多语言扩展
# 3.5 兼容性要求
- 支持主流浏览器(Chrome、Firefox、Safari、Edge)
- 支持移动端适配
- 支持暗色模式
# 4. 技术架构建议
# 4.1 整体架构:Next.js 全栈方案
采用 Next.js 14+ 全栈框架,实现前后端一体化开发,提高单人开发效率。
# 4.1.1 架构设计
┌─────────────────────────────────────────────────────────┐
│ 用户浏览器 │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Next.js 应用(React + TypeScript) │ │
│ │ - App Router(页面路由) │ │
│ │ - API Routes(后端逻辑) │ │
│ │ - Server Components(服务端组件) │ │
│ │ - Client Components(客户端组件) │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 数据层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │
│ │PostgreSQL│ │ Redis │ │Elasticsearch│ │ 本地存储│ │
│ │ 主数据库 │ │ 缓存 │ │ 搜索引擎 │ │文件存储│ │
│ └──────────┘ └──────────┘ └──────────┘ └────────┘ │
└─────────────────────────────────────────────────────────┘
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 4.2 技术栈详情
# 4.2.1 核心框架
- 框架:Next.js 14+(App Router)
- 语言:TypeScript 5+
- React:React 18+
# 4.2.2 前端技术
- UI组件库:Ant Design / shadcn/ui
- 状态管理:Zustand / React Context
- 表单处理:React Hook Form + Zod
- 富文本编辑器:Tiptap / Quill
- 代码高亮:Prism.js / Shiki
- 样式方案:Tailwind CSS / CSS Modules
# 4.2.3 后端技术(Next.js API Routes)
- API框架:Next.js API Routes
- ORM:Prisma / Drizzle ORM
- 认证:NextAuth.js / JWT
- 验证:Zod
- 文件上传:Next.js内置 / formidable
# 4.2.4 数据库与存储
- 主数据库:PostgreSQL 15+
- 缓存:Redis(ioredis)
- 搜索引擎:Elasticsearch(可选,后期接入)
- 文件存储:本地存储(前期)→ 阿里云OSS/腾讯云COS(后期)
# 4.2.5 开发工具
- 包管理器:pnpm / npm
- 代码规范:ESLint + Prettier
- Git钩子:Husky + lint-staged
- 类型检查:TypeScript
# 4.3 项目结构
interview-platform/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── (auth)/ # 认证相关页面组
│ │ │ ├── login/
│ │ │ └── register/
│ │ ├── (main)/ # 主页面组
│ │ │ ├── page.tsx # 首页
│ │ │ ├── interviews/ # 面经相关页面
│ │ │ │ ├── page.tsx # 面经列表
│ │ │ │ └── [id]/ # 面经详情
│ │ │ ├── knowledge/ # 知识点相关页面
│ │ │ │ ├── page.tsx # 知识点树
│ │ │ │ └── [id]/ # 知识点详情
│ │ │ ├── solutions/ # 解题相关页面
│ │ │ └── user/ # 用户中心
│ │ ├── admin/ # 管理后台
│ │ │ ├── page.tsx # 后台首页
│ │ │ ├── audit/ # 审核管理
│ │ │ └── users/ # 用户管理
│ │ ├── api/ # API路由(后端逻辑)
│ │ │ ├── auth/ # 认证相关API
│ │ │ │ ├── login/route.ts
│ │ │ │ └── register/route.ts
│ │ │ ├── interviews/ # 面经相关API
│ │ │ │ ├── route.ts
│ │ │ │ └── [id]/route.ts
│ │ │ ├── knowledge/ # 知识点相关API
│ │ │ │ ├── route.ts
│ │ │ │ └── [id]/route.ts
│ │ │ ├── solutions/ # 解题相关API
│ │ │ │ ├── route.ts
│ │ │ │ └── [id]/route.ts
│ │ │ ├── tags/ # 标签相关API
│ │ │ ├── comments/ # 评论相关API
│ │ │ └── ratings/ # 评分相关API
│ │ ├── layout.tsx # 根布局
│ │ └── globals.css # 全局样式
│ ├── components/ # React组件
│ │ ├── ui/ # 基础UI组件
│ │ ├── layout/ # 布局组件
│ │ ├── interview/ # 面经相关组件
│ │ ├── knowledge/ # 知识点相关组件
│ │ └── editor/ # 编辑器组件
│ ├── lib/ # 工具库
│ │ ├── db.ts # 数据库连接
│ │ ├── auth.ts # 认证逻辑
│ │ ├── redis.ts # Redis连接
│ │ └── utils.ts # 工具函数
│ ├── types/ # TypeScript类型定义
│ │ ├── index.ts # 导出所有类型
│ │ ├── user.ts # 用户类型
│ │ ├── interview.ts # 面经类型
│ │ ├── knowledge.ts # 知识点类型
│ │ └── solution.ts # 解题类型
│ ├── hooks/ # 自定义Hooks
│ │ ├── useAuth.ts
│ │ └── useDebounce.ts
│ └── styles/ # 样式文件
├── prisma/ # Prisma ORM
│ ├── schema.prisma # 数据库模型定义
│ └── seed.ts # 种子数据
├── public/ # 静态资源
│ ├── images/
│ └── uploads/
├── .env.local # 环境变量
├── next.config.js # Next.js配置
├── tailwind.config.ts # Tailwind配置
├── tsconfig.json # TypeScript配置
└── package.json
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 4.4 部署架构
# 4.4.1 开发环境
# 本地开发
npm run dev
2
# 4.4.2 生产环境
- 容器化:Docker + Docker Compose
- 部署方式:Vercel(推荐) / 自建服务器
- 反向代理:Nginx(自建服务器时)
- 监控:Vercel Analytics / 自建监控
- 日志:Vercel Logs / 自建日志系统
# 4.4.3 Docker部署(可选)
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://...
- REDIS_URL=redis://redis:6379
depends_on:
- postgres
- redis
postgres:
image: postgres:15
environment:
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 5. 数据库设计要点
# 5.1 核心表结构
- 用户表(users):用户基本信息,包含角色(管理员、普通用户)
- 知识点表(knowledge_points):知识点树状结构
- 面经表(interviews):面经基本信息
- 面经题目表(interview_questions):面经中的题目
- 解题表(solutions):解题内容
- 标签表(tags):标签定义
- 标签关联表(tag_relations):标签与内容关联
- 评论表(comments):评论内容
- 评分表(ratings):评分记录
- 分类表(categories):泛化分类
# 5.2 关键设计
- 树状结构:使用闭包表(Closure Table)或路径枚举(Path Enumeration)
- 多对多关系:使用中间表存储关联关系
- 统计字段:使用冗余字段或定时任务统计
- 软删除:使用deleted_at字段标记删除
# 6. 接口设计要点
# 6.1 用户模块
- POST /api/auth/register - 用户注册
- POST /api/auth/login - 用户登录
- GET /api/user/profile - 获取用户信息
- PUT /api/user/profile - 更新用户信息
# 6.2 题库模块
- GET /api/knowledge/tree - 获取知识点树
- POST /api/knowledge - 创建知识点
- PUT /api/knowledge/:id - 更新知识点
- DELETE /api/knowledge/:id - 删除知识点
# 6.3 面经模块
- POST /api/interviews - 上传面经
- GET /api/interviews - 获取面经列表
- GET /api/interviews/:id - 获取面经详情
- PUT /api/interviews/:id - 更新面经
- DELETE /api/interviews/:id - 删除面经
# 6.4 解题模块
- POST /api/solutions - 发布解题
- GET /api/solutions - 获取解题列表
- GET /api/solutions/:id - 获取解题详情
- POST /api/solutions/:id/rate - 评分
- POST /api/solutions/:id/comment - 评论
# 6.5 标签模块
- GET /api/tags - 获取标签列表
- POST /api/tags - 创建标签
- GET /api/tags/:id/stats - 获取标签统计
# 6.6 审核模块
- GET /api/audit/pending - 获取待审核列表
- POST /api/audit/:id/approve - 通过审核
- POST /api/audit/:id/reject - 拒绝审核
# 7. 用户流程设计
# 7.1 用户注册流程
- 用户访问注册页面
- 填写注册信息(手机号/邮箱、密码)
- 验证码验证
- 注册成功,自动登录
- 引导完善个人信息
# 7.2 面经上传流程
- 用户点击"上传面经"
- 填写面经基本信息(公司、岗位、时间等)
- 编辑面经内容
- 拆分题目并关联知识点
- 添加标签
- 提交面经
- (如开启审核)等待审核
- 审核通过后面经发布
# 7.3 解题发布流程
- 用户浏览知识点
- 选择要解题的知识点
- 点击"发布解题"
- 编辑解题内容
- 添加相关链接
- 提交解题
- 其他用户可评分和评论
# 7.4 管理员审核流程
- 管理员登录后台
- 查看待审核队列
- 点击查看面经详情
- 检查内容质量
- 选择通过或拒绝
- (如拒绝)填写拒绝原因
- 系统发送通知给用户
# 8. 页面设计要点
# 8.1 首页
- 热门面经展示
- 热门知识点展示
- 热门解题展示
- 最新上传面经
- 搜索框
- 分类导航
# 8.2 知识点页面
- 知识点树状导航
- 知识点详情
- 关联的面经列表
- 关联的解题列表
- 统计信息展示
# 8.3 面经详情页
- 面经基本信息
- 面经内容
- 题目列表
- 标签展示
- 评论区
- 相关面经推荐
# 8.4 解题详情页
- 解题内容
- 评分展示
- 评论区
- 相关解题推荐
- 解题排行榜入口
# 8.5 用户中心
- 个人信息
- 我上传的面经
- 我发布的解题
- 我的收藏
- 我的评论
- 消息通知
# 8.6 管理后台
- 面经审核
- 用户管理
- 内容管理
- 数据统计
- 系统配置
# 9. 开发计划建议
# 9.1 第一阶段(MVP)
- 用户注册登录
- 知识点树状结构
- 面经上传与浏览
- 基础搜索功能
- 管理员审核
# 9.2 第二阶段
- 解题系统
- 评分评论系统
- 标签系统
- 统计分析
# 9.3 第三阶段
- 泛化分类
- 排行榜
- 通知系统
- 高级搜索
# 9.4 第四阶段
- 性能优化
- 移动端适配
- 数据分析
- 运营工具
# 10. 风险与挑战
# 10.1 技术风险
- 树状结构的性能问题
- 大数据量下的搜索性能
- 并发写入的数据一致性
# 10.2 运营风险
- 内容质量控制
- 用户活跃度维持
- 社区氛围建设
# 10.3 法律风险
- 用户隐私保护
- 知识产权问题
- 内容合规性
# 11. 成功指标
# 11.1 用户指标
- 注册用户数
- 日活跃用户数
- 月活跃用户数
- 用户留存率
# 11.2 内容指标
- 面经上传数
- 知识点覆盖数
- 解题发布数
- 内容质量评分
# 11.3 互动指标
- 评分次数
- 评论次数
- 收藏次数
- 分享次数
# 12. 附录
# 12.1 术语表
- 面经:面试经验分享
- 知识点:面试中涉及的具体技术点或知识点
- 解题:针对知识点的解答或解决方案
- 标签:用于分类和筛选的多维度标记
# 12.2 参考资料
- 面试鸭网站
- 牛客网
- LeetCode
- 知乎
文档版本:v2.0
创建日期:2026-02-23
最后更新:2026-02-23
更新内容:技术架构从前后端分离改为 Next.js 全栈方案