FizzBuzz 难题
FizzBuzz Conundrum
FizzBuzz 问题是一个非常经典的面试问题,在世界各地的多次面试中都会被问到。用不同的语言有很多方法可以做到这一点。但在大多数一般情况下,它肯定涉及使用 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));
}
我可以看出面试官对这个解决方案印象深刻。
在我看来,尽可能多地与面试官互动,并尝试了解他到底想检查什么。
FizzBuzz 问题是一个非常经典的面试问题,在世界各地的多次面试中都会被问到。用不同的语言有很多方法可以做到这一点。但在大多数一般情况下,它肯定涉及使用 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));
}
我可以看出面试官对这个解决方案印象深刻。 在我看来,尽可能多地与面试官互动,并尝试了解他到底想检查什么。