开源项目面试常问问题及真实回答思路

最近帮朋友改简历,他投了几个参与过 GitHub 星标破万项目的岗位,结果一面就被问懵了:‘你提的 PR 为什么被拒?’‘你 fork 后改了哪几行核心逻辑?’——不是技术不行,是压根没准备开源方向的面试题。

别只背八股,开源面试真在考‘人’

和普通后端/前端面试不同,开源项目面试不盯着你手写红黑树,而是看你有没有真实‘混’进社区。面试官手里可能正开着你的 GitHub 主页,边聊边点开你 last commit 的 diff。

高频问题1:‘你贡献过哪个开源项目?做了什么?’

别只说‘我修了个 bug’。要讲清楚上下文:
比如你在 vueuse 提了个 PR 修复 useMouse 在 Safari 下坐标偏移的问题。先复现步骤:

<!-- 在 Safari 16.4 测试页中触发 useMouse -->
<script setup>
import { useMouse } from '@vueuse/core'
const { x, y } = useMouse()
</script>

再说明定位过程:抓包发现 event.clientX 返回值比 Chrome 少 12px,查 MDN 确认 Safari 对 pageX/pageY 的兼容差异,最后用 event.pageX || event.clientX + window.scrollX 兜底。这种细节,比‘我熟悉 Vue 响应式原理’管用十倍。

高频问题2:‘你提的 PR 被 maintainer 拒了,你怎么看?’

真事:有同学给 axios 提 PR 加个 timeoutMs 参数,被直接 close。原因?维护者回复:‘已有 cancelTokenAbortController 方案,新 API 会增加维护负担’。这时候别说‘我觉得他们太保守’,换成:‘我后来读了 issue #3287,理解了团队对 API 收敛的坚持,现在遇到类似需求,我会先查 RFC 讨论区再动手’。

高频问题3:‘如果让你给一个陌生项目提第一个 PR,你会怎么做?’

老手操作流:
① 先跑通本地 dev 环境(注意看 .github/CONTRIBUTING.md 里是否要求 yarn install --frozen-lockfile);
② 执行 npm run test 确保 baseline 不挂;
③ 搜 TODOFIXME 注释(很多项目把低门槛任务埋在这里);
④ 找个文档 typo 提 PR——别小看这个,能快速建立信任。比如在 webpack 官网 docs 里把 optimization.splitChunks 写成 optimazation,修完 PR 描述就写:[docs] fix typo in splitChunks option name,maintainer 通常秒 merge。

藏在角落的加分项

面试官听到这些会眼睛一亮:
• ‘我给项目写了中文 README,PR 被合并后,star 数两周涨了 15%’;
• ‘发现某 issue 报的 bug 其实是底层依赖 lodash 版本冲突,我反向给 lodash 提了 patch’;
• ‘用 git bisect 定位到 v4.2.0 引入的内存泄漏,commit hash 是 a1b2c3d’。
这些不是炫技,是证明你真把项目当‘自己的’在养。