[大數據面試]-- 2.Scala 題目

========= 基礎 =========

1 var, val和def三個關鍵字之間的區別?

var immutable variable

val mutable variable

def function defined keyword

 

2.object 和 class 的區別?

object 單例 無構造器 成員變量和method都是static 可以直接訪問main方法 可以與class同名 構成伴生對象

class 有構造器 需要創建對象 才能在main方法中執行

 

3.case class (樣本類)是什麼?

經過scala編譯器優化 適合於對不可變數據建模 可用於模式匹配

Case class的每個參數默認以val(不變形式)存在,除非顯式的聲明爲var

自動產生伴生對象,、且半生對象中自動產生appay方法來構建對象

半生對象自動產生unapply方法,提取主構造器的參數進行模式匹配

產生copy方法,來構建一個與現有值相同的新對象

自動產生hashcode,toString,equals方法

默認是可以序列化的,也就是實現了Serializable ;

 

4 Option , Try和Either三者的區別?

相同:三者內部都包含兩個case class

區別

Option:代表可選值,一個是 Some(代表有值),一個是 None (值爲空);常用於結果可能爲 null 的情況;

Try:運算的結果有兩種情況,一個是運行正常,即 Success ,一個是運行出錯,拋出異常 ,即 Failure ,其中 Failure 裏面包含的是異常的信息;

Either:代表結果有兩種可能 Right 或者 left

 

5.什麼是函數柯里化

函數可以定義多個參數列表。當使用較少的參數列表調用方法時,這將生成一個將缺少的參數列表作爲參數的函數。如果固定某些參數,將得到接受餘下參數的一個函數

作用:

1.提高適用性,參數複用

2.延遲計算

 

6、trait (特質)和abstract class (抽象類)的區別?

一個class可以實現多個trait 只能繼承一個abstract class

trait:用於在類之間共享接口和字段。它們類似於Java 8的接口。不能實例化,因此沒有參數。

abstract class 可以定義有參數構造器

 

7、scala函數中call by name 和call by value的區別

call by name:惰性調用

call by value:多次調用

 

8、classOf、isInstanceOf、asInstanceOf區別

         (1)classOf[T]:          獲取類型T的Class對象

         (2)isInstanceOf[T]:  判斷對象是否爲T類型的實例。

         (3)asInstanceOf[T]: 強制類型轉換

 

9、集合的安全

不可變集合是線程安全,多線程可以安全共享其引用。scala會優先採用不可變集合。(http://xiaoxin2009.github.io/Scala%E9%9B%86%E5%90%88.html)

可變集合要安全:

當你從多個線程訪問一個可變集合時,你需要確保自己不會在其他線程正在訪問它時對其修改,scala類庫提供了6個特質,你可以將它們混入集合,這樣在該集合的任何操作完成之前,其他線程纔可能進行另外的操作。

  • SynchronizedBuffer
  • SynchronizedMap
  • SynchronizedPriorityQueue
  • SynchronizedQueue
  • SynchronizedSet
  • SynchronizedStack

val scores = new scala.collection.mutable.HashMap[String,Int] with

scala.collection.mutable.SynchronizedMap[String,Int]

 

10、scala源生通信框架(actor、akka)

11、單元測試框架:scalatest

12、var和val

13、基本數據類型https://www.tutorialspoint.com/scala/scala_data_types.htm

除java的8種類型外,還有:None、Unit、Null、Nothing、Any和AnyRef

相關說明---》https://www.jianshu.com/p/2a61366355a7

14、scala循環控制:breakable

http://www.cnblogs.com/TTyb/p/6703725.html

15、scala的classOf[T]、getClass和class有什麼區別以及什麼時候使用?

16、Scala的伴生對象是什麼?

17、Tuple的最大元素個數是多少?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章