任何人有任何好的FizzBuzz类型的问题不在该 FizzBuzz问题?
我正在采访某人,而FB相对众所周知而且难以记忆,所以我寻找创意的第一站就是我的新成瘾.
我已经看到了一小部分用于清除候选人的相对简单的编程问题,就像FizzBuzz一样.以下是我看到的一些问题,为了增加难度:
反转一个字符串
翻译句子("鲍勃喜欢狗" - >"狗喜欢鲍勃")
在列表中找到最小值
在列表中查找最大值
计算余数(给出分子和分母)
从包含重复的列表中返回不同的值(即"1 3 5 3 7 3 1 1 5" - >"1 3 5 7")
返回不同的值及其计数(即上面的列表变为"1(3)3(3)5(2)7(1)")
给定一串表达式(仅变量,+和 - )和一组变量/值对(即a = 1,b = 7,c = 3,d = 14)返回表达式的结果("a + b + c -d"将是-3).
这些是针对Java的,您可以使用标准库,因此其中一些非常简单(如6).但他们像FizzBuzz一样工作.如果你有关于编程的线索,你应该能够很快地做到最好.即使你不熟悉这门语言,你至少应该能够提出如何做某事的想法.
使用这个测试,我之前的一位老板看到的一切都是从那些能够快速完成这一切的人,到能够做得最快的人,到一个半小时后无法接听一个人的人.
我还应该注意:他让人们在完成这些任务时使用他的电脑.他们被特别指示他们可以使用谷歌等.
也许这不能直接回答你的问题,但我不确定你是否需要提出另一个问题.除了"易于记忆"之外,FizzBuzz问题只是简单的"简单",这就是重点.如果您正在面试的人属于FizzBuzz"众所周知"的人群,那么他们就属于FizzBuzz类型问题无法过滤掉的人群.这并不意味着你当场雇用他们,但这确实意味着他们应该能够轻松地通过它并接受采访的内容.
换句话说,任何花时间阅读Coding Horror的人都值得进一步采访.让他们快速写出解决方案,简要讨论一下(例如,你如何测试?),然后继续讨论下一个问题.正如文章所说,"真正令人惊讶的是,有多少候选人无法完成最简单的编程任务."
Project Euler的任何早期版本都可能是好的.
例如:
问题25
Fibonacci序列由递归关系定义:
Fn = Fn?1 + Fn?2, where F1 = 1 and F2 = 1.因此,前12个学期将是:
F1 = 1 F2 = 1 F3 = 2 F4 = 3 F5 = 5 F6 = 8 F7 = 13 F8 = 21 F9 = 34 F10 = 55 F11 = 89 F12 = 144第12个学期F12是第一个包含三位数的术语.
Fibonacci序列中包含1000位数的第一项的索引是多少?
我发现检查一个字符串,如果它是一个回文是一个非常简单的,可以是一个体面的除草器.
我想要一个不涉及模运算符的FizzBuzz问题.特别是因为我经常采访网络开发人员,模数运算符通常不会出现.如果它不是你经常遇到的东西,那么你需要它几次就能找到它.
(当然,这是一个概念,理想情况下,你应该在沿途的某个数学课程中遇到过,但这是一个不同的主题.)
所以,我想出的就是我所说的,缺乏想象力的,反向的三分球.说明是:
编写一个程序,以相反的顺序打印输出1到200之间的3的每个倍数.
按正常顺序执行它很容易:将循环索引乘以3,直到达到超过200的数字,然后退出.您不必担心在之后终止多少次迭代,您只需继续操作直到达到第一个太高的值.
但是倒退,你必须知道从哪里开始.有些人可能直观地认识到198(3*66)是3的最高倍数,因此,硬编码66进入循环.其他人可能会使用数学运算(在200和3的浮点除法上的整数除法或floor())来计算出这个数字,并且这样做可以提供更普遍适用的东西.
从本质上讲,它与FizzBuzz的问题相同(循环显示值并将其打印出来,带有扭曲).这个是一个需要解决的问题,它不像模数操作那样使用任何(相对)深奥的东西.
For something really super-simple that can be done in 10 seconds, but would remove those people who literally can't program anything, try this one:
Ask: show me (on paper, but better on a whiteboard) how you would swap the values of two variables.
这不是我的想法,但是在一篇名为Jacob的人的评论中发布了一篇关于原始FizzBuzz问题的评论.
雅各继续说:
如果他们不是从创建第三个变量开始,那么你几乎可以写下这个人.我发现只用那个问题,我可以减少三分之一到一半(当然是在未经筛查的那些未经筛选的)申请人.
关于在不需要第三个变量(添加/减去,xor等)的情况下执行此变量交换的原始博客文章的评论之后还有一个有趣的讨论,当然,如果你使用支持这个的语言在一个声明/操作中,它可能不是一个好的测试.
虽然不是我的想法,但我想在这里发布,因为它是一个优雅简单,简单易懂的问题,可以(并且应该)在10秒钟内由一个写过最简单程序的人回答.它也不需要使用像modulo运算符那样模糊不清的运算符,很多人都是相当不错的程序员,根本不熟悉(根据我自己的经验我知道).
Fibonacci,反向字符串,计数字节中设置的位数是其他常见的. 项目欧拉也有越来越多的难度.