Voor het lezen van deze post, lees alsjeblieft mijn vorige twee posts “Scala Basic” en “Scala Intermediate” Interview Questions and Answers om een basis te krijgen van Scala Language.
Scala Advanced Interview Questions
In deze post gaan we het hebben over enkele geavanceerde Scala Interviewvragen die betrekking hebben op geavanceerde Scala-concepten en ook enkele projectgerelateerde concepten in real-time. Note: Aangezien deze lijst al erg groot is geworden, ga ik nog een andere post maken met de resterende vragen en antwoorden. Raadpleeg die post op: “Scala Intermediate en Advanced Interview Questions and Answers” We zullen ook Scala/Java Concurrency en Parallelism Interview Questions and Answers bespreken, die nuttig zijn voor senior of ervaren Scala/Java-ontwikkelaars.
Scala Advanced Interview Questions
In deze sectie gaan we alle Scala Intermediate Interview Questions opsommen en in de volgende sectie zullen we ze uitvoerig bespreken.
- Wat is de huidige nieuwste versie van Scala? Wat is de belangrijkste verandering of update in Scala 2.12?
- Wat is Option in Scala? Wat zijn Some en None? Wat is het Option/Some/None Designpatroon in Scala?
- Wat is Either in Scala? Wat zijn Left en Right in Scala? Leg het Either/Left/Right Designpatroon in Scala uit?
- Wat is het equivalente construct van Scala’s Option in Java SE 8? Waarvoor wordt Option in Scala gebruikt?
- Wat zijn de voordelen van Functioneel Programmeren (FP) of de voordelen van Pure Functions?
- Wat zijn de populaire op Scala gebaseerde frameworks om RESTful Webservices of REST API’s te ontwikkelen?
- Wat is het beste framework om REST API-documentatie te genereren voor op Scala gebaseerde applicaties?
- Vergelijkbaar met Hibernate voor op Java gebaseerde applicaties, wat zijn de populaire ORM-frameworks die beschikbaar zijn om te gebruiken in Play/Scala gebaseerde applicaties?
- Wat is de beste tool om Play/Scala applicaties te ontwikkelen om gegevens op te slaan in de MongoDB NoSQL-database?
- Populaire klanten die Play en Scala gebruiken om hun applicaties te ontwikkelen?
- Wat is de beste taal om te gebruiken met het Play-framework: Scala of Java?
- Hoe ondersteunt Scala zowel zeer schaalbare als zeer prestatiegerichte applicaties?
- Welke Build Tools zijn beschikbaar om Play en Scala gebaseerde applicaties te ontwikkelen?
- Wat is SBT? Wat is de beste Build Tool om Play en Scala applicaties te ontwikkelen?
- Welke Unit Testing, Functional Testing en/of BDD Frameworks zijn beschikbaar voor Play en op Scala gebaseerde applicaties?
- Wat is het beste Code-coverage tool beschikbaar voor Play en op Scala gebaseerde applicaties?
- Wat is de beste Scala style checker tool beschikbaar voor Play en op Scala gebaseerde applicaties?
- Welke IDE’s ondersteunen de ontwikkeling van Play en op Scala gebaseerde applicaties en hoe?
- Wat is het standaard Unit en Functional Testing Framework voor Play? Wat is de standaard Build Tool voor Play? Wat is de standaard Template Engine voor Play? Wat is de ingebouwde Web Server beschikbaar in Play Framework?
- Waarom is Scala beter dan Java? Wat zijn de voordelen van Scala ten opzichte van Java (Java 8)? Wat zijn de belangrijkste voordelen of voordelen van Scala in vergelijking met Java?
- Wat is een Anonieme Functie In Scala? Wat is een Functie Literal in Scala? Wat zijn de voordelen van een Anonieme Functie/Functie Literal in Scala?
- Wat is een Hogere-Orde Functie (HOF)?
- Wat zijn de verschillen tussen Case class en Normale Class?
- Wat zijn de voordelen van de Play/Scala-stack voor het ontwikkelen van webapplicaties?
- Wat is call-by-name? Ondersteunen Scala en Java call-by-name? Wat is het verschil tussen call-by-value en call-by-name functieparameters?
- Welke OOP-constructies van Java worden niet ondersteund door Scala? Welke OOP-constructies van Scala worden niet ondersteund door Java? Welke nieuwe OOP-constructies zijn geïntroduceerd door Scala, maar worden niet ondersteund door Java?
- Wat zijn de populaire MVC-frameworks voor de Scala-taal om webapplicaties te ontwikkelen?
- Wat zijn de belangrijkste verschillen tussen de structuur van een op Java gebaseerd Maven-project en een op Scala gebaseerd Maven-project?
- Wat is een Extractor in Scala? Wat is het verschil tussen een Constructor en een Extractor in Scala? Wat is het gebruik van een Extractor in Scala?
- Wat is het gebruik van ‘???’ in Scala-gebaseerde toepassingen?
- Leg het belangrijkste verschil uit tussen List en Stream in de Scala Collection API. Hoe bewijzen we dat verschil? Wanneer kiezen we voor Stream?
- Wat is het verschil tussen :: en #:: in Scala? Wat is het verschil tussen ::: en #::: in Scala?
- Als ik een Fullstack Scala Developer wil worden, welke technologiestack moet ik dan leren?
Scala Geavanceerde Interviewvragen en Antwoorden
In dit gedeelte zullen we elke vraag uit de bovenstaande lijst oppakken en uitvoerig bespreken met geschikte voorbeelden (indien nodig). Als je deze concepten diepgaand wilt begrijpen met voorbeelden, ga dan door mijn eerdere berichten in de Scala Tutorials-sectie.
Wat is de huidige laatste versie van Scala? Wat is de belangrijkste verandering of update in Scala 2.12?
De huidige stabiele versie van Scala is 2.11.7. Het ondersteunt Java SE 7. De belangrijkste verandering of update in Scala 2.12 is dat het alleen Java SE 8 of latere versies ondersteunt. Scala 2.12 is niet binair compatibel met de 2.11.x-serie. Het bevindt zich nog steeds alleen in Mile Stone Builds.
Wat is Option in Scala? Wat zijn Some en None? Wat is het Option/Some/None-ontwerppatroon in Scala?
In Scala wordt Option gebruikt om optionele waarden te vertegenwoordigen die al dan niet bestaan. Option is een abstracte klasse. Option heeft twee subklassen: Some en None. Alle drie (Option, Some en None) zijn gedefinieerd in het “scala” pakket zoals “scala.Option”. Option is een begrensde verzameling in Scala, die nul of één element bevat. Als Option nul elementen bevat, is dat None. Als Option één element bevat, is dat Some. Some wordt gebruikt om bestaande waarden te vertegenwoordigen. None wordt gebruikt om niet-bestaande waarden te vertegenwoordigen. Voorbeeld:-
def get(val index: Int): Option[String]
Laat ons aannemen dat deze methode afkomstig is van een lijst. Deze methode heeft een retourtype van Option[String]. Als de lijst elementen bevat, geeft deze get-methode het element “Some[String]” terug dat beschikbaar is op die indexpositie. Anders geeft het “None” terug (dat wil zeggen geen elementen). Some is een case class en None is een object. Omdat beide case class/object zijn, kunnen we ze zeer goed gebruiken in Pattern Matching. De combinatie van al deze drie definities staat bekend als het Option/Some/None Design Pattern in Scala.
Wat is Either in Scala? Wat zijn Left en Right in Scala? Leg het Either/Left/Right Design Pattern in Scala uit?
In Scala is Either een abstracte klasse. Het wordt gebruikt om één waarde van twee mogelijke typen voor te stellen. Het neemt twee typeparameters aan: Either[A,B]. Het heeft precies twee subtypen: Left en Right. Als Either[A,B] een instantie van A vertegenwoordigt, betekent dit dat het Left is. Als het een instantie van B vertegenwoordigt, betekent dit dat het Right is. Dit staat bekend als het Either/Left/Right Design Pattern in Scala.
Wat is het equivalent van Scala’s Option in Java SE 8? Wat is het gebruik van Option in Scala?
Scala’s Option is vergelijkbaar met Java SE 8’s Optional. Java SE 8 heeft een nieuwe hulpprogrammaklasse Optional geïntroduceerd om het bestaan of het niet-bestaan van een bepaalde waarde te vertegenwoordigen. Optional is beschikbaar in het java.util-pakket. Zowel Scala’s Option als Java SE 8’s Optional worden gebruikt om optionele waarden te vertegenwoordigen. Beide worden gebruikt om ongewenste null-controles en NullPointerException te vermijden.
Wat zijn de voordelen van Functioneel Programmeren (FP) of de voordelen van Zuivere Functies?
De volgende zijn de voordelen van Functioneel Programmeren (FP) of de voordelen van Zuivere Functies:
- Meer Modulair
- Gemakkelijker te begrijpen of Gemakkelijker te redeneren
- Gemakkelijker te testen
- Minder vatbaar voor bugs
- Gemakkelijker te hergebruiken
- Gemakkelijker te paralleliseren en te generaliseren
Wat zijn de populaire op Scala gebaseerde frameworks om RESTful webdiensten of REST API’s te ontwikkelen?
Er zijn veel op Scala gebaseerde frameworks om RESTful webdiensten te ontwikkelen. De meest populaire frameworks zijn:
- – Play Framework
In Play noemen we REST API-URL’s routes. We plaatsen alle routes op één plek in het Play-framework. Het is een stateless webframework om REST API’s gemakkelijk te ontwikkelen.- Scalatra Framework
Het is een zeer eenvoudig en gemakkelijk op Scala gebaseerd webframework om REST API’s te ontwikkelen.- Spray Framework
Het is zeer beknopt en gebouwd op het Akka-framework, dus het is beter om REST API’s te ontwikkelen met behulp van het Actor Model.- Lift Framework
Het maakt routering mogelijk met behulp van het Pattern Matching-concept.
Wat is het beste framework om REST API-documentatie te genereren voor op Scala gebaseerde toepassingen?
Swagger is het beste gereedschap hiervoor. Het is een zeer eenvoudig en open-source gereedschap voor het genereren van REST API-documentatie met JSON voor op Scala gebaseerde toepassingen.
- Als we Play met Scala gebruiken om uw REST API te ontwikkelen, gebruik dan de play-swagger module voor de REST API-documentatie.
- Als we Spray met Scala gebruiken om uw REST API te ontwikkelen, gebruik dan de spray-swagger module voor de REST API-documentatie.
Net als Hibernate voor op Java gebaseerde applicaties, Wat zijn de populaire ORM-frameworks die beschikbaar zijn om te gebruiken in Play/Scala-gebaseerde applicaties?
Net als JPA, Hibernate en Toplink, etc. ORM-frameworks voor op Java gebaseerde applicaties, zijn er veel ORM-frameworks om te gebruiken in Play/Scala-gebaseerde applicaties. Populaire ORM-frameworks voor Play/Scala-gebaseerde applicaties zijn:
- Slick
- Anorm
- SORM (Scala ORM)
- Squeryl
Wat is het beste gereedschap om Play/Scala-applicaties te ontwikkelen om gegevens te persistenteren in MongoDB NoSQL-dataopslag?
ReactiveMongo is de beste Scala Driver om Play/Scala-applicaties te ontwikkelen voor het opslaan van gegevens in de MongoDB NoSQL-database. Het ondersteunt volledig niet-blokkerende en asynchrone I/O-operaties.
Populaire klanten die Play en Scala gebruiken om hun applicaties te ontwikkelen?
Duizenden klanten gebruiken Play en Scala in productie. De volgende lijst bevat de meer populaire klanten die actief Play en Scala gebruiken.
- The Guardian
- Ocado
- LuchidChart
- GOV.UK
Wat is de beste taal om te gebruiken met het Play-framework: Scala of Java?
Play 2 is volledig geschreven in Scala. Als we Java gebruiken met het Play-framework, moeten we veel problemen oplossen omdat Java geen volledige FP-functies ondersteunt. Scala is de beste optie om te gebruiken met het Play-framework voor het ontwikkelen van zeer schaalbare, betere prestaties met Concurrency/Parallelisme en toepassingen met lage latentie, omdat:
- Play 2 is volledig geschreven in Scala.
- Het ondersteunt volledige FP-functies.
- Het is meer een expressietaal dan Java.
- Het ondersteunt het Akka Actor-model zeer eenvoudig
- Het ondersteunt enkele nieuwe OOP-functies zoals Traits.
- De ingebouwde sjablonen van Play zijn ontwikkeld in Scala
Hoe ondersteunt Scala zowel zeer schaalbare als zeer prestatiegerichte toepassingen?
Omdat Scala Multi-Paradigm Programming ondersteunt (zowel OOP als FP) en het Actor Concurrency Model gebruikt, kunnen we zeer eenvoudig zeer schaalbare en hoogwaardige toepassingen ontwikkelen.
Welke Build Tools zijn beschikbaar voor het ontwikkelen van Play- en Scala-gebaseerde toepassingen?
De volgende drie zijn de meest populaire beschikbare Build Tools voor het ontwikkelen van Play- en Scala-toepassingen:
- SBT
- Maven
- Gradle
Wat is SBT? Wat is het beste Build Tool om Play en Scala-applicaties te ontwikkelen?
SBT staat voor Scala Build Tool. Het is een eenvoudige buildtool om Scala-gebaseerde applicaties te ontwikkelen. De meeste mensen gebruiken SBT als buildtool voor Play- en Scala-applicaties. Bijvoorbeeld, de IntelliJ IDEA Scala Plugin gebruikt standaard SBT als buildtool voor dit doel.
Welke Unit Testing, Functional Testing en/of BDD-frameworks zijn beschikbaar voor Play en Scala-gebaseerde applicaties?
De volgende zijn de meest populaire beschikbare Unit Testing, Functional Testing en/of BDD-frameworks voor Play/Scala-gebaseerde applicaties:
- Spec2
- ScalaTest
- ScalaCheck
- Mokito
Wat is de beste code-dekkingshulpmiddel dat beschikbaar is voor Play en Scala-gebaseerde applicaties?
SCoverage is het code-dekkingshulpmiddel voor Play en Scala-gebaseerde applicaties. SCoverage staat voor Scala Code-dekkingshulpmiddel. Het heeft drie aparte plug-ins om de volgende buildtools te ondersteunen:
- SBT
- Maven
- Gradle
Wat is de beste Scala-stijlcontrolehulpmiddel dat beschikbaar is voor Play en Scala-gebaseerde applicaties?
Net als Checkstyle voor op Java gebaseerde applicaties, is Scalastyle het beste Scala-stijlcontrolehulpmiddel dat beschikbaar is voor Play en Scala-gebaseerde applicaties. Scalastyle controleert onze Scala-broncode en geeft mogelijke problemen ermee aan. Het heeft drie aparte plug-ins om de volgende buildtools te ondersteunen:
- SBT
- Maven
- Gradle
Het heeft twee aparte plug-ins om de volgende twee IDE’s te ondersteunen:
- IntelliJ IDEA
- Eclipse IDE
Welke IDE’s ondersteunen de ontwikkeling van Play- en Scala-gebaseerde applicaties en hoe?
De volgende twee populaire IDE’s ondersteunen de ontwikkeling van Play- en Scala-gebaseerde applicaties:
- IntelliJ IDEA
- Eclipse IDE
Ze ondersteunen dit door het gebruik van Scala-plugins, zoals Eclipse IDE een Scala IDE voor Eclipse heeft om de ontwikkeling van Play- en Scala-gebaseerde applicaties te ondersteunen. IntelliJ IDEA heeft een plug-in genaamd “Scala Plugin for IntelliJ IDEA” om toepassingen op basis van “Scala, SBT en Play 2 Framework” te ondersteunen.- Wat is het standaard Unit- en Functioneel testframework voor Play? Wat is de standaard buildtool voor Play? Wat is het standaard template-engine voor Play? Welke ingebouwde webserver is beschikbaar in het Play Framework?
Het standaard Unit- en Functioneel testframework voor Play Framework is Spec2. Het is zeer eenvoudig om Play/Scala-gebaseerde applicaties te testen met het Spec2-framework. Het standaard ingebouwde template voor Play Framework is “Twirl”. Dit is ontwikkeld in Scala. Door deze sjablonen te gebruiken, kunnen we eenvoudig Play/Scala-gebaseerde applicaties ontwikkelen. De ingebouwde of standaard webserver voor het Play Framework is de Netty Server.
Waarom is Scala beter dan Java? Wat zijn de voordelen van Scala ten opzichte van Java (Java 8)? Wat zijn de belangrijkste voordelen of voordelen van Scala in vergelijking met Java?
Omdat Scala de volgende extra functies ondersteunt, is het beter dan Java 8:
- Volledige FP-functies
- Meer expressietaal
- Patroonmatching
- Betere ondersteuning voor het Akka Actor Model
- Automatische oplossing voor het Diamantprobleem bij overerving met Traits
- Asynchrone en niet-blokkerende IO-programmering met behulp van het Akka Framework
- Volledig reactieve streaming-API
Wat is een anonieme functie in Scala? Wat is een functie-literal in Scala? Wat zijn de voordelen van een anonieme functie/functie-literal in Scala?
Anonymous Function is ook een functie, maar het heeft geen functienaam. Het staat ook bekend als een Functie Literal. De voordelen van een Anonieme Functie/Functie Literal in Scala:
- We kunnen een Functie Literal toewijzen aan een variabele
- We kunnen een Functie Literal doorgeven aan een andere functie/methode
- We kunnen een Functie Literal als resultaat/returnwaarde van een andere functie/methode retourneren.
Wat is een Hogere-Orde Functie (HOF)?
Een Hogere-Orde Functie (HOF) is ook een functie, maar die één, twee of beide van de volgende dingen uitvoert:
- Andere functies als argumenten aannemen
- Functies als hun resultaten retourneren
Wat zijn de verschillen tussen een Case class en een Normale class?
Een Case class is ook een class, maar wanneer we het vergelijken met een normale class, biedt het de volgende extra functies of voordelen:
- Standaard zijn de parameters van de Case-class constructor ‘val’. We hoeven de parameters niet met ‘val’ te declareren.
- Standaard worden de parameters van de Case-class constructor klassenvelden.
- Deze methoden worden automatisch toegevoegd: toString, equals, hashCode, copy. apply en unapply.
- Het krijgt automatisch het Companion-object.
- Er is geen behoefte om het ‘new’-sleutelwoord te gebruiken om een instantie van Case Class te maken.
- Gemakkelijk te gebruiken in Patroonmatching.
Al deze functies worden toegevoegd door de Scala-compiler tijdens het compileren. Het is niet mogelijk met een normale klasse.
Wat zijn de voordelen van het Play/Scala-stack om webapplicaties te ontwikkelen?
De volgende zijn de belangrijkste voordelen van het Play/Scala-stack om webapplicaties te ontwikkelen:
- Open Source
Play is een open-source gratis software framework om webapplicaties te ontwikkelen. – Betere Productiviteit
De automatische herladen functie van het Play-framework verbetert de productiviteit van ontwikkelaars. Geen noodzaak om wijzigingen te bouwen, implementeren en testen. Voer gewoon onze wijzigingen uit en vernieuw de pagina om onze wijzigingen te zien. – Stateless en Makkelijk te Ontwikkelen REST API
Play is een op HTTP gebaseerd stateless model om webverzoeken te bedienen, dus het is heel eenvoudig om REST API of RESTful Webservices te ontwikkelen. – Betere Foutafhandeling
Als we onze webapplicatie ontwikkelen met het Play-framework, informeert het alle fouten in de browser in een zeer bruikbaar formaat. Het toont foutmeldingen, de bestandslocatie, het regelnummer waar de fout is opgetreden, markeert het codefragment om de fout zeer gemakkelijk te begrijpen. – Hoge Prestaties en Betere Schaalbaarheid met Reactief
Het Play-framework is ontwikkeld door de reactieve ontwerppatronen te volgen en het is gebouwd op de Netty-server om gebruik te maken van de functie voor niet-blokkerende IO. Dankzij deze functie kunnen we zeer schaalbare en prestatiegerichte applicaties zeer eenvoudig ontwikkelen. – Makkelijk uit te breiden
Play is een zeer flexibel framework en ondersteunt het ontwikkelen van plug-ins zeer eenvoudig om de functies en functionaliteit uit te breiden. – Zeer Concurrency en Betere Parallelisme
Omdat zowel Scala als Play functioneel programmeren ondersteunen, is het zeer eenvoudig om zeer concurrency en betere parallelisme applicaties te ontwikkelen, omdat FP onveranderlijkheid, zuivere functies (functies zonder neveneffecten), patroonovereenkomsten, actormodel, enz. ondersteunt. – Betere Herbruikbaarheid, Makkelijk te Testen en Meer Modulair
Omdat zowel Scala als Play functioneel programmeren ondersteunen, kunnen we meer modulaire en herbruikbare applicaties ontwikkelen. Het is ook zeer eenvoudig om meer modulaire applicaties te testen.
Wat zijn de OOP-constructies van Java die niet worden ondersteund door Scala? Wat zijn de OOP-constructies van Scala die niet worden ondersteund door Java? Wat zijn de nieuwe OOP-constructies die door Scala zijn geïntroduceerd maar niet worden ondersteund door Java?
OOP-constructies van Java die niet worden ondersteund door Scala:
- Er is geen interfaceconcept in Scala
- Er is geen Enum-concept in Scala
OOP-constructies van Scala die niet worden ondersteund door Java: OF De nieuwe OOP-constructies geïntroduceerd door Scala, maar niet ondersteund door Java:
- Scala Traits
- Automatische oplossing van het Erfenis Diamant Probleem.
Wat is call-by-name? Ondersteunen Scala en Java call-by-name? Wat is het verschil tussen call-by-value en call-by-name functieparameters?
Call-by-name betekent dat methoden/functieparameters alleen worden geëvalueerd wanneer we ze nodig hebben of wanneer we ze benaderen. Als we ze niet gebruiken, worden ze niet geëvalueerd. Scala ondersteunt zowel call-by-value als call-by-name functieparameters. Java ondersteunt echter alleen call-by-value en niet call-by-name. Verschil tussen call-by-value en call-by-name: Het belangrijkste verschil tussen deze twee wordt hieronder beschreven:
- In Call-by-name worden de functieparameters alleen geëvalueerd wanneer ze nodig zijn, niet wanneer de functie wordt aangeroepen.
- In Call-by-value worden de functieparameters geëvalueerd wanneer de functie wordt aangeroepen.
- In Call-by-value worden de parameters geëvalueerd vóór de uitvoering van de functie en ze worden slechts één keer geëvalueerd, ongeacht hoe vaak we ze in die functie gebruiken.
- In Call-by-name worden de parameters geëvalueerd wanneer we ze benaderen en ze worden elke keer geëvalueerd dat we ze in die functie gebruiken.
- Scala Syntax Verschillen
Call-by-value:
def myFunction(a: Int, b: Int) { }
Hier zijn zowel a als b Call-by-value parameters voor mijnFunctie. Call-by-name:
def myFunction(a: Int, b: => Int) { }
Hier is a een Call-by-value parameter en b is Call-by-name voor mijnFunctie.
Wat zijn de populaire MVC-frameworks voor Scala-taal om webapplicaties te ontwikkelen?
De volgende zijn de meest populaire MVC-frameworks beschikbaar voor Scala-taal om webapplicaties te ontwikkelen:
- Play Framework
- Scalatra Framework
- Spray Framework
- Lift Framework
Wat zijn de belangrijkste verschillen tussen door Java gebaseerde en door Scala gebaseerde Maven-projectstructuren?
Meestal gebruiken Java-gebaseerde projecten Maven als hun buildtool. Desalniettemin gebruiken de meeste mensen SBT als buildtool voor het ontwikkelen van Scala-gebaseerde toepassingen. Sommige teams gebruiken echter ook Maven als buildtool voor het ontwikkelen van Scala-gebaseerde toepassingen. De mapstructuur van Maven voor zowel Java-gebaseerde als Scala-gebaseerde projecten is bijna hetzelfde, met slechts één mapnaamwijziging, zoals weergegeven in de onderstaande diagrammen: mapnamen voor Java en Scala.
Mapstructuur van Maven-project gebaseerd op Java: Mapstructuur van Maven-project gebaseerd op Scala:
Wat is een Extractor in Scala? Wat is het verschil tussen Constructor en Extractor in Scala? Wat is het gebruik van Extractor in Scala?
Niet alleen in Java en Scala, maar in bijna alle OOP-talen wordt de constructor gebruikt om een object of een instantie van een klasse te maken (of samen te stellen) met behulp van de parameters (of componenten). Extractor is het tegenovergestelde van de constructor. In Scala wordt Extractor gebruikt om een object te ontleden of uit elkaar te halen in zijn parameters (of componenten). In Scala is de apply-methode een constructor. Intern gebruikt Extractor de unapply-methode om een object in zijn delen (of parameters) te ontleden. In Scala wordt Extractor voornamelijk gebruikt in het concept van Pattern Matching. We zullen binnenkort het concept van Pattern Matching bespreken.
Wat is het gebruik van ‘???’ in Scala-gebaseerde applicaties?
Deze ‘???’ drie vraagtekens zijn geen operator of methode in Scala. Het wordt gebruikt om een methode te markeren die ‘In Progress’ is, wat betekent dat de ontwikkelaar de implementatie ervan moet leveren. Deze methode is gedefinieerd in de scala.PreDef-klasse zoals hieronder weergegeven:
def ??? : Nothing = throw new NotImplementedError
Als we die methode uitvoeren zonder implementatie te bieden, wordt er een ‘NotImplementedError’-fout gegenereerd zoals hieronder weergegeven:
scala> def add(a:Int, b:Int) : Int = ???
add: (a: Int, b: Int)Int
scala> add(10,20)
scala.NotImplementedError: an implementation is missing
Leg het belangrijkste verschil uit tussen List en Stream in de Scala Collection API. Hoe bewijzen we dat verschil? Wanneer kiezen we voor Stream?
In Scala komen zowel List als Stream uit de Collection API en werken ze bijna hetzelfde. Beide zijn onveranderlijke collecties. Er is echter één belangrijk verschil tussen List en Stream in de Scala Collection API: de elementen van een List worden eager (gretig) geëvalueerd, terwijl de elementen van een Stream lazy (lui) worden geëvalueerd, dat wil zeggen wanneer we er toegang toe hebben.
scala> var list1 = List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)
Hier kunnen we waarnemen dat alle elementen van de List worden geëvalueerd op het moment van het maken van het List-object. Als we hetzelfde doen met een Stream, kunnen we niet alle elementen zien. We kunnen alleen het eerste geëvalueerde element zien, en de overige elementen worden lui geëvalueerd, zoals hieronder wordt getoond:
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
Als we een luie collectie willen, waarbij elementen alleen worden geëvalueerd wanneer we er toegang toe hebben, is het beter om Stream te gebruiken.
Wat is het verschil tussen :: en #:: in Scala? Wat is het verschil tussen ::: en #::: in Scala?
In de Scala Collection API,
- :: en ::: zijn methoden beschikbaar in de List-klasse.
- #:: en #::: zijn methoden beschikbaar in de Stream-klasse
- In de List-klasse wordt de ::-methode gebruikt om een element aan het begin van de lijst toe te voegen.
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 de List-klasse wordt de :::-methode gebruikt om de elementen van een gegeven lijst voor deze lijst te plaatsen.
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 de Stream-klasse wordt de #::-methode gebruikt om een gegeven element aan het begin van de stream toe te voegen. Alleen dit nieuw toegevoegde element wordt geëvalueerd, gevolgd door lui geëvalueerde stream-elementen.
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 de Stream-klasse wordt de #:::-methode gebruikt om een gegeven stream aan het begin van de stream te concateneren. Alleen dit nieuw toegevoegde element wordt geëvalueerd, gevolgd door lui geëvalueerde stream-elementen.
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 werkt als een cons-operator voor de List-klasse en #:: methode werkt als een cons-operator voor de Stream-klasse. Hier staat ‘cons’ voor construct.
- ::: methode werkt als een concatenatie operator voor de List-klasse en #::: methode werkt als een concatenatie operator voor de Stream-klasse.
Als ik een Fullstack Scala-ontwikkelaar wil worden, welke technologiestack moet ik dan leren?
Als je een Fullstack Scala-ontwikkelaar wilt worden, moet je de volgende technologiestack leren:
- Scala 2.11.7
- Play 2.4.6 Framework
- Akka 2.3 Framework
- Eén buildtool: SBT/Maven
- Eén JS-framework: CoffeeScript/JavaScript
- Eén IDE: IntelliJ IDEA 15/ Eclipse IDE 4.x
- Eén TDD & BDD-framework: ScalaTest, Spec2, ScalaCheck, Mockito
- Microservices met Play en Scala
- SCoverage
- Scalastyle
- Functionele programmeerontwerppatronen
- Machine learning met Scala
NOTE:- In Scala volgt Extractor het Extractor Design Pattern. Als je het grondig wilt leren, ga dan door mijn Scala Tutorial (De meeste berichten volgen dit patroon: Scala xxxx In Depth waar xxxx een concept is zoals Extractor). Dat is alles over “Scala Geavanceerde Sollicitatiegesprek Vragen en Antwoorden”. We zullen wat meer Scala Sollicitatiegesprek Vragen en Antwoorden bespreken in mijn komende berichten. Laat me een reactie achter als je mijn bericht leuk vindt of als je problemen/suggesties hebt.
Source:
https://www.digitalocean.com/community/tutorials/scala-advanced-interview-questions