Wie funktioniert die Kommunikation zwischen einem Client und einem Server?
Ein Client muss eine http-Methode in Verbindung mit einer URI übergeben, um zur gewollten Ressource und dem gewünschtem Datenformat zu gelangen.
Konkurrierende Transaktionen ohne optimistische DB-Sync (Concurrency Konflikte)
1.Aktuelle Transaktion, 2. Konkurrierende schnellere Transaktion:
- UPDATE, UPDATE: Schnelleres Update wird von langsamem Update überschrieben (Lost-Update) -> Fehlerbehandlung
- UPDATE, DELETE: Ungültige ID oder aus Update wird Create (je nach Implementierung) -> Fehlerbehandlung
- DELETE, UPDATE: Datensatz wird gelöscht, unabhängig von Änderung -> Fehlerbehandlung oder ignorieren (je nach Use Case)
- DELETE, DELETE -> Meist ignorieren
Pessimistische DB Synchronisation
Bedeutet, dass während einer DB-Transaktion eine Schreibsperre für andere Clients besteht. Der Nachteil ist, dass unklar ist, wie lange der Benutzer schreibt und sperrt.
Welche Funktionalität implementiert die Annotation @Transactional?
Für Funktionen, die DB-Transaktionen darstellen. Eine mit @Transactional annotierte Funktion führt bei erfolgreichen Funktionsdurchlauf ein commit und bei geworfener Exception ein rollback aus.
Erklären Sie E-Tags.
Entity Tag, ist ein Mechanismus in HTTP, um Ressourcen zu identifizieren und ihre Versionen zu verfolgen, um Caching zu optimieren und Konflikte bei Aktualisierungen zu vermeiden.
Was ist eine bedingte GET-Request?
Eine bedingte GET-Request enthält ein E-Tag im Header, um Änderungen an der angeforderten Ressource zu bestimmen, wodurch unnötige Datenübertragung vermieden wird.
Erklären Sie den Zusammenhang von E-Tags und if-none-match bei einem GET-Request und einem wiederholten GET-Request
If-None-Match wird im Header des Request mitgesendet. Sofern die aktuelle Versionsnummer der Ressource ungleich der mitgesendet ist, kommt im Header der Response der E-Tag mit aktueller Versionsnummer und Statuscode 200 („OK“) zurück. Falls beide Versionsnummern gleich sind, kommt der Statuscode 304 (Not Modified) mit E-Tag zurück.
Wichtige Portnummern
Java: 8080
Postgres: 5432
Wie erkennt ein Spring basierter Microservice fehlerhafte PUT-Requests?
Fehlerhafte Request werden bereits im Controller abgefangen und mit einem 4xx-Statuscode zurückgegeben.
Over-Fetching
Bedeutet, dass bei einer Datenabfrage mehr Daten liefert, als der Client benötigt. Dies kann zu erhöhter Netzwerkauslastung führen, da unnötig große Datenmengen übertragen werden.
Under-Fetching
Client erhält weniger Daten als benötigt. Führt dazu, dass zusätzliche Anfragen gestellt werden müssen. Weitere Request(s) sind notwendig (Waterfall Request).
Was ist der Unterschied zwischen Listen und Mengen?
Eine Liste ist eine Datenstruktur, in der Elemente mehrfach vorkommen können und jedes Element mithilfe eines Indexes zugänglich ist.
Eine Menge (Set) ist eine Datenstruktur, in der Elemente nicht mehrfach vorkommen können. Außerdem sind die Elemente nicht indexiert.
Datenstruktur von Set: Hash-Tabelle
Erklären Sie weshalb bei einer Liste, die eine 1-N- Beziehung darstellt, diese mit @OrderColumn annotiert werden muss
In Hibernate sichert @OrderColumn die Reihenfolge von Listenelementen durch eine zusätzliche Index-Spalte (idx), die beim Speichern und Abrufen verwendet wird und automatisch hochgezählt wird.
Was sind Tabellen in DB?
Strukturieren Daten in einem formatierten und strukturierten Format und definieren gleichzeitig die Relationen zwischen diesen Daten.
Warum sollte man nur selten löschen?
Nur selten werden Daten gelöscht, da beispielsweise Mitarbeiter üblicherweise nicht gelöscht, sondern entlassen, und Bestellungen nicht gelöscht, sondern storniert werden.
Insolationslevel vs. Konsistenz
Isolationslevel regelt die Unabhängigkeiten von Transaktionen
Konsistenz stellt sicherstellt, dass die Daten immer korrekt und gültig bleiben.
"Read Uncommitted": Keine Sperren, Dirty Read möglich
"Read Committed": Schreibsperren, Lost Updates möglich
"Repeatable Read": Lese- und Schreibsperren möglich, Phantom Reads möglich.
Was ist der Unterschied zwischen einem
Ausdruck
und einer
Anweisung?
Ausdrücke
sind
Code-Fragemente
, die einen Wert
zurückgeben
, welche entweder rechts von einem Vergleichsoperator stehen oder als Bedingung in einer if-Anweisung stehen können.
(int a = ...)
Anweisungen
sind
Code-Fragemente
, die eine
Aktion
ausführen, aber keinen Wert zurückgeben. (
print(...)
)
Was bedeutet “
you build it, you run it
” im Kontext der Entwicklung?
"You build it, you run it" bedeutet, dass Entwickler für das
Erstellen, Wartung
und den
Betrieb
ihrer Software verantwortlich sind.
KISS
„Keep it simple, stupid“: Einfacher, gut strukturierter Code
YAGNI
„You ain’t gonna need it.”: Fokus auf benötigte Funktionalität