首页
/ Tech Interview Handbook 技术解析:一份面向忙碌工程师的面试准备资料库与 Docusaurus 内容工程实践

Tech Interview Handbook 技术解析:一份面向忙碌工程师的面试准备资料库与 Docusaurus 内容工程实践

2026-09-03 15:27:12作者:仰钰奇

Tech Interview Handbook 是一个免费、精编(curated)的技术面试准备资料仓库,其 README 明确了定位:为没有时间为数百道算法题逐一“刷”完的工程师提供最小必要知识,覆盖从投递、编码面试、行为面试到 Offer 谈判的全流程。本文以仓库根目录 README.md 为主体,结合仓库源码(Docusaurus 站点配置、pnpm monorepo 工程脚本、实验性算法实现与 Grind 75 边缘函数)说明这份资料库的内容组织方式、与同类面试仓库的差异,以及如何在本地运行其网站与子应用。

一、README 的核心定位:为谁解决什么问题

README 开篇直接回答了“这是什么”:这是作者(Blind 75 选题清单的原作者)面向忙碌工程师整理的免费面试准备材料,覆盖算法题之外的实战内容,并明确宣称已有超过一百万人从中受益(此为仓库自述口径)。README 中列出的核心内容清单如下,每一项都对应仓库 apps/website/contents/ 下的具体文档:

  • 编码面试的最佳实践题目清单(Best practice questions),对应 coding-interview-study-plan.md
  • Grind 75——Blind 75 的下一代演进版本,题目更大更全(见下文“Grind 75 入口”一节);
  • 编码面试的准备方法(How to prepare),对应 coding-interview-prep.md
  • 编码面试 Do's and Don'ts 速查表,对应 coding-interview-cheatsheet.md
  • 按主题分类的算法速查表与技巧,入口为 study-cheatsheet.md
  • 分步式的 Software Engineer 简历指南,对应 resume.md
  • 头部科技公司常问的行为面问题,对应 behavioral-interview-questions.md
  • 前端面试内容已迁移至独立站点(README 中说明为 Front End Interview Handbook,外链不在本文输出范围内)。

“Why would you read this”一节给出了两个关键设计原则:

  1. 实用性(practical):内容覆盖技术面试的所有阶段——从申请工作、通过面试到 Offer 谈判;即使技术上很强的候选人,也能从非技术内容中获益。
  2. 信息压缩(condensed):作者刻意控制篇幅,只讲“最小必要知识”(the minimum you need to know),把练习时间留给读者本人,因为“技术面试成功的关键是持续练习”。

“Who is this for”则明确目标读者:想进科技公司但没经历过技术面试的新人、很久没坐到面试官对面的资深工程师,以及任何想提升技术面试能力的人。

二、与同类面试仓库的差异:内容直接可读,而非链接聚合

README 的“How is this repository different”一节点出了本仓库的差异化主张:GitHub 上很多面试仓库(包括一些知名书籍的配套仓库)本质上只是外部资源的链接聚合,而本仓库提供的是直接可消费的精编内容;并且现有资源大多只覆盖算法题,缺少领域特定内容与非技术内容的覆盖,本手册则刻意覆盖典型算法编码题之外的内容。

这个主张在仓库结构中可以得到印证——仓库不是“一堆 Markdown 链接”,而是包含真实实现代码的内容工程。apps/website/experimental/utilities/ 目录下维护着两套算法工具的实现:

这些可运行的参考实现与 apps/website/contents/algorithms/ 下按主题划分的速查表文档(array.mdlinked-list.mdtree.mddynamic-programming.md 等)相互印证,构成“文档 + 代码”的双层内容。

三、内容组织:侧边栏就是面试流程的阶段划分

README 的“Contents”一节说明:项目使用 Docusaurus 构建了独立网站以提供更好的阅读体验。具体到本仓库,阅读路径的组织逻辑集中在 sidebars.js 中,其分类顺序恰好对应一次技术面试的完整生命周期:

侧边栏分类 包含文档 对应面试阶段
Introduction software-engineering-interview-guide 面试流程总览
Getting an interview resume 投递与简历
Coding interview preparation coding-interview-prep、programming-languages-for-coding-interviews、coding-interview-study-plan、coding-interview-cheatsheet、coding-interview-techniques、mock-interviews、coding-interview-rubrics 编码面试准备
System design interview preparation system-design 系统设计
Behavioral interview preparation behavioral-interview、behavioral-interview-rubrics、behavioral-interview-questions、behavioral-interview-senior-candidates、self-introduction、final-questions 行为面试
Salary and offer negotiation preparation understanding-compensation、negotiation、negotiation-rules、choosing-between-companies 薪酬与 Offer 谈判
Algorithms study cheatsheets study-cheatsheet 及其下 Basics / Data structures / Advanced data structures / Additional 四个子分类,共 19 篇按主题划分的算法文档 算法刷题
Beyond the interview interview-formats-top-companies、landscape、engineering-levels、career-growth、interviewer-cheatsheet、best-coding-interview-courses、best-practice-questions 面试之外的职业发展

这套侧边栏结构(见 sidebars.js)与 README 中“practical content that covers all phases of a technical interview”的表述一一对应:README 承诺的“全流程覆盖”,在工程上就落实为这八个内容分类。站点元信息则定义在 docusaurus.config.js 中,标题为 “Tech Interview Handbook”,tagline 为 “Free curated interview preparation materials for busy people”,导航栏入口包括 Start reading(/software-engineering-interview-guide/)、Coding、Algorithms、Blog 与 Grind 75 等(见 docusaurus.config.js)。

另外,仓库根目录下的 algorithms/README.md 只有一行“内容已迁移至网站”的说明并附有 TODO: Remove in future 注释,这印证了仓库的内容重心已从静态 Markdown 目录整体迁移到 Docusaurus 站点,阅读时以 apps/website/contents/ 下的文档为准。

四、Grind 75 入口:一个边缘函数做的域名重写

README 将 Grind 75 描述为“Blind 75 的下一个进化版本,更大更好”。在工程实现上,仓库内保留了 Grind 75 的访问入口:functions/grind75/[[catchall]].js 是一个边缘函数,其逻辑非常短——

const SOURCE_HOST = 'https://grind75.pages.dev';

export async function onRequest(context) {
  const { request } = context;
  const url = new URL(request.url);
  // Rewrite to the new domain, preserving the original path and query string
  const newURL = SOURCE_HOST + url.pathname + url.search;
  return await fetch(newURL, request);
}

它保留原始请求的路径与查询串,将请求转发到独立部署的 Grind 75 站点。从源码结构看,Grind 75 的主体内容独立于本站部署,本仓库中的 catch-all 函数仅承担旧路径到新域名的兼容重写职责。

五、Monorepo 工程:本地如何运行这份手册

README 没有展开工程细节,但仓库当前是一个 pnpm monorepo,所有“运行手册网站”的操作都以 monorepo 为粒度进行。根目录 package.json 声明了两个 workspace 组(packages/*apps/*),并用 vite-plus(vp)作为统一的脚本运行器:

  • 工作区声明:package.jsonworkspaces 字段;
  • 脚本定义:package.json——build(对全部包并行执行 build)、ci(check + test + build)、clean(清理缓存)、dev:portal(仅对 @tih/portal 执行 dev)、dev(默认对 @tih/website 执行 dev)、prepare(生成 vp 配置);
  • 运行时约束:engines 锁定 node 25.8.1pnpm 10.32.1,并以 packageManager: pnpm@10.32.1 声明包管理器,本地运行需按此版本准备环境;
  • 依赖目录:pnpm-workspace.yamlapps/*packages/* 声明为工作区包,并通过 catalog 统一 vite/vitest 版本(映射到 @voidzero-dev 的 vite-plus 系列包),再由 overrides 强制全仓一致。

在此基础上,各子应用提供了自己的操作文档。以 Docusaurus 网站为例,apps/website/README.md 给出完整流程:

  1. 安装:在仓库根目录执行 vp install,由 Vite+ 统一管理 monorepo 依赖安装;
  2. 本地开发:仓库根目录执行 vp run dev(即根脚本 dev,等价于对 @tih/website 执行 dev),启动本地开发服务器并自动打开浏览器;对 JavaScript 和 Markdown 文件的修改大多即时热更新,无需重启;
  3. 构建vp run --filter @tih/website build,静态产物输出到 build 目录,可用任意静态托管服务分发;
  4. 部署:文档给出的 GitHub Pages 部署方式为 cd apps/website 后设置 GIT_USER=<GitHub 用户名>USE_SSH=1 环境变量,再执行 vp run deploy,该命令会构建站点并推送到 gh-pages 分支。

静态资源方面,网站的自定义主题(侧边栏移动端适配、目录 TOC、文档内容区等)位于 apps/website/src/theme/,博客文章按日期命名存放于 apps/website/blog/,与 README 导航栏中的 “Blog” 入口对应。

六、从内容仓库到社区产品:Portal 子应用

README 的“Contents”只提到 Docusaurus 网站,但 monorepo 中还有一个规模更大的子应用 apps/portal,承载社区的互动功能(简历提交与评论、Offer 数据提交与分析、面试问题库等)。从其 README 可知,它是按 T3-Stack 引导创建的 Next.js 应用,技术栈为 Next-Auth(认证)、Prisma(数据层)、TailwindCSS(样式)与 tRPC(类型安全 API);仓库中可见 prisma/schema.prisma、按领域划分的 tRPC 路由(offersquestionsresumes 等)以及数十个数据库迁移文件。本地开发该应用使用根脚本 dev:portal(即对 @tih/portal 执行 dev)。从源码结构看,这部分是 README 主内容之外的社区产品扩展,阅读面试资料本身不需要运行它。

七、贡献、赞助与许可证

README 的收尾部分说明了三件事:

  1. 贡献方式:目前没有正式的贡献规范(“things are still in flux”),欢迎任何人提交认为对同行工程师有帮助的内容;想贡献其他领域内容时,先创建 issue 或提交 pull request 再讨论。仓库中同样提供了 CONTRIBUTING.md 供参考。
  2. 相关项目:作者提到对数据结构实现感兴趣的读者可以关注其 JavaScript 数据结构与算法库 Lago(README 中标注为 WIP 状态)。
  3. 许可证与免责声明:仓库代码以开源许可证提供(仓库根目录 LICENSE 为 MIT 许可);由于是个人仓库,代码授权的授予方是作者本人而非其雇主(Meta)。

小结

Tech Interview Handbook 的 README 看似简短,实际勾勒了一套完整的技术面试准备方法论:用“压缩到最小必要信息”的原则覆盖简历、编码、系统设计、行为面与 Offer 谈判全流程,并用 Docusaurus 站点、按阶段组织的侧边栏、可运行的算法参考实现与独立部署的 Grind 75 将其落地。对准备面试的读者,阅读顺序建议就是 sidebars.js 的分类顺序;对想参与内容的贡献者,则可以直接基于 apps/website/contents/ 下的 Markdown 文档与 monorepo 的 vp run dev 工作流展开。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
590
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
889
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
982
503
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384