这个面试问题对于php开发来说太难了。工作?

时间:2009-05-04 20:00:20

标签: php

我们正在寻找帮助我们提升和提升的人维护我们基于PHP的高质量交易网络应用程序原型。理想情况下,谁可以很好地沟通,并进行前端和后端Web开发(以及智能/完成任务等)。在其他更一般的事情中,我一直在使用这个问题:

鉴于这种:
    $foo = array(1, 3, 7);
写一个函数(在这个白板上)来对数组的值求和。

这对我来说似乎很容易,但是却引起了几个鹿头灯的情况,这总是让我觉得自己像个恶棍。

我已经在这里和那里(包括乔尔和杰夫的)阅读了一些帖子,说候选人如何思考,设计技巧,激情等等比任何具体的技术技能更重要,我同意这一点。此外,我可以看到在白板上编程有点不切实际。 OTOH,这对我来说似乎很基础,我倾向于将它视为前端开发人员之间的精细首过滤器(谁知道他们的方式围绕html,css,以及如何复制和粘贴js函数或二),以及真正能够编码的人。想法?

触摸更多信息:我对各种答案持开放态度:array_sum,for循环,foreach循环。哎呀,如果他们想写一个ArraySum类,那就太过分了,但还不错。使用javascript或其他语言会很好,如果他们对此感觉更舒服的话。即使是有轻微错误的尝试也没关系,但我已经完成了几次冻结,所以我只想自己检查一下。

22 个答案:

答案 0 :(得分:47)

我个人认为这个问题太容易了。如果有人在面试中问我这个问题,我可能会忙着弄清楚这个“伎俩”是什么,因为它很简单。

我认为清除绝对最差的程序员是好的,但要确保你没有一个特别的“正确”答案并拒绝接受其他任何东西。例如,不要只接受“使用array_sum()函数”作为正确的答案,它只是一个测试,看看他们是否知道函数存在。

我之所以提到这一点,是因为我的未婚妻曾经接受过一次编程采访,并被问到她将如何扭转字符串。她提供了几种不同的算法来完成它,面试官告诉她每次算法都错了。她终于放弃了,他(不以为然)告诉她她应该刚刚使用了String.Reverse()函数。

不要那样做。请。

答案 1 :(得分:17)

在我看来,这个问题是完全有效的,并且对候选人说了一些(不是很多,但很重要),这取决于你投入多少时间。告诉她事先并不是一个技巧问题,它确实非常简单,所以她不会花很多时间去思考陷阱并尽量减少鹿的情况。投入你这样做只是作为一种措施,过滤掉申请编程的人,而不是真正了解任何事情,但希望他们无论如何都会被纯粹的运气雇用(如果他们知道如何编码,但只是紧张,那应该采取有点压力)。让他们编码,但如果缺少$或者<?php标签是否存在,则不要关注。

如果她提供array_sumsum_array作为答案几乎无关紧要,特别是如果有问题的语言是php(但如果两个候选人相等,否则... 我可以甚至不记得上次我必须使用这个功能。并且使用自动完成和语法着色(使用预定义的关键字)IDE与愚蠢的文本编辑器在这个事后看来很重要。在这种情况下,请求另一种手工制作的解决方案。

如果我处于提出问题的位置,我不会要求正确的解决方案,我会想办法让她想到如何解决这个问题,有什么陷阱在特殊情况下可能会出现试着找出她对编程的了解,而不是她对php的了解。试着了解情报,解决问题和创造力。即使在快速敲击代码时,altought体验也很重要,但这并不是一个常数。

我提供的解决方案,优点/缺点及其对我的了解......

  • 内置array_sum (非常快且definitley没有错误,但缺乏灵活性):我对传统的php项目有一点经验

  • for / loop constructs (足够好,重新发明轮子。但如果有不同的对象而不是数字,可以使用。专业人士:每个人都会理解它):我可以如果没有预定义的复制和可粘贴解决方案,则解决简单问题

  • array_reduce (提供实现array_reduce,如果面试官想要看到它):对于php程序员来说不常见,所以它似乎我在php沙箱之外有知识和经验

  • 一个 ArraySum-Object (使用ArraySum::add($value)方法保存所有值但缓存总和):我习惯了至少一些OOP-原理

  • function(){return 11; } (免责声明这是一个笑话解决方案,但有效):我有(虽然很粗糙)程序员特定的幽默 - 我个人对工作之外的编程感兴趣的标志 ......一些程序员(但不是黑客)的采访者可能会将此解释为愿意使用脏黑客作为占位符(aehm)如果时间限制太紧

  • 递归解决方案会很好。 我可以解决一些更复杂的算法问题,而且大多数人都知道我对简单树和数据结构的看法

  • 递归分而治之:奖金! 我对算法的了解更多。

尝试尽可能多地从这个问题中获取(如果时间允许的话)。最后你会对编程能力有很多了解,而且经验很多(不一定是特定于PHP)。

我选择这个问题而不是让候选人写出快速排序 - 这是一个关于网络开发世界几乎从不需要的知识的非常具体的问题 - 随时都可以。

声明

这个问题在......时没用。

  • 面试官不是程序员。如果一个小伙子正在做这件事就算了。
  • 面试时的时间限制非常紧张。然后结果几乎是随机的。

另外,你在找谁?如果你需要一个廉价的咕噜编码器,即使像这样的简单问题也应该有用。如果你需要质量和经验,不要浪费太多时间(但无论如何都要这样做)。

答案 2 :(得分:12)

不,这不是太难。如果有人不理解循环的概念或如何遍历数组,那么他们就没有资格成为程序员。我还希望他们知道有一个内置函数(array_sum()),或者至少在哪里寻找它。

您可能需要查看The Five Essential Phone-Screening Questions,尽管您可能需要稍微修改它们以满足您的需求。

答案 3 :(得分:7)

我自己的观点是,您可以要求在白板上编程的玩具问题有限。充其量,这些只是玩具,经常在网上论坛上传播,你的候选人会记住。

大多数PHP开发人员创建了可见的网站 - 您可以看到他们的工作。

对我来说,一个更好的问题是给他一个复杂的自己的生产代码,并让他解释它的作用或如何改进,等等。大部分时间都花在维护上,更好地了解他的代码阅读技巧,而不仅仅是代码编写。

答案 4 :(得分:5)

简答:

编辑:只是为了澄清我认为这根本不是一个难题。无论语言如何。正如其他人发布的那样,即使他们无法使语法正确,至少应该能够以合理的伪代码写出来。

长答案: 我经常会问面试问题,我希望候选人能错过。人们也可以对它们进行分类(难以开放),但我并不是在寻找答案。我期待看到以下内容:

  • 他们试着回答这个问题吗?有些人立即放弃
  • 他们如何解决问题?即使他们沿着错误的道路前进,他们通常会做出好的假设并提出好的问题吗?
  • 他们在压力下保持镇静的程度如何?这个问题的目的很难,因此会有压力。他们是恐慌,保持冷静,退缩,说出来等等吗?
  • 如果我给他们一些提示和指示,他们能找到解决方案吗?或者他们听得多好,他们会迅速吸收新信息吗?

偶尔我会对一位鞭子智能的候选人感到惊讶,并且只是编写一个快速而优雅的解决方案。那些是明确的守护者。但是,我也找到了那些错过最终解决方案的人的好候选人,但他们显然很有思想,合乎逻辑,并且给予足够的时间最终会解决问题。

答案 5 :(得分:4)

不,这不是太难,但如果他们不完全记住语法,可能会引起人们的恐慌(尽管如果你特别要求php dev,那么他们至少应该记住一些语法)。请求伪代码,如果他们仍然无法解决问题那么就会出现问题:)

答案 6 :(得分:3)

这是您在打扰将候选人带到家中之前在手机上询问的基本类型。

我问每个程序员有几个标准的事情:对两个表进行选择以给出第二个表中的列的总和,基于一秒中的值从一个表中删除记录,对象之间的差异和一个字符串作为方法参数,以及一些与html / css相关的问题。

在5个问题中,在我看到它们之前,我可以淘汰90%的候选人。其余部分将归结为意识形态。

答案 7 :(得分:3)

如果您的申请人无法在白板上编写简单的for循环和一些添加内容,那么您绝对不希望他们触及您的代码。即使作为前端开发人员,他们也会一直使用for循环来输出列表,表格行,图像库等。

答案 8 :(得分:3)

我最喜欢的是:

while ($foo && $sum += array_shift($foo)) continue;

答案 9 :(得分:2)

通过提供array()函数的文档可以更好地改进这个问题,因为如果他们不知道它是什么,他们可以很容易地在工作中查找它。

答案 10 :(得分:2)

如果你不能编写代码来对数组求和(用你喜欢的任何语言),我不知道你能写什么。如果他们无法编写代码来执行该问题,您认为有人可以为您的项目做出贡献吗?

答案 11 :(得分:2)

这不是太难。如果他们无法回答这个问题,他们显然无法用湿纸袋编码。我绝对不会聘请这样的人从事任何类型的开发工作。

问题是,您如何才能改善招聘流程,以避免首先采访这些候选人?听起来好像你没有在邀请他们参加聊天之前对你的申请人进行筛选。

答案 12 :(得分:1)

对于有编程经验的人来说这个问题应该很容易,但我猜你可能会让很多设计师通过复制/粘贴代码片段来获取PHP。

也许您需要更新您的职位列表,以使其更加以编程为中心,并避免使用网页设计术语。

答案 13 :(得分:1)

实际上,这个问题似乎很容易......

我认为将它写在白板上会让它变得更加困难。

答案 14 :(得分:1)

不,这并不难。您发现有很多“程序员”无法编程 - 他们可以记住,他们可以复制和粘贴,但他们实际上并不理解他们是什么创造(在大多数情况下,他们似乎完全没有意识到他们缺乏理解)。

当他们被要求从 scratch 写一些 simple - 写只是胶水代码时,这种缺乏理解变得非常明显他们通常只是抓住代码片段然后转移到编译器停止抱怨的复杂内容。

一般而言,您希望避免这些人像瘟疫一样,因为他们会不断产生错误的代码,并且不会理解为什么您或您的客户认为它不起作用。

杰夫几年前写过这篇文章:Why Can't Programmers.. Program?

答案 15 :(得分:1)

(我认为作为PHP的一部分的array_sum($array)方法将完成这项工作。)

真正的问题是微不足道的。虽然在紧张的情况下有足够的空间容错,但是对于任何具有基本编程技能的人来说,总结一个数组应该很容易。

要对这样的问题进行采访,需要花费一些时间。问题不是太难,实际上非常宽松。

答案 16 :(得分:1)

说实话,我想如果一个人申请编程职位,他或她可能会在简历中掌握相关技能。如果职位不需要某种特殊技能,为什么不提出简单的问题解决问题呢?曾经有人问过我的国家有多少披萨店。他们有兴趣检查我是如何解决问题的,并且对我在相关编程语言中的表现有多么不感兴趣。我认为这是一个很好的方法。我认为这是非常错误的吗?

编辑:或者人们伪造他们的简历是很常见的吗?

答案 17 :(得分:0)

这取决于你想要问什么。你在筛选他们回忆语法的能力吗?或者您正在寻找处理数组函数的最佳实践方法?如果这是第一种情况,你的问题很好。

另一方面,如果你试图看一个人实际理解代码的程度,并根据事物的结构知道其含义,问题是好的,但不要求他们逐行编写代码,邀请讨论他们将如何做,以及他们的答案会有什么考虑。为什么不通过方法B呢?

IME,要求死记硬背回复(语法回忆,端口号等)告诉你个人能力的某些方面,有时需要被问到。但更重要的是挖掘他们解决问题的能力。

答案 18 :(得分:0)

我不明白为什么有人会遇到任何问题。 (假设他们是开发人员)是的,在白板上编程是不现实的,但这是一个微不足道的问题,任何开发人员都应该能够解决。

答案 19 :(得分:0)

我想知道这个伎俩是什么时候有一个鹿头大灯!

任何申请编程工作的人都会知道如何将整数一起添加(即使它在循环中也是如此),所以我会跳过它并找到更具挑战性的东西....但不要太混乱! :)

答案 20 :(得分:0)

我最近接受了PHP职位的采访。我被要求在纸上写简单的功能(当然不像你的例子那么简单)。

无论如何,当我完成那个功能(大约6行Python代码)时,采访者在哪里 欣慰。他们告诉我,如果没有IDE,很多人都无法编写任何代码,这个小测试可以过滤掉它们。

至于你的例子 - 它只是简单。特别是如果您接受array_sum()作为答案。

答案 21 :(得分:0)

如果你几年前问过我的话,我不相信那里有这样的“程序员”。但所看到的不可能是看不见的。我亲眼目睹了那些以编程网站为生,并且对编程一无所知的人。他们只是复制并粘贴其他人的代码,直到他们运行它。你不可能相信他们的收入水平与他们的“技能”相比如何(是的,收入水平与技能没有直接关系,但它仍然让我感到厌烦。)

是的,你是理智的,那些人确实存在。而你正在做的是从真正的编码器中过滤“实用主义脚本复制 - 粘贴”(或其他)的有用过滤器之一。当然,除非你想要复制贴纸(他们可以完成一些简单的任务! - 或者更复杂的任务,但有令人难以置信的代码 - )在这种情况下,这样的面试问题对他们来说真的很难。