备用FizzBu​​zz问题

时间:2020-03-06 14:34:03  来源:igfitidea点击:

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

我正在面试某人,而FB是相对知名的,并不难记住,所以我寻找创意的第一站就是我的新瘾。

解决方案

斐波那契(Fibonacci),反向字符串,计数字节中设置的位数是其他常见的位数。
欧拉计画也有大量增加难度的收藏。

要求他们编写一个应用程序以返回给定数字的因数。在短时间内容易做到而又很难做好。我们可以在短时间内看到他们的风格以及他们对问题的思考方式。

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

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

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

我们还会感到惊讶的是,有多少人难以实现Map / Dictionary类型的数据结构。

我发现检查一个字符串是否是回文是一个非常简单的字符串,可以成为一个像样的除草剂。

从C ++ FAQ Lite中检出6.14:

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

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

  • 反转字符串
  • 反转句子("鲍勃喜欢狗"->"狗喜欢鲍勃")
  • 在列表中找到最小值
  • 在列表中找到最大值
  • 计算余数(给定分子和分母)
  • 从包含重复项的列表中返回不同的值(即" 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)。但是它们像FizzBu​​zz一样工作。如果我们对编程有所了解,那么我们应该可以很快完成。即使我们不太了解该语言,我们也应该至少能够在做某事的背后给出想法。

使用此测试,我以前的一位老板看到了很多东西,从快速完成所有任务的人,到可以很快完成所有任务的人,再到一个半小时后无法回答任何一个问题的人。

我还应该指出:他让人们在执行这些任务时使用他的计算机。明确指示他们可以使用Google等。

Return the index of the first
  occurrence of string X within string Y

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

如果是C / C ++面试,请确保此人了解指针。

通用的简单算法([单/双]链表)。问一下在每种情况下添加的复杂性(从一开始,到最后,优化...)?

(常规)如何仅通过3 * N / 2个比较从数组(N个大小)中找到最小值和最大值?

C / C ++:如何优化一个缓冲区的多个" strcat"?

欧拉计划中的任何早期版本都可能是不错的选择。

例如:

Problem 25
  
  The Fibonacci sequence is defined by the recurrence relation:

Fn = Fn?1 + Fn?2, where F1 = 1 and F2 = 1.

  
  Hence the first 12 terms will be:

F1 = 1
F2 = 1
F3 = 2
F4 = 3
F5 = 5
F6 = 8
F7 = 13
F8 = 21
F9 = 34
F10 = 55
F11 = 89
F12 = 144

  
  The 12th term, F12, is the first term to contain three digits.
  
  What is the index of the first term in the Fibonacci sequence to
  contain 1000 digits?

也许这不能直接回答问题,但是我不确定我们是否需要提出另一个问题。除了"容易记住"之外,FizzBu​​zz问题也很简单"容易",这就是重点。如果我们要采访的人属于FizzBu​​zz是"知名"的人群,那么他们属于FizzBu​​zz类型的问题不会被过滤掉的人群。这并不意味着我们就地聘用了他们,而是意味着他们应该能够轻而易举地接受采访。

换句话说,任何花时间阅读《恐怖编码》的人都值得进一步采访。只是让他们迅速地写出解决方案,简短地讨论一下(例如,我们如何测试?),然后继续下一个问题。正如文章所说,"真正令人惊讶的是,有多少候选人没有能力完成最简单的编程任务。"

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

我想要一个不涉及模运算符的FizzBu​​zz问题。尤其是因为我通常会采访那些不经常使用模运算符的Web开发人员。而且,如果这不是我们经常遇到的问题,那么它就是我们需要几次查找这些问题之一。

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

因此,我想出的就是我所谓的"倒数第三"。指令是:

Write a program that prints out, in reverse order, every multiple of 3 between 1 and 200.

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

但是倒退,我们必须知道从哪里开始。有些人可能会直观地意识到198(3 * 66)是3的最高倍,因此,将66硬编码到循环中。其他人可能会使用数学运算(整数除法或者浮点数分别为200和3的floor())来计算该数字,并在此过程中提供更通用的方法。

从本质上讲,这与FizzBu​​zz属于同一类问题(循环遍历值并将其打印出来)。这是一个要解决的问题,它不使用(相对)深于模运算的东西。

对于可以在10秒钟内完成但确实真正超简单的操作,却会删除那些根本无法编程的人,请尝试以下方法:

Ask: show me (on paper, but better on
  a whiteboard) how you would swap the
  values of two variables.

这不是我的主意,而是在一个有关原始FizzBu​​zz问题的博客文章中,一个名叫Jacob的人的评论中发布的。

雅各布接着说:

If they don’t start with creating a
  third variable, you can pretty much
  write that person off. I’ve found that
  I can cut a third to half my
  (admittedly at that point unscreened)
  applicants with that question alone.

在原始博客文章的评论之后,还有进一步的有趣讨论,内容涉及在不需要第三个变量(加/减,xor等)的情况下执行此变量交换的方法,当然,如果我们使用的语言支持此功能,在单个语句/操作中,这可能不是一个很好的测试。

尽管不是我的主意,但我想在此发布此问题,因为这是一个非常优雅,简单的问题,即使编写了最简单的程序,也可以(并且应该)在大约10秒钟内回答。它也不需要使用像模运算符这样的表面上晦涩难懂的运算符,很多人本来就是相当好的程序员,但他们根本不熟悉(我从我自己的经验中知道)。