Scala 高级面试问题与答案

在阅读本文之前,请浏览我之前的两个帖子(Scala Basic)( / 社区 / 教程 / 面试 - 问题 - 答案)( Scala 中间)( / 社区 / 教程 / 面试 - 问题)面试问题和答案,以获得一些关于 Scala 语言的基本知识。

Scala 高级面试问题

在本文中,我们将讨论一些与Scala Advanced概念相关的Advanced Scala面试问题,以及一些实时项目相关的概念。 **注:**由于这个列表已经变得非常大,我将提供另一个帖子,剩下的问题和答案。

Scala 高级面试问题

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

  1. 联合国 斯卡拉的最新版本是什么? 斯卡拉2.12的主要变化或更新是什么? ( (英语). 2. 斯卡拉有什么选择? 何等为有与无? 在斯卡拉,什么是选项/某种/无设计模式? (_) (英语). 斯卡拉是什么情况? 斯卡拉的"左右"是什么? 在 Scala 中解释 either/Left/Right 设计模式 ?
  2. 在Java SE 8中斯卡拉选择的等同构思是什么? 选项在斯卡拉有什么用?
  3. 功能编程的优点或纯函数的优点是什么?
  4. 开发 RESTful Web 服务或 REST API 的 大众 Scala 框架是什么 ? (_) (英语). 7. 生成基于 Scala 应用程序的 REST API 文档的最佳框架是什么 ? ( _) (英语). 8. 就像Hibernate用于基于Java的应用, Play/Scala 应用程序中可用的大众ORM框架是什么?
  5. 什么是开发 Play/Scala 应用程序在MongoDB NoSQL 数据库中坚持数据的最佳工具 ? () )10 (英语). 使用Play和Scala开发应用程序的受欢迎客户? () )11 (英语). Play 框架使用的最佳语言是什么 : 斯卡拉还是爪哇? 12 (英语). 斯卡拉如何支持高可扩展性和高性能应用? () )13 (英语). 开发基于 Play 和 Scala 的应用程序可用的 Build 工具是什么 ? ( ) )14 (英语). 什么是SBT吗? 什么是开发 Play 和 Scala 应用程序的最佳构建工具 ? () (英语). 15. 游戏和斯卡拉应用程序的单位测试、功能测试和/或BDD框架有哪些? () )16 (英语). Play 和 Scala 应用程序可用的最佳代码覆盖工具是什么 ? () )17 (英语). Play 和 Scala 应用程序可用的最佳 Scala 样式检查工具是什么 ? () )18 (英语). 哪个IDES支持 Play 和 Scala 的应用程序开发以及如何进行?
  6. 什么是游戏的默认单位和功能测试框架? 游戏的默认构建工具是什么 ? 游戏默认模板引擎是什么 ? Play Framework 中的内置Web 服务器可提供什么 ? () )20 (英语). 为什么斯卡拉比爪哇强? 斯卡拉对爪哇(Java 8)有什么好处? 与 Java 比较 斯卡拉的主要优势或好处是什么? 21 (英语). 斯卡拉的匿名函数是什么? 斯卡拉的功能文学是什么? 在斯卡拉建立匿名功能/功能文学有什么好处? () )22 (英语). 什么是高阶函数? () )23 (英语). 案例类和普通类有何区别? 24 (英语). Play/Scala 堆栈对于开发网络应用程序有什么好处? () )25 (英语). 叫什么来着? 斯卡拉和Java支持逐个名字吗? 逐个调用值和逐个调用函数参数有什么区别? () )26 (英语). 斯卡拉不支持的爪哇OOP构造是什么? Scala的 OOP 构造没有Java的支持是什么? Scala 引入的新 OOPs 构造是什么, 但没有 Java 支持 ? ( ) )27 (英语). 斯卡拉语言开发Web应用的受欢迎的MVC框架是什么? () )28 (英语). Java-Based和Scala-Based Maven项目的结构有什么主要区别? () )29 (英语). 斯卡拉的《解剖师》是什么? 斯卡拉的建筑师和提取师有什么区别? 斯卡拉的开解器有什么用? 30 (英语). 在基于斯卡拉的应用程序中?? 有何用? (_) )31. 解释Scala Collection API中列表和流的主要区别吗? 我们如何证明这种区别? 我们何时选择Stream?
  7. 在斯卡拉, :**和:**在斯卡拉有什么区别? (英语). 33. 如果我想成为 Fullstack Scala 开发者, 那我应该学习哪些技术堆栈? ( (英语)

Scala 高级面试问题和答案

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

Scala 的最新版本是什么? Scala 2.12 中的主要变化或更新是什么?

目前 Scala 的稳定性为 2.11.7. 它支持 Java SE 7. Scala 2.12 版本的主要变化或更新是,它仅支持 Java SE 8 或更高版本。

什么是 Scala 中的选项? 什么是 Scala 中的一些和没有? 什么是 Scala 中的选项 / 一些 / 没有设计模式?

在 Scala 中,Option 被用来表示存在或不存在的可选值。Option 是一个抽象的类。Option 有两个子类:有些和没有。所有三个(Option、有些和没有)都被定义为规模包,例如scala.Option。Option 是 Scala 中的一个有限集合,其中包含零或一个元素。如果 Option 包含零元素,则是无。如果 Option 包含一个元素,则是 一些。

1def get(val index: Int): Option[String]

假设这个方法是从列表。这个方法有返回类型 Option[String]. 如果列表包含元素,那么这个 get 方法会返回在该索引位置可用的Some[String]元素。否则,它会返回None(这不是元素)。

什么是 Scala? 什么是 Scala 中的左和右? 解释 Scala 中的左/右设计模式?

在 Scala 中,Either 是一个抽象的类别,用来表示两种可能类型的一个值,它需要两个类型参数:Either[A,B] 它确切地有两个子类型:左和右,如果 Either[A,B] 代表一个实例 A,这意味着它是左,如果它代表一个实例 B,这意味着它是右,这在 Scala 中被称为 Either/Left/Right 设计模式。

Java SE 8 中的 Scala 选项的同等构造是什么?在 Scala 中使用 Option 是什么?

Scala 的选项与 Java SE 8 的选项类似。Java SE 8 引入了一种新的实用类选项来表示某些值的存在或不存在。选项在 java.util 包中可用。

什么是功能编程(FP)或纯功能的优点?

以下是功能编程(FP)或纯功能的优点:

  • 更模块化
  • 更容易理解或更容易理解
  • 更容易测试
  • 更容易错误
  • 更容易重复使用
  • 更容易平行和一般化

开发 RESTful Web Services 或 REST API 的流行的基于规模的框架是什么?

有许多基于 Scala 的框架来开发 RESTful Web Services. 最受欢迎的框架是:

  • 播放框架

在Play中,我们将REST API URL称为路径,我们在Play框架中将所有路径放在同一位置,这是一个无状态的Web框架,可以轻松开发REST API.- Scalatra Framework 这是一个非常简单而简单的基于Scala的Web框架,可以开发REST API- Spray Framework 它非常简洁,并且建立在Akka框架上,所以最好使用Actor Model开发REST API.- Lift Framework 它允许使用模式匹配概念进行路由。

基于 Scala 的应用程序生成 REST API 文档的最佳框架是什么?

Swagger 是为此目的的最佳工具,它是非常简单和开源的工具,用于使用 JSON 生成基于 Scala 的应用程序的 REST API 文档。

  • 如果我们使用 Play with Scala 来开发您的 REST API,则使用 play-swagger 模块用于 REST API 文档
  • 如果我们使用 Spray with Scala 来开发您的 REST API,则使用 spray-swagger 模块用于 REST API 文档

像 Hibernate for Java 应用程序一样,哪些流行的 ORM 框架可用于 Play/Scala 应用程序?

如 JPA、Hibernate 和 Toplink 等 ORM 框架用于基于 Java 的应用,在 Play/Scala 应用中使用的 ORM 框架有很多。

  • Slick
  • 不正常
  • SORM( Scala ORM)
  • Squeryl

什么是开发 Play/Scala 应用程序的最佳工具,以保持 MongoDB NoSQL 数据存储中的数据?

ReactiveMongo 是开发 Play/Scala 应用程序的最佳 Scala 驱动程序,可在 MongoDB NoSQL 数据存储中保持数据。

受欢迎的客户正在使用Play和Scala来开发他们的应用程序?

成千上万的客户正在生产中使用 Play 和 Scala. 下面的列表是积极使用 Play 和 Scala 的更受欢迎的客户。

  • LinkedIn
  • 主持人
  • 奥卡多
  • LuchidChart
  • GOV.UK

使用 Play 框架的最佳语言是什么:Scala 或 Java?

如果我们使用Java与Play框架,我们需要面对许多问题,因为Java不支持完整的FP功能。Scala是与Play框架一起使用的最佳选择,以开发高度可扩展、更好的性能与竞争/平行和低延迟应用程序,因为:

  • Play 2 完全用 Scala 编写
  • 它支持完整的 FP 功能
  • 它比 Java 更具表达式的语言
  • 它很容易支持 Akka Actor 模型
  • 它支持一些新的 OOP 功能,如特征
  • Play 的内置模板是用 Scala 开发的。

Scala 如何支持高度可扩展和高性能应用程序?

由于 Scala 支持多范式编程(OOP 和 FP),并使用 Actor 竞争模型,我们可以很容易地开发高度可扩展和高性能的应用程序。

开发基于 Play 和 Scala 的应用程序的可用构建工具有哪些?

以下三种是开发 Play 和 Scala 应用程序的最受欢迎的构建工具:

  • SBT
  • Maven
  • Gradle

什么是SBT?开发Play和Scala应用程序的最佳构建工具是什么?

SBT 代表 Scala Build Tool. 它是一个简单的构建工具来开发基于 Scala 的应用程序. 大多数人使用 SBT Build 工具来播放和 Scala 应用程序. 例如,InteliJ IDEA Scala 插件默认使用 SBT 作为 Build 工具。

可用的 Play 和 Scala 应用程序的单元测试、功能测试和/或 BDD 框架有哪些?

以下是为 Play/Scala 应用程序提供的最受欢迎的单位测试、功能测试和/或 BDD 框架:

  • Spec2
  • ScalaTest
  • ScalaCheck
  • Mokito

适用于 Play 和 Scala 应用程序的最佳代码覆盖工具是什么?

SCoverage 是基于 Play 和 Scala 的应用程序的 Code-coverage 工具, SCoverage 是 Scala Code-coverage 工具的代码代码代码代码代码代码代码代码工具。

  • SBT
  • Maven
  • Gradle

适用于 Play 和 Scala 应用程序的最佳 Scala 风格检查工具是什么?

与基于Java的应用程序的Checkstyle一样,Scalastyle是适用于Play和Scala的应用程序的最佳Scala风格检查工具。Scalastyle观察我们的Scala源代码,并指示与之相关的潜在问题。

  • SBT
  • Maven
  • Gradle

它有两个独立的插件支持以下两个IDEs:

  • IntelliJ IDEA
  • Eclipse IDE

哪些IDE支持游戏和基于规模的应用程序开发以及如何?

以下两个流行的 IDE 支持 Play 和 Scala 应用开发:

  • IntelliJ IDEA
  • Eclipse IDE

他们支持使用 Scala 插件,如 Eclipse IDE 有 Scala IDE for Eclipse 以支持 Play 和 Scala 应用程序开发。 IntelliJ IDEA 有一个插件,如Scala 插件 for IntelliJ IDEA来支持基于Scala, SBT 和 Play 2 Framework的应用程序.- 玩的默认单元和功能测试框架是什么? 玩的默认构建工具是什么? 玩的默认模板引擎是什么? 在 Play Framework 中可用的嵌入式 Web 服务器是什么? Play Framework 的默认单元和功能测试框架是 Spec2. 使用 Spec2 Framework 测试使用 Play/Scala 应用程序很容易。 玩 Framework 的默认嵌入式模板是`Tl

为什么 Scala 比 Java 更好? 什么是 Scala 对 Java (Java 8) 的优势? 与 Java 比较 Scala 的主要优势或优势是什么?

由于Scala支持以下额外功能,因此比Java 8更好:

  • 完整的 FP 功能
  • 更多表达语言
  • 模式匹配
  • 更好地支持 Akka 演员模型
  • 自动解决继承钻石特征问题
  • 使用 Akka Framework
  • 完全响应流式 API 进行非同步和非阻止的 IO 编程

什么是 Scala 中的匿名函数? 什么是 Scala 中的字母函数? Scala 中的匿名函数/函数字母的优点是什么?

匿名函数也是一种函数,但它没有任何函数名称. 它也被称为函数字母。

  • 我们可以将函数字母分配给变量
  • 我们可以将函数字母分配给另一个函数/方法
  • 我们可以返回函数字母作为另一个函数/方法结果/返回值

什么是高级函数(HOF)?

高级顺序函数(HOF)也是一种函数,但它执行下列其中一个、两个或两个:

  • 将其他函数作为参数
  • 返回函数作为结果

案例类和正常类有什么区别?

案例类也是一种类,但是当我们将其与正常类比较时,它会提供以下额外的功能或优点:

  • 默认情况下, Case-class constructor 参数为val。我们不需要用val声明参数。
  • 默认情况下, Case-class constructor 参数成为类字段.
  • 自动添加这些方法: toString, equals, hashCode, copy. apply and unapply.
  • 自动获得 Companion 对象
  • 无需使用关键字来创建 Case Class 实例
  • 易于在 Pattern Matching 中使用

所有这些功能都由 Scala 编译器在编译时添加。

开发 Web 应用程序的 Play/Scala 堆栈有哪些优点?

以下是 Play/Scala 堆栈开发 Web 应用的主要优点:

  • 开源

Play是开发网络应用的开源自由软件框架. . 更好的生产率 Play框架的自动重载功能提高了开发者生产率. 不需要建造、部署和测试我们的变化。 只要做我们的改变,刷新页面 看我们的改变。 无国籍且易于开发 REST API( _) )Play是基于HTTP的无国籍模式,用于服务网络请求,因此非常容易开发REST API或RESTful Web Services. 更好的错误处理 如果我们使用 Play 框架开发我们的网络应用程序, 它以非常有用的格式通知浏览器中的所有错误 。 它显示出错消息,文件位置,出错的行号,突出代码片段,以非常容易地理解出错. -- 高性能和更好的可伸缩性 有活性(- ) Play框架是通过遵循活性设计模式来开发的,它被建在Netty断层上以利用非屏蔽 IO Feature. 由于这个特点,我们可以非常容易地开发出可扩展性能和性能应用. 容易扩展 Play非常灵活的框架,支持开发插件非常容易扩展其特性和功能. . 高度货币性和更好的平行性(-) ) 由于Scala和Play都支持功能编程,因此非常容易开发高通量和更好的并行主义应用程序,因为FP支持Immutable,纯函数(没有副作用的功能),模式匹配,演员模型等——更好的再使用性,易于测试和 More Modular 由于Scala和Play都支持功能编程,我们可以开发更多的模块化和可再用应用程序. 测试更模块化的应用程序也非常容易.

哪些 Java 的 OOP 构件不受 Scala 支持?哪些 Scala 的 OOP 构件不受 Java 支持?哪些是 Scala 引入的新 OOP 构件,但不受 Java 支持?

Java 的 OOP 构件,不受 Scala 支持:

  • Scala 没有界面概念
  • Scala 没有 Enum 概念

Scala 的 OOP 构件,不受 Java 支持: 或 Scala 引入的新 OOP 构件,但不受 Java 支持:

  • 尺寸特征
  • 自动解决遗传钻石问题

什么是Call-by-Name?Scala 和 Java 是否支持Call-by-Name?Call-by-Value 和Call-by-Name 函数参数的区别是什么?

Call-by-name 意思只在我们需要或访问方法/函数参数时进行评估.如果我们不使用它们,则不会进行评估。 Scala 支持呼叫值和呼叫名函数参数。

  • 在Call-by-name中,函数参数仅在需要时进行评估,而不是在函数被调用时进行评估 *在Call-by-value中,函数参数在调用函数时进行评估 *在Call-by-value中,参数在执行函数之前进行评估,并且它们只进行评估一次,无论我们在该函数中使用了多少次 *在Call-by-name中,每次我们访问函数时,参数进行评估,并且每次我们在该函数中使用它们时进行评估
  • Scala Syntax Differences

求职价值:

1def myFunction(a: Int, b: Int) { }

在这里, a 和 b 都是 myFunction 的按值调用参数。

1def myFunction(a: Int, b: => Int) { }

在这里,a 都是 Call-by-value 参数,b 是 myFunction 的 Call-by-name。

用于开发 Web 应用程序的 Scala 语言的流行的 MVC 框架是什么?

以下是 Scala 语言开发 Web 应用程序的最流行的 MVC 框架:

  • 播放框架
  • 斯卡拉特拉框架
  • 喷射框架
  • 提升框架

Java 基于和 Scala 基于 Maven 项目的结构有哪些主要差异?

Most of the Java-based projects uses Maven as their Build tool. However, most of the people uses SBT as build tool to develop their Scala-based applications, but Some Teams uses Maven too as a build tool to develop their Scala-based applications. Maven folder structure for both Java-based and Scala-based projects is almost same just one folder name change as shown in the below diagrams: java and scala folder names. Java-based Maven Project Folder Structure: scala vs java maven project structure Scala-based Maven Project Folder Structure: scala advanced interview questions, scala maven project structure

什么是 Scala Extractor? Scala 中的 Constructor 和 Scala 中的 Extractor 有什么区别? Scala 中的 Extractor 有什么用途?

不仅在Java和Scala中,在几乎所有OOP语言中,Constructor被用来创建(或组装)一个类的对象或实例,使用其参数(或组件)。Extractor与Constructor完全相反。在Scala中,Extractor被用来分解或分解一个对象为其参数(或组件)。在Scala中,应用方法是Constructor。内部,Extractor使用未完成的方法将对象分解为其部分(或参数)。

在 Scala 应用程序中使用???是什么意思?

这个???三个问题标记不是一个运算器,它是 Scala 中的一个方法,它被用来标记一个是在进展的方法,这意味着开发人员应该为该方法提供实现。

1def ??? : Nothing = throw new NotImplementedError

如果我们在不提供实现的情况下运行该方法,那么它会像下面所示的NotImplementedError错误:

1scala> def add(a:Int, b:Int) : Int = ???
2add: (a: Int, b: Int)Int
3
4scala> add(10,20)
5scala.NotImplementedError: an implementation is missing

在 Scala Collection API 中解释列表和流之间的主要区别?我们如何证明这种区别?我们何时选择流?

在 Scala 中,List 和 Stream 都来自集合 API,并且几乎是相似的功能. 两者都是不可变的集合. 然而,在 Scala 集合 API 中,List 和 Stream 之间有一个主要的区别:即列表元素被精心评估,流元素被精心评估,这意味着当我们访问它们时。

1scala> var list1 = List(1,2,3,4)
2list1: List[Int] = List(1, 2, 3, 4)

在这里,我们可以观察到,在创建列表对象时,所有列表元素都被评估了,但是,如果我们在流中做同样的事情,我们无法看到所有元素。

1scala> var s1 = Stream(1,2,3,4)
2s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)

当我们希望 Lazy 集合只在我们访问它们时评估元素时,最好使用 Stream。

在 Scala 中 ::#:: 有什么区别?在 Scala 中 :::#::: 有什么区别?

在 Scala 收藏 API 中,

  • ::::: 是列表类中可用的方法
  • #::#::: 是流类 中可用的方法
  • 在列表类中, :: 方法用于将元素附加到列表的开始
1scala> var list1 = List(1,2,3,4)
2list1: List[Int] = List(1, 2, 3, 4)
3
4scala> list1 = 0 :: list1
5list1: List[Int] = List(0, 1, 2, 3, 4)
  • 在列表类中, ::: 方法用于将该列表前面的特定列表元素连接在一起
1scala> var list1 = List(3,4,5)
2list1: List[Int] = List(3, 4, 5)
3
4scala> val list2 = List(1,2) ::: list1
5list2: List[Int] = List(1, 2, 0, 1, 2, 3, 4)
  • 在 Stream 类中, #:: 方法用于在流开始时附加给定的元素. 仅此新添加的元素被评估,然后是被懒惰地评估的流元素
1scala> var s1 = Stream(1,2,3,4)
2s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
3
4scala> s1 = 0 #:: s1
5s1: scala.collection.immutable.Stream[Int] = Stream(0, ?)
  • 在流类中, #::: 方法用于在流开始时连接给定的流,只有新添加的元素才被评估,然后被懒惰地评估的流元素
1scala> var s1 = Stream(1,2,3,4)
2s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
3
4scala> val s2 = Stream(-1,0) #::: s1
5s2: scala.collection.immutable.Stream[Int] = Stream(-1, ?)
  • :: 方法作为列表类的缺点运算器和 #:: 方法单词作为流类的缺点运算器,这里的缺点代表构建
  • ::: 方法作为列表类的连接运算器运作,和 #::: 方法单词作为流类的连接运算器。

如果我想成为一个全套尺寸的开发者,我应该学习什么样的技术?

如果你想成为一个 Fullstack Scala 开发人员,你应该学习以下技术堆栈:

  • 尺度 2.11.7
  • 播放 2.4.6 框架
  • Akka 2.3 框架
  • 一个构建工具: SBT/Maven
  • 一个 JS 框架: CoffeeScript/JavaScript
  • 一个 IDE: IntelliJ IDEA 15/ Eclipse IDE 4.x
  • 一个 TDD 和 BDD 框架: ScalaTest,Spec2,ScalaCheck,Mockito
  • 与播放和 Scala 相关的微服务
  • SCoverage(MK1_)* Scalast _*

注:在Scala中,Extractor遵循Extractor设计模式.如果你想深入了解它,请通过我的Scala教程(大多数帖子遵循此模式:Scala xxxx 在深度中,xxx是像Extractor这样的概念)。

Published At
Categories with 技术
comments powered by Disqus