SWA Flashcards
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.
Erläutern Sie, welcher Code für Logging sinnvoller ist: (1) trace.logger(“LOGGER {}”, meldung)
oder
trace.logger(“LOGGER” + meldung).
Der erste Code ist sinnvoller, weil der String erst erzeugt wird, wenn die Methode aufgerufen wird, während beim Zweiten zu Beginn der String erzeugt wird, selbst wenn die Methode gar nicht ausgeführt wird.
Warum wird beim Anlegen und Verändern nicht in der Präsentationsschicht, sondern richtigerweise in der Anwendungsschicht validiert? (1)
Da einige Daten nur mithilfe von Daten des Servers validiert werden können z. B. ob eine E-Mail bereits genutzt wurde.
Erläutern Sie die drei grundlegenden Bestandteile eines Tests. (1)
Bei Arrange wird der Test vorbereitet, es werden zum Beispiel Testwerte gesetzt.
Bei Act wird die zu testende Funktion ausgeführt.
Bei Assert wird überprüft, ob die Ergebnisse stimmen.
Für welche Methoden werden sinnvollerweise keine Unit-Tests geschrieben? (1)
UnitTests werden vermieden für triviale Methoden, wie die von Object ererbten Methoden toString, equals und hashCode.
(Hier auf die richtigen Namen und camelCase achten, die heißen anders als in C#)
Erklären Sie, warum Integrationstests langsamer als Unit-Tests sind. (1)
Da Integrationstest den gesamten Server testen und dafür die unterschiedlichen Server alle gestartet werden müssen.
Was ist der Unterschied zwischen einem Container und einem Image? (1)
Ein Image ist nur eine Datei, die ausführbaren Code enthält. Ein Container ist eine gestartete Anwendung, die das Image als Template verwendet.