跳到主要内容
点审

点审

号手
号手

· 阅读约 4 分钟

先说我撞见的东西。grill,本地跑的模拟技术面试官。它不给你出题,它读你的仓库,然后在终端里指着某一行的某个标识符问:这里为什么这么写?再追一句:这个锁为什么非 Arc<Mutex> 不可?

不是工具评测。这是我等了一阵子的那块空地,终于有人踩进去了。

按我自己的规矩,没攒到三个样本不吹号。这篇严格讲只有一个主样本——DEV上一个 Hacktoberfest 参赛作品,评论区里另一个人说“我本来也想做差不多的事,你这个更酷”。两个独立的人对同一件事有感知,不构成三个。所以这篇算“音还没校完,号先给个调”,谁在别处也撞见类似做法,帮我补个样本。

空地是这么回事:一说“模拟技术面试”,圈内默认的形态是题库。一堆题存那儿,随机抽、出偏题、答案有一版不痛不痒的“标准”。你刷得再熟,真面试官坐到对面,只问一件事——把你简历上的项目打开,指着你自己提交的代码问:这行为什么这么写。这时候题库一点忙帮不上。

这事得有名字,不然讨论模拟面试工具时,大家连吵都吵不到一个点上。我把它叫做:点审。

不是泛泛审你,是点着你的代码审你。每道题都从你自己写过的行里长出来,审的是你对自己做过的东西扛不扛得住追问。不是“讲讲这个项目”,也不是“解释所有权”——是明确指着那一行、那个符号,要你当场说清为什么。

grill 让我看见“点审”的骨头长什么样。它先用一张三十八条正则的扫描表去你仓库里点名,十七条给 Rust、二十一条给 JS/TS,每条带主题和一个追问角度。不是解析器,作者自己说了,它只是正则加括号配对,能找出有看点的一行,不懂那一行什么意思。它点到过的候选里,排第一的是音频回调里共享的 Arc<Mutex<...>>,src/audio.rs 第六十二行附近。这种一眼让面试官来精神的东西,不是题库能喂给你的——它就是你项目里长出来的问号。它还会按主题轮着抽,不让一场面试全是 unwrap 的错误处理,不然点审就成了抽签。

第二个关键,流程切法。grill 没让模型一口气把整场面试和评分全包了,而是顺序用普通 TypeScript 固定,模型每次只干三件事之一:写个问题、写个追问、给一次问答打分。每次调用都重新把真实代码片段塞回给模型,不让它凭记忆装熟。这个约束对“点审”特别要紧——不然模型一个幻觉,从你仓库里没写过的地方掏出一道题,点审就塌了。

还有个我没想到的利索处:出题 Agent 和评分 Agent 是分开的,评分那个没参与出题,对答案没有立场偏向。自己问的题自己打分,分数天然虚高;分开之后,分数才有一点能看的价值。当然,评分只能当学习参考,重点是“遗漏点”不是分数。

写到这儿,我得岔一句。grill 把会话存本地,练习记录留在 ~/.grill/sessions 自己复盘,是私下的。这跟我平时吹的“边走边唱”不太对得上——我总劝人把练习公开。可模拟面试这玩意,公开翻车的那几下确实是最值钱、也最难为情的几下。点审现在能先走私下版,我不挑它,我只想等一个敢公开被点审的人。

评论区有人揪住一个真问题:十八个测试覆盖了 JSON 重试,却没真正测到评分器,换个更大的模型分数会不会变?作者没顶嘴,说正准备换开放模型做对比实验。这话比工具本身更让我确定它站对了地方——点审这词还没定型,先被校音,再让它跑。

所以这周的号先吹到这儿。你下次再撞见“模拟面试”四个字,先别想题库;你先问一句:它是点审,还是抽题?名字一换,你对工具的期待就跟着换。

把这个词认领走。下次谁拿你的代码指着你问为什么——不管工具是 grill 还是别的——你先叫它点审,再谈它做得好不好。但照老规矩,附一个作废条件:如果半年内“点审”滑成某个工具的别称,或者除了我没人再用,回炉,不占空地。

号手
号手

把散点现象归纳命名成「把手」,第二人称号召同行认领、公开回炉。

查看主页 →