it-swarm.cn

最好的C ++面试问题是什么?

如果您可以问一个C++程序员一个问题来衡量他们的C++技能,那会是什么?

我认为最好的问题是:可以叫“删除此”吗?在成员函数内部?(我将其作为链接,因此您可以先仔细考虑一下,然后转到 最佳C++面试问题– Ever! 来查看正确答案。)

我不问这个问题是因为我希望大多数人都知道答案。如果他们这样做了,那么这将不是一个有用的问题。我要求看看他们是否可以按照自己的方式来获得正确答案,以及如何做到这一点。

28
David Thielen

我想问问他们为什么虚拟成员函数不能与C++中的模板一起使用的原因。当然,只有少数人可以立即真正回答问题。但是,如果受访者正确理解了C++的核心机制(模板在C++中的工作方式,虚拟函数的实现方式,编译器和链接器如何从源代码生成可执行文件等),则可以通过适当的逐步操作获得答案。提出主要问题。

已添加:此答案中的模板虚拟成员函数表示模板函数是某个类的虚拟成员函数,而不是模板类中的常规成员函数。抱歉让您感到困惑:(

8
summerlight

最好的C++面试问题将是编程问题,而不是测验问题。

57
Steven Evers

我想问问他们对C++ 0x的看法。由此,我可以将它们“分类”为各种刻板印象:

  • 超级老派,使用C++编译器来编译C代码
  • 老派,害怕(或看不到)STL,没有跟上变化
  • 热爱lambda,热爱STL,从右值引用,更快的RAII粉丝,热衷于使用shared_ptr,unique_ptr等获得更快的速度
  • 这很痛苦,因为过去几年编写的所有增强代码都需要进行改编以使用C++ 0x等效项
  • 疯狂的模板元编程器,回答一个相对简短的问题时,我的脑袋爆炸了

这些存储桶中有一些对您而言非常合适,而有些则是“感谢您的光临”。作为一个使您快速获取大量信息的问题,这是我的赢家。

32
Kate Gregory

我对为什么“可以删除它”感到困惑。被认为是一个有趣的问题。用C++编写COM代码的任何人都知道,在基本COM编程的第一天,您学习的第一件事就是如何正确使用“删除此内容”。我想确定某个人是否正躺在关于编写COM程序的简历上可能很有用,但是作为一个常识性的C++问题,如果某人不能立即回答,那么他们就不太适合为我的团队。

无论如何,如果您的目标是提出一个衡量C++技能的问题,那么选择一个问题是错误的方法。 将其转过来。正确的问题是:

从1到10的规模,您是一名C++程序员,您有多好?

这不是让您获得想要的答案的问题。每个人都说“八”。为您提供所需答案的问题是:

好,你八岁了。您认为七岁的孩子会遇到什么困难呢?

然后boom,现在您已经有了它们。如果应聘者认为“与递归有关”或“何时使用虚拟析构函数”是七岁以下儿童所无法承受的事情,那么您知道他们对递归或析构函数或其他任何知识都了解一点,并且他们的知识没有比这更深入的了。

与提出一些琐碎问题相比,这应该给您更好的校准。如果要强迫我提出一个有关C++事实的好问题,我可能会问类似“您如何为处理虚拟方法的C++编译器部分设计语义分析器和代码生成器”在基类析构函数中调用?”您应该问一些与您从事的实际工作有关的问题,并且候选人可能会从事工作。这是我不得不处理的一个问题,我认为它可以很好地了解一个人如何设计语义分析器和代码生成器以及他们对C++的了解。

28
Eric Lippert

只是为了好玩,我让C++程序员迷上了这个小宝贝:

为什么会遇到无限循环(是的,正确键入)?

int x=0;
while (x<3) {
  x = x++;
}

令人惊讶的是有多少人被绊倒了。当然,我不能再使用它 在出现在Stack Overflow之后 。咕......咕utter ...

(要获得正确的答案,请阅读自白,并务必阅读评论)

添加了奖励问题

有史以来最经典的FizzBu​​zz(在现在著名的 编码恐怖文章 中有介绍)。我本人从未真正在面试中使用过它,但是在午餐时间将它扔到开发团队周围之后,结果是……嗯……令人惊讶地准确。

自白

我被标准的“ x ++返回原始值”响应所困扰。但是,正确的答案是由于序列点,行为是不确定的。在我使用此序列之前,没有人一直提到序列点。

我受过教育,并且我真的要感谢所有花时间发表评论的人。

14
Gary Rowe

首先要问的是关于指针的简单问题。令我惊讶的是,有多少人声称知道C++,甚至更糟的是,他们无法回答C++。然后我会问一个关于虚函数的简单问题。这种组合可以非常迅速地告诉您该人是否真正了解C++。

8
Dima

告诉我有关复制构造函数的信息。

7
fredoverflow

这很大程度上取决于您公司编写的C++类型。 (当我不得不雇用C++程序员时,我从未问过delete,因为我向他们询问了避免完全写delete的技术。)

理想情况下,您希望聘用的人员编写的代码要高于团队当前编写的代码,但不要高于团队当前编写的代码,除非您希望将其与培训团队相结合以使其达到更高的水平。

7
sbi

对于一位出色的C++开发人员而言,最好的问题是“告诉我为什么[〜#〜] not [〜#〜]使用C++吗?”

6
amadvance

我相信我会问他们他们还知道什么,或者更有可能给他们一个完全不同的问题。

几乎没有其他语言经验的C++编码人员。狭窄的经验通常是限制性的。

6
Orbling

我认为没有最佳的C++问题。 C++是一门庞大的语言,并且随着C++ 0X的发展,您可以在该语言的某个子域中变得强大,而对于该语言的其他部分则不多。一个“单发”问题只会锻炼某人对一小部分语言的知识,并有可能忽略他或她对语言其他方面的知识。

4
sashang
4
karlphillip

我最喜欢问的一个简单问题是:

a)您是否从C开始然后切换到C++?

b)如果是这样,那么您学会了做些不同的前几件事是什么?

这个答案通常使我对程序员如何使用C++以及他/她对OOP和C++的理解)有所了解。

这里没有“正确”或“错误”的答案,但是通常这是一种了解候选人来自何处的好方法。

3
mohaps

您如何在C++中实现虚拟功能,说明现实情况。

1
user616

此刻,我会说:“您将如何为容器实现move构造函数?”

我的理由是,由于移动构造函数是下一个标准的功能,而不是当前标准的功能,因此候选人的答案将表明相关开发人员是在积极地学习有关其语言的知识,还是只是坚持自己所知道的技巧。

1
Kaz Dragon

我想问一下他们对std::string。我还要询问他们是否使用了其他设计(例如MFC/ATL CStringwxString等),并假设他们使用过,请他们比较和对比设计。

字符串已被广泛使用,几乎所有有使用C++的实际经验的人都应该至少使用上述一种或两种。几乎所有设计都在理论纯度和实际使用之间做出了一些折衷。有些功能确实可以很好地工作,但前提是必须完全按预期使用,而另一些功能则具有更大的通用性,可能会有些笨拙。简而言之,几乎任何有实际经验的人都应该能够表达一些关于其设计的有意义的意见,这些意见应该告诉您很多有关他们的想法,方式的信息。他们设计代码,他们重视实用主义与理论纯度的程度等等。

1
Jerry Coffin

实际上,我会向该人展示一些来自另一种面向对象的编程语言的代码,最好不在他们所知道的语言列表上。该代码应代表使用该语言完成的简单任务。

这样做的目的不是要确定他们对C++的了解,而是要弄清他们对编程的理解程度。了解了编程背后的基本概念之后,就可以解决问题了。

1
Paul