Logic 泡沫之谜
FizzBuzz问题是一个非常经典的面试问题,在世界各地的多次面试中都会被问到。用不同的语言有很多方法。但在大多数情况下,它肯定涉及到使用3或4个if/else if循环。如果我们进入Java8领域,有很多奇妙的方法可以做到这一点。但我的主要问题是:Logic 泡沫之谜,logic,fizzbuzz,Logic,Fizzbuzz,FizzBuzz问题是一个非常经典的面试问题,在世界各地的多次面试中都会被问到。用不同的语言有很多方法。但在大多数情况下,它肯定涉及到使用3或4个if/else if循环。如果我们进入Java8领域,有很多奇妙的方法可以做到这一点。但我的主要问题是: 这个著名问题背后的逻辑是什么 当面试官问这个问题时,他们想从应聘者身上寻找什么 我们知道如何编写基本的代码吗 他们想看看我们的编码风格吗 他们是否期望在这个问题上得到优化?很难尝试并优化代码 这里有一个数学观点: 如果循环计数=100 %15计
- 这个著名问题背后的逻辑是什么
- 当面试官问这个问题时,他们想从应聘者身上寻找什么
- 我们知道如何编写基本的代码吗
- 他们想看看我们的编码风格吗李>
- 他们是否期望在这个问题上得到优化?很难尝试并优化代码
x%15==0
而不是x%3==0&&x%5==0
我们知道如何编写基本的代码吗
是的,条件;环;操作员
他们想看看我们的编码风格吗
是的,这可能是关于优化或只是对话。面试的过程是了解你面前的人。(这是双向的)
他们是否期望在这个问题上得到优化
这要看情况而定,我认为有两种方法可以组合使用:ifelseif
和不同的循环方式。通常,每个面试官都应该对这个问题有自己的见解。例如,在C#中,我会设置我的测试,以包含一个关于内存管理的元素,该元素具有收益率
期望值
你可能想读Jeff Atwood的。最近我在采访中被问到这个问题,我没有花太多时间思考,只是写了一个简单的java方法,它接受整数并返回适当的嘶嘶声,我向采访者问了一个问题,程序中的预期变化是什么,他说了另一个条件,比如数字可以被7整除,打印“7”,所以我进行了一些重构,最后的答案如下
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));
}
publicstaticvoidmain(字符串[]args){
函数fizz=e->e%3==0?“fizz”:“”;
函数Buzz=e->e%5==0?“Buzz”:“;
函数fizzBuzz=e->e%3==0&&e%5==0?“fizzBuzz”:”;
函数七=e->e%7==0?“七”:“;
List predicateList=List.of(嘶嘶声,嗡嗡声,嘶嘶声,七声);
IntStream.range(0100).boxed()
.map(e->applyFizzBuzzFunc(e,谓词列表))
.forEach(System.out::println);
}
/**
*按给定顺序执行列表
*/
私有静态字符串applyFizzBuzzFunc(整数e,列表谓词列表){
返回谓词列表.stream()
.map(f->f.apply(e))
.filter(s->!“”.equals)
.findFirst()
.orElse(String.valueOf(e));
}
我可以看出面试官对这个解决方案印象深刻。
在我看来,尽量与面试官互动,试着理解他到底想检查什么。谢谢你的回答。我想再问一次,因为你提出了关于%15的观点,使用“%(5*3)”或“%3&&%5”来代替前者是正确的做法吗?@shd293它们只是不同,在一次采访中,我只想问你为什么选择一种方式而不是另一种方式。没有一个正确或错误的答案。您可以说,
%15
更有效,因为您只需检查一个条件。这是一个很酷的方法,感谢您提供的解决方案:在java 8中,我了解到它可以在4-5行中完成。