很想了解人们的想法。我经常进行采访,在我的职业生涯中已经有足够多的时间来反思这些采访,并且我注意到了各种各样的问题。我专门做了这个 C++,但值得注意的是,有人通过电话问我算法复杂性问题,我什至不是指哈希查找与二叉树的复杂性,我的意思更像是分析问题,例如“想象有 4 只大黄蜂,每只都嗡嗡作响。”
现在我个人更喜欢让电话屏幕更具体一些,并将抽象问题留给白板。那么,在进行 C++ 电话面试时,尤其是对于高级开发人员来说,您会涵盖哪些主题?
我知道还有另一个与此类似的帖子,但坦率地说,它似乎完全忽略了这一点:这是关于电话屏幕,而不是面对面的采访。另外,这是更具体的 C++。
我会问有关资源/内存管理的问题,因为它是 C++ 中的一个重要主题,并且不需要具体代码。只需勾画一个简单的假设场景,并询问他们如何确保即使面对错误/异常也能释放一些重要资源。假设他们正在开发一个网络应用程序,他们如何确保我们正确关闭套接字?当然,正确的答案是将其包装在 RAII 对象中,但不要直接问他们(很容易在 google 中搜索“RAII”,而上面的问题“如何确保资源得到正确释放”实际上向您展示了是否或者他们不知道适当的技术。如果他们回答“将所有内容包装在 try/catch 中”,他们可能会遇到问题。这与有关堆和堆栈之间差异的问题很好地联系在一起。
您也许也能提出一些关于异常安全的简单问题,这不需要任何实际代码。一般来说,我认为讨论所有各种 C++ 习惯用法可能是个好主意,因为其中许多习惯用法不需要太多实际代码,但仍然是重要的特定于语言的概念。
看看他们是否了解智能指针(最好还是给他们一个需要智能指针的情况,看看他们如何解决问题),也许还有模板/元程序(在后一种情况下,可能只是找出它们是否'意识到这是可能的,而不是要求他们在手机上编写实际的元程序)
您可能还想询问一些未定义行为的常见区域(执行后 a 和 b 的值是多少)a = b++ + b++?
?),或者分配一个包含 10 个元素的数组,并将 10 或 11 添加到数组指针,并询问每种情况的结果是什么(+=10 是合法的,给你一个尾指针,+=11未定义)。或者给他们一个需要复制大量对象的场景,并询问他们如何做到这一点(一次复制每个元素的简单 for 循环,memcpy 或 std::copy 是明显的答案。请注意 memcpy 的注意事项,这对于非 POD 对象来说不安全)
或者询问他们的总体编码风格。他们对迭代器有何看法?他们更喜欢普通的旧式 for 循环吗?他们知道如何使用 std::for_each 或 std::transform 吗?
Edit:看来a = b++ + b++
(顺便说一句,答案是未定义的行为)建议特别产生了很多评论。也许人们对它的解读太多了。正如OP所说,他更愿意问concrete(不是抽象的,并且易于通过电话解释/回答/讨论)问题,这会揭示一些有关受访者的 C++ 技能的信息,这是一个简单的(是的,也许是挑剔的)示例。其背后的原因是:1)它具有直观的含义,这是错误的;2)在意识到这一点之前,您必须具有一定水平的 C++ 经验。当然,3),通过电话询问很简短且容易。它不需要任何人写下代码。不,它不会透露候选人是否是“伟大的程序员”,但据我理解这个问题,这也不是目标。如果有人弄错了,那根本没有多大意义,但如果他们做对了,你就可以相当肯定他们了解一点 C++。但如果您再次阅读我的答案,您会发现这只是我认为应该代表的一类问题的一个简单示例。 C++ 充满了未定义的行为,即使代码看起来完全无害且直观。要求候选人认识some这个实例可能很有用,无论是上面的“在同一表达式中修改同一变量两次”示例,还是其他示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)