‏ ‏ ‎ ‏ ‏ ‎

1. Testtermine

  • 24. November 2025

  • 19. Jänner 2026

2. 2025-09-15

2.1. Konzepte

2.1.1. Internet für Menschen / Personen

  • Webseiten mit html / js / css

2.1.2. Internet für Maschinen und Prozesse (verteilte Systeme)

  • (SOAP)

  • REST

  • graphQL

  • gRPC

  • WebSockets

  • SSE

  • MQTT

2.1.3. REST

  • REpresentational State Transfer

  • HTTP Methoden

  • Übertragung beliebiger Text- (HTML, XML, JSON, …​) und Binärformate (Images, PDF, …​)

  • jedoch relativ starr

  • gut geeignet für CRUD Operationen (Create, Read, Update, Delete)

  • mehrere Endpoint URLs

  • Overhead durch HTTP Header

proprietär …​ firmenspezifisch (nicht offengelegt, nicht standardisiert, nicht interoperabel)

2.1.4. graphQL

  • von Facebook entwickelt

  • Abfragesprache für APIs

  • flexible Abfragen

  • nur eine einzige Endpoint URL

  • gut geeignet für komplexe Datenstrukturen

  • weniger Overhead als REST

  • stark typisiert

2.1.5. gRPC

  • von Google entwickelt

  • Remote Procedure Call (RPC) Framework

  • basiert auf HTTP/2

  • unterstützt mehrere Programmiersprachen

  • effizient und schnell

  • stark typisiert

  • unterstützt Streaming

  • benötigt Protokollpuffer (Protocol Buffers) zur Definition der Schnittstellen

  • gut geeignet für Microservices

2.1.6. WebSockets

  • bidirektionale Kommunikation

  • Echtzeit-Anwendungen

  • text- und binäre Daten

2.1.7. SSE (Server-Sent Events)

  • unidirektionale Kommunikation (Server zu Client)

  • Echtzeit-Updates

  • textbasierte Daten (meist JSON)

  • einfach zu implementieren

  • gut geeignet für Benachrichtigungen, Newsfeeds

2.1.8. MQTT (Message Queuing Telemetry Transport)

  • leichtgewichtiges Publish-Subscribe-Protokoll

  • für IoT (Internet of Things) entwickelt

  • funktioniert über TCP/IP

  • geringerer Overhead

  • gut geeignet für ressourcenbeschränkte Geräte

  • unterstützt QoS (Quality of Service) Level

broker

2.1.9. Publish-Subscribe vs Observer Pattern (vom copilot)

Der Hauptunterschied zwischen Publish-Subscribe und Observer Pattern liegt in der Entkopplung und dem Kommunikationsmodell:

  • Observer Pattern:

    • Direkte Kopplung zwischen Subjekt (Subject) und Beobachtern (Observers).

    • Das Subjekt kennt alle seine Beobachter und benachrichtigt sie direkt bei Änderungen.

    • Wird meist innerhalb einer Anwendung verwendet (z.B. GUI-Events).

  • Publish-Subscribe:

    • Lose Kopplung durch einen Vermittler (Message Broker).

    • Publisher und Subscriber kennen sich nicht direkt.

    • Nachrichten werden an einen Kanal/Topic gesendet und von allen interessierten Subscribern empfangen.

    • Häufig in verteilten Systemen eingesetzt (z.B. MQTT, EventBus).

Zusammengefasst: Observer ist direkt und synchron, Publish-Subscribe ist indirekt, asynchron und skalierbarer.

2.2. Microservices

microservice

3. 2025-10-06

JAX-RS (Jakarta RESTful Web Services) * ist eine Spzifikation (Standard) für die Entwicklung von RESTful Web Services in Java

  • Teil von Jakarta EE (früher Java EE)

3.1. Response Typen bei JAX-RS

  • bei REST-Endpoints können verschiedene Response-Typen zurückgegeben werden, abhängig von der Anforderung und dem Kontext

  • die häufigsten Rückgabetypen der REST-Endpoint-Methoden sind:

    • String

    • Entity zB Person

    • Response: enthält Statuscode, Header und Entity und mehr zB Cookies

    • …​

3.2. JAX-RS mit Datenbanken

4. 2025-09-22

Prüfungsfragen

  • Was ist REST?

  • Welche REST-Anforderungen gibt es?

  • Was ist HTML?

  • Was ist HTTP?

5. 2025-10-06

5.1. Prüfungsfragen – Zusammenfassung

5.1.1. Was ist proprietär?

Proprietär bedeutet firmenspezifisch oder nicht standardisiert. Eine proprietäre Software oder Technologie gehört einem bestimmten Unternehmen, das die Kontrolle über deren Nutzung, Änderung und Weitergabe behält. Beispiel: Microsoft Word ist proprietär, während LibreOffice Open Source ist.

5.1.2. Was ist ein Handshake?

Ein Handshake ist ein Kommunikationsprozess zwischen zwei Systemen (z. B. Client und Server oder Browser und Server), bei dem sie sich gegenseitig über Verbindungsparameter, Verschlüsselung oder Authentifizierung einigen. Beispiel: Beim Aufbau einer HTTPS-Verbindung erfolgt ein TLS-Handshake.

5.1.3. Unterschied Microservice vs. Monolith

  • Monolith: Eine Anwendung besteht aus einem großen Block mit allen Funktionen und Modulen gemeinsam. Änderungen sind oft schwierig und erfordern ein erneutes Deployment der gesamten Anwendung.

  • Microservices: Die Anwendung ist in mehrere kleine, unabhängige Services aufgeteilt. Jeder Service kann separat entwickelt, getestet, deployed und skaliert werden.

5.1.4. GraphQL vs. REST

  • REST:

    • Nutzt mehrere Endpunkte (z. B. /users, /products).

    • Server bestimmt, welche Daten zurückgegeben werden.

    • Kann zu Overfetching oder Underfetching führen.

  • GraphQL:

    • Nur ein einziger Endpunkt.

    • Client bestimmt selbst, welche Daten er benötigt.

    • Spart Bandbreite und reduziert unnötige Datenübertragung.

5.1.5. Was ist referenzielle Integrität?

Die referenzielle Integrität stellt sicher, dass Beziehungen zwischen Tabellen in einer Datenbank konsistent bleiben. Wenn ein Fremdschlüssel in einer Tabelle auf eine andere Tabelle verweist, darf der referenzierte Datensatz nicht gelöscht oder verändert werden, ohne die Beziehung anzupassen. Beispiel: Ein Schüler-Datensatz darf nicht existieren, wenn seine Schule gelöscht wurde.

5.1.6. Master-Detail-Tabellenbeziehung

Eine Master-Detail-Beziehung (auch 1:n-Beziehung) beschreibt, dass: - eine Master-Tabelle (z. B. Kunde) mehrere Detail-Datensätze (z. B. Bestellungen) haben kann. - Die Detail-Tabelle enthält einen Fremdschlüssel zur Master-Tabelle.

5.1.7. Orphaned Record

Ein Orphaned Record (verwaister Datensatz) ist ein Datensatz, der keine Verbindung mehr zu seinem übergeordneten Datensatz hat. Das passiert z. B., wenn ein übergeordneter Datensatz gelöscht wird, aber abhängige Datensätze bestehen bleiben. Dies führt zu Dateninkonsistenz und sollte durch referenzielle Integrität verhindert werden.

5.1.8. Restrict vs. Cascading Delete vs. Nullify

  • Restrict: Das Löschen eines übergeordneten Datensatzes wird verhindert, wenn abhängige Datensätze existieren.

  • Cascading Delete: Beim Löschen eines übergeordneten Datensatzes werden alle abhängigen Datensätze automatisch mitgelöscht.

  • Nullify: Beim Löschen des übergeordneten Datensatzes wird der Fremdschlüssel in den abhängigen Datensätzen auf NULL gesetzt.

5.1.9. Was ist JACKSON?

Jackson ist eine Java-Bibliothek zum (De-)Serialisieren von JSON-Daten. Sie wandelt JSON in Java-Objekte um und umgekehrt. Dieser Prozess wird auch Marshalling (Serialisierung) und Unmarshalling (Deserialisierung) genannt.

5.1.10. Was ist JAX-RS?

JAX-RS (Java API for RESTful Web Services) ist eine Java-Spezifikation zur Erstellung von REST-APIs. Sie verwendet Annotationen wie @GET, @POST, @Path, @Produces, um HTTP-Endpunkte einfach zu definieren.

5.1.11. Was ist ein Singleton?

Das Singleton-Pattern stellt sicher, dass von einer Klasse nur eine Instanz existiert. Diese Instanz ist global zugänglich. Typisches Beispiel: Eine zentrale Logger- oder Konfigurationsklasse.

5.1.12. Convention over Configuration

Ein Software-Prinzip, das besagt: > „Wenn du dich an die Konventionen hältst, musst du nichts konfigurieren.“

Das bedeutet, dass Frameworks Standardverhalten automatisch übernehmen, solange der Entwickler sich an gewisse Namens- oder Strukturkonventionen hält. Beispiel: In Quarkus wird application.properties automatisch erkannt.

5.1.13. Was ist ein Paradigma?

Ein Paradigma ist ein grundlegendes Denk- oder Programmierkonzept, das vorgibt, wie Software strukturiert und entwickelt wird. Beispiele: - Objektorientiert (Java, C++) - Funktional (Haskell, JavaScript) - Prozedural ©

5.1.14. Was ist eine Objektidentität?

Die Objektidentität beschreibt die eindeutige Existenz eines Objekts im Speicher. Zwei Objekte können denselben Inhalt haben, aber verschiedene Identitäten besitzen. In Java wird die Identität durch den Speicherort (Referenz) bestimmt. Beispiel:

Person p1 = new Person("John");
Person p2 = new Person("John");

p1.equals(p2) kann true sein (gleicher Inhalt), aber p1 == p2 ist false (unterschiedliche Identität).

6. 2025-10-13

6.1. CDI - Contexts and Dependency Injection

  • Man erzeugt Objekte nicht selbst mit new, sondern lässt sie vom Framework bereitstellen (Inversion of Control - IoC)

  • zB ohne CDI

    PersonRepository personRepository = new PersonRepository();
  • zB mit CDI

    @Inject
    PersonRepository personRepository;
  • mit Dependency Injection (DI) werden die Referenzen auf - bereits vom übergeordneten DI-Container erzeugte - Objekte automatisch gesetzt -man spricht hier von injizieren.

  • Der Begriff Context gibt die Lebensdauer und Sichtbarkeit der Objekte an.

    • @ApplicationScoped

    • @RequestScoped

    • @SessionScoped

    • @Dependent (Standard)

6.2. JPA (Java Persistence API)

7. 2025-11-03

Normalisierung

  • Was ist die 1.NF?

Antwort
  • Jedes Attribut enthält nur atomare Werte (unteilbar).

  • Es gibt keine wiederholten Gruppen oder Mehrfachwerte.

  • Jede Zeile ist eindeutig identifizierbar (durch Primärschlüssel).

  • Was ist die 2.NF?

Antwort
  • Erfüllt die Anforderungen der 1.NF.

  • Jedes Nicht-Schlüsselattribut ist vollständig funktional abhängig vom gesamten Primärschlüssel (nicht nur von einem Teil davon, wenn der Primärschlüssel aus mehreren Attributen besteht).

  • Was ist die 3.NF?

Antwort
  • Erfüllt die Anforderungen der 2.NF.

  • Es gibt keine transitiven Abhängigkeiten zwischen Nicht-Schlüsselattributen. (Ein Nicht-Schlüsselattribut darf nicht von einem anderen Nicht-Schlüsselattribut abhängen).

  • Warum tut man normalisieren?

Antwort
  • Zur Abfragen der Daten nach unterschiedlichen Dimensionen (zB Kunde nach Region, Produktkategorie, Zeiträume, …​). Die Fakten (Measures) sind meist numerische Werte (zB Umsatz, Menge, …​), die analysiert werden.

  • Reduziert Datenredundanz und Inkonsistenzen.

  • Verbessert Datenintegrität.

  • Erleichtert Wartung und Updates der Datenbank.

informationswuerfel

8. 2025-11-10

1. Test – Stoff

  • Datenmodell aufsetzen

  • Testfälle schreiben

  • AssertJ-DB

  • REST-Services

Was sind Entity-Klassen?

  • Java-Klassen, die mit @Entity annotiert sind

  • Werden per JPA/Hibernate einer Datenbanktabelle zugeordnet

  • Felder entsprechen Tabellenspalten

  • Besitzen mindestens einen Primärschlüssel (@Id)

  • Dienen als Abbild der tatsächlichen Geschäftsobjekte (z. B. User, Product, Cart) → Bsp: Früher wurden diese Daten in Aktenschränken / -ordnern aufbewahrt, heute in Datenbanken.

filing cabinet

8.1. Klassendiagramm angezeigt bekommen

  • Klassen markieren → Rechtsklick → Diagrams → Java Klassen → Diagram wird angezeigt

    • Fields und show Dependencies anklicken → Beziehungen und Attribute werden angegzeigt.

    • Rechtsklick im Diagramm → Layout → Nets → organic

    • Rechtsklick im Diagramm → Appearance → Standard

8.2. Beziehungen

8.2.1. Fetch-Strategien — LAZY vs. EAGER

  • LAZY (Standard bei 1:n, n:m) Daten werden erst geladen, wenn darauf zugegriffen wird → bessere Performance

  • EAGER (Standard bei 1:1, n:1) Verknüpfte Daten werden sofort mitgeladen → kann mehr laden als nötig

Faustregel: → Immer LAZY, außer es gibt einen guten Grund.

8.2.2. Kardinalität / Multiplizität

Annotation

Beziehung

Bedeutung

@OneToOne

1 : 1

Ein Objekt → ein Objekt

@OneToMany

1 : n

Ein Objekt → viele

@ManyToOne

n : 1

Viele → eins

@ManyToMany

n : m

Viele ↔ viele

8.2.3. Triple-A-Pattern (AAA)

Strukturierungskonzept für Unit-Tests → klar, einfach, gut lesbar.

  • Arrange Test vorbereiten: Objekte anlegen, Daten initialisieren, mocks konfigurieren

  • Act Aktion ausführen: die zu testende Methode aufrufen

  • Assert Ergebnis prüfen: Erwartetes Resultat mit tatsächlichem vergleichen

Beispiel
@Test
void testAdd() {
    // Arrange
    Calculator calc = new Calculator();

    // Act
    int result = calc.add(2, 3);

    // Assert
    assertEquals(5, result);
}

8.2.4. Stammdaten & Bewegungsdaten

  • entstehen in Geschäftsprozessen

  • Stammdaten

    • Langfristig gültige (mehrere Geschäftsjahre), selten veränderte Grunddaten (ev. die Adresse eines Kunden oder Mitarbeiters)

    • Beschreiben Objekte/Personen unabhängig von Vorgängen

    • Beispiele: Kunden, Produkte, Mitarbeiter

  • Bewegungsdaten

    • sind meist einer Periode zuzuordnen, zB einem Geschäftsjahr

    • Verändern sich laufend, beziehen sich auf Stammdaten

    • werden eher nie verändert: zB wird eine Rechnung nicht mehr geändert, wenn sie einmal erstellt wurde

    • Beispiele: Bestellungen, Rechnungen, Buchungen

stammdaten bewegungsdaten