Scala面试题

2020-04-12  本文已影响0人  你值得拥有更好的12138

scala语言的特点:

Scala中的String是可变的还是不可变的

什么是闭包

函数捕获自由变量的,闭包=代码+非局部变量

简述隐式转换的作用

当我们引入第三方包,但是不能修改代码时。可以使用隐式转换增加新的功能,类似与Java的装饰器模式,必须保证当前环境下只有能被识别

什么是柯里化

接受一个多参数的函数转换为多个单参数的函数列表

作用:

Scala中特质的调用链

从右到左,从下到上,如果中间有没有调用super的,调用链就停止在这里

Scala的协变,逆变,非变

首先定义的一个Trait Q[T]{}

Object的作用

trait(特质)和abstract class(抽象类)的区别?

trait 使用 extends with实现多继承

trait中可以定义实例方法

trait可以有构造函数,但只能是无参数的

trait可以直接使用with混入对象

trait可以继承class

case class (样本类)是什么?

一种语法糖

默认实现是伴生对象

默认实现了apply,unapply,tostring,equals,copy,hashcode

可以使用==比较内容

由于实现了apply方法,可以不使用new 关键字实例化

样本类中的参数默认是val关键字,不可以修改

伴生对象是什么?

它由在同一个源文件中同名的class,object组成。

object可以访问class中的私有变量

不能private[this]变量

可以实现JAVA中的静态变量的效果

类也可以访问伴生对象中的私有方法

Scala类型系统中Nil, Null, None, Nothing四个类型的区别?

Nil表示空类型的List ,等同与List[Nothing]

Null是AnyRef的子类,由唯一的实例对象null

Nothing是所有类型的子类,没有实例对象

None是Option的子类

尾递归

正常递归,每一次递归步骤,需要保存信息到堆栈里面,当递归步骤很多时,导致堆栈溢出。 尾递归就是为了解决上述问题,在尾递归中所有的计算都是在递归之前调用, 编译器可以利用这个属性避免堆栈错误,尾递归的调用可以使信息不插入栈,从而优化尾递归。 使用 @tailrec 标签可使编译器强制使用尾递归。

高阶函数

高阶函数指能接受或者返回其他函数的函数,scala中的filter map flatMap函数都能接受其他函数作为参数

上一篇 下一篇

猜你喜欢

热点阅读