scala面试八股文-常见问题

1、scala语⾔有什么特点?什么是函数式编程?有什么优点?

1、scala语⾔集成⾯向对象和函数式编程
2、函数式编程是⼀种典范,将电脑的运算视作是函数的运算。
3、与过程化编程相⽐,函数式编程⾥的函数计算可以随时调⽤。
4、函数式编程中,函数是⼀等功明。

2、scala中的闭包

1、定义:你可以在任何作⽤域内定义函数:包,类甚⾄是另⼀个函数或⽅法。在函数体内,可以访问到相应作⽤域内地任
何变量。(重点)函数可以在变量不再处于作⽤域内时被调⽤。
   例如:

1 def mulBy(factor:Double) = (x:Double) => factor * x
2 //开始调⽤
3 val tripe = mulBy(3)
4 val half = mulBy(0.5)
5 println(tripe(14) + " " + half(14))

这就是⼀个闭包

3、scala中的柯⾥化

定义:柯⾥化指的是将原来接受两个参数的函数变成新的接受⼀个参数的函数的过程。新的函数返回⼀个以原有的第⼆
个参数作为参数的函数
   例如:

1 def mul(x:Int,y:Int) = x * y //该函数接受两个参数
2 def mulOneAtTime(x:Int) = (y:Int) => x * y //该函数接受⼀个参数⽣成另外⼀个接受单个参数的函数
3 这样的话,如果需要计算两个数的乘积的话只需要调⽤:
4 mulOneAtTime(5)(4)

这就是函数的柯⾥化

4、scala中的模式匹配

scala的模式匹配包括了⼀系列的备选项,每个替代项以关键字⼤⼩写为单位,每个替代⽅案包括⼀个模式或多个表达
式,如果匹配将会进⾏计算,箭头符号=>将模式与表达式分离
    例如:

1 obj match{
   
2 case 1 => "one"
3 case 2 => "two"
4 case 3 => "three"
5 case _ => default
6 }

5、case class和class的区别

case class:
      是⼀个样本类,样本类是⼀种不可变切可分解类的语法糖,也就是说在构建的时候会⾃动⽣成⼀些语法糖,具有
以下⼏个特点:
      1、⾃动添加与类名⼀致的构造函数(也就是半⽣对象,通过apply⽅法实现),也就是说在构造对象的时候不需要
使⽤new关键字
      2、样本类中的参数默认是val关键字,不可以修改
      3、默认实现了toString,equals,hashcode,copy⽅法
      4、样本类可以通过==来⽐较两个对象,不在构造⽅法内地⼆属性不会⽤在⽐较上
    class:
      class是⼀个类
      1、class在构造对象的时候需要使⽤new关键字才可以。

6、谈谈scala中的隐式转换

所谓的隐式转换函数(implicit conversion function)指的事那种以implicit关键字申明的带有单个参数的函数,这样
的函数会被⾃动的应⽤,将值从⼀种类型转换为另⼀种类型
    ⽐如:需要把整数n转换成分数n/1
       implicit def int2Fraction(n:Int) = Fraction(n,1)
       这样就可以做如下表达式求职:
       val result = 3 * Fraction(4,5)
    此时,隐⼠转换函数将整数3转换成⼀个Fraction对象,这个对象接着⼜被乘以Fraction(4,5)

7、scala中的伴⽣类和伴⽣对象是怎么⼀回事

  1. 在scala中,单例对象与类同名时,该对象被称为该类的伴⽣对象,该类被称为该对象的伴⽣类。
  2. 伴⽣类和伴⽣对象要处在同⼀个源⽂件中
  3. 伴⽣对象和伴⽣类可以互相访问其私有成员
  4. 不与伴⽣类同名的对象称之为孤⽴对象
1 代码示例:
2 //定义⼀个类
3 class MyClass(number: Int, text: String) {
   
4 private val classSecret = 42
5 def x = MyClass.objectSecret + "?" // MyClass.objectSecret->在类中可以访问伴⽣对象的⽅法,在类的外部则⽆法访问
6 }
7 //定义⼀个伴⽣对象
8 object MyClass {
    // 和类名称相同
9 private val objectSecret = "42"
10 def y(arg: MyClass) = arg.classSecret -1 // arg.classSecret -> 在伴⽣对象中可以访问类的常量
11 }
12 MyClass.objectSecret // ⽆法访问
13 MyClass.classSecret // ⽆法访问
14 new MyClass(-1, "random").objectSecret // ⽆法访问
15 new MyClass(-1, "random")
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值