0%

Scala面试题

本文主要包括:

  • Scala面试题总结

1. 方法和函数的区别?
Scala 方法与函数,二者在语义上的区别很小,Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。
Scala 中使用val语句可以定义函数,def语句定义方法。

2. Scala类型系统中Nil, Null, None, Nothing四个类型的区别??
Null是一个trait(特质),是所以引用类型AnyRef的一个子类型,null是Null唯一的实例。
Nothing也是一个trait(特质),是所有类型Any(包括值类型和引用类型)的子类型,它不在有子类型,它也没有实例,实际上为了一个方法抛出异常,通常会设置一个默认返回类型。
Nil代表一个List空类型,等同List[Nothing]
None是Option monad的空标识(深入了解请参考问题Q11)

3. 什么是高阶函数?
高阶函数指能接受或者返回其他函数的函数,scala中的filter map flatMap函数都能接受其他函数作为参数。

4. 什么是隐式转换?
通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码
隐式转换必须满足无歧义规则,在声明隐式参数的类型是最好使用特别的或自定义的数据类型,不要使用Int,String这些常用类型,避免碰巧匹配
调用方法:

  1. 将方法或变量标记为implicit
  2. 将方法的参数列表标记为implicit
  3. 将类标记为implicit

Scala支持3种形式的隐式转换:
隐式值:用于给方法提供参数
隐式视图:用于类型间转换或使针对某类型的方法能调用成功
隐式类:使用implicit声明类

5. scala的模式匹配?
有点类似于Java语言的 switch,但其实还是有很大的不同的

  • java 的 switch 仅仅会做一些基本类型的匹配,然后执行一些动作,并且是没有返回值的。
  • scala 的模式匹配除了可以匹配数值,同时它还能匹配类型,同时它还是有返回值的