有人有任何不是FizzBuzz 问题的FizzBuzz 类型的好问题吗?
我正在采访某人,而 FB 相对知名并且不那么难记住,所以我寻找想法的第一站就是我的新瘾 SO。
有人有任何不是FizzBuzz 问题的FizzBuzz 类型的好问题吗?
我正在采访某人,而 FB 相对知名并且不那么难记住,所以我寻找想法的第一站就是我的新瘾 SO。
我见过一小部分用于淘汰候选人的相对简单的编程问题,就像 FizzBuzz 一样。以下是我看到的一些问题,按难度递增的顺序排列:
这些是用于 Java 的,您可以使用标准库,因此其中一些可以非常简单(如 6)。但它们像 FizzBuzz 一样工作。如果您对编程有所了解,您应该能够很快完成。即使您不太了解该语言,您至少应该能够给出如何做某事的想法。
使用这个测试,我以前的一位老板看到了所有事情,从快速完成所有任务的人,到可以做得最快的人,再到半小时后无法回答一个问题的人。
我还应该注意:他让人们在完成这些任务时使用他的电脑。他们被特别指示他们可以使用谷歌等。
也许这不能直接回答您的问题,但我不确定您是否需要提出另一个问题。除了“容易记忆”之外,FizzBuzz 的问题也很简单“容易”,这就是重点。如果您正在采访的人属于 FizzBuzz “众所周知”的人群,那么他们属于 FizzBuzz 类型的问题不会过滤掉的人群。这并不意味着你当场雇用他们,但它确实意味着他们应该能够轻而易举地通过它并进入面试的实质。
换句话说,任何花时间阅读Coding Horror的人都值得进一步采访。让他们很快写出解决方案,简短讨论(例如,你如何测试这个?),然后继续下一个问题。正如文章所说,“令人惊讶的是,有多少候选人无法完成最简单的编程任务。”
来自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 位数字的第一项的索引是什么?
我发现检查一个字符串是否是回文是一个非常简单的字符串,它可以是一个不错的除草机。
我想要一个不涉及模运算符的 FizzBuzz 问题。特别是因为我通常会采访模运算符不经常出现的 Web 开发人员。如果它不是你经常遇到的东西,它就是你需要它几次时查找的东西之一。
(当然,这是一个概念,理想情况下,你应该在某个地方的数学课程中遇到过,但这是一个不同的话题。)
所以,我想出的就是我所谓的,难以想象的,反向三分法。指令是:
编写一个程序,以相反的顺序打印出1 到 200 之间的每个 3 的倍数。
以正常顺序执行它很容易:将循环索引乘以 3,直到达到超过 200 的数字,然后退出。您不必担心要终止多少次迭代,您只需继续前进,直到达到第一个过高的值。
但往回走,你必须知道从哪里开始。有些人可能会直观地意识到 198 (3 * 66) 是 3 的最大倍数,因此将 66 硬编码到循环中。其他人可能会使用数学运算(整数除法或浮点除法 200 和 3 上的 floor())来计算该数字,并在这样做时提供更通用的东西。
从本质上讲,它与 FizzBuzz 是同一种问题(循环遍历值并将它们打印出来,但有一点不同)。这是一个需要解决的问题,它不使用像模运算那样(相对)深奥的东西。
对于可以在 10 秒内完成的超级简单的事情,但会删除那些实际上无法编程的人,试试这个:
问:告诉我(在纸上,但在白板上更好)你将如何交换两个变量的值。
这不是我的主意,而是由一个名叫 Jacob 的人在一篇关于原始 FizzBuzz 问题的博客文章中发表的。
雅各布接着说:
如果他们不从创建第三个变量开始,你几乎可以把那个人写下来。我发现仅凭这个问题我就可以将我的(诚然当时未经筛选的)申请人削减三分之一到一半。
在对原始博客文章的评论之后,还有一个更有趣的讨论,关于在不需要第三个变量(加/减、异或等)的情况下执行此变量交换的方法,当然,如果您使用的语言支持此在单个语句/操作中,它可能不是一个很好的测试。
虽然不是我的想法,但我想在这里发布这个问题,因为这是一个非常简单、简单的问题,即使是最简单的程序也可以(并且应该)在大约 10 秒内回答。它也不需要使用像模运算符这样看起来有些晦涩的运算符,很多人,本来是相当不错的程序员,根本不熟悉(我从自己的经验中知道)。
斐波那契,反转字符串,计算一个字节中设置的位数是其他常见的。 欧拉计划也有大量的增加难度的集合。
要求他们编写一个应用程序来返回给定数字的因数。短时间内做起来容易,做起来难。您可以在很短的时间内了解他们的风格和思考问题的方式。
返回字符串 Y 中第一次出现的字符串 X 的索引
实现 strstr() 需要对语言有基本的了解,同时提供巧妙优化的机会。
如果是 C/C++ 面试,请确保该人知道指针。
一般 - 简单算法([单/双]链表)。询问每种情况下添加的复杂性(开始,结束,优化......)?
(一般)如何通过 3*N/2 次比较从数组(N 大小)中找到最小值和最大值?
C/C++:如何将多个“strcat”优化为一个缓冲区?
查找素数列表是一个相当常见的问题,但它仍然需要一些思考,并且人们可能会给出不同程度的答案。
您还会惊讶于有多少人难以实现 Map/Dictionary 类型的数据结构。
从 C++ FAQ Lite 中查看 6.14:
怎么样:我想使用一个整数来存储多个值。描述它是如何工作的。
如果他们对位掩码和操作一无所知,他们可能无法解决其他问题。
我已经要求我的候选人创建一个程序,以他们选择的任何伪语言计算给定数字的阶乘。这是一个相当容易解决的问题,它很适合自然的后续问题(经常会被问到)关于递归。