本指南为希望为 Tech Interview Handbook 仓库贡献代码的开发者提供了全面的说明。内容涵盖了设置过程、架构概述、开发工作流以及处理此代码库的最佳实践。
有关整体系统架构的信息,请参阅概述。
Tech Interview Handbook 使用由 pnpm workspaces 管理的 monorepo 结构。这允许在不同的应用程序之间共享代码,同时保持关注点分离。
来源:package.json1-33 pnpm-workspace.yaml1-4 apps/portal/src/server/router/index.ts1-78
在开始之前,请确保您已安装以下内容
| 要求 | 版本 | 备注 |
|---|---|---|
| Node.js | 18.19.2 | 仓库要求的精确版本 |
| pnpm | 8.15.8 | 用于包管理和工作区 |
| Git | 最新版 | 用于版本控制 |
克隆仓库
安装依赖项
设置环境变量(对于 portal 应用,在 apps/portal 目录中创建一个 .env 文件)。
运行开发服务器
该仓库包含多个应用程序和共享包
apps/)Portal 应用包含交互式功能,例如简历审查系统、Offer 系统和问题题库。关键目录包括:
来源:apps/portal/package.json1-70 apps/portal/src/server/router/index.ts1-78 apps/portal/src/pages/questions/index.tsx1-49
packages/)来源:apps/portal/package.json51-65
Portal 应用使用 tRPC 进行客户端和服务器之间的类型安全 API 通信。这提供了端到端的类型安全性,无需代码生成。
主路由文件位于 apps/portal/src/server/router/index.ts,作为所有 API 路由的入口点。
来源:apps/portal/src/server/router/index.ts1-78
| 命令 | 描述 |
|---|---|
pnpm dev | 启动 Portal 开发服务器 |
pnpm dev:ui | 启动 UI 开发环境 |
pnpm dev:website | 启动网站开发服务器 |
pnpm dev:all | 启动所有开发服务器 |
pnpm build | 构建所有包和应用程序 |
pnpm lint | 在仓库中运行 lint |
pnpm tsc | 运行 TypeScript 类型检查 |
pnpm test | 运行测试 |
pnpm format | 使用 Prettier 格式化代码 |
针对 Portal 的特定命令
| 命令 | 描述 |
|---|---|
pnpm seed | 用初始数据填充数据库 |
pnpm seed-salaries | 填充薪资数据 |
pnpm seed-analysis | 填充分析数据 |
pnpm seed-questions | 填充问题数据 |
pnpm seed-companies | 填充公司数据 |
来源:package.json11-22 apps/portal/package.json5-16
Portal 应用使用 Prisma 进行数据库访问。在对 Prisma 架构进行更改后,您需要运行迁移。
要使用提供的种子脚本填充数据库的初始数据,请执行以下操作。
来源:apps/portal/package.json5-16
问题系统由多个组件组成,用于浏览、过滤和显示面试问题。
问题系统使用 TypeScript 接口来确保组件之间的类型安全。
Question
├── id: string
├── content: string
├── type: QuestionsQuestionType
├── numAnswers: number
├── numComments: number
├── numVotes: number
├── updatedAt: Date
└── aggregatedQuestionEncounters: AggregatedQuestionEncounter
来源:apps/portal/src/pages/questions/index.tsx1-49 apps/portal/src/components/questions/filter/FilterSection.tsx1-161 apps/portal/src/types/questions.d.ts1-92
该仓库使用 GitHub Actions 进行持续集成。
pnpm tsc 以确保代码库的类型安全。来源:.github/workflows/tsc.yml1-38
useMemo 来优化渲染性能。来源:apps/portal/src/components/questions/filter/FilterSection.tsx60-93
pnpm build。node_modules 并重新安装。.env 中正确配置了数据库连接字符串。有关更详细的故障排除,请查看 GitHub 上的项目问题跟踪器。