SWA Flashcards
(77 cards)
Warum sollten Warnings vermieden werden im Code? (1)
Weil Warnings zur Laufzeit zu Fehlern und im schlimmsten Fall zum Programmabsturz führen können.
Erläutern Sie, was ein Aggregate Root nach DDD ist, anhand Ihres
Semesterprojekts als Beispiel. (1)
Das ist die Entity Klasse, über die auf sämtliche andere Entity Klassen zugegriffen wird. Bei meinem Projekt ist Flughafen das Entity Root, worüber dann auf die Entity Koordinaten zugegriffen werden kann.
Beschreiben Sie 2 Unterschiede zwischen class und record. (2)
Records sind im Vergleich zu classes unveränderlich.
Records generieren automatisch Getter-Methoden für alle Attribute.
Wie haben wir Records im Semesterprojekt verwendet? (1)
Für Data Transfer Objects, um beim Anlegen oder Aktualisieren die Daten vom WriteController an die Service Klasse zu übergeben.
Wie kann mit null-Werten in Java umgegangen und im GraphQL-Schema vermieden werden? (2)
In Java kann Optional als Wrapper-Klasse um einen Wert verwendet werden, um auf null-Werte zu reagieren
Im GraphQL-Schema kann der Datentyp mit einem Ausrufezeichen markiert werden, um es non-nullable zu machen.
Erklären Sie, was Virtual Threads so wertvoll für Server-Applikationen macht. (1)
Virtual Threads sind deutlich leichtgewichtiger als Betriebssystem Threads, es können also mehr Threads gestartet und mehr Anfragen parallel bearbeitet werden.
Warum sollte man “Constructor Injection” statt “Field Injection” nutzen? (1)
Da Field Injections zyklische Abhängigkeiten zwischen Klassen erlauben, was zum Programmabsturz führen kann.
Begründen Sie, mit welchem Beziehungstyp aus UML die Beziehung zwischen einer Klasse, die mit @RestController annotiert ist, und einer Klasse, die mit @Service annotiert ist, dargestellt wird. Dabei wird die Service-Klasse mithilfe einer Dependency-Injection in der Controller-Klasse implementiert. (2)
Aggregation - Teil-Ganzes Beziehung: Die Controller-Klasse benötigt zum Funktionieren zwingend die Service-Klasse.
Somit ist die Controller-Klasse das Ganze und die Service-Klasse der Teil.
Die Service-Klasse kann allerdings auch ohne die Controller-Klasse funktionieren, ist also in ihrer Lebenszeit nicht von ihr abhängig - es ist also eine Aggregation und keine Komposition.
Nennen Sie 3 Higher-Order-Functions und erläutern Sie, wann man diese einsetzt. (2)
filter wird verwendet, um Elemente, die eine bestimmte Bedingung nicht erfüllen, herauszufiltern.
map wird verwendet, um jedes Element auf ein anderes Element abzubilden.
toList sammelt alle Elemente eines Streams und gibt sie in einer List zurück.
Erklären Sie das Builder-Pattern anhand eines in Ihrem Semesterprojekt genutzten Beispiels ohne Code zu schreiben. (1)
Ein Objekt wird durch verkettete Methodenaufrufe erzeugt, z.B. werden die Attribute eines Flughafens so gesetzt.
Warum sollten Sie bei der Implementierung von Equals besonders beachten, welche Attribute Sie auswählen? (1)
Weil manche Attribute, die sich auf eine andere Entity beziehen, zu unnötigen Joins führen.
Wann erhalten Sie bei einer Get-Request den Statuscode 200, den Statuscode 304 und wann den Statuscode 404? (1)
Statuscode 200 wird bei einem erfolgreichem Request zurückgegeben, Statuscode 304, wenn der Client bereits die aktuelle Version hat und Statuscode 404, wenn die Request kein Ergebnis liefert.
Erklären Sie den wesentlichen Unterschied zwischen REST und GraphQL. (1)
GraphQL ist eine Query-Language, während REST ein Architekturstil ist.
Erklären Sie, wann man Pfad-Variablen und wann Query-Parameter verwenden sollte? (1)
Pfad-Parameter sollten bei eindeutigen Pfaden wie IDs verwendet werden, während Query-Parameter für flexible Anfragen genutzt werden sollten.
Erklären Sie die in ‘ ‘ hervorgehobenen Teile semantisch. (4)
‘@RestController’
‘@RequestMapping’(“/rest”)
public final class KundeGetController {
'@GetMapping(path' = "id") KundeModel findById('@PathVariable' final UUID id)
@RestController annotiert die Klasse als Controller-Klasse einer REST-Schnittstelle.
@RequestMapping legt den Pfad für das Aufrufen des Controllers fest.
@GetMapping annotiert die Methode als eine Get-Methode und extrahiert den Pfad aus der URI als Parameter.
@PathVariable übergibt den Parameter aus der URI an die Methode.
Mit welcher HTTP-Methode werden GraphQL-Anfragen gesendet? (1)
Alle GraphQL-Anfragen sind POST-Requests.
Wofür wird ein Schema in PostGreSQL und Oracle genutzt? (1)
Schemas helfen bei der Gruppierung von Tabellen und anderen Datenbankobjekten, um die Datenbank übersichtlicher zu strukturieren.
Was muss man nicht programmieren, wenn man die Annotationen
@UpdateTimestamp und @CreationTimestamp nutzt? (1)
Es müssen keine Trigger für das Speichern von Timestamps geschrieben werden
Erklären Sie, wie Sie interaktiv feststellen können, dass nach dem Anlegen eines Datensatzes in PostgresQL oder MySQL, dieser auch wirklich angelegt wurde. (1)
Mithilfe einer Datenbank Administrationssoftware wie z.B. pgAdmin können alle erstellten Tabellen und deren Inhalte aufgerufen werden.
Wie werden Beziehungen realisiert, bei relationalen Datenbanken, bei Java-Objekten und bei JSON-Datensätzen? (2)
Bei relationalen Datenbanken werden Beziehungen über Fremdschlüssel realisiert, bei Java-Objekten über Referenzen und bei JSON-Datensätzen über Embedded-Documents.
Erklären Sie, warum ein Update-/Update-Konflikt i. a. zu einem Fehler führt bei einem Mehrbenutzersystem. (1)
Da ansonsten die Änderungen des ersten Updates überschrieben werden könnten.
Erläutern Sie die Aussage “Eager Fetching nicht verwenden und Lazy Fetching vermeiden”. (2)
Eager Fetching sollte nicht verwendet werden, da es zu unnötigen Joins kommt, die zu einer höheren Netzwerk- und Serverauslastung führen.
Lazy Fetching sollte vermieden werden, da es zu mehreren Anfragen an die Datenbank führen kann. Dies kann vermieden werden durch das rechtzeitige Verwenden von Fetch-Joins mithilfe der Annotation @EntityGraph.
Erklären Sie, weshalb bei einer List<>, die eine 1-N Beziehung darstellt, diese mit @OrderColumn annotiert werden muss. (1)
Da ansonsten die Reihenfolge der Werte in der List nicht gespeichert wird. Mit der Annotation wird die Reihenfolge in einer zusätzlichen Spalte in der Tabelle gespeichert.
Erklären Sie die folgende Annotation.
@OneToOne(cascade = {PERSIST, REMOVE}, fetch = LAZY) (1)
Die Annotation wird verwendet, um eine Eins-zu-Eins Beziehung zwischen zwei Entities abzubilden. Das cascade Attribut bedeutet, dass beim Neuanlegen (PERSIST) oder Löschen (REMOVE) einer Entity, die zugehörige Entity ebenfalls in der Datenbank angelegt
oder gelöscht wird. Durch fetch = LAZY wird die zugehörige Entity erst bei Bedarf aus der Datenbank geladen.