在技​​术面试中使用内置的语言功能是否不好?

这取决于内置库对问题本质的重视程度。

通常,您不应该使用内置库来代替面试问题的实质。 因此,当我要求您对数组进行排序时,编写array.sort()将使问题无法解决(即查看代码的美观程度)。

但是,如果您的解决方案仅依赖于要排序的数组,但实际上并不是问题所在,那么请使用内置库。

也就是说,这是一个不相关的问题。 如果您以正确的方式处理问题,那么这实际上不是问题。

首先,您应该在开始编码之前与面试官讨论这个问题。 您认为自己有解决问题的方法后,就不应该立即编写代码。 这就是要提到的一点,即有一个内置的库可以处理该问题。

其次,在编写代码时,应该自上而下而不是自下而上。 从最高级别的功能开始,然后按需填写详细信息。 这样可以确保您首先完成最重要的算法部分。 如果您以这种方式进行操作,那么是否可以使用内置库函数并不重要。 使用它们-并根据需要构建自己的功能。 您可以在有空的时候填写详细信息。

在面试中,一半是关于您和面试官之间的化学反应。

当您按照您所说的去做时,面试官可能会感到以下几点:
1.您在嘲笑面试问题,因此间接在在嘲笑我和我工作的公司。
2.你自大/幼稚。 您可能已经知道应该执行的操作,但是您仍然没有执行该操作。
3.你不是一个很好奇的人。 您没有好奇心来学习诸如此类的基本工作原理,甚至没有去了解面试的工作原理。

现在,如果您有经验丰富的面试官,他们将摆脱这些感觉,礼貌地推动您实施该算法(例如“您说对了!您能告诉我反向操作的方式吗?您以前看过吗?是的?太棒了;请解释。否?没关系!让我们现在尝试实现它!”)。

如果您没有经验丰富的面试官,那么对与错都不重要。 他们将在精神上已经拒绝了您。 至少,您的分数会落在他们的眼中。

您可能要问的更深层次的问题,为什么他们希望您对这些问题更深入? 原因如下:

1.跳水跳水的欲望强烈表明您对所选择的职业感兴趣。 您头脑中的黑匣子越少,您在该领域成功的可能性就越大。

2.如果他们只是想要一个可以将函数和API拼凑在一起的人,那么他们会雇一双便宜的C ++语言(有很多方法可以做到这一点)。 他们不是那样的人。 他们希望这双手能带出一个头脑。 渴望深入了解以更好地理解事物的思维。

3.如果这是一家值得工作的公司,那么他们只是在招募许多合格的相同职位申请者。 因此,他们必须找到某种方法将候选人过滤掉。 如果您停止编写内置函数,则可以,但是我敢打赌,他们会让其他人不会质疑他们的判断,写下对他们的期望并获得这份工作。

如果您在黑板上写了“ std :: reverse()”,您将被视为嘲笑面试问题,这在面试中是一种冒险的做法。

最好的回答方法是说“好吧,标准库中有反向函数,但是我假设您正在寻找一种算法,是吗?”

这样一来,您就可以在不感到讨厌的情况下炫耀您对该功能的了解。 然后,面试官将要求写出算法,或者说“您认为反向函数如何工作以及需要多少内存?”

通常,内置函数通常会破坏面试的目的,但是同时,面试的目的是展示解决编程问题的能力,其中包括专注于问题的有趣部分以及使用内置函数。在其他部分的功能。

“问”。

让我澄清一下,问问面试官是否允许您将库函数用于给定任务,因为面试官可能已经将问题交给了您,以检查您的逻辑推理,算法技能。
如果您使用库函数,那么它将无法实现测试您的能力的主要目标。

另一方面,不建议重新发明轮子,并且通常不赞成这样做。 在这种情况下,访问员正在检查您对库功能的了解。

谈到您的问题,因为他澄清了“以最少的空间来做”,这意味着您不应该使用库函数。

这实际上取决于您如何交付它。 您可以利用这个机会展示您的算法思维以及更实用的技能,例如现有工具的知识。

例如,您可以说类似“嗯,当然,具有恒定空间复杂度的最简单解决方案将是使用标准反向函数。但是,我猜测您可能希望我制定出它使用的算法。”

这表明您可以理解面试官的要求,而不会感到轻描淡写或笨拙,扩展了某些计算机科学领域的知识(他们肯定会寻找这些知识),表明了对现有工具的意识以及对重新发明轮子的偏爱。

在过去的6周中,我一直是一名全职求职者,并且至少至少有六次看到了这个确切的问题。 这种方法似乎总是产生积极的影响。

这取决于面试官。

如果您正在接受我的采访,那您将大获全胜。 如果您编写了自己的反向算法,那么您将失败。

我不在乎您是否知道如何解决已经解决的问题。 我确实在乎您知道问题已解决,在哪里可以找到实现该解决方案的库/工具以及如何使用该库/工具来解决尚未解决的问题。

当我雇用一名程序员时,我不是在寻找可以重新发明轮子的人,而是在寻找可以从架子上捡起零件并将它们粘合在一起以完成需要完成的工作的人。

这个Quora问题是在采访中问采访者的一个完全合理的问题。 “好吧,如果我需要在正在编写的程序中反转字符串,则可以使用std :: reverse()。 这表明您作为一名程序员做出了合理的选择(并且您至少知道一种语言,哪一种语言应该没什么大不了),并且您正在接受。认真采访。 如果面试官同意他们的要求,那意味着您已经迅速同意了一个精确的规范,该规范可以证明技术交流能力。

(此答案的原理可能会推广到其他面试情况,甚至可能会推广到一般生活。传达您的担忧。)

在采访中我有一个像我这样的问题。 这是在红宝石是最常用的语言的工作中,面试官问我如何编写一个函数以返回数组中第二大元素。 我说:“好吧,如果数组的大小相对较小,而效率并不是很重要,我会写类似的东西:”

def second_biggest数组
array.sort [-2]
结束

他轻笑着,问我如果效率很重要我该怎么写。 因此,我写出了一种方法,该方法可以在线性时间内以所需的恒定空间解决问题。

就个人而言,我认为这是正确的答案,因为在效率不是很关键的情况下,拥有真正简单且不太可能包含错误的代码真是太好了。 但是我也能够证明我也可以编写一种节省时间/空间的算法,并且了解两者之间的权衡。

是的,那次面试后我得到了工作机会。

处理此问题的方法是说“我通常会使用std :: reverse,但我想您会希望我自己实现它”。 与我一起,您将获得一点边际奖励积分,因为他们承认问题实际上并不需要聪明。 但是,如果您不立即回答这个问题,那么您将被视为傲慢(“这个问题在我下面,我不需要知道这么简单的事情”)或完全不知道您认为这实际上是一个可以接受的答案。

实际答案是,这完全取决于面试官。

给定示例性问题,由于“使用尽可能少的内存”部分,我很可能会编写算法。 我知道STL通常是最优化的,但它会询问他们是否希望我了解如何做。 如果问题只是简单地反转一个字符串,那么我将使用STL。

几年前,我在某个地方进行了面试,并遇到了这样的问题(我不记得确切的问题),我转过身来用STL写下答案,面试的结果是正确的,但事实并非如此。我想要的是,她问我是否可以不使用STL而做到这一点,我只是转过头来,几分钟后就编写了正确的算法。 我通过了BTW的那轮采访。

如果我正在对您进行面试,而您想出了这点,那么您会获得额外的荣誉,然后被要求在不使用STL的情况下完成答案。

对于特定的示例,我不建议使用内置功能。 通常,我在准备面试和考试时遵循的规则要低一级 。 这意味着我使用了解决部分问题的所有语言功能。 例如,如果要求我对某些内容进行排序,我会写出用于快速排序的函数,另一方面,如果有人问我要对哪个步骤进行排序,则可以使用标准库排序。

许多人会说,您有可能被冒充面试官或问题的“嘲笑”,或者是您“缺少问题的本质”。

事实的事实是,如果您可以根据问题来捍卫std :: reverse()的属性(例如,它是否在O(n)内存中运行),则它是一个非常有效的答案。

如果面试官不喜欢正确的答案,那么他或她肯定会学会在后续问题中更好地传达要求和意图。

我本人经历了很多次(不同的问题,相同类型的采访者假设)。 根据面试的进行方式,我偶尔会使用面试过程本身来确定我未来的同事,老板和公司文化(他们在沟通方面都很不好吗?)有时,管理层和员工在沟通过程中无法沟通面试过程对我来说很重要。

听一个问题 –“最少的记忆”

我回答“ std :: reverse()”时,下一个问题将是“您知道需要多少内存吗?”,这是您将不知道的,并且您看起来很傻。 因此,请避免使用该功能并以艰苦的方式完成工作,这就是他们想要您做的。 但是最后说…

“您知道,这些天编译器变得如此出色,我想知道std :: reverse()会不会效率一样甚至更好。”

在Google的采访中,我被要求编写一些代码。

对于问题的第一部分,我说:“我敢打赌,有一个功能可以做到这一点。 我可以使用它吗?”

面试官说“不。”

我仍然有报价。