94

有人有任何不是FizzBu​​zz 问题FizzBu​​zz 类型的好问题吗?

我正在采访某人,而 FB 相对知名并且不那么难记住,所以我寻找想法的第一站就是我的新瘾 SO。

4

14 回答 14

116

我见过一小部分用于淘汰候选人的相对简单的编程问题,就像 FizzBu​​zz 一样。以下是我看到的一些问题,按难度递增的顺序排列:

  1. 反转字符串
  2. 反转句子(“鲍勃喜欢狗”->“狗喜欢鲍勃”)
  3. 查找列表中的最小值
  4. 查找列表中的最大值
  5. 计算余数(给定分子和分母)
  6. 从包含重复项的列表中返回不同的值(即“1 3 5 3 7 3 1 1 5”->“1 3 5 7”)
  7. 返回不同的值及其计数(即上面的列表变为“1(3) 3(3) 5(2) 7(1)”)
  8. 给定一串表达式(只有变量、+ 和 -)和一组变量/值对(即 a=1、b=7、c=3、d=14)返回表达式的结果(“a + b+c -d" 将是 -3)。

这些是用于 Java 的,您可以使用标准库,因此其中一些可以非常简单(如 6)。但它们像 FizzBu​​zz 一样工作。如果您对编程有所了解,您应该能够很快完成。即使您不太了解该语言,您至少应该能够给出如何做某事的想法。

使用这个测试,我以前的一位老板看到了所有事情,从快速完成所有任务的人,到可以做得最快的人,再到半小时后无法回答一个问题的人。

我还应该注意:他让人们在完成这些任务时使用他的电脑。他们被特别指示他们可以使用谷歌等。

于 2008-09-22T21:54:42.703 回答
33

也许这不能直接回答您的问题,但我不确定您是否需要提出另一个问题。除了“容易记忆”之外,FizzBu​​zz 的问题也很简单“容易”,这就是重点。如果您正在采访的人属于 FizzBu​​zz “众所周知”的人群,那么他们属于 FizzBu​​zz 类型的问题不会过滤掉的人群。这并不意味着你当场雇用他们,但它确实意味着他们应该能够轻而易举地通过它并进入面试的实质。

换句话说,任何花时间阅读Coding Horror的人都值得进一步采访。让他们很快写出解决方案,简短讨论(例如,你如何测试这个?),然后继续下一个问题。正如文章所说,“令人惊讶的是,有多少候选人无法完成最简单的编程任务。”

于 2008-09-23T02:39:47.307 回答
25

来自Project Euler的任何早期的都可能是好的。

例如:

问题 25

斐波那契数列由递归关系定义:

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 是第一个包含三位数字的项。

斐波那契数列中包含 1000 位数字的第一项的索引是什么?

于 2008-09-22T22:12:55.593 回答
15

我发现检查一个字符串是否是回文是一个非常简单的字符串,它可以是一个不错的除草机。

于 2008-09-22T21:47:54.607 回答
12

我想要一个不涉及模运算符的 FizzBu​​zz 问题。特别是因为我通常会采访模运算符不经常出现的 Web 开发人员。如果它不是你经常遇到的东西,它就是你需要它几次时查找的东西之一。

(当然,这是一个概念,理想情况下,你应该在某个地方的数学课程中遇到过,但这是一个不同的话题。)

所以,我想出的就是我所谓的,难以想象的,反向三分法。指令是:

编写一个程序,以相反的顺序打印出1 到 200 之间的每个 3 的倍数。

以正常顺序执行它很容易:将循环索引乘以 3,直到达到超过 200 的数字,然后退出。您不必担心要终止多少次迭代,您只需继续前进,直到达到第一个过高的值。

但往回走,你必须知道从哪里开始。有些人可能会直观地意识到 198 (3 * 66) 是 3 的最大倍数,因此将 66 硬编码到循环中。其他人可能会使用数学运算(整数除法或浮点除法 200 和 3 上的 floor())来计算该数字,并在这样做时提供更通用的东西。

从本质上讲,它与 FizzBu​​zz 是同一种问题(循环遍历值并将它们打印出来,但有一点不同)。这是一个需要解决的问题,它不使用像模运算那样(相对)深奥的东西。

于 2010-10-25T05:56:05.597 回答
11

对于可以在 10 秒内完成的超级简单的事情,但会删除那些实际上无法编程的人,试试这个:

问:告诉我(在纸上,但在白板上更好)你将如何交换两个变量的值。

这不是我的主意,而是由一个名叫 Jacob 的人在一篇关于原始 FizzBu​​zz 问题的博客文章中发表的。

雅各布接着说:

如果他们不创建第三个变量开始,你几乎可以把那个人写下来。我发现仅凭这个问题我就可以将我的(诚然当时未经筛选的)申请人削减三分之一到一半。

在对原始博客文章的评论之后,还有一个更有趣的讨论,关于在不需要第三个变量(加/减、异或等)的情况下执行此变量交换的方法,当然,如果您使用的语言支持此在单个语句/操作中,它可能不是一个很好的测试。

虽然不是我的想法,但我想在这里发布这个问题,因为这是一个非常简单、简单的问题,即使是最简单的程序也可以(并且应该)在大约 10 秒内回答。它也不需要使用像模运算符这样看起来有些晦涩的运算符,很多人,本来是相当不错的程序员,根本不熟悉(我从自己的经验中知道)。

于 2010-10-30T09:41:04.457 回答
9

斐波那契,反转字符串,计算一个字节中设置的位数是其他常见的。 欧拉计划也有大量的增加难度的集合。

于 2008-09-22T21:42:04.467 回答
5

要求他们编写一个应用程序来返回给定数字的因数。短时间内做起来容易,做起来难。您可以在很短的时间内了解他们的风格和思考问题的方式。

于 2008-09-22T21:42:26.210 回答
2

返回字符串 Y 中第一次出现的字符串 X 的索引

实现 strstr() 需要对语言有基本的了解,同时提供巧妙优化的机会。

于 2008-09-22T21:55:27.710 回答
2

如果是 C/C++ 面试,请确保该人知道指针。

一般 - 简单算法([单/双]链表)。询问每种情况下添加的复杂性(开始,结束,优化......)?

(一般)如何通过 3*N/2 次比较从数组(N 大小)中找到最小值和最大值?

C/C++:如何将多个“strcat”优化为一个缓冲区?

于 2008-09-22T22:02:41.983 回答
1

查找素数列表是一个相当常见的问题,但它仍然需要一些思考,并且人们可能会给出不同程度的答案。

您还会惊讶于有多少人难以实现 Map/Dictionary 类型的数据结构。

于 2008-09-22T21:47:25.810 回答
1

从 C++ FAQ Lite 中查看 6.14:

http://www.parashift.com/c++-faq-lite/big-picture.html

于 2008-09-22T21:48:50.563 回答
0

怎么样:我想使用一个整数来存储多个值。描述它是如何工作的。

如果他们对位掩码和操作一无所知,他们可能无法解决其他问题。

于 2008-09-22T21:45:36.140 回答
0

我已经要求我的候选人创建一个程序,以他们选择的任何伪语言计算给定数字的阶乘。这是一个相当容易解决的问题,它很适合自然的后续问题(经常会被问到)关于递归。

于 2010-06-09T11:42:39.240 回答