“为了拿下 Offer,我在技术面试时迎合面试官,给了错误答案!”
经历过找工作的人都知道,面试表现对最终结果有着极大的影响力。
在自身条件与竞争者不相上下甚至稍弱的情况下,只要面试过程表现出色,就极大可能在一众面试者中脱颖而出。
国外一位名为 Koen Witters 的程序员也懂得这个道理,但他却在面试中遇到了一个棘手的处境:我要如实说出问题的正确答案,还是给出面试官以为的“正确答案”?
以下是 Koen Witters 的亲身经历(为更具代入感,本文将以第一人称叙述):
众所周知的“错答案” vs. 鲜为人知的“真答案”
还记得那是 2007 年,当时我在许多公司应聘软件开发的工作。其中有一家公司令我印象非常深刻,因为我至今都记得,获得那份工作的最佳方式就是回答错误的答案。
那天我去这家公司面试时,有两位面试官:一个算是我的直属领导——团队负责人兼技术负责人,还有一个是这位的上级经理。由于我面试的是软件开发,因此主要由团队负责人进行提问。
在短暂的闲聊并回答了一些常见问题后,团队负责人让我解释什么是“三层架构”。
这对我来说不过是小菜一碟。我给出了一个通用的客户端-服务器-数据库的解释,还提到了最常见业务案例:将 Web 浏览器作为瘦客户端(Thin Client),Web 应用服务器和底层数据库。
回答完毕的我看了看两位面试官的神情,似乎对我很满意。
随后他们紧接着又提了一个问题:“那么这个体系结构与模型-视图-控制器模式(Model View Controller,即 MVC 模式)有什么关系?”
当时这个问题一问出来,我就感到非常棘手。因为我知道很多人会将三层架构的每一层直接关联到对应的模型-视图-控制器上。但根据维基百科对 n 层架构的解释,我认为正确答案是,在大多数情况下,模型-视图-控制器都运行在中间的“应用层”:
乍一看,这三层架构与 MVC(模型-视图-控制器)的概念很相似。但是它们的拓扑结构是不同的。三层架构中有一个基本规则是,客户端从不直接与数据层通信;在三层模型中,所有通信都必须通过中间层。从概念上讲,三层架构是线性的;而 MVC 架构是三角形的:视图向控制器发送更新,控制器更新模型,而视图直接从模型获取更新。
给出错误答案的我,得到了工作
因此,这个问题对我来说,不仅在于正确答案是什么,还在于面试官们认为的正确答案是什么:可能他们知道正确答案,只是想测试我的知识有多丰富?但如果他们不知道呢?
其实通常情况下,我会直接给出我认为的正确答案,如果对方觉得我是错的,那我就会和他们进行愉快的探讨。
可这次不一样,因为面试我的团队负责人旁边还有一位他的上级经理。
如果他真的不知道答案,那说出正确答案的我就相当于在他上级面前“羞辱”他。这样的话只有两种结局:要么他为了保全面子,坚决否定我的答案;要么他承认自己错了,在他上级面前丢脸。
很明显,这两种结果对找工作的我来说都不可取,因此我只有一种选择:回答他们认为正确的答案。
做好这个心理准备的我开始回答:“模型-视图-控制器是一种软件模式,因此存在于编写的代码中。由于在大多数情况下,此代码仅在应用层上运行,……”我还没说完,就看到团队负责人的眉头一皱,然后我心里就有底了:他不知道我认为的正确答案。
所以我立即话锋一转,接着说:“视图对应表示层,控制器对应应用层,模型对应于数据层。”
很好,面试官看起来很满意。结果不出所料,我获得了 Offer。
“面试不仅需要技术,也需要人际交往能力”
在这个故事的最后,Koen Witters 给出了一句总结:工作面试不只看重技术技能,还在于人际交往能力,因为在工作中,这两者都很重要。
而 Koen Witters 的分享也引起了众多网友的讨论,许多人都经历过类似情况。
网友 @munificent 就曾搞砸了一家游戏公司的面试,因为 TA 给出了一个对方无法理解的正确答案:
“我不记得他们想让我解决的具体问题是什么,但答案涉及一个动态集合,他们希望它以恒定的时间复杂度而增长。我猜他们可能是想要一个链表。但是我说我会使用动态数组,因为当对一系列追加进行平均时,这些数组具有恒定的时间。
我不知道我是否说过“摊销复杂度”这个词,但很明显,他们从未听说过对一系列操作进行摊销分析,他们完全没有理解我的答案。他们认为某些附加内容会使数组增长。我试图解释这仅适用于其中可预测的一小部分,但他们坚持认为这意味着动态数组的最差性能是 O(n)。他们显然不知道我在说什么。
我很确定这就是他们决定不录用我的地方。
但现在我是 Google 的一名高级软件工程师,我刚刚写完一本教科书,解释了动态数组,包括它们的摊销分析,很可笑吧。”
网友 @gin 也同意 Koen Witters 的做法:
“是的,唯一重要的规则是永远不要超过你的老板。”
不过也有网友认为 Koen Witters 的建议对有些诚实的人不太公平:
“这种情况确实有可能发生,但是那些坚持诚实守信的人该怎么办?”
那么,你遇到过类似情况吗?你有什么印象深刻的面试经历?
参考链接:
https://dewitters.com/i-had-to-give-a-wrong-answer-to-get-the-job/
https://news.ycombinator.com/item?id=27881293