交替FizzBuzz问题
任何人有任何不是FizzBuzz问题的FizzBuzztypes的问题?
我正在采访一个人,FB比较有名,不难记,所以我第一次去寻找思路就是我的新瘾。
我曾经看过一小堆相对简单的编程问题,就像FizzBuzz一样,用来淘汰候选人。 以下是我见过的一些问题,顺序越来越难:
- 反转一个string
- 翻转一句(“bob喜欢狗” – >“狗喜欢bob”)
- 在列表中find最小值
- 在列表中find最大值
- 计算余数(给定分子和分母)
- 从列表中返回不同的值,包括重复项(即“1 3 5 3 7 3 1 1 5” – >“1 3 5 7”)
- 返回不同的值和它们的计数(即上面的列表变成“1(3)3(3)5(2)7(1)”)
- 给定一串expression式(只有variables,+和 – )和一组variables/值对(即a = 1,b = 7,c = 3,d = 14)返回expression式的结果(“a + b + c -d“将是-3)。
这些是Java的,你可以使用标准的库,所以其中一些可以非常容易(如6)。 但是他们像FizzBuzz一样工作。 如果你有关于编程的线索,你应该能够做得非常快。 即使你不太了解这门语言,你至less应该能够给出如何做某事的想法。
使用这个testing,我以前的一个老板看到了一切,从一开始就很快的人,到最快速的人,一个半小时后都无法回答的人。
我也应该注意到:他让人们在使用电脑的时候给他们这些任务。 他们特别指示他们可以使用Google等。
也许这并不直接回答你的问题,但我不确定你需要提出另一个问题。 除了“易于记忆”之外,FizzBuzz问题只是简单的“简单”,这就是重点。 如果你正在面试的人是在FizzBuzz“知名”的人群中,那么他们就是那些FizzBuzztypes的问题不会被滤除的人。 这并不意味着你现场聘用他们,但这确实意味着他们应该能够通过它,并接受采访。
换句话说,任何花时间阅读Coding Horror的人都值得进一步采访。 只要让他们很快写出解决scheme,简单地讨论一下(例如,你如何testing这个?),然后继续下一个问题。 正如文章所说,“真正令人惊讶的是,有多less候选人不能完成最简单的编程任务”。
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
第十二届F12是第一个包含三位数字的术语。
Fibonacci序列中第一项包含1000个数字的指数是什么?
我发现检查一个string,如果它是一个回文是一个非常简单的,可以是一个体面的除草。
斐波那契,反转一个string,计数在一个字节中设置的位数是其他常见的。 欧拉工程也收集了越来越多的困难。
我想要一个不涉及模运算符的FizzBuzz问题。 特别是因为我通常会采访那些模数运算符没有经常出现的web开发人员。 如果这不是你经常碰到的东西,那么你只需要几次查看就可以了。
(当然,这是一个概念,理想情况下,你应该在math课程中遇到过,但这是一个不同的话题。)
所以,我想到的就是我所说的,没有想象力的, Threes in Reverse 。 指令是:
编写一个程序,以相反的顺序打印出1到200之间的3的倍数。
按照正常顺序进行操作很简单:将循环索引乘以3,直到达到超过200的数字,然后退出。 你不必担心后面要迭代多less次迭代,直到你达到第一个太高的值。
但是倒退,你必须知道从哪里开始。 有些人可能直观地认识到198(3 * 66)是3的最高倍数,因此硬编码66进入循环。 其他人可以使用math运算(整数除法或浮点除法(200和3))来计算出这个数字,这样做可以提供更通用的方法。
从本质上讲,它与FizzBuzz(通过值循环并打印出来,扭曲)是一样的问题。 这是一个需要解决的问题,就是不能像模操作那样使用任何(相对)深奥的东西。
对于可以在10秒内完成的非常简单的事情,但是要删除那些不能编程的人,试试这个:
问:展示我(在纸上,但在白板上更好)如何交换两个variables的值。
这不是我的想法,而是被一个名为Jacob的人在博客上发表的一篇关于原始FizzBuzz问题的评论。
雅各继续说:
如果他们不是从创build第三个variables开始的,那么你几乎可以写下这个人。 我发现我可以把这个问题的三分之一削减到我的一半(当然,在那个时候还没有公开),只有这个问题。
还有一个有趣的讨论,就是在原来的博客文章中对这个variables进行交换的方法,而不需要第三个variables(加/减,XOR等等),当然,如果你使用的语言支持这个在一个单独的陈述/操作中,这可能不是一个很好的testing。
虽然不是我的想法,但是我想在这里发表,因为它是一个简单而又容易的问题,可以(也应该)在十秒钟内由甚至写最简单的程序的人来回答。 它也不要求使用像modulo运算符那样稍微模糊的运算符,很多人,其他相当优秀的程序员,根本不熟悉(我从我自己的经验中知道)。
请他们写一个应用程序来返回给定数字的因素。 在短时间内很容易做,很难做好。 你可以在很短的时间内看到他们的风格和思维方式。
返回stringY中第一个出现的stringX的索引
实现strstr()需要对语言有基本的了解,同时提供了巧妙优化的机会。
如果是C / C ++面试,确保该人知道指针。
一般 – 简单的algorithm([单/双]链表)。 询问在每种情况下添加的复杂性(在开始,最后,优化…)?
(通用)如何在仅有3 * N / 2的比较中find数组(N大小)中的最小值和最大值?
C / C ++:如何优化多个“strcat”到缓冲区?
怎么样:我想用一个整数来存储多个值。 描述如何工作。
如果他们对口罩和手术没有任何线索,那么他们可能无法解决其他问题。
从C ++ FAQ Lite中检出6.14:
find素数列表是一个相当普遍的问题,但它仍然需要一些思考,人们可能会给出不同程度的答案。
你也会惊讶有多less人努力实现一个地图/字典types的数据结构。
我已经要求我的候选人创build一个程序,以任何伪语言来计算给定数字的阶乘 。 这是一个相当容易解决的问题,它适合于recursion的自然后续问题(通常可以被问到)。