Scala 面试问题与答案

今天,大多数金融/银行,政府,电信,社交网络等公司正在使用 Scala,Play和 Akka Framework来开发他们的项目,因为这些框架支持OOP和FP功能,并提供许多优点。

Scala 面试问题

scala interview questions I am going to share my Interview's Knowledge and Scala Ecosystem or Fullstack Scala (Scala/Play/Akka) Development experience with you through couple of posts. I'm going to share you 3 separate posts. Some questions are just one question and some have some sub-questions. Totally am going to discuss around 200 questions. I bet if you are familiarise with all these questions, you will definitely clear all Scala Developer interviews. However, if you want to continue as a Fullstack Scala developer, you should learn all these Fullstack Scala technologies thoroughly.

介绍

我将分三个部分提供Scala/Play/Akka采访问题和答案:

  1. Scala 面试问题和答案:

在这里,我们将讨论一些基本的Skala采访问题,这些问题对新手或Java开发人员有用,他们希望转向Skala开发或作为Skala/Java开发人员的1年以上经验。2. Skala 中间面试问题和答案:- 我们将讨论一些面试问题,这些问题对Skala/Java开发人员的2年以上经验有用。

我们还将讨论Scala和Java之间的某些差异,以便用户(谁正在从Java移动到Scala)可以从这些帖子中受益。

Scala 基本面试问题

在本节中,我们将列出所有 Scala 基本面试问题,在下一节中我们将详细讨论这些问题。

  1. 联合国 什么是斯卡拉吗? 是语言还是平台? 它支持OOP还是FP? 谁是斯卡拉的父亲? ( (英语). 2. 斯卡拉静态语言吗? 什么是Statical-Typed语言,什么是动态-Typed语言? 静态输入语言与动态输入语言有何区别? () (英语). 斯卡拉是纯OOP语言吗? Java 是纯 OOP 语言吗 ? ( (英语). 4. 斯卡拉是否支持所有功能性编程概念? Java 8 是否支持所有功能编程概念? () (英语). 5. 斯卡拉语的主要优点是什么? 斯卡拉语言是否有任何缺点? (_) (英语). 斯卡拉语言的主要缺点是什么? ( (英语). 7. 斯卡拉语言的主要格言是什么? ( (英语). 8. 现在流行的JVM语言有哪些?
  2. 就像Java的java.lang一样. 对象类,斯卡拉所有类的超级类是什么? 10 (英语). 斯卡拉的默认访问修饰符是什么 ? 斯卡拉是否有"公开"关键词? 11 (英语). 斯卡拉的"Type推断"是什么? 12 (英语). 斯卡拉的Int和Java的java.lang的区别. 整数? 斯卡拉的Int和Richint有什么关系? 13 (英语). 斯卡拉什么也没有? 斯卡拉的尼尔是什么? 斯卡拉的"一无是处"与"一无是处"有何关系? 14 (英语). 诺尔在斯卡拉是什么? 什么在斯卡拉是无效的? 在斯卡拉,Null和null有什么区别? ( (英语). 15. 斯卡拉是什么单位? Java的空虚和斯卡拉的单位有什么区别? () )16 (英语). 在斯卡拉,Val和var有什么区别? 17 (英语). 斯卡拉有什么反应? 斯卡拉的应答程序有什么用? 如何从 CMD Express 访问 Scala REPL ? 18 (英语). 什么是斯卡拉地物? 19 (英语). 我们如何在功能上执行循环? OOP和FP风格循环有什么区别? () )20 (英语). 斯卡拉的"应用"是什么 斯卡拉的应用是什么? "阿普"在斯卡拉是什么? 斯卡拉的App有什么用? 21 (英语). 斯卡拉支持操作员过载吗 ? Java 支持操作员过载吗 ? () )22 (英语). 什么是表达? 声明是什么? 表达式和语句之间的区别? () )23 (英语). Java的"If.Else"和斯卡拉的"If.Else"有什么区别? (). )24 (英语). 斯卡拉语是一种基于表达的语言还是基于语句的语言? Java 是基于表达式的语言还是基于语句的语言? () )25 (英语). 告诉我一些被Java支持的功能,但斯卡拉和Vice反之亦然? 26 (英语). 斯卡拉的函数和方法有什么区别? 27 (英语). 在 Scala 源文件中可以定义多少公共类文件 ? () )28 (英语). 像 Java 一样, Scala Language 默认的导入是什么 ? () )29 (英语). Scala 和 为什么 ? ( _) ) 30. 提及 一些关键词被Java使用,而在斯卡拉不需要? 为什么斯卡拉不需要它们?
  3. 什么是普雷德夫在斯卡拉? ( (英语)

请参阅我的前一篇文章,了解更多关于 [功能编程]( / 社区 / 教程 / 功能强制性 - 对象导向 - 编程 - 比较)(点击此链接来打开我的前一篇文章)。

Scala 面试问题与答案

在本节中,我们将从上面的列表中提取每一个问题,并详细讨论适当的示例(如果需要的话)。

什么是Scala?它是语言或平台?它是否支持OOP或FP?谁是Scala的父亲?

马丁·奥德斯基(Martin Odersky)是斯卡拉的父亲,是多范式编程语言,它支持对象和功能编程概念,由马丁·奥德斯基(Martin Odersky)设计和开发,是JVM式安全对象功能编程语言,在JVM(Java虚拟机)上运行。斯卡拉是一种混合功能(对象和功能)编程JVM语言,具有强大和静态的类型系统。在斯卡拉中,所有类型都在编译时进行检查。

什么是静态键入语言?什么是静态键入语言?什么是动态键入语言?静态键入语言和动态键入语言的区别是什么?

是的,Scala是一个静态编写的语言。静态编写的语言意味着编译器在编译时进行类型检查,而不是在运行时进行类型检查。这些类型的语言的主要优点是:作为开发者,我们应该关心编写正确的代码,以避免所有编译时的错误。由于编译器在编译时检查许多错误,我们在运行时不会收到很多问题或错误。 示例:- Java, Scala, C, C++, Haskell等.动态编写的语言意味着编译器在运行时进行类型检查,而不是在编译时进行类型检查。

Scala 是纯 OOP 语言吗? Java 是纯 OOP 语言吗?

纯对象导向编程语言意味着一切都应该是对象,Java不是纯对象导向编程(OOP)语言,因为它支持以下两个非OOP概念:

Java 支持原始数据类型,它们不是对象 Java 支持静态成员,它们与对象无关

是的,Scala是一个纯对象导向的编程语言,因为在Scala,一切都是对象,一切都是价值,函数是价值,价值是对象,Scala没有原始数据类型,也没有静态成员。

Scala 是否支持所有功能编程概念? Java 8 是否支持所有功能编程概念?

是的,Scala支持所有功能编程(FP)概念。Java 8引入了一些功能编程结构,但它不支持所有功能编程概念。

Scala 语言的主要优点是什么? Scala 语言的缺点有哪些?

如果我们使用Scala语言来开发我们的应用程序,我们可以获得以下优点或优点和缺点: Scala语言的优点:-

  • 简单和简洁的代码
  • 非常明确的代码
  • 更可读的代码
  • 100% 类型安全的语言
  • 不可变性和无副作用
  • 更可重复使用的代码
  • 更模块化
  • 更少的代码
  • 非常灵活的语法
  • 支持所有 OOP 功能
  • 支持所有 FP 功能。 高功能性
  • 更少的错误代码

** Scala 语言的摘要:-**

  • 更少可读的代码
  • 对于初学者来说很难理解代码
  • 学习复杂的语法
  • 更少的反向兼容性

注:我们可以以更可读或更不可读的方式编写 Scala Code。

Scala语言的主要缺点是什么?

除了Scala的许多好处之外,它还有一个主要的Drawback:Backward Compatibility Issue。如果我们想升级到Scala的最新版本,那么我们需要照顾一下改变一些包名称、类名称、方法或功能名称等。例如,如果您正在使用旧的Scala版本,您的项目正在使用BeanProperty注释。它在scala.reflectscala.reflect.BeanProperty在旧版本中可用。

Scala语言的关键词是什么?

与Java的口号写一次运行在任何地方一样,Scala也有 用更少的代码做更多用更少的代码做更多的口号。

目前最受欢迎的 JVM 语言有哪些?

Java、Scala、Groovy 和 Closure 是最流行的 JVM (Java 虚拟机) 语言。Scala、Groovy 和 Closure JVM 语言支持对象导向编程功能和功能编程功能。Java SE 8 支持所有对象导向编程功能。

像 Java 的 java.lang.Object 类一样, Scala 中的所有类的超级类是什么?

正如我们在Java中所知道的,所有类(Java API 类或用户定义类)的超级类是 java.lang.Object。

Scala中的默认访问修改器是什么? Scala 有公共关键字吗?

在 Scala 中,如果我们不提到任何方法、函数、特征、对象或类的访问修改器,则默认访问修改器是公共。即使在 Fields 中,公共也是默认访问修改器。

Scala中的类型推理是什么?

类型是指数据类型或结果类型. 我们在 Scala 程序中使用类型在许多地方,如变量类型,对象类型,方法 / 函数参数类型,方法 / 函数返回类型等。

Scala 的 Int 和 Java 的 java.lang.Integer 之间有什么相似之处和差异? Scala 的 Int 和 RichInt 之间的关系是什么?

** Scala 的 Int 和 Java 的 java.lang.Integer 的相似之处:**

  • 两者都是类
  • 两者都用来表示整数
  • 两者都是32位签名的整数

** Scala 的 Int 和 Java 的 java.lang.Integer 的差异:**

  • Scala 的 Int 类不实现比较接口.
  • Java 的 java.lang.Integer 类实现比较接口

Java 的 Integer 与 Scala 的 Int 和 RichInt 相似,RichInt 是 scala.runtime 包中定义的最后一类,如 scala.runtime.RichInt 在 Scala 中,Int 和 RichInt 之间的关系是,当我们在 Scala 程序中使用 Int 时,它会自动转换为 RichInt 以利用该类中所有可用的方法。

什么是斯卡拉中的尼罗河?什么是斯卡拉中的尼罗河?什么是斯卡拉中的尼罗河?什么是斯卡拉中的尼罗河?

在 Scala 中,Nothing 是一种类型(最终类别)。它被定义为 Scala 类型系统的底部,这意味着它是 Scala 中的任何东西的子类型。

  • Nil 是用 Nothing 定义的(如下)。
  • Nothing 是用 Nothing 定义的
1object None extends Option[Nothing]
  • 我们可以用Nothing作为一种永不返回的方法
  • 我们可以用Nothing作为一种异常终止的方法

Nil 是一个用来表示空列表的对象,它被定义为scala.collection.immutable包,如下所示:

1object Nil extends List[Nothing]

例子: *

1scala> Nil
2res5: scala.collection.immutable.Nil.type = List()
3
4scala> Nil.length
5res6: Int = 0

什么是 Scala 中的 Null? Scala 中的 null 是什么? Scala 中的 Null 和 null 之间的区别是什么?

Null 是 Scala 中的类型(最终类别)。 Null 类型在 scala 包中作为 scala.Null 可用。 它有一个且只有一个实例是 null. 在 Scala 中, null 是 scala.Null 类型的实例。

1scala> val myNullRef : Null = null
2myNullRef: Null = null

我们不能将其他值分配给 Null 类型引用,它只接受null值,Null 是所有引用类型的子类型,Null 位于 Scala 类型系统的底部,因为它不是值类型的子类型,所以我们可以将null分配给任何值类型的变量。

1scala> val myInt : Int = null
2:10: error: an expression of type Null is ineligible for implicit conversion
3       val myInt : Int = null

^ 在这里输入错误错误. found : Null(null) 但需要: Int. Null 和 Int 之间的暗示转换不适用,因为它们是模糊的。

什么是Scala Unit?Java的Void和Scala的Unity有什么区别?

在 Scala 中, Unit 被用来表示没有值没有有用的值。 Unit 是 scala.Unitscala 包中定义的最终类别。

  • Java 的空值没有任何值. 它没有任何值.
  • Scala 的单位有一个值()
  • () 是 Scala 中的唯一一个值。

两者都用来表示一种方法或函数不返回任何东西。

Val 和 Var 在 Scala 的区别是什么?

在 Scala 中,val 和 var 都被用来定义变量,但它们有某些显著差异。

................................................................................................................................................................

什么是 Scala 中的 REPL? 如何使用 Scala 中的 REPL? 如何从 CMD Prompt 访问 Scala REPL?

在 Scala,REPL 是执行 Scala 代码的解释器,这就是为什么REPL 也被称为 Scala CLI(Command Line Interface)或 Scala 命令行壳。REPL 的主要目的是开发和测试 Scala 代码的微小片段,用于实践目的。对于 Scala 初学者来说,这是非常有用的,他们可以通过使用scala命令访问REPL。当我们在 CMD Prompt 中键入scala命令时,我们将得到REPL 壳,在那里我们可以键入和执行规模代码。

1D:\> scala
2
3scala>

Scala的特点是什么?

Scala 语言支持以下功能:

支持 OOP 风格(Imperative-Style)和功能式编程 *纯对象导向编程语言 *支持所有功能功能

  • REPL(阅读评估打印循环)解释器 *强有力的类型系统 *静态编程语言 *类型引导 *支持模式匹配 *支持关闭 *支持持久数据结构 *使用演员模型来开发货币应用 与 Java 互操作所有开发工具

我们如何实现循环功能?OOP和FP风格循环有什么区别?

我们知道如何在面向对象的风格中实现循环:使用可变的临时变量,更新变量值,并使用循环构造。 这是非常无聊和不安全的方法. 它不是有线安全的。

  • 循环构造
  • 可变性
  • 副作用

我们可以在功能上以不同的方式实现相同的循环,它是线条安全的,我们可以使用以下两种技术来实现循环的功能风格:

  • 回归
  • 尾回归
  • 不可变性
  • 无副作用

Scala 中的应用程序是什么? Scala 中的应用程序是什么? Scala 中的应用程序是什么? Scala 应用程序的用途是什么?

** Scala 应用程序:** 在 Scala 中,App 是一个在 scala 包中定义的特征,如scala.App。它定义了主方法。如果一个 Object 或一个 Class 扩展了这个特征,那么它们将自动成为 Scala 可执行的程序,因为它们将继承应用程序的主要方法。使用 App 的主要优点是我们不需要写主方法。使用 App 的主要缺点是我们应该使用相同的名称args来引用命令行参数,因为 scala.App 的主方法() 使用了这个名称。

1object MyApp {
2    def main( args: Array[String]){
3        println("Hello World!")
4    }
5}

使用 Scala App:**

1object MyApp extends App{
2   println("Hello World!")
3}

如果我们观察上面的两个例子,在第二个例子中,我们没有定义主方法,因为我们继承了Scala App(应用程序)。

Scala 是否支持 Operator Overloading? Java 是否支持 Operator Overloading?

Java不支持操作员过载,Scala支持操作员过载,原因是Java不希望支持一些误导性的方法名称,如+*/。Scala给了开发人员决定应该使用哪种方法/函数名称的灵活性,当我们拨打2 + 3时,这意味着+不是一个操作员,它是一个在Int类中可用的方法(或者它是暗示类型)。

什么是语句?什么是语句?语句和语句的区别?

** 表达式:** 表达式是一个值,意味着它会被评估到一个值. 作为一个表达式返回一个值,我们可以将其分配给一个变量. 例如:- Scala的If条件,Java的Ternary操作员. ** 陈述:** 陈述定义一个或多个操作或操作。

Java的If..Else和Scala的If..Else有什么区别?

**Java的If..Else:**在Java中,If..Else是一个陈述,而不是一个表达式。

1int year;
2 if( count == 0) 
3   year = 2014;
4 else 
5   year = 2015;

**Scala的If..Else:**在Scala中,If..Else是一个表达式,它评估一个值,即返回一个值,我们可以将其分配给一个变量。

1val year = if( count == 0) 2014 else 2015

**注:Scala的If..Else就像Java的Ternary Operator一样工作,我们可以使用Scala的If..Else像Java的If..Else一样,如下所示:

1val year = 0
2 if( count == 0) 
3   year = 2014 
4 else 
5   year = 2015

Scala 是基于表达式的语言还是基于陈述的语言? Java 是基于表达式的语言还是基于陈述的语言?

在 Scala 中,一切都是一个值,所有表达式或陈述都被评估为一个值,我们可以将表达式、函数、关闭、对象等分配给变量,因此,Scala 是一个以表达式为导向的语言,在 Java 中,陈述不是表达式或值,我们不能将它们分配给变量,所以 Java 不是一种以表达式为导向的语言,它是一种以陈述为导向的语言。

告诉我一些由Java支持的功能,但不是由Scala和反之亦然?

Java 不支持操作员过载,但 Scala 支持它.

  • Java 支持 **++**和 **--**操作员,但 Scala 不支持它们
  • Java 已检查并未检查例外,但 Scala 没有检查例外
  • Scala 不支持断绝和继续陈述,但 Java 使用它们
  • Scala 没有明确的类型铸造,但 Java 支持此功能
  • Scala 支持模式匹配,但 Java 没有
  • Java 使用原始数据类型,但 Scala 没有 Java 支持静态成员,但 Scala 没有静态成员概念

**注:此列表超出一页,但这些是要记住Scala和Java功能的差异的一些重要点,以应对Scala采访。

Scala中的函数和方法有什么区别?

Scala 支持函数和方法,我们使用相同的语法来定义函数和方法,没有语法差异,但是它们有一个小差异:

  • 我们可以在 Scala 类或特征中定义方法. 该方法与一个对象(一个类的实例)相关联。 我们可以通过使用一个类的实例调用方法. 我们不能直接使用 Scala 方法而不使用对象
  • 函数与一个类或特征无关。

** 注:** 我们将在我今后的帖子中讨论类,特征,包装,对象等。

在 Scala 源文件中可以定义多少个公共类文件?

在Java中,我们可以在源文件中最多定义一个公共类 / 接口. 与Java不同,Scala在同一个源文件中支持多个公共类. 我们可以在Skala源文件中定义任何数量的公共类 / 接口 / 特征。

与Java一样,Scala语言中的默认导入是什么?

我们知道, java.lang 是由 JVM 自动导入所有 Java 程序的默认包,我们不需要明确导入此包。

  • java.lang 包
  • scala 包
  • scala.PreDef

Scala 有多少个运营商,为什么?

不同于Java和C++,Scala支持操作员过载。Scala有一个唯一的操作员,它是="(equalto)操作员。除此之外,所有这些都只是方法。例如2 + 3,这里+不是Scala中的操作员。+是Int类中可用的方法。Scala Compiler观察2和3是Integers,并试图在Int类中找到+方法。因此,Scala Compiler将2 + 3表达式转换为2.+(3)并在整数对象2上调用+方法,并将整数对象3作为参数转移到+方法。2 + 32.+(3)`都等同。

提到一些由Java使用的关键字,而在Scala中不需要?为什么Scala不需要它们?

Java 广泛使用以下关键字:

  • 'public' 关键字 - 定义类,接口,变量等 *'static' 关键字 - 定义静态成员

Scala不需要这两个关键字,Scala没有公共静态关键字。

  • 在 Scala 中,默认访问修改器是公共的类,特征,方法/函数,字段等,这就是为什么不需要公共关键字
  • 为了支持 OOP 原则,Scala 团队避免了静态关键字。

h3>Scala中的PreDef是什么?Scala中的PreDef的主要用途是什么?在Scala中,PreDef是一个在scala包中定义为scala.PreDef的对象。

  • 控制台 IO(印刷,println 等)
  • 收集工具方法
  • 字符串工具方法
  • 默认转换方法
  • 声明工具方法等

例如,打印, println, readLine, readInt, require 等方法在 PreDef 对象中定义。在 Scala 中,PreDef 可在所有 Scala 程序中使用其方法而无需导入,因为 Scala 编译器会自动将此对象导入所有编译单元(如 Class、Object、Trait 等)。

Published At
Categories with 技术
comments powered by Disqus