当面试官不知道自己问题的答案时该怎么办?[关闭]


48

昨天我在一次采访中经历了一次糟糕的经历。

面试官问我关于纯虚函数的问题。我说过,它在基类中可能有也可能没有定义,但是派生类应该提供定义,除非它们也想成为抽象类。

但是面试官一直在问:“纯虚拟可以定义吗????”……我说是的。

他再次说:“纯吗?”

我说是。允许的是,如果派生类想要特定的行为,则可以显式调用该函数。

他送我出去。我确信他不知道纯虚函数可以有定义这一事实。

如何对待这种面试官?

问了第二次之后,我应该撒谎说它没有定义吗?:)

还是我应该恪守承诺,放弃工作机会?


51
您应该联系他们,并提供带有定义的纯虚函数示例,以便他们知道。
GManNickG 2011年

22
GMan的建议是个主意。您可能会打动面试官,无论您是否相信您,您对工作都非常关心,可以跟进。而且,如果您尽可能以非对抗性的方式给他一些东西,那应该只会鼓励他/她对您作为开发人员的评价更高。不过,是否要在那儿工作还是一个艰难的决定。
科迪·格雷

47
但是您真的想为这样的人工作吗?

29
我的一位面试官问我有关这个表达的问题arr[++i] = i。当我说这引起了不确定的行为并告诉他序列点时,他一时无语,然后他的面部表情和其他问题使我相信他以前从未听过这些话!
纳瓦兹(Nawaz)

10
一定要考虑选择访谈员通常不是因为他们的技术能力,而是他们评估受访者沟通才能的能力。容易评估技术技能,而不能提高生产力和团队合作能力。在我看来,您有很多机会来适应您的观点解释您坚持不这样做但没有实现的坚持。那不顺利。
汉斯·帕桑

Answers:


82

不,您应该感谢幸运的星星,您错过了该子弹。为拒绝承认自己可能不知道所有事情并拒绝向他人学习的人工作是非常不愉快的经历。


7
更准确地说,面试过程是双向的。在公司将我评为员工的同时,我也将其视为雇主。发现许多人想要。
正确的意见

确实。几天前,在我接受电话采访时,面试官要求提供一个示例,以证明熟悉某人所用语言的人的知识。有关问题的询问已在最后一刻添加到了面试中。我认识这些人,而且我知道他们是伟大的开发人员,所以我想与他们合作。:)
greyfade

49

具有定义的纯虚函数示例:

// object.hpp
struct object
{
    // virtual destructor, to allow use as a public base class,
    // but pure to ensure object itself isn't instantiated
    virtual ~object() = 0; 
};

inline object::~object()
{
    // empty implementation
}

6
这不仅是带有定义的纯虚函数的示例,而且是如何实际使用它的示例。+1。
j_random_hacker 2011年

3
不知道你能做到。凉!= D
gablin 2011年

2
这是创建基础多态对象的方法。然后,您可以使用它动态降低层次结构。在某些情况下(例如插件)很有用,以检查插件是否为预期的类型(假设它肯定会从您的基类派生)。顺便说一句,必须给纯虚拟析构函数一个定义。
CashCow 2011年

现在,即使它仍然仍然是微不足道的,那也很好。
Deduplicator 2015年

42

当前的问题不是技术正确性,而是社交/沟通技巧。立场坚定,但要承认面试官的观点,并允许他们保存面子。

一旦您看到他在钓鱼的目的(“纯粹?”是一个很好的线索),一个好的答案可能是:

通常认为 虚函数不能有定义。但是,从技术上讲,要使虚函数是纯函数,它必须=0在声明中具有。它仍然可以有一个定义(尝试一下,它将编译!)。当然,这很少使用,在实践中,当大多数人说“纯虚拟”时,他们暗示没有该定义。


3
您基本上是在25分钟内复制了我的评论。在我写之前!怎么样?-+1和类似主题的评论已删除。
Steve314 2011年

3
那是另一个好处。我曾经在考试中对我的成绩提出异议,因为我向我的教授证明了我在考试中编写的代码可以编译。编译器不会说谎……永远……
jmort253 2011年

3
这正是我的想法。在不作澄清的情况下,只说“可以”,对我来说似乎很清楚,面试官认为他不理解这个问题。通过扩展答案,您可以清楚地知道a)您了解问题,b)您确实知道答案。我也不认为面试官在试图表达观点时不一定是错误的,显然,人们认为纯虚函数不能有定义是一个很普遍的误解。
迪恩·哈丁

10
@Steve,您会从500代表开始获得时间旅行,您一定错过了通知
Pekka支持GoFundMonica 2011年

几年前,我在C ++采访中(针对高性能系统)做了一次采访,在那次采访中,我解释了由于内联,因此使用函数对象比使用函数指针具有更好的性能,并向他解释了这一点。我还引用了《有效C ++》一书。他实际上站起来检查这本书,并说他不知道这件事,对此印象深刻。很好地解释您的答案。
softveda 2011年

10

您可能已经解释了如何声明具有实现的纯虚函数。

实际上,我希望您会在这里,因为我也不熟悉该怎么做。


5
您只需将函数声明为纯虚函数,然后提供实现即可。这是一种非常不常见的做法,但是在“ Effective C ++,第三版”中,Scott Meyers描述了一些有用的方案。特别是,由于该函数是纯虚函数,因此在其中声明的类是抽象的,但是由于它具有实现,因此为子类提供了默认实现,子类可以根据需要显式选择使用。

1
好吧,这并不能解释它是如何完成的。如果有人感兴趣,请访问en.wikipedia.org/wiki/…。无论如何,我仍然认为解释如何做是最好的选择。

1
+1-第二行 更糟糕的是,除非我的心情异常“有时甚至是错误”,否则我会支持面试官。麻烦在于,您只能在一定程度上猜测自己的信念,否则您最终将一无所知。
Steve314 2011年

1
@ Steve314:嘿,我发现年龄越大,我越容易出错。总会有人比我了解更多。:-)

@Jonathon-是的,但是没有100%准确地表明我对所有各种观点应该有多自信,我如何知道要提出哪些问题?容忍犯错,这是否意味着我应该始终假设别人是对的而我错了?我们有时可能会自信而又错了,但这是否意味着我们永远不应该维护自己的自信?并且,如果我的信心水平不成为我在看到有力证据之前是否坚持枪支的指南,那应该怎么办?
Steve314 2011年

6

很多时候,当我面试候选人时,我都在寻找那个人如何处理不确定性或应对对抗。下次您要面试时,请对此保持敏感,并尝试以建设性的方式回答问题或解释您的职位。那可能比正确答案更重要。


这是一个很好的答案。
Neil G

+1:这就是我的采访方式。我更关心我们如何互动和交流思想,哪些是对的,哪些是非。详细说明您的职位和/或解释其背后的原因,您不仅证明自己胜任,而且还很“团队合作”。
木乃伊2011年

另一个+1:我想雇人谁可以是很重要的争论好。如果新员工不能坚持自己的想法,他们将不会与其他意志坚强的人组成团队!
Zan Lynx

5

我去过的面试比面试官了解的更多。但是,他们希望有人能胜任,没有人(当然)可以在该级别进行面试。

就您而言,您是盲目的无知还是真正的误解?可能会有示例和参考的后续电子邮件:在做出决定之前先了解它们的反应。

尽管根据您的问题,我倾向于“盲目的无知”,并且会保持清晰的态度。


面试官只问了这个问题,就把我送出去了。我没有电子邮件ID,因此无法与他们联系。
bjskishore123 2011年

@ bjskishore123:通过代理商?但是,如果这样的话,我会远离的……
gbn

是的,通过咨询。
bjskishore123 2011年

+1这是一种常见的经验。我只接受过一次足够了解我的技能设置的采访。
2011年

3

在这种情况下,我建议编写一个带有带主体的虚函数的简单类,并查看其是否可以编译。至少,我建议谷歌搜索该主题。

如果面试官接受挑战,承认失败,并且在那之后看起来不像要勒死您,那么您应该处于良好状态。否则,这可能不是要与之共事的人。


3

我完全不同意您应该放弃公司的想法,因为面试您的人不知道他的问题的答案。即使在工作时,您也会遇到即使遇到错误也会固执的人。调动人们正确答案是一项很好的技能。

就我而言,面试官问如何在许多机器上计算大量数字的方差。我首先说方差是平方的平均值减去均值的平方。他插话说:“不,是E[(x - mu)²]。”

我说:“是的,您是对的。但是您的公式与我的公式相同。让我们一起推导它。” 然后我们一起得出。

在您遇到面试官不信任的情况时,您需要更改方法。告诉他这是一个鲜为人知的功能(这使您听起来像是一无所知),如果他想让您在面试后向他发送示例程序或C ++书籍的引用(这是这样面试才能顺利进行。)

尝试从他的角度想象事物。你有一天要去面试别人,有时候你会错的。您希望如何让一位出色的候选人回答这样的问题?


平均值是E [(x-mu)²],尽管您可能是这样说的。因此,您可以估算出E [x²-2xmu +mu²] = E [x²]-E [2xmu-2mu²]-E [mu²] E [(x-mu)]始终为0,E [mu²] =mu²为mu是一个由此证明的常数。
CashCow 2011年


1

编辑:显然我完全错了,请参阅此答案下面的评论。出于教育目的,将答案留在这里。

可悲的是,你错了。甲虚拟函数可以具有定义; 一个纯虚函数可能不会。缺乏定义是使它变得纯净的原因。


8
不,谢谢。他是对的。
GManNickG 2011年

1
哎呀!错误!= 0是使其纯净的原因。此类功能可以具有定义。
爱德华·斯特朗奇

4
嗯,让我惊讶。我从来不知道
菲利普·波特

3
Wikipedia解释说:“尽管纯虚方法在声明它们的类中通常没有实现,但是允许C ++中的纯虚方法在其声明类中包含一个实现,从而提供回退或默认行为,派生类可以在适当的情况下委派给默认方法。 ” 因此,即使纯虚函数定义其实现是不寻常或不典型的,它也是有可能的。
科迪·格雷

1

您知道您回答的都是对的。在我看来,既然您是对的,那么您坚持不懈地回答就可以很好地完成工作。无需撒谎,因为如果今天没有其他的话,面试官将学习纯虚拟功能!!!他可能也在测试您,以检查您的决策是否坚定?您是一个容易被带走的人吗?因为您知道您的权利,所以没有必要放开希望

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.