一个再也没有机会回答的问题
2022 年 3 月,俄乌冲突爆发。
月底,我一个朋友间接因为这场冲突离开了,这里面的因果链条有些复杂——市场波动、业务受挫、情绪失控。
以前我们时不时会聊天,偶尔会聊到一个他很喜欢拿来面试别人的技术问题:
函数参数传递的方法有多少种?
每到这个时候,我都会有点故弄玄虚地跟他说:
“这个问题,我当年在北电面试的时候也被问过。不过我的答案有点不一样,有机会再讲给你听。”
总觉得以后还有机会。
原来没有了。
第一次听到“北电”这个词
时间回到 2003 年暑假。
我的大学室友跟我说,他有个师兄毕业了,准备入职北电,暑假想借我的床位过渡一下。我是本地人,暑假基本都回家,床位空着也是空着,所以我就答应了。
这是我第一次听到“北电”这个名字。
说实话,我根本不知道它是做什么的。
暑假结束回到学校,室友替他师兄向我道谢,顺便跟我介绍了一些北电的情况。我也是那时候才知道,他师兄拿到的是测试岗位的 Offer。具体说过什么,我已经记不清了,只记住了两点:
很难进,工资高。
这两点,成功引起了我极大的关注。
一个“双非”的迷之自信
后来了解得更多一点,我才发现,北电的招聘门槛其实很高。
对于北电来说,我算是一个“双非”选手:非 985、非研究生。尤其是研发岗位,当年招的人极少。
但当时的我,却处于一种迷之自信的状态。
理由也不能说完全没有。我已经有过几段实习经历,做过一些项目,还有一个当年含金量不错的“高级程序员”证书。那时候的我,对 985 这些标签也没有太强的概念。
至于研究生,我当时的认知更加直接:
本科毕业找不到工作,才去读研究生。
所以,“非 985、非研究生”这两件事,并没有给我造成太大的心理负担。
于是,我投了北电的研发岗。
这种迷之自信还有另一个表现。
那时候参加校招,很多应聘者都会准备一份封装精美、厚厚一叠的简历。相比之下,我的简历格外亮眼:
只有薄薄一张 A4 纸。
而我当时,并没有觉得这有什么问题。
“你也来了?”
我印象中,宣讲会是在华工。
宣讲会结束之后直接笔试。笔试前,我碰到一个同学,他看到我,说了一句:
“你也来了?”
我明白他的意思。
当时有点尴尬,心里想的是:
你不也来了么?
当然,这句话我没有说出口。
笔试做完之后,我很确定自己应该能拿到 90 分左右。题目对我来说并不难。
几年后,我自己也成了北电校园招聘的一员,才知道一个让我很意外的数字:
应届生笔试的平均分,只有 30 分左右。
这个数字让我有点惊讶。能够参加北电校招的,大多已经是当时不错的高校毕业生,为什么一份企业的技术笔试,平均分会只有 30 分?
我开始意识到,学校里学的东西和企业真正需要的东西之间,确实存在不小的距离。
冼为坚堂
虽然笔试感觉不错,但随着了解到更多北电的招聘情况,我开始觉得,自己未必能拿到面试机会。
北电的研发岗位本来就招得不多,而且我几乎没听说过“双非”拿到研发 Offer 的例子。
没想到,我还是收到了面试通知。
面试地点在中大冼为坚堂。

那天先填了一张表,其中有一项:
期望薪资
我一下不知道该怎么填。
这是我第一次参加真正意义上的求职面试,之前也完全没有研究过应届生到底应该开什么价。
于是,我瞄了一眼旁边。
坐在我旁边的是一个华工研究生,他在期望薪资那一栏写了:
7500
我想了一下,填了:
6000
这 1500 块的差距,在当时的我看来,大概就是一个 985 研究生和 211 本科生之间合理的差价。
这位被我拿来做“市场定价参考”的人叫 Sundy,没想到最后我们还进了北电同一个组。
其实怕被忘记 至放大来演吧
进入面试环节后,面试官很 nice。
但面着面着,我反而越来越紧张。
原因有点奇怪:问题都太简单了。
我开始担心,如果这些问题大家都会,我就算全部答对,面试官最后对我可能也不会留下什么印象。
终于,面试官问了一个问题:
函数参数传递的方法有多少种?
当年,C++ 和 Java 都是热门语言,这个问题背后考的,其实就是这两门语言里关于参数传递的一些特性。
我回答:
有两种,值传递和引用传递。
面试官没有什么特别的反应,继续低头看我的简历,像是在想接下来还有什么问题可问。
这很正常。这是一个常规问题,我给的也是一个常规答案。
但我不想让这个问题就这么过去。
我决定自己搞出一点“意外”。
于是,大脑开始飞速运转,试图从过去二十多年的“毕生所学”里,再找点东西出来。
龟—波—气—功
突然,我脑子里闪过两本书:
- 《80386架构体系》
- 《Linux内核分析》

我补充了一句:
“其实,还有一种。”
面试官抬起头,看着我。
我接着说:
“还有一种,是全局参数。”
他明显有点疑惑,问:
“有什么例子吗?”
我说:
“例如,在栈还没被构建的时候,比如操作系统的引导过程。”
面试官没有马上接话。
他就这么看着我,像是突然定住了。那一瞬间,整个房间仿佛也跟着安静下来,空气像凝固了一样。
我也看着他。
大概只有一两秒,却感觉时间停了很久。
然后我知道:
接下来,我可以接管这场面试了。
接管面试
我从 80386 电脑上电开始讲起。
POST、BIOS,如何从指定扇区把 bootstrap 读进内存,再把控制权交给操作系统。这些东西我当时很熟。
讲着讲着,我又顺势讲到了 Linux 的 init 进程。
到了这里,其实已经开始接近我当时知识的边界了。
当时我特意啃过 Linux 0.01 的启动源码,大体知道运行机制;但真要让我把整个 init 完整讲透,那时的我其实还没有这个底气。
不过,我还是继续往下讲。
我相信,在真正进入我的知识盲区之前,面试官会先叫停。
果然,没等我把 init 继续往下讲,面试官就打断了我:
“可以了。”
我停了下来。
一切都在计算之内。
那一刻我知道,这场面试差不多结束了。
接下来,问的都是一些常规的非技术问题。
BBS时代的“面经”
那个时代,大学生很喜欢在 BBS 上分享“面经”。
面试之后,我也经常去逸仙 BBS,一方面看别人的面经,另一方面也会分享一些自己的面试经历。当然,那个“超纲答案”我没有写进去,那算是自己修炼出来的东西。
也是在那里,我认识了一位中大的应届生。我们很投契,经常互相交流各自的面试情况。
他的网名叫:
非典型进
最后,我们都进了北电,而且进的是同一个组。
很多年后,我们又成了创业伙伴。
他就是文章开头提到的那位朋友。
答案是丰富多彩的
很多年后,我偶尔还会想起当年的那个问题:
函数参数传递的方法有多少种?
在 C++、Java 以及通常的面试语境里,我当然知道标准答案是什么。
但我至今仍然觉得,当年那个回答并不是胡来。
因为任何问题,其实都有自己的语境。
当面试官问出这个问题时,我们都默认了一个上下文:讨论的是 C++ 和 Java,讨论的是语言层面的函数调用。在这个上下文里,“值传递”和“引用传递”当然是他想听到的答案。
而我当时做的,只是跳出了这个上下文。
换一个语境,答案也就有了另一种可能。
这不禁让我想起 2000 年的高考作文:
答案是丰富多彩的
那一年,大概也是因为作文的关系,我和第一志愿擦肩而过。
三年后,在中大冼为坚堂,我又面对了一个可能决定未来的问题。
这一次,我终于给出了一个不一样的答案。
至于那个我一直说“有机会再讲给你听”的答案,最终还是没能讲给“非典型进”听。
有些答案,可以晚一点说。
有些对话,却不会再有下一次。
自己吹过的牛
2003 年 12 月 12 日。那时候我在黄金围驻场开发。晚上收邮件的时候,我看到了北电发来的 Offer Letter。

中间还有个小插曲:北电一开始竟然给我发了一份研究生的 Offer,一度让我以为搞错了。
面试那天,为了让面试官记住我,我从一个函数参数传递的问题,一路讲到 80386、bootstrap 和操作系统启动。
这个为了面试而“放大来演”的问题,后来竟然贯穿了我的整个北电生涯。
原来,这是我北电职业生涯的“引导程序”。
