FizzBu​​zz 难题

FizzBuzz Conundrum

FizzBu​​zz 问题是一个非常经典的面试问题,在世界各地的多次面试中都会被问到。用不同的语言有很多方法可以做到这一点。但在大多数一般情况下,它肯定涉及使用 3 或 4 if/else 如果 loops.There 是奇特的方法,如果我们进入 Java 8 区域等等。但我的主要问题是:

这是一个数学公式:

如果循环计数 = 100

%15计算=100

%3 计算 = 100 - 6 = 94

%5 计算 = 100 - 33 = 67

总模数计算=261(100+94+67)

What is the logic behind this famous question?

真正淘汰那些不知道自己在做什么的人。

What are the interviewers looking for in the candidate when they ask this question?

对我来说最重要的是它是一个对话的开场白。例如,您可以要求人们解释他们的代码,为什么他们选择 x % 15 == 0 而不是 x % 3 == 0 && x % 5 == 0

Do we know how to code basic stuff?

是的,条件;循环;运营商

Do they want to see our style of coding?

是的,这可能是关于优化或只是谈话。面试过程是关于了解你面前的人。 (这是双向的)。

Are they expecting optimization in this question?

这取决于,我认为可以结合使用 if elseif 和不同的循环方式。通常,每个面试官都应该对问题发表自己的看法。例如,在 C# 中,我会将我的测试设置为包含一个内存管理元素,并具有 yield return 期望。

您可能想阅读 Jeff Atwood 的 post on the topic

最近在面试中被问到这个问题,我没有花太多时间思考,只是写了一个简单的 java 方法,它接受整数和 returns 适当的 Fizz Buzz 词,我问面试官的问题,程序中预期的变化是什么,他说另一个条件,如数字可被 7 整除打印 'SEVEN' 所以我重构了一下,最终答案如下

 public static void main(String[] args) {

    Function<Integer,String> fizz = e->e%3==0?"FIZZ":"";
    Function<Integer,String> Buzz = e->e%5==0?"BUZZ":"";
    Function<Integer,String> fizzBuzz = e->e%3==0 && e% 5==0?"FIZZBUZZ":"";
    Function<Integer,String> seven = e->e%7==0?"SEVEN":"";
    List<Function<Integer, String>> predicateList = List.of(fizz,Buzz,fizzBuzz,seven);
    IntStream.range(0,100).boxed()
                        .map(e->applyFizzBuzzFunc(e,predicateList))
                        .forEach(System.out::println);
}

/**
 * Executes the list in the given order 
 */
private static String applyFizzBuzzFunc(Integer e, List<Function<Integer, String>> predicateList) {
    return predicateList.stream()
                        .map(f -> f.apply(e))
                        .filter(s -> !"".equals(s))
                        .findFirst()
                        .orElse(String.valueOf(e));
}

我可以看出面试官对这个解决方案印象深刻。 在我看来,尽可能多地与面试官互动,并尝试了解他到底想检查什么。