scala常见笔试题(囊括了scala的精髓)
scala最近几年很火,主要是因为其在大数据领域的应用。
下面这些面试题,基本上是scala函数式编程的精髓。
Q1 var,val和def三个关键字之间的区别?
Q2 trait(特质)和abstract class(抽象类)的区别?
Q3 object和class的区别?
答:object是类的单例对象,开发人员无需用new关键字实例化。如果对象的名称和类名相同,这个对象就是伴生对象(深入了解请参考问题Q7)
Q4 case class (样本类)是什么?
Q5 Java和Scala 异步计算的区别?
答:这里作者的意思是他大概也不清楚,请阅读这个 really clean and simple answer on StackOverflow,我个人理解还不到位后续补上。
Q6 unapply 和apply方法的区别, 以及各自使用场景?
Q7 伴生对象是什么?
Q8 Scala类型系统中Nil, Null, None, nothing四个类型的区别?
Q9 Unit类型是什么?
答:Unit代表没有任何意义的值类型,类似于java中的void类型,他是anyval的子类型,仅有一个实例对象"( )"
Q10 call-by-value和call-by-name求值策略的区别?
Q11 Option类型的定义和使用场景?
Q12 yield如何工作?
答:yield用于循环迭代中生成新值,yield是comprehensions的一部分,是多个操作(foreach, map, flatMap, filter or withFilter)的composition语法糖。(深入了解请参考问题Q14)
Q13 解释隐示参数的优先权
Q14 comprehension(推导式)的语法糖是什么操作?
答:comprehension(推导式)是若干个操作组成的替代语法。如果不用yield关键字,comprehension(推导式)可以被forech操作替代,或者被map/flatMap,filter代替。
Q15 Streams:当使用Scala Steams时需要考虑什么?Scala的Streams内部使用什么技术?
答:还没有理解,暂时不翻译,后续补上。
Q16 什么是vaule class?
Q17 Option ,Try 和 Either 三者的区别?
Q18 什么是函数柯里化?
Q19 什么是尾递归?
正常递归,每一次递归步骤,需要保存信息到堆栈里面,当递归步骤很多时,导致堆栈溢出。 尾递归就是为了解决上述问题,在尾递归中所有的计算都是在递归之前调用, 编译器可以利用这个属性避免堆栈错误,尾递归的调用可以使信息不插入堆栈,从而优化尾递归。 使用 @tailrec 标签可使编译器强制使用尾递归。
Q20 什么是高阶函数?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。