题库系统是一个社区驱动的平台,用于分享、发现和讨论技术面试问题。它允许用户浏览顶尖科技公司提出的问题,贡献他们在面试中遇到的问题,按公司、职位和类型过滤问题,并将问题整理到个人列表中。本文档涵盖了系统的架构、核心组件、数据模型和关键功能。
题库是 Tech Interview Handbook 门户的三大主要组成部分之一,另外两个是简历评审系统和 Offer 系统。它提供了一个协作空间,求职者可以通过访问公司实际提出的问题来为技术面试做准备。
来源: apps/portal/src/components/questions/QuestionsNavigation.tsx apps/portal/src/pages/questions/browse.tsx
题库系统围绕几个相互关联的数据模型构建
来源: apps/portal/src/server/router/questions/questions-question-router.ts apps/portal/src/types/questions.d
主页提供了一个简单的入口点,通过搜索界面,用户可以根据类型、公司和地点快速查找问题。
来源: apps/portal/src/components/questions/LandingComponent.tsx
浏览界面是探索问题的中心枢纽,它具有
来源: apps/portal/src/pages/questions/browse.tsx65-606 apps/portal/src/components/questions/QuestionSearchBar.tsx
问题详情视图显示
来源: apps/portal/src/pages/questions/[questionId]/[questionSlug]/index.tsx
列表页面允许用户
来源: apps/portal/src/pages/questions/lists.tsx apps/portal/src/components/questions/AddToListDropdown.tsx
问题贡献工作流程旨在防止重复问题并收集结构化信息
该过程包括
来源: apps/portal/src/components/questions/forms/ContributeQuestionForm.tsx apps/portal/src/components/questions/ContributeQuestionCard.tsx
用户可以通过一个分步表单表明他们在面试中遇到了一个现有问题,该表单收集
这些数据有助于跟踪问题在公司和职位之间的频率和相关性。
来源: apps/portal/src/components/questions/forms/CreateQuestionEncounterForm.tsx
该系统提供全面的过滤功能
| 过滤类别 | 描述 |
|---|---|
| 公司 | 按特定公司过滤(例如,Google、Meta) |
| 角色 | 按职位过滤(例如,软件工程师) |
| 问题类型 | 按问题类别过滤(编码、系统设计、行为、理论) |
| 问题年龄 | 按近期性过滤(上个月、最近 6 个月、去年、全部) |
| 位置 | 按地理位置过滤 |
| 排序类型 | 按点赞数、年龄或遭遇次数排序 |
| 排序顺序 | 按升序或降序排序 |
来源: apps/portal/src/pages/questions/browse.tsx70-151 apps/portal/src/utils/questions/constants.ts23-105
题库在不同上下文中使用了各种卡片组件来显示问题
BaseQuestionCard 为各种问题显示上下文提供了基础,处理
来源: apps/portal/src/components/questions/card/question/BaseQuestionCard.tsx
答案和评论也有类似的组件层级结构,并有专门的组件用于
来源: apps/portal/src/components/questions/card/AnswerCard.tsx apps/portal/src/components/questions/comments/CommentListItem.tsx
题库 API 使用 tRPC 实现,并组织在多个路由文件中
处理问题的 CRUD 操作,包括
关键端点
getQuestionsByFilter:根据过滤条件检索问题getQuestionById:按 ID 获取特定问题getRelatedQuestions:查找与给定输入相似的问题getQuestionsByFilterAndContent:将过滤与内容搜索结合来源: apps/portal/src/server/router/questions/questions-question-router.ts
其他路由负责系统的各个方面
该系统使用 PostgreSQL 全文搜索来查找相关问题。它通过以下方式预处理搜索查询
// Example of search query processing
const query = input.content
.replace(escapeChars, ' ')
.trim()
.split(/\s+/)
.join(' | ');
使用 PostgreSQL 的 ts_rank_cd 函数执行相关性排名。
来源: apps/portal/src/server/router/questions/questions-question-router.ts226-283
该系统聚合了关于问题遭遇的数据,以提供以下方面的见解
这些数据通过实用函数进行处理,并在问题卡片上显示,以帮助用户了解问题与他们具体情况的相关性。
来源: apps/portal/src/utils/questions/server/aggregate-encounters.ts apps/portal/src/components/questions/QuestionAggregateBadge.tsx
题库系统集成了技术面试手册的其他组件
来源: apps/portal/src/components/questions/QuestionsNavigation.tsx