当准备面试时,您会推荐哪些技巧来审查C++?

14

我有大约2/3年的C++经验,但我的职业生涯大部分时间都在做Java。我即将面试一份C++编程角色,我一直在思考如何最好地刷一下我的C++技能,以确保不会被任何尴尬的问题所困扰。你有什么建议吗?


一个类似的问题已被标记为重复:http://stackoverflow.com/questions/1462025/what-to-study-for-c-interview-closed。您的问题已经被多次解决,可以在SO上搜索“c++面试”,会发现大量有用的信息。 - Manuel
9个回答

9

刚刚开始阅读这本书,真是一本好书。 - Benj
1
作为对这个问题的反馈,我确实得到了这份工作,而这本书是非常有价值的!我从中学到了很多以前不知道的东西,其中几个在面试中也被提到了。感谢您的推荐!我现在已经读完整本书,感觉自己对C++有了更深入的了解。 - Benj

5
如果你有足够的时间,尝试使用C++编写应用程序 - 温习基础知识,这样当被要求展示编码技能时,你就能流畅地编写代码。
我注意到,在以C++为中心的面试中,通常会问关于它如何工作的问题:
- 虚拟方法是如何实现的? - 当你调用new时会发生什么 - 内存是如何分配的? - 结构体和类有什么区别? - 为什么应该将类的析构函数标记为虚函数?
我想学习所有这些内容的好方法是阅读一本好的C++书籍 - 如果你有胃口,可以阅读Stroustrup的书 - 但肯定还有其他同样好的书(页数更少)。
请查看C++风格和技巧FAQ

一种不好的方法是阅读Stroustrup,它太全面了,恐怕我只会推荐它给那些已经对C ++有很强的掌握的人(反常的是)。也许我被语法的重点所吓倒了... - Matthieu M.
你是对的 - 不妨看一下他的常见问题解答 - 它有一个关于C++和如何做的好解释。 - Dror Helper
Stroustrup的《C++程序设计语言》与K&R非常相似,但K&R足够小,可以从中学习。我正在慢慢地阅读他的《使用C++进行编程:原理和实践》,这本书旨在学习,并且到目前为止发现它非常好。另一方面,这是一本厚厚的书,你不太可能在即将到来的面试之前读完它。 - David Thornley
这里有很多非常好的答案,但我认为我会接受这个,因为它似乎对我最有用。 C ++风格和技术FAQ是一个非常好的阅读材料(并且仍在不断更新)。 - Benj
除非应聘者的职位是编译器编写,或者面试官明确指定了特定的编译器并且确实知道答案,否则面试官不应该问虚拟方法如何实现。许多人并不知道。最后一个问题应该是“什么时候”,而不是“为什么”。 - user207421
实际上,作为一名面试开发人员的人,我经常问这个问题。许多 C++ 工作需要开发人员了解代码的性能以及调整性能的能力。询问语言内部细节的另一个好处是,我可以看到开发人员是否有兴趣了解他/她的代码如何工作。 - Dror Helper

5

作为一位面试者,我依赖经验。而作为一位面试官,我的最爱(也是唯一的)C++面试问题是“告诉我拷贝构造函数的相关知识”。这个问题可以打开很多思路,但很少有人意识到这一点——因此可能会导致面试非常短暂。如果面试者能够回答这个问题,我接下来会问“你最喜欢的C++书籍是哪些,为什么?”


哇..我从来没有想到过。虽然我还是个学生,但我记得我们刚开始学习面向对象编程时就已经学过复制构造函数了。难道人们会忘记吗?还是说有那么多不合格的C++程序员在外面游荡?我深知有多少糟糕的PHP程序员存在。 - Andrew Noyes
@Andrew:我猜这就是他没有用“什么是复制构造函数”而是用“告诉我关于”的原因。这可能会引起很多其他问题,除了显而易见的“它长什么样子”。我猜Neil只是把它作为一个起点,而不是一个简单的“你知道什么是复制构造函数吗?是/否”的问题。但是,没错,在每种语言中都有许多不合格的编程人员,C++肯定也有自己公平的份额。 - jalf
@jalf 正确 - 这只是一个起点。只要它正确并且他们能够长时间地交谈,我并不真的在乎他们告诉我什么。 - anon
@andrew 你会感到惊讶的。我已经数不清因为面试者在我问问题时只是呆若木鸡而终止面试的次数了。不过话说回来,我已经有一段时间没有进行面试了,也许情况有所改善,但我还是有些怀疑。 - anon
@Neil:在我们的工作中,Effective C++是必读的。我的同事经常面试,告诉我有很多申请者不知道C++的基础知识,比如为什么析构函数应该是虚拟的。虽然我们不要求使用时髦的Alexandrescu风格的语言特性。 - Thorsten79

5
了解这门语言。你可以试着预测他们会问什么问题,但是C++对不同的人来说意义不同。对于一些人来说,它是一个更加笨拙的Java,所有的问题都将涉及动态内存分配、虚函数和继承。而对于其他人来说,它则与RAII有关,并且避免了内存管理。
有些人认为STL是最重要的问题,有些人可能想深入了解您对语言某些微妙方面的知识(从Neil在他的答案中提到的复制构造函数,到常见的未定义行为或异常安全性)。
这是一门庞大而复杂的语言,人们可能会就其提出许多不同的问题。除非你有一些想法,知道他们可能会关注哪些领域,否则你不太可能通过临时梳理取得太多进展。

确实,“C ++”可能意味着:“耶,我们喜欢模板并在任何地方使用它们,所以准备好让你的大脑变成糊状物”,但它也可能意味着“我们使用类似于C的C ++风格,并忽略了语言的一半功能”。 - RyanWilcox

3
  • 阅读 SO 上的问题,其中包括C++和 OOP 标签。
  • C++ FAQ

如果FAQ能够困住人们过去,那么如果这是目的,它很可能会被用来困住他们 :) - Matthieu M.


0

这要看情况而定:我曾经应聘过一家大型游戏公司的C#测试岗位,90%的问题都是关于图形和微观优化的问题(这是我人生中最愚蠢的测试!)。

然而,如果你应聘的是普通的桌面应用程序开发岗位,你可能会被问及UI相关的问题;如果你应聘的是嵌入式计算岗位,你可能会被问及优化和内存管理方面的问题。

无论如何,我建议你复习一下BOOST库,这是一个很好的库,以及指针知识。


0

我建议您先复习语言的基础知识:确保您记得如何创建类,知道何时通过引用传递和何时通过指针传递,并了解为什么要这样做而不是按值传递。您需要虚方法的原因以及使用C++风格转换与C风格转换的原因,何时需要复制构造函数等等。

我想,回忆一两个关于C++的故事可能会有所帮助:(“伙计,常量正确性很难!”,“所以我曾经和同事/老师就C++的一个细节问题争吵过,我学到了…”)

如果这份工作是面向入门级别的C++工作(考虑到您有限的C++经验,应该是这样),那么我认为这样做是可以的,您将不会被深度投入而没有向导或高级工程师来指导您。


0
写一个函数,计算一个字节中“on”位的数量。
这个问题永远不会过时...
我曾经看到一种很酷的按位方式来完成它,可以在4或5个操作中计算出32位DWORD中所有“on”位的数量!
如果我是现代面试官,我会问:“你对无锁编程了解多少?”

它也永远不会变得相关。在46年中,我只需要做过一次。问题应该是你是否知道去哪里查找,而不是如何去做。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接