Welkom bij Scala interviewvragen en antwoorden. Tegenwoordig maken de meeste Financiële/Bancaire, Overheids-, Telecom-, Sociale Netwerk-, enz. bedrijven gebruik van Scala, Play en Akka Framework om hun projecten te ontwikkelen, omdat deze frameworks zowel OOP- als FP-functies ondersteunen en ook veel voordelen bieden.
Scala Interviewvragen
Ik ga mijn kennis van sollicitatiegesprekken en mijn ervaring met Scala Ecosysteem of Fullstack Scala (Scala/Play/Akka) Ontwikkeling met je delen via een paar berichten. Ik ga 3 afzonderlijke berichten met je delen. Sommige vragen zijn slechts één vraag en sommige hebben subvragen. In totaal ga ik ongeveer 200 vragen bespreken. Ik wed dat als je bekend bent met al deze vragen, je zeker alle Scala Developer-interviews zult doorstaan. Als je echter als Fullstack Scala-ontwikkelaar wilt doorgaan, moet je al deze Fullstack Scala-technologieën grondig leren.
Introductie
I’m going to deliver Scala/Play/Akka Interview Questions and Answers in three parts:
- Scala Sollicitatievragen en Antwoorden:
We zullen hier enkele basis Scala sollicitatievragen bespreken, die handig zijn voor starters of Java-ontwikkelaars die willen overstappen naar Scala-ontwikkeling of 1+ jaar ervaring hebben als Scala-ontwikkelaar.2. Scala Tussentijdse Sollicitatievragen en Antwoorden:-
We zullen enkele sollicitatievragen bespreken die handig zijn voor 2+ jaar ervaring als Scala/Java-ontwikkelaar.3. Scala Geavanceerde Sollicitatievragen en Antwoorden:-
We zullen sollicitatievragen bespreken die handig zijn voor senior of ervaren Scala/Java-ontwikkelaars.4. Scala/Java Concurrency en Parallelisme Sollicitatievragen en Antwoorden:-
We zullen Scala/Java Concurrency en Parallelisme Sollicitatievragen en Antwoorden bespreken, die handig zijn voor senior of ervaren Scala/Java-ontwikkelaars.
We zullen ook praten over enkele verschillen tussen Scala en Java-constructies, zodat gebruikers (die overstappen van Java naar Scala) voordeel kunnen halen uit deze berichten. In deze post gaan we het hebben over enkele basis Scala sollicitatievragen. Lees mijn komende berichten voor de rest van de twee secties.
Scala Basis Sollicitatievragen
In dit gedeelte gaan we alle Scala Basis Interviewvragen opsommen en in het volgende gedeelte zullen we ze uitgebreid bespreken.
- Wat is Scala? Is het een Taal of Platform? Ondersteunt het OOP of FP? Wie is de vader van Scala?
- Is Scala een Statisch Getypeerde Taal? Wat is een Statisch Getypeerde Taal en Wat is een Dynamisch Getypeerde Taal? Wat is het verschil tussen statisch getypeerde en dynamisch getypeerde talen?
- Is Scala een Pure OOP Taal? Is Java een Pure OOP Taal?
- Ondersteunt Scala alle Concepten van Functioneel Programmeren? Ondersteunt Java 8 alle Concepten van Functioneel Programmeren?
- Wat zijn de belangrijkste voordelen van de Scala Taal? Zijn er nadelen aan de Scala Taal?
- Wat is het Belangrijkste nadeel van de Scala Taal?
- Wat is het hoofddoel van de Scala Taal?
- Welke populaire JVM Talen zijn er nu beschikbaar?
- Net als de java.lang.Object klasse van Java, wat is de superklasse van alle klassen in Scala?
- Wat is de standaardtoegangsmodifier in Scala? Heeft Scala een “public” trefwoord?
- Wat is “Type Inferentie” in Scala?
- Verschil tussen Scala’s Int en Java’s java.lang.Integer? Wat is de relatie tussen Int en RichInt in Scala?
- Wat is Niets in Scala? Wat is Nihil in Scala? Wat is de relatie tussen Niets en Nihil in Scala?
- Wat is Null in Scala? Wat is null in Scala? Wat is het verschil tussen Null en null in Scala?
- Wat is Unit in Scala? Wat is het verschil tussen Java’s void en Scala’s Unit?
- Wat is het verschil tussen val en var in Scala?
- Wat is REPL in Scala? Wat is het gebruik van Scala’s REPL? Hoe kan ik toegang krijgen tot Scala REPL vanaf CMD-prompt?
- Wat zijn de kenmerken van Scala?
- Hoe implementeren we loops functioneel? Wat is het verschil tussen OOP en FP-stijl loops?
- Wat is “Application” in Scala of Wat is Scala Application? Wat is “App” in Scala? Wat is het gebruik van Scala’s App?
- Ondersteunt Scala operator overbelasting? Ondersteunt Java operator overbelasting?
- Wat is een expressie? Wat is een statement? Wat is het verschil tussen expressie en statement?
- Wat is het verschil tussen “If…Else” van Java en “If…Else” van Scala?
- Is Scala een op expressies gebaseerde taal of een op verklaringen gebaseerde taal? Is Java een op expressies gebaseerde taal of een op verklaringen gebaseerde taal?
- Vertel me enkele functies die worden ondersteund door Java, maar niet door Scala en vice versa?
- Wat is het verschil tussen Functie en Methode in Scala?
- Hoeveel openbare class-bestanden zijn mogelijk te definiëren in een Scala-bronbestand?
- Net als Java, wat zijn de standaardimports in de Scala-taal?
- Hoeveel operators zijn er in Scala en waarom?
- Noem enkele trefwoorden die door Java worden gebruikt en niet vereist zijn in Scala? Waarom heeft Scala ze niet nodig?
- Wat is PreDef in Scala?
Raadpleeg mijn vorige bericht voor meer informatie over Functioneel programmeren (Klik op deze link om mijn vorige bericht te openen).
Scala Interview Vragen 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 grondig wilt begrijpen met voorbeelden, lees dan mijn vorige berichten in de sectie Scala Tutorials.
Wat is Scala? Is het een taal of platform? Ondersteunt het OOP of FP? Wie is de vader van Scala?
Scala staat voor Schaalbare Taal. Martin Odersky is de vader van Scala. Scala is een meervoudig paradigma programmeertaal, die zowel objectgeoriënteerde als functionele programmeerconcepten ondersteunt. Het is ontworpen en ontwikkeld door Martin Odersky. Scala is een typeveilige object-functionele programmeertaal voor de JVM (Java Virtual Machine). Scala draait op de JVM. Scala is een hybride functionele (objectgeoriënteerde en functionele) programmeertaal voor de JVM. Scala heeft een sterk en statisch typesysteem. In Scala worden alle typen gecontroleerd tijdens de compilatie.
Is Scala een statisch getypeerde taal? Wat is een statisch getypeerde taal en wat is een dynamisch getypeerde taal? Wat is het verschil tussen statisch getypeerde en dynamisch getypeerde talen?
Ja, Scala is een Statisch Getypeerde Taal. Statisch Getypeerde Taal betekent dat typecontrole plaatsvindt tijdens de compilatie door de compiler, niet tijdens de uitvoering. Het belangrijkste voordeel van dit soort talen is: als ontwikkelaar moeten we ervoor zorgen dat we de juiste code schrijven om alle compileerfouten te vermijden. Omdat de compiler veel fouten tijdens de compilatie controleert, krijgen we niet veel problemen of bugs tijdens de uitvoering. Voorbeelden:- Java, Scala, C, C++, Haskell, enz. Dynamisch Getypeerde Taal betekent dat typecontrole tijdens de uitvoering wordt uitgevoerd, niet tijdens de compilatie door de compiler. Omdat de compiler geen typecontrole tijdens de compilatie uitvoert, kunnen we meer problemen of bugs tijdens de uitvoering verwachten. Voorbeeld:- Groovy, JavaScript, Ruby, Python, Smalltalk, enz.
Is Scala een Puur OOP-taal? Is Java een Puur OOP-taal?
Puur Objectgeoriënteerde Programmeertaal betekent dat alles een object moet zijn. Java is geen Puur Objectgeoriënteerde Programmeertaal omdat het de volgende twee niet-OOP-concepten ondersteunt:
- Java ondersteunt primitieve datatypen. Ze zijn geen objecten.
- Java ondersteunt statische leden. Ze zijn niet gerelateerd aan objecten.
Ja, Scala is een Puur Objectgeoriënteerde Programmeertaal omdat in Scala alles een object is en alles een waarde is. Functies zijn waarden en waarden zijn objecten. Scala heeft geen primitieve datatypen en heeft ook geen statische leden.
Ondersteunt Scala alle concepten van Functioneel Programmeren? Ondersteunt Java 8 alle concepten van Functioneel Programmeren?
Ja, Scala ondersteunt alle concepten van Functioneel Programmeren (FP). Java 8 heeft enkele constructies van Functioneel Programmeren geïntroduceerd, maar ondersteunt NIET alle concepten van Functioneel Programmeren. Bijvoorbeeld, Java 8 ondersteunt geen Patroonmatching, Functiecurrying, implicieten, enz.
Wat zijn de belangrijkste voordelen van de Scala-taal? Zijn er nadelen aan de Scala-taal?
Als we Scala-taal gebruiken om onze toepassingen te ontwikkelen, kunnen we de volgende voordelen en nadelen krijgen: Voordelen van de Scala-taal:-
- Eenvoudige en beknopte code
- Zeer expressieve code
- Meer leesbare code
- 100% typeveilige taal
- Onveranderlijkheid en geen neveneffecten
- Meer herbruikbare code
- Meer modulariteit
- Doe Meer Met Minder Code
- Zeer Flexibele Syntax
- Ondersteunt alle OOP-functies
- Ondersteunt alle FP-functies. Zeer Functioneel.
- Minder Foutgevoelige Code
- Betere Parallelle en Concurrentieprogrammering
- Zeer Schaalbaar en Onderhoudbare code
- Hoge Productiviteit
- Gedistribueerde Toepassingen
- Volledige Java-interoperabiliteit
- Krachtige Scala DSL’s beschikbaar
- REPL om Scala-basics te leren
Voordelen van Scala-taal:-
- Minder Leesbare Code
- Bit moeilijk te begrijpen Code voor beginners
- Complexe Syntax om te leren
- Minder Achterwaartse Compatibiliteit
OPMERKING:- We kunnen Scala-code schrijven op een meer leesbare of minder leesbare manier.
Wat is het belangrijkste nadeel van Scala-taal?
Afgezien van de vele voordelen van Scala, heeft het één groot nadeel: het probleem van achterwaartse compatibiliteit. Als we willen upgraden naar de nieuwste versie van Scala, moeten we ervoor zorgen dat we enkele pakketnamen, klassenamen, methoden of functienamen wijzigen, enzovoort. Bijvoorbeeld, als je een oude Scala-versie gebruikt en je project de BeanProperty-annotatie gebruikt, was deze beschikbaar in “scala.reflect” zoals “scala.reflect.BeanProperty” in oude versies. Als we willen upgraden naar nieuwe Scala-versies, moeten we dit pakket wijzigen van “scala.reflect” naar “scala.beans”.
Wat is het hoofddoel van de Scala-taal?
Net als het motto van Java “Write Once Run Anywhere”, heeft Scala het motto “Do More With Less” of “Do More With Less Code”. “Do More With Less” betekent dat we complexere programma’s of logica kunnen ontwikkelen met minder code.
Wat zijn de populaire JVM-talen die nu beschikbaar zijn?
Java, Scala, Groovy en Closure zijn de meest populaire JVM (Java Virtual Machine) talen. Scala, Groovy en Closure ondersteunen zowel objectgeoriënteerde programmeerfuncties als functionele programmeerfuncties. Java SE 8 ondersteunt alle objectgeoriënteerde programmeerfuncties. Het ondersteunt echter maar heel weinig functionele programmeerfuncties, zoals lambda-expressies, functies, type-inferentie en hogere-ordefuncties.
Zoals de klasse java.lang.Object in Java, wat is de superklasse van alle klassen in Scala?
Zoals we weten is de superklasse van alle klassen in Java (Java API-klassen of door de gebruiker gedefinieerde klassen) de klasse java.lang.Object. Op dezelfde manier is in Scala de superklasse van alle klassen of traits de klasse “Any”. De klasse Any is gedefinieerd in het scala-pakket als “scala.Any”.
Wat is de standaardtoegangsmodificator in Scala? Heeft Scala het sleutelwoord “public”?
In Scala, als we geen toegangsmodifier vermelden voor een methode, functie, trait, object of klasse, is de standaard toegangsmodifier “public”. Zelfs voor velden is “public” de standaard toegangsmodifier. Vanwege deze standaardfunctie heeft Scala geen “public” trefwoord.
Wat is “Type Inferentie” in Scala?
Types kunnen door de Scala-compiler worden afgeleid tijdens de compilatie. Dit staat bekend als “Type Inferentie”. Types verwijzen naar gegevenstypen of resultaattypen. We gebruiken types op veel plaatsen in Scala-programma’s, zoals variabeltypes, objecttypes, methoden/functieparameter-types, methoden/functie retourneertypen, enzovoort. In eenvoudige bewoordingen, het bepalen van het type van een variabele, expressie of object, enzovoort tijdens de compilatie door de compiler, staat bekend als “Type Inferentie”.
Wat zijn de overeenkomsten en verschillen tussen Scala’s Int en Java’s java.lang.Integer? Wat is de relatie tussen Int en RichInt in Scala?
Overeenkomsten tussen Scala’s Int en Java’s java.lang.Integer:
- Beide zijn klassen.
- Beide worden gebruikt om gehele getallen voor te stellen.
- Beide zijn 32-bits ondertekende gehele getallen.
Verschillen tussen Scala’s Int en Java’s java.lang.Integer:
- Scala’s Int-klasse implementeert geen Comparable-interface.
- Java’s java.lang.Integer-klasse implementeert de Comparable-interface.
Java’s Integer is iets vergelijkbaars met Scala’s Int en RichInt. RichInt is een eindklasse gedefinieerd in het scala.runtime-pakket zoals “scala.runtime.RichInt”. In Scala is de relatie tussen Int en RichInt dat wanneer we Int gebruiken in een Scala-programma, het automatisch wordt omgezet in RichInt om alle methoden beschikbaar in die klasse te gebruiken. We kunnen zeggen dat RichInt een impliciete klasse van Int is. (We zullen “Wat is impliciet en de voordelen van implicieten” bespreken in mijn volgende bericht).
Wat is Nothing in Scala? Wat is Nil in Scala? Wat is de relatie tussen Nothing en Nil in Scala?
In Scala is Nothing een type (eindklasse). Het is gedefinieerd onderaan het Scala-type systeem, wat betekent dat het een subtype is van alles in Scala. Er zijn geen instanties van Nothing. Gebruikssituaties van Nothing in Scala:- Als Nothing geen instanties heeft, wanneer gebruiken we dit dan in Scala-toepassingen?
- Nil is gedefinieerd met behulp van Nothing (zie hieronder voor een voorbeeld).
- None is gedefinieerd met behulp van Nothing.
object None extends Option[Nothing]
- We kunnen Nothing gebruiken als retourtype voor methoden die nooit iets retourneren.
- We kunnen Nothing gebruiken als retourtype voor methoden die abnormaal worden beëindigd.
Nil is een object dat wordt gebruikt om een lege lijst voor te stellen. Het is gedefinieerd in het pakket “scala.collection.immutable”, zoals hieronder weergegeven:
object Nil extends List[Nothing]
Voorbeeld:-
scala> Nil
res5: scala.collection.immutable.Nil.type = List()
scala> Nil.length
res6: Int = 0
Wat is Null in Scala? Wat is null in Scala? Wat is het verschil tussen Null en null in Scala?
Null is een Type (eindklasse) in Scala. Het Null-type is beschikbaar in het pakket “scala” als “scala.Null”. Het heeft slechts één instantie en dat is null. In Scala is “null” een instantie van het type scala.Null. Voorbeeld:-
scala> val myNullRef : Null = null
myNullRef: Null = null
We kunnen geen andere waarden toewijzen aan verwijzingen van het Null-type. Het accepteert alleen de waarde ‘null’. Null is een subtype van alle referentietypes. Null staat onderaan het Scala Type System. Omdat het GEEN subtype is van Waardetypes, kunnen we “null” toewijzen aan elke variabele van het Waardetype. Voorbeeld:-
scala> val myInt : Int = null
:10: error: an expression of type Null is ineligible for implicit conversion
val myInt : Int = null
^ Hier fouttype. gevonden: Null(null) maar vereist: Int. De impliciete conversies tussen Null en Int zijn niet toepasbaar omdat ze dubbelzinnig zijn.
Wat is Unit in Scala? Wat is het verschil tussen Java’s void en Scala’s Unit?
In Scala wordt Unit gebruikt om “Geen waarde” of “Geen bruikbare waarde” te vertegenwoordigen. Unit is een laatste klasse gedefinieerd in het “scala” pakket, dat “scala.Unit” is. Unit is iets vergelijkbaars met Java’s void. Maar ze hebben enkele verschillen.
- Java’s void heeft geen enkele waarde. Het is niets.
- Scala’s Unit heeft één waarde ()
- () is de enige waarde van het type Unit in Scala. Er zijn echter geen waarden van het type void in Java.
- Java’s void is een trefwoord. Scala’s Unit is een laatste klasse.
Beide worden gebruikt om aan te geven dat een methode of functie niets teruggeeft.
Wat is het verschil tussen val en var in Scala?
In Scala worden zowel val als var gebruikt om variabelen te definiëren. Ze hebben echter enkele significante verschillen.
- var staat voor variabele.
- val staat voor waarde.
- Zoals we weten, betekent variabele veranderlijk en waarde betekent constant.
- `var` wordt gebruikt om Mutable variabelen te definiëren, wat betekent dat we waarden opnieuw kunnen toewijzen nadat deze zijn aangemaakt.
- `val` wordt gebruikt om Immutable variabelen te definiëren, wat betekent dat we waarden niet opnieuw kunnen toewijzen nadat deze zijn aangemaakt.
- In eenvoudige Java-terminologie betekent `var` ‘variabele’ en `val` betekent ‘definitieve variabele’.
Wat is REPL in Scala? Wat is het gebruik van Scala’s REPL? Hoe kan Scala REPL worden geopend vanaf de CMD-prompt?
REPL staat voor Read-Evaluate-Print Loop. We kunnen het uitspreken als ‘ripple’. In Scala fungeert REPL als een Interpreter om Scala-code uit te voeren vanaf de opdrachtprompt. Daarom staat REPL ook bekend als Scala CLI (Command Line Interface) of Scala command-line shell. Het hoofddoel van REPL is om kleine stukjes Scala-code te ontwikkelen en te testen voor oefendoeleinden. Het is zeer nuttig voor Scala Beginners om basisprogramma’s te oefenen. We kunnen REPL openen door het “scala” commando te gebruiken. Wanneer we het “scala” commando typen bij de CMD-prompt, krijgen we een REPL-shell waar we Scala-code kunnen typen en uitvoeren.
D:\> scala
scala>
Wat zijn de Scala-kenmerken?
De Scala-taal ondersteunt de volgende kenmerken:
- Ondersteunt zowel OOP-stijl (Imperative-Style) als Functionele Stijl Programmering
- Zuivere Object-georiënteerde Programmeertaal
- Ondersteunt alle Functionele Functies
- REPL (Read-Evaluate-Print Loop) Interpreter
- Sterk Type Systeem
- Statisch-getypeerde Taal
- Type Inferentie
- Ondersteunt Patroon Matching
- Ondersteunt Closures
- Ondersteunt Persistente Datastructuren
- Gebruikt Acteurmodel om Concurrency-applicaties te ontwikkelen
- Compatibel met Java
- Beschikbaar alle ontwikkeltools – IDE’s, Build Tools, Web Frameworks, TDD en BDD Frameworks
Hoe implementeren we loops functioneel? Wat is het verschil tussen OOP- en FP-stijl loops?
We weten hoe we loops kunnen implementeren in Objectgeoriënteerde stijl: Met behulp van Mutable Tijdelijke variabelen, de variabele waarde bijwerken en Loopconstructies gebruiken. Het is een zeer omslachtige en onveilige benadering. Het is niet Thread-Safe. Objectgeoriënteerde stijl gebruikt de volgende constructies om loops te implementeren:
- Loopconstructies
- Veranderlijkheid
- Bijwerkingen
We kunnen dezelfde loops op een andere manier implementeren in een functionele stijl. Het is thread-safe. We kunnen de volgende twee technieken gebruiken om loops in functionele stijl te implementeren:
- Recursie
- Tail-recursie
- Onveranderlijkheid
- Geen neveneffecten
Wat is een “Applicatie” in Scala of wat is Scala Applicatie? Wat is een “App” in Scala? Wat is het gebruik van Scala’s App?
Scala Applicatie: In Scala is App een trait gedefinieerd in het scala-pakket, zoals “scala.App”. Het definieert de main-methode. Als een Object of een Klasse deze trait uitbreidt, worden ze automatisch Scala-uitvoerbare programma’s omdat ze de main-methode erven van Applicatie. Het belangrijkste voordeel van het gebruik van App is dat we geen main-methode hoeven te schrijven. Het belangrijkste nadeel van het gebruik van App is dat we dezelfde naam “args” moeten gebruiken om naar de opdrachtregelargumenten te verwijzen, omdat de main() methode van scala.App deze naam gebruikt. Voorbeeld:- Zonder Scala App:
object MyApp {
def main( args: Array[String]){
println("Hello World!")
}
}
Met Scala App:
object MyApp extends App{
println("Hello World!")
}
Als we naar de bovenstaande twee voorbeelden kijken, hebben we in het tweede voorbeeld geen main-methode gedefinieerd omdat we geërfd hebben van Scala Applicatie. Voor Scala 2.9 hadden we de scala.Application trait. Maar deze is verouderd door scala.App sinds Scala versie 2.9.
Ondersteunt Scala Operator Overloading? Ondersteunt Java Operator Overloading?
Java ondersteunt geen Operator Overloading. Scala ondersteunt Operator Overloading. De reden hiervoor is dat Java geen ondersteuning wil bieden voor enkele misleidende methodenamen zoals “+*/”. Scala geeft deze flexibiliteit aan de ontwikkelaar om te beslissen welke methoden/functienamen moeten worden gebruikt. Wanneer we 2 + 3 oproepen, betekent dat ‘+’ geen operator is, maar een methode beschikbaar in de Int-klasse (of het is van het impliciete type). Intern wordt deze oproep omgezet in “2.+(3)“.
Wat is een Expressie? Wat is een Statement? Wat is het verschil tussen een Expressie en een Statement?
Expressie: Expressie is een waarde die zal evalueren naar een waarde. Aangezien een expressie een waarde retourneert, kunnen we deze toewijzen aan een variabele. Voorbeeld: Scala’s If-voorwaarde, de ternaire operator van Java. Statement: Een statement definieert een of meer acties of bewerkingen. Dat betekent dat een statement acties uitvoert. Omdat het geen waarde retourneert, kunnen we het niet toewijzen aan een variabele. Voorbeeld: de If-voorwaarde van Java.
Wat is het verschil tussen het “If…Else” van Java en het “If…Else” van Scala?
“If…Else” van Java: In Java is “If…Else” een statement, geen expressie. Het retourneert geen waarde en kan niet aan een variabele worden toegewezen. Voorbeeld:
int year;
if( count == 0)
year = 2014;
else
year = 2015;
“If…Else” van Scala: In Scala is “If…Else” een expressie. Het evalueert naar een waarde. We kunnen het toewijzen aan een variabele.
val year = if( count == 0) 2014 else 2015
**LET OP:** “If…Else” van Scala werkt als de ternaire operator van Java. We kunnen “If…Else” van Scala gebruiken zoals de “If…Else”-verklaring van Java, zoals hieronder getoond:
val year = 0
if( count == 0)
year = 2014
else
year = 2015
Is Scala een op expressies gebaseerde taal of een op verklaringen gebaseerde taal? Is Java een op expressies gebaseerde taal of een op verklaringen gebaseerde taal?
In Scala is alles een waarde. Alle expressies of verklaringen evalueren naar een waarde. We kunnen een expressie, functie, afsluiting, object, enzovoort toewijzen aan een variabele. Dus Scala is een op expressies gerichte taal. In Java zijn verklaringen geen expressies of waarden. We kunnen ze niet toewijzen aan een variabele. Dus Java is geen op expressies gerichte taal. Het is een op verklaringen gebaseerde taal.
Vertel me enkele functies die worden ondersteund door Java, maar niet door Scala, en vice versa?
- Java ondersteunt geen operatoroverbelasting, maar Scala ondersteunt dit wel.
- Java ondersteunt de ++ en — operatoren, maar Scala ondersteunt ze niet.
- Java heeft gecontroleerde en ongecontroleerde uitzonderingen, maar Scala heeft geen gecontroleerde uitzonderingen.
- Scala ondersteunt geen break- en continue-statements, maar Java maakt er gebruik van.
- Scala heeft geen expliciete typeomzetting, maar Java ondersteunt deze functie.
- Scala ondersteunt patroonmatching, maar Java niet.
- Java maakt gebruik van primitieve gegevenstypen, maar Scala heeft die niet.
- Java ondersteunt statische leden, maar Scala heeft geen concept van statische leden.
- Scala ondersteunt implicieten en traits, Java ondersteunt ze niet.
**OPMERKING:** Deze lijst gaat verder dan één pagina. Dit zijn echter enkele belangrijke punten om te onthouden over verschillen in Scala- en Java-functies om Scala-interviews aan te kunnen.
Wat is het verschil tussen een functie en een methode in Scala?
Scala ondersteunt zowel functies als methoden. We gebruiken dezelfde syntaxis om functies en methoden te definiëren, er is geen syntaxisverschil. Ze hebben echter één klein verschil:
- We kunnen een methode definiëren in een Scala-klasse of -trait. Methode is geassocieerd met een object (een instantie van een klasse). We kunnen een methode aanroepen door een instantie van een klasse te gebruiken. We kunnen een Scala-methode niet direct gebruiken zonder object te gebruiken.
- Een functie is niet geassocieerd met een klasse of trait. Het wordt gedefinieerd in een Scala-pakket. We kunnen functies openen zonder objecten te gebruiken, net als de statische methoden van Java.
NOTITIE:- We zullen het hebben over Class, Trait, Package, Object, etc. in mijn komende berichten.
Hoeveel openbare klassenbestanden zijn mogelijk om te definiëren in een Scala-bronbestand?
In Java kunnen we hoogstens één openbare klasse/interface definiëren in een bronbestand. In tegenstelling tot Java ondersteunt Scala meerdere openbare klassen in hetzelfde bronbestand. We kunnen elk aantal openbare klassen/interfaces/traits definiëren in een Scala-bronbestand.
Net als in Java, wat zijn de standaardimports in de Scala-taal?
We weten dat java.lang het standaardpakket is dat automatisch door de JVM wordt geïmporteerd in alle Java-programma’s. We hoeven dit pakket niet expliciet te importeren. Op dezelfde manier zijn de volgende standaardimports beschikbaar in alle Scala-programma’s:
- java.lang-pakket
- scala-pakket
- scala.PreDef
Hoeveel operators zijn er in Scala en waarom?
In tegenstelling tot Java en zoals C++, ondersteunt Scala operator overbelasting. Scala heeft slechts één operator, namelijk de “=” (gelijk aan) operator. Alle andere operaties zijn eigenlijk methoden. Bijvoorbeeld, bij 2 + 3 is “+” geen operator in Scala. Het is een methode die beschikbaar is in de Int-klasse. De Scala-compiler merkt op dat 2 en 3 gehele getallen zijn en probeert de “+”-methode in de Int-klasse te vinden. Daarom converteert de Scala-compiler de expressie “2 + 3” naar “2.+(3)” en roept de “+”-methode aan op het gehele getal “2” en geeft het gehele getal “3” door als parameter aan de “+”-methode. Zowel “2 + 3” als “2.+(3)” zijn gelijk. Het is slechts syntactische suiker in Scala om programma’s in functionele stijl te schrijven.
Noem enkele trefwoorden die door Java worden gebruikt en niet nodig zijn in Scala? Waarom heeft Scala ze niet nodig?
Java gebruikt de volgende trefwoorden uitgebreid:
- ‘public’-trefwoord – om klassen, interfaces, variabelen, enz. te definiëren.
- ‘static’-trefwoord – om statische leden te definiëren.
Scala vereist deze twee trefwoorden niet. Scala heeft geen ‘public’ en ‘static’ trefwoorden.
- In Scala is de standaard toegangsmodificator ‘public’ voor klassen, traits, methoden/functies, velden, enz. Daarom is het trefwoord ‘public’ niet nodig.
- Om de principes van OOP te ondersteunen, heeft het Scala-team het trefwoord ‘static’ vermeden. Daarom is Scala een Pure-OOP-taal. Het is zeer moeilijk om statische leden te behandelen in gelijktijdige toepassingen.
Wat is PreDef in Scala? Wat is het belangrijkste doel van PreDef in Scala? In Scala is PreDef een object gedefinieerd in het scala-pakket als “scala.PreDef”. Het is een hulpprogramma-object. Het definieert veel hulpprogramma-methoden zoals hieronder weergegeven:
- Console IO (print, println, enz.)
- Verzamelingshulpprogramma-methoden
- Tekenreeks hulpprogramma-methoden
- Impliciete conversiemethoden
- Assertion-hulpprogramma-methoden, enz.
Bijvoorbeeld, de methoden print, println, readLine, readInt, require, enz., zijn gedefinieerd in het PreDef-object. In Scala is PreDef beschikbaar om de methoden ervan te gebruiken zonder deze expliciet te importeren in alle Scala-programma’s, omdat de Scala-compiler dit object automatisch importeert in alle compilatie-eenheden zoals klasse, object, trait, enz. Dat is alles over “Scala Basis Interviewvragen en Antwoorden”. We zullen enkele Intermediate, Advanced en Real-time Scala Interviewvragen en Antwoorden bespreken in mijn volgende 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-interview-questions-answers