Scala Fortgeschrittene Interviewfragen und Antworten

Bevor Sie diesen Beitrag lesen, lesen Sie bitte meine beiden vorherigen Beiträge zu den „Scala Basic“ und „Scala Intermediate“ Interviewfragen und Antworten, um grundlegende Kenntnisse über die Scala-Sprache zu erlangen.

Fortgeschrittene Scala-Interviewfragen

In diesem Beitrag werden wir über einige fortgeschrittene Scala-Interviewfragen sprechen, die sich auf fortgeschrittene Scala-Konzepte und auch auf einige projektbezogene Konzepte in Echtzeit beziehen. Hinweis: Da diese Liste bereits sehr umfangreich geworden ist, werde ich einen weiteren Beitrag mit den verbleibenden Fragen und Antworten veröffentlichen. Bitte beachten Sie diesen Beitrag unter: „Scala Intermediate and Advanced Interview Questions and Answers“. Wir werden auch Scala/Java Concurrency und Parallelism Interviewfragen und Antworten besprechen, die für erfahrene Scala/Java-Entwickler von Nutzen sind.

Fortgeschrittene Scala-Interviewfragen

In diesem Abschnitt werden wir alle Scala Intermediate Interviewfragen auflisten, und im nächsten Abschnitt werden wir sie im Detail besprechen.

  1. Was ist die aktuelle neueste Version von Scala? Was ist die wichtigste Änderung oder Aktualisierung in Scala 2.12?
  2. Was ist Option in Scala? Was sind Some und None? Was ist das Option/Some/None-Entwurfsmuster in Scala?
  3. Was ist Either in Scala? Was sind Left und Right in Scala? Erklären Sie das Either/Left/Right-Entwurfsmuster in Scala?
  4. Was ist das äquivalente Konstrukt von Scala’s Option in Java SE 8? Wofür wird Option in Scala verwendet?
  5. Was sind die Vorteile der funktionalen Programmierung (FP) oder die Vorteile reiner Funktionen?
  6. Was sind die beliebten Scala-basierten Frameworks zur Entwicklung von RESTful Web Services oder REST-APIs?
  7. Was ist das beste Framework zur Generierung von REST-API-Dokumentation für Scala-basierte Anwendungen?
  8. Wie Hibernate für Java-basierte Anwendungen, welche beliebten ORM-Frameworks stehen zur Verfügung, um in Play/Scala-basierten Anwendungen verwendet zu werden?
  9. Was ist das beste Tool zur Entwicklung von Play/Scala-Anwendungen zur Persistenz von Daten im MongoDB NoSQL-Datenspeicher?
  10. Beliebte Kunden, die Play und Scala zur Entwicklung ihrer Anwendungen verwenden?
  11. Welche ist die beste Sprache, die mit dem Play-Framework verwendet werden soll: Scala oder Java?
  12. Wie unterstützt Scala sowohl hochskalierbare als auch hochleistungsfähige Anwendungen?
  13. Welche Build-Tools stehen zur Entwicklung von Play- und Scala-basierten Anwendungen zur Verfügung?
  14. Was ist SBT? Welches ist das beste Build-Tool zur Entwicklung von Play- und Scala-Anwendungen?
  15. Welche Unit Testing-, Functional Testing- und/oder BDD-Frameworks sind für Play- und Scala-basierte Anwendungen verfügbar?
  16. Was ist das beste Code-Coverage-Tool für Play- und Scala-basierte Anwendungen?
  17. Was ist das beste Scala-Style-Checker-Tool für Play- und Scala-basierte Anwendungen?
  18. Welche IDEs unterstützen die Entwicklung von Play- und Scala-basierten Anwendungen und wie?
  19. Was ist das Standard-Unit- und Functional Testing-Framework für Play? Was ist das Standard-Build-Tool für Play? Was ist das Standard-Template-Engine für Play? Welcher eingebaute Webserver ist in Play Framework verfügbar?
  20. Warum ist Scala besser als Java? Was sind die Vorteile von Scala gegenüber Java (Java 8)? Im Vergleich zu Java, was sind die wichtigsten Vorteile oder Nutzen von Scala?
  21. Was ist eine anonyme Funktion in Scala? Was ist eine Funktionsliteral in Scala? Was sind die Vorteile einer anonymen Funktion/eines Funktionsliterals in Scala?
  22. Was ist eine Higher-Order Function (HOF)?
  23. Was sind die Unterschiede zwischen einer Case-Klasse und einer Normalen Klasse?
  24. Was sind die Vorteile des Play/Scala-Stacks zur Entwicklung von Webanwendungen?
  25. Was ist call-by-name? Unterstützen Scala und Java call-by-name? Was ist der Unterschied zwischen call-by-value und call-by-name Funktionsparametern?
  26. Welche OOP-Konstrukte von Java werden von Scala nicht unterstützt? Welche OOP-Konstrukte von Scala werden von Java nicht unterstützt? Welche neuen OOP-Konstrukte wurden von Scala eingeführt, aber werden von Java nicht unterstützt?
  27. Was sind die beliebten MVC-Frameworks für die Scala-Sprache zur Entwicklung von Webanwendungen?
  28. Was sind die wichtigsten Unterschiede zwischen Java-basierten und Scala-basierten Maven-Projektstrukturen?
  29. Was ist ein Extraktor in Scala? Was ist der Unterschied zwischen Konstruktor und Extraktor in Scala? Wofür wird ein Extraktor in Scala verwendet?
  30. Wofür wird ‚???‘ in Scala-basierten Anwendungen verwendet?
  31. Erklären Sie den Hauptunterschied zwischen List und Stream in der Scala-Collection-API? Wie können wir diesen Unterschied nachweisen? Wann wählen wir Stream?
  32. Was ist der Unterschied zwischen :: und #:: in Scala? Was ist der Unterschied zwischen ::: und #::: in Scala?
  33. Wenn ich ein Fullstack Scala Developer werden möchte, welche Technologie-Stack sollte ich lernen?

Scala Fortgeschrittene Interviewfragen und Antworten

In diesem Abschnitt werden wir jede einzelne Frage aus der obigen Liste aufgreifen und ausführlich mit geeigneten Beispielen diskutieren (falls erforderlich). Wenn Sie diese Konzepte eingehend mit Beispielen verstehen möchten, lesen Sie bitte meine früheren Beiträge im Abschnitt Scala-Tutorials.

Was ist die aktuellste Version von Scala? Was ist die Hauptänderung oder Aktualisierung in Scala 2.12?

Die aktuelle stabile Version von Scala ist 2.11.7. Sie unterstützt Java SE 7. Die Hauptänderung oder Aktualisierung in Scala 2.12 ist, dass sie nur Java SE 8 oder spätere Versionen unterstützt. Scala 2.12 ist nicht binärkompatibel mit der 2.11.x-Serie. Sie ist immer noch nur in Milestone-Builds verfügbar.

Was ist Option in Scala? Was sind Some und None? Was ist das Option/Some/None-Entwurfsmuster in Scala?

In Scala wird Option verwendet, um optionale Werte darzustellen, die entweder vorhanden oder nicht vorhanden sind. Option ist eine abstrakte Klasse. Option hat zwei Unterklassen: Some und None. Alle drei (Option, Some und None) sind in der „scala“-Package wie „scala.Option“ definiert. Option ist eine begrenzte Sammlung in Scala, die entweder kein oder ein Element enthält. Wenn Option kein Element enthält, ist das None. Wenn Option ein Element enthält, ist das Some. Some wird verwendet, um den vorhandenen Wert darzustellen. None wird verwendet, um den nicht vorhandenen Wert darzustellen. Beispiel:-

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

Lassen Sie uns annehmen, dass diese Methode von Liste stammt. Diese Methode hat einen Rückgabetyp von Option[String]. Wenn die Liste Elemente enthält, gibt diese Methode das Element „Some[String]“ zurück, das an dieser Indexposition verfügbar ist. Andernfalls gibt sie „None“ zurück (das bedeutet keine Elemente). Some ist eine Fallklasse und None ist ein Objekt. Da beide Fallklasse/Objekt sind, können wir sie sehr gut im Musterabgleich verwenden. Die Kombination all dieser drei Definitionen wird als Option/Some/None-Entwurfsmuster in Scala bezeichnet.

Was ist Either in Scala? Was sind Left und Right in Scala? Erklären Sie das Either/Left/Right-Entwurfsmuster in Scala?

In Scala ist Either eine abstrakte Klasse. Sie wird verwendet, um einen Wert von zwei möglichen Typen darzustellen. Sie nimmt zwei Typparameter an: Either[A,B]. Sie hat genau zwei Unterarten: Left und Right. Wenn Either[A,B] eine Instanz A repräsentiert, bedeutet das, dass es sich um Left handelt. Wenn es eine Instanz B repräsentiert, bedeutet das, dass es sich um Right handelt. Dies wird als Either/Left/Right-Entwurfsmuster in Scala bezeichnet.

Was ist das äquivalente Konstrukt von Scala’s Option in Java SE 8? Wofür wird Option in Scala verwendet?

Scala’s Option ist ähnlich wie Java SE 8’s Optional. Java SE 8 hat eine neue Hilfsklasse Optional eingeführt, um das Vorhandensein oder Nichtvorhandensein eines Werts zu repräsentieren. Optional ist im Paket java.util verfügbar. Sowohl Scala’s Option als auch Java SE 8’s Optional werden verwendet, um optionale Werte darzustellen. Beide dienen dazu, unerwünschte Nullprüfungen und NullPointerException zu vermeiden.

Was sind die Vorteile der Funktionalen Programmierung (FP) oder die Vorteile Reiner Funktionen?

Die folgenden sind die Vorteile der Funktionalen Programmierung (FP) oder die Vorteile Reiner Funktionen:

  • Mehr Modularität
  • Einfacher zu verstehen oder einfacher zu begründen
  • Einfacher zu testen
  • Weniger anfällig für Fehler
  • Einfacher zu wiederverwenden
  • Einfacher zu Parallelisierung und Generalisierung

Es gibt viele Scala-basierte Frameworks zur Entwicklung von RESTful Webdiensten. Die beliebtesten Frameworks sind:

  • Play Framework
    Im Play-Framework nennen wir REST-API-URLs Routen. Wir platzieren alle Routen an einem Ort im Play-Framework. Es ist ein zustandsloses Web-Framework, um REST-APIs einfach zu entwickeln.- Scalatra Framework
    Es ist ein sehr einfaches und einfaches Scala-basiertes Web-Framework zur Entwicklung von REST-APIs.- Spray Framework
    Es ist sehr prägnant und auf dem Akka-Framework aufgebaut, daher ist es besser, REST-APIs mit dem Aktorenmodell zu entwickeln.- Lift Framework
    Es ermöglicht die Routenführung unter Verwendung des Konzepts des Pattern Matching.

Welches ist das beste Framework zur Generierung von REST-API-Dokumentation für Scala-basierte Anwendungen?

Swagger ist das beste Werkzeug für diesen Zweck. Es ist ein sehr einfaches und Open-Source-Tool zur Generierung von REST-API-Dokumentationen mit JSON für Scala-basierte Anwendungen.

  • Wenn wir Play with Scala verwenden, um Ihre REST-API zu entwickeln, verwenden wir das play-swagger-Modul für die REST-API-Dokumentation.
  • Wenn wir Spray mit Scala verwenden, um Ihre REST-API zu entwickeln, verwenden wir das spray-swagger-Modul für die REST-API-Dokumentation.

Beliebte ORM-Frameworks für Play/Scala-basierte Anwendungen:

  • Slick
  • Anorm
  • SORM (Scala ORM)
  • Squeryl

Welches ist das beste Tool, um Play/Scala-Anwendungen zu entwickeln und Daten in einer MongoDB NoSQL-Datenbank zu speichern?

ReactiveMongo ist der beste Scala-Treiber zur Entwicklung von Play/Scala-Anwendungen zur Speicherung von Daten im MongoDB NoSQL-Datenspeicher. Er unterstützt vollständig nicht blockierende und asynchrone I/O-Operationen.

Tausende von Kunden setzen Play und Scala in der Produktion ein. Die folgende Liste enthält einige der beliebtesten Kunden, die Play und Scala aktiv nutzen.

  • LinkedIn
  • The Guardian
  • Ocado
  • LuchidChart
  • GOV.UK

Welche ist die beste Sprache, die mit dem Play-Framework verwendet werden soll: Scala oder Java?

Play 2 ist vollständig in Scala geschrieben. Wenn wir Java mit dem Play-Framework verwenden, stoßen wir auf viele Probleme, da Java keine vollständige FP-Unterstützung bietet. Scala ist die beste Option für die Entwicklung von hochskalierbaren Anwendungen mit besserer Leistung, Nebenläufigkeit/Parallelität und geringer Latenz im Zusammenhang mit dem Play-Framework, denn:

  • Play 2 ist vollständig in Scala geschrieben.
  • Es unterstützt alle FP-Funktionen.
  • Es ist eher eine Ausdruckssprache als Java.
  • Es unterstützt das Akka Actor-Modell sehr einfach.
  • Es unterstützt einige neue OOP-Funktionen wie Traits.
  • Play’s integrierte Vorlagen sind in Scala entwickelt

Wie unterstützt Scala sowohl hoch skalierbare als auch hochleistungsfähige Anwendungen?

Da Scala die Multi-Paradigma-Programmierung unterstützt (sowohl OOP als auch FP) und das Actor-Concurrency-Modell verwendet, können wir sehr leicht sehr hoch skalierbare und hochleistungsfähige Anwendungen entwickeln.

Welche Build-Tools stehen zur Entwicklung von Play- und Scala-basierten Anwendungen zur Verfügung?

Die folgenden drei sind die beliebtesten verfügbaren Build-Tools zur Entwicklung von Play- und Scala-Anwendungen:

  • SBT
  • Maven
  • Gradle

Was ist SBT? Welches ist das beste Build-Tool zur Entwicklung von Play- und Scala-Anwendungen?

SBT steht für Scala Build Tool. Es ist ein einfaches Build-Tool zur Entwicklung von Scala-basierten Anwendungen. Die meisten Leute verwenden SBT als Build-Tool für Play- und Scala-Anwendungen. Zum Beispiel verwendet das IntelliJ IDEA Scala Plugin standardmäßig SBT als Build-Tool für diesen Zweck.

Welche Unit-Testing-, Functional-Testing- und/oder BDD-Frameworks stehen für Play- und Scala-basierte Anwendungen zur Verfügung?

Die folgenden sind die beliebtesten verfügbaren Unit-Testing-, Functional-Testing- und/oder BDD-Frameworks für Play/Scala-basierte Anwendungen:

  • Spec2
  • ScalaTest
  • ScalaCheck
  • Mokito

Welches ist das beste Code-Coverage-Tool für Play- und Scala-basierte Anwendungen?

SCoverage ist das Code-Coverage-Tool für Play- und Scala-basierte Anwendungen. SCoverage steht für Scala Code-Coverage-Tool. Es hat drei separate Plug-Ins zur Unterstützung der folgenden Build-Tools:

  • SBT
  • Maven
  • Gradle

Welches ist das beste Scala-Style-Checker-Tool für Play- und Scala-basierte Anwendungen?

Ähnlich wie Checkstyle für Java-basierte Anwendungen ist Scalastyle das beste Scala-Style-Checker-Tool für Play- und Scala-basierte Anwendungen. Scalastyle überprüft unseren Scala-Quellcode und weist auf potenzielle Probleme hin. Es hat drei separate Plug-Ins zur Unterstützung der folgenden Build-Tools:

  • SBT
  • Maven
  • Gradle

Es hat zwei separate Plug-Ins zur Unterstützung der folgenden beiden IDEs:

  • IntelliJ IDEA
  • Eclipse IDE

Welche IDEs unterstützen die Entwicklung von Play- und Scala-basierten Anwendungen und wie?

Die folgenden beiden beliebten IDEs unterstützen die Entwicklung von Play- und Scala-basierten Anwendungen:

  • IntelliJ IDEA
  • Eclipse IDE

Sie unterstützen dies durch die Verwendung von Scala-Plugins. Zum Beispiel hat Eclipse IDE eine Scala IDE für Eclipse, um die Entwicklung von Play- und Scala-basierten Anwendungen zu unterstützen. IntelliJ IDEA hat ein Plug-In namens „Scala Plugin for IntelliJ IDEA“, das „Scala, SBT und Play 2 Framework“ basierte Anwendungen unterstützt.- Was ist das Standard-Unit- und Functional-Testing-Framework für Play? Welches ist das Standard-Build-Tool für Play? Welches ist das Standard-Template-Engine für Play? Welcher eingebauter Webserver ist in Play Framework verfügbar?
Das Standard-Unit- und Functional-Testing-Framework für Play Framework ist Spec2. Es ist sehr einfach, Play/Scala-basierte Anwendungen mit dem Spec2-Framework zu testen. Das Standard-Template-Engine von Play Framework ist „Twirl“, das in Scala entwickelt wurde. Mit diesen Vorlagen können Play/Scala-basierte Anwendungen sehr einfach entwickelt werden. Der eingebaute oder Standard-Webserver, der für das Play Framework verfügbar ist, ist der Netty Server.

Warum Scala besser als Java ist? Was sind die Vorteile von Scala gegenüber Java (Java 8)? Verglichen mit Java, was sind die Hauptvorteile oder -nutzen von Scala?

Weil Scala die folgenden zusätzlichen Funktionen unterstützt, ist es besser als Java 8:

  • Vollständige FP-Funktionen
  • Mehr Ausdruckssprache
  • Pattern Matching
  • Bessere Unterstützung für das Akka Actor Model
  • Automatische Auflösung für das Diamantproblem bei Vererbung mit Traits
  • Asynchrones und nicht blockierendes IO-Programmieren mit dem Akka-Framework
  • Vollständige reaktive Streaming-API

Was ist eine anonyme Funktion in Scala? Was ist ein Funktionsliteral in Scala? Welche Vorteile bietet eine anonyme Funktion/ein Funktionsliteral in Scala?

Anonyme Funktion ist ebenfalls eine Funktion, hat jedoch keinen Funktionsnamen. Sie wird auch als Funktionsliteral bezeichnet. Die Vorteile einer anonymen Funktion / eines Funktionsliterals in Scala:

  • Wir können einem Funktionsliteral eine Variable zuweisen
  • Wir können einem anderen Funktionen/Methoden ein Funktionsliteral übergeben
  • Wir können ein Funktionsliteral als das Ergebnis/eine Rückgabewert einer anderen Funktion/Methode zurückgeben.

Was ist eine Higher-Order Function (HOF)?

Higher Order Function (HOF) ist ebenfalls eine Funktion, die eine oder beide der folgenden Dinge durchführt:

  • Funktionen als Argumente entgegennehmen
  • Funktionen als ihre Ergebnisse zurückgeben

Was sind die Unterschiede zwischen Case Class und Normal Class?

Case Class ist ebenfalls eine Klasse. Im Vergleich zu normalen Klassen bietet sie jedoch die folgenden zusätzlichen Funktionen oder Vorteile:

  • Standardmäßig sind die Konstruktorparameter einer Case Class ‚val‘. Wir müssen die Parameter nicht mit ‚val‘ deklarieren.
  • Standardmäßig werden die Konstruktorparameter einer Case Class zu Klassenfeldern.
  • Diese Methoden werden automatisch hinzugefügt: toString, equals, hashCode, copy. apply und unapply.
  • Es wird automatisch ein Companion-Objekt erstellt.
  • Es ist nicht erforderlich, das ’new‘-Schlüsselwort zu verwenden, um eine Instanz der Case Class zu erstellen.
  • Einfach in der Pattern Matching zu verwenden.

All diese Funktionen werden vom Scala Compiler zur Kompilierzeit hinzugefügt. Dies ist mit einer normalen Klasse nicht möglich.

Was sind die Vorteile des Play/Scala-Stacks zur Entwicklung von Webanwendungen?

Die folgenden sind die wichtigsten Vorteile des Play/Scala-Stacks zur Entwicklung von Webanwendungen:

  • Open Source
    Play ist ein Open-Source-Framework für die Entwicklung von Webanwendungen. – Bessere Produktivität
    Die Auto-Reload-Funktion des Play-Frameworks verbessert die Entwicklerproduktivität. Es ist nicht erforderlich, Änderungen zu erstellen, bereitzustellen und zu testen. Führen Sie einfach unsere Änderungen durch und aktualisieren Sie die Seite, um die Änderungen zu sehen. – Zustandslos und einfach zu entwickelnde REST-API
    Play ist ein auf HTTP basierendes zustandsloses Modell zur Bedienung von Webanforderungen, sodass die Entwicklung von REST-APIs oder RESTful-Webdiensten sehr einfach ist. – Bessere Fehlerbehandlung
    Wenn wir unsere Webanwendung mit dem Play-Framework entwickeln, informiert es alle Fehler im Browser in einem sehr nützlichen Format. Es zeigt die Fehlermeldung, den Dateispeicherort, die Zeilennummer, an der der Fehler aufgetreten ist, und hebt den Codeausschnitt hervor, um den Fehler sehr leicht zu verstehen. – Hohe Leistung und bessere Skalierbarkeit mit Reactive
    Das Play-Framework wurde unter Verwendung reaktiver Entwurfsmuster entwickelt und basiert auf dem Netty-Server, um die Funktion für nicht blockierende E/A zu nutzen. Aufgrund dieser Funktion können wir sehr einfach sehr skalierbare und leistungsstarke Anwendungen entwickeln. – Einfach zu erweitern
    Play ist ein sehr flexibles Framework und unterstützt die Entwicklung von Plug-ins, um seine Funktionen und Funktionalität sehr einfach zu erweitern. – Hohe Nebenläufigkeit und bessere Parallelität
    Da sowohl Scala als auch Play die funktionale Programmierung unterstützen, ist es sehr einfach, Anwendungen mit hoher Nebenläufigkeit und besserer Parallelität zu entwickeln, da die FP die Unveränderlichkeit, reine Funktionen (Funktionen ohne Seiteneffekte), Musterabgleich, Aktorenmodell usw. unterstützt. – Bessere Wiederverwendbarkeit, einfach zu testen und modularer
    Da sowohl Scala als auch Play die funktionale Programmierung unterstützen, können wir modularere und wiederverwendbarere Anwendungen entwickeln. Es ist auch sehr einfach, modularere Anwendungen zu testen.

Welche Java-OOP-Konstrukte werden von Scala nicht unterstützt? Welche Scala-OOP-Konstrukte werden von Java nicht unterstützt? Welche neuen OOP-Konstrukte werden von Scala eingeführt, aber von Java nicht unterstützt?

Java-OOP-Konstrukte, die von Scala nicht unterstützt werden:

  • Es gibt kein Interface-Konzept in Scala
  • Es gibt kein Enum-Konzept in Scala

Scala-OOP-Konstrukte, die von Java nicht unterstützt werden: ODER Die neuen OOP-Konstrukte, die von Scala eingeführt wurden, aber von Java nicht unterstützt werden:

  • Scala Traits
  • Lösen des Vererbungsdiamantenproblems automatisch.

Was bedeutet Call-by-Name? Unterstützen Scala und Java Call-by-Name? Was ist der Unterschied zwischen Call-by-Value- und Call-by-Name-Funktionsparametern?

Call-by-Name bedeutet, dass Methoden-/Funktionsparameter nur dann ausgewertet werden, wenn wir sie benötigen oder auf sie zugreifen. Wenn wir sie nicht verwenden, werden sie nicht ausgewertet. Scala unterstützt sowohl Call-by-Value als auch Call-by-Name-Funktionsparameter. Java unterstützt jedoch nur Call-by-Value, nicht jedoch Call-by-Name. Unterschied zwischen Call-by-Value und Call-by-Name: Der Hauptunterschied zwischen den beiden wird unten beschrieben:

  • Bei Call-by-Name werden die Funktionsparameter nur dann ausgewertet, wenn sie benötigt werden, jedoch nicht, wenn die Funktion aufgerufen wird.
  • Bei Call-by-Value werden die Funktionsparameter ausgewertet, wenn die Funktion aufgerufen wird.
  • Bei Call-by-Value werden die Parameter vor der Ausführung der Funktion ausgewertet und sie werden unabhängig davon, wie oft wir sie in dieser Funktion verwenden, nur einmal ausgewertet.
  • Bei Call-by-Name werden die Parameter jedes Mal ausgewertet, wenn wir auf sie zugreifen, und sie werden jedes Mal ausgewertet, wenn wir sie in dieser Funktion verwenden.
  • Scala Syntaxunterschiede
    Call-by-Value:
def myFunction(a: Int, b: Int) { }

Hier sind a und b beides Call-by-Value-Parameter für meine Funktion. Call-by-Name:

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

Hier ist a ein Call-by-Value-Parameter und b ist ein Call-by-Name-Parameter für meine Funktion.

Die folgenden sind die beliebtesten MVC-Frameworks für die Scala-Sprache zur Entwicklung von Webanwendungen:

  • Play Framework
  • Scalatra Framework
  • Spray Framework
  • Lift Framework

Was sind die Hauptunterschiede zwischen Java-basierten und Scala-basierten Maven-Projektstrukturen?

Die meisten Java-basierten Projekte verwenden Maven als ihr Build-Tool. Die meisten Leute verwenden jedoch SBT als Build-Tool, um ihre auf Scala basierenden Anwendungen zu entwickeln, aber einige Teams verwenden auch Maven als Build-Tool, um ihre auf Scala basierenden Anwendungen zu entwickeln. Die Ordnerstruktur von Maven für Java-basierte und Scala-basierte Projekte ist fast gleich, nur der Ordnername ändert sich, wie in den folgenden Diagrammen gezeigt: Java- und Scala-Ordner. Java-basierte Maven-Projektordnerstruktur: Scala-basierte Maven-Projektordnerstruktur:

Was ist ein Extraktor in Scala? Was ist der Unterschied zwischen Konstruktor und Extraktor in Scala? Wofür wird ein Extraktor in Scala verwendet?

Nicht nur in Java und Scala wird der Konstruktor in fast allen objektorientierten Sprachen verwendet, um ein Objekt oder eine Instanz einer Klasse unter Verwendung ihrer Parameter (oder Komponenten) zu erstellen oder zusammenzusetzen. Der Extraktor ist das genaue Gegenteil des Konstruktors. In Scala wird der Extraktor verwendet, um ein Objekt in seine Parameter (oder Komponenten) zu zerlegen oder zu disassemblieren. In Scala ist die Methode „apply“ ein Konstruktor. Intern verwendet der Extraktor die Methode „unapply“, um ein Objekt in seine Teile (oder Parameter) zu zerlegen. In Scala wird der Extraktor hauptsächlich im Konzept des Pattern Matchings verwendet. Wir werden das Konzept des Pattern Matchings bald besprechen.

Wofür werden „???“ in auf Scala basierenden Anwendungen verwendet?

Diese drei Fragezeichen „???“ sind weder ein Operator noch eine Methode in Scala. Sie dienen dazu, eine Methode zu markieren, die sich noch in der Entwicklung befindet, was bedeutet, dass der Entwickler eine Implementierung dafür bereitstellen sollte. Diese Methode ist in der Klasse scala.PreDef definiert, wie unten gezeigt:

def ??? : Nothing = throw new NotImplementedError

Wenn wir diese Methode ausführen, ohne eine Implementierung bereitzustellen, wird eine „NotImplementedError“-Fehlermeldung ausgegeben, wie unten gezeigt:

scala> def add(a:Int, b:Int) : Int = ???
add: (a: Int, b: Int)Int

scala> add(10,20)
scala.NotImplementedError: an implementation is missing

Erklären Sie den Hauptunterschied zwischen List und Stream in der Scala Collection API. Wie können wir diesen Unterschied beweisen? Wann wählen wir Stream?

In Scala stammen sowohl List als auch Stream aus der Collection API und funktionieren fast ähnlich. Beide sind unveränderliche Sammlungen. Es gibt jedoch einen Hauptunterschied zwischen List und Stream in der Scala Collection API: Das bedeutet, dass List-Elemente gierig ausgewertet werden und Stream-Elemente faul ausgewertet werden, wenn wir auf sie zugreifen.

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

Hier können wir beobachten, dass alle List-Elemente zum Zeitpunkt der Erstellung des List-Objekts ausgewertet werden. Wenn wir jedoch dasselbe mit Stream tun, können wir nicht alle Elemente sehen. Wir können nur das zuerst ausgewertete Element sehen und die restlichen Elemente werden faul ausgewertet, wie unten gezeigt:

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

Wenn wir eine faule Sammlung möchten, um Elemente nur auszuwerten, wenn wir auf sie zugreifen, ist es besser, Stream zu verwenden.

Was ist der Unterschied zwischen :: und #:: in Scala? Was ist der Unterschied zwischen ::: und #::: in Scala?

In der Scala Collection API,

  • :: und ::: sind Methoden in der List-Klasse verfügbar.
  • #:: und #::: sind Methoden in der Stream-Klasse verfügbar.
  • In der List-Klasse wird die Methode :: verwendet, um ein Element am Anfang der Liste anzuhängen.
scala> var list1 = List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)

scala> list1 = 0 :: list1
list1: List[Int] = List(0, 1, 2, 3, 4)
  • In der List-Klasse wird die Methode ::: verwendet, um die Elemente einer gegebenen Liste vor dieser Liste zu konkatenieren.
scala> var list1 = List(3,4,5)
list1: List[Int] = List(3, 4, 5)

scala> val list2 = List(1,2) ::: list1
list2: List[Int] = List(1, 2, 0, 1, 2, 3, 4)
  • In der Stream-Klasse wird die Methode #:: verwendet, um ein gegebenes Element am Anfang des Streams anzuhängen. Nur dieses neu hinzugefügte Element wird ausgewertet und von träge ausgewerteten Stream-Elementen gefolgt.
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> s1 = 0 #:: s1
s1: scala.collection.immutable.Stream[Int] = Stream(0, ?)
  • In der Stream-Klasse wird die Methode #::: verwendet, um einen gegebenen Stream am Anfang des Streams zu konkatenieren. Nur dieses neu hinzugefügte Element wird ausgewertet und von träge ausgewerteten Stream-Elementen gefolgt.
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> val s2 = Stream(-1,0) #::: s1
s2: scala.collection.immutable.Stream[Int] = Stream(-1, ?)
  • :: Methode fungiert als Kons-Operator für die List-Klasse, und #:: Methode fungiert als Kons-Operator für die Stream-Klasse. Hier steht ‚cons‘ für Konstrukt.
  • ::: Methode fungiert als Verknüpfungsoperator für die List-Klasse und #::: Methode wirkt als Verknüpfungsoperator für die Stream-Klasse.

Wenn Sie ein Fullstack Scala-Entwickler werden möchten, welche Technologie-Stack sollten Sie lernen?

Wenn Sie ein Fullstack Scala-Entwickler werden möchten, sollten Sie den folgenden Technologie-Stack lernen:

  • Scala 2.11.7
  • Play 2.4.6 Framework
  • Akka 2.3 Framework
  • Ein Build-Tool: SBT/Maven
  • Ein JS-Framework: CoffeeScript/JavaScript
  • Eine IDE: IntelliJ IDEA 15/ Eclipse IDE 4.x
  • Eine TDD & BDD Framework: ScalaTest,Spec2,ScalaCheck,Mockito
  • Microservices mit Play und Scala
  • SCoverage
  • Scalastyle
  • Funktionale Programmierungsdesignmuster
  • Machine Learning mit Scala

{
„error“: „Upstream error…“
}

Source:
https://www.digitalocean.com/community/tutorials/scala-advanced-interview-questions