SWA Flashcards

1
Q

Warum sollten Warnings vermieden werden im Code? (1)

A

Weil Warnings zur Laufzeit zu Fehlern und im schlimmsten Fall zum Programmabsturz führen können.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Erläutern Sie, was ein Aggregate Root nach DDD ist, anhand Ihres
Semesterprojekts als Beispiel. (1)

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Beschreiben Sie 2 Unterschiede zwischen class und record. (2)

A

Records sind im Vergleich zu classes unveränderlich.

Records generieren automatisch Getter-Methoden für alle Attribute.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Wie haben wir Records im Semesterprojekt verwendet? (1)

A

Für Data Transfer Objects, um beim Anlegen oder Aktualisieren die Daten vom WriteController an die Service Klasse zu übergeben.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Wie kann mit null-Werten in Java umgegangen und im GraphQL-Schema vermieden werden? (2)

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Erklären Sie, was Virtual Threads so wertvoll für Server-Applikationen macht. (1)

A

Virtual Threads sind deutlich leichtgewichtiger als Betriebssystem Threads, es können also mehr Threads gestartet und mehr Anfragen parallel bearbeitet werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Warum sollte man “Constructor Injection” statt “Field Injection” nutzen? (1)

A

Da Field Injections zyklische Abhängigkeiten zwischen Klassen erlauben, was zum Programmabsturz führen kann.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

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)

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Nennen Sie 3 Higher-Order-Functions und erläutern Sie, wann man diese einsetzt. (2)

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Erklären Sie das Builder-Pattern anhand eines in Ihrem Semesterprojekt genutzten Beispiels ohne Code zu schreiben. (1)

A

Ein Objekt wird durch verkettete Methodenaufrufe erzeugt, z.B. werden die Attribute eines Flughafens so gesetzt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Warum sollten Sie bei der Implementierung von Equals besonders beachten, welche Attribute Sie auswählen? (1)

A

Weil manche Attribute, die sich auf eine andere Entity beziehen, zu unnötigen Joins führen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Wann erhalten Sie bei einer Get-Request den Statuscode 200, den Statuscode 304 und wann den Statuscode 404? (1)

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Erklären Sie den wesentlichen Unterschied zwischen REST und GraphQL. (1)

A

GraphQL ist eine Query-Language, während REST ein Architekturstil ist.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Erklären Sie, wann man Pfad-Variablen und wann Query-Parameter verwenden sollte? (1)

A

Pfad-Parameter sollten bei eindeutigen Pfaden wie IDs verwendet werden, während Query-Parameter für flexible Anfragen genutzt werden sollten.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

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)
A

@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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Mit welcher HTTP-Methode werden GraphQL-Anfragen gesendet? (1)

A

Alle GraphQL-Anfragen sind POST-Requests.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Wofür wird ein Schema in PostGreSQL und Oracle genutzt? (1)

A

Schemas helfen bei der Gruppierung von Tabellen und anderen Datenbankobjekten, um die Datenbank übersichtlicher zu strukturieren.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Was muss man nicht programmieren, wenn man die Annotationen
@UpdateTimestamp und @CreationTimestamp nutzt? (1)

A

Es müssen keine Trigger für das Speichern von Timestamps geschrieben werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

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)

A

Mithilfe einer Datenbank Administrationssoftware wie z.B. pgAdmin können alle erstellten Tabellen und deren Inhalte aufgerufen werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Wie werden Beziehungen realisiert, bei relationalen Datenbanken, bei Java-Objekten und bei JSON-Datensätzen? (2)

A

Bei relationalen Datenbanken werden Beziehungen über Fremdschlüssel realisiert, bei Java-Objekten über Referenzen und bei JSON-Datensätzen über Embedded-Documents.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Erklären Sie, warum ein Update-/Update-Konflikt i. a. zu einem Fehler führt bei einem Mehrbenutzersystem. (1)

A

Da ansonsten die Änderungen des ersten Updates überschrieben werden könnten.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Erläutern Sie die Aussage “Eager Fetching nicht verwenden und Lazy Fetching vermeiden”. (2)

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Erklären Sie, weshalb bei einer List<>, die eine 1-N Beziehung darstellt, diese mit @OrderColumn annotiert werden muss. (1)

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Erklären Sie die folgende Annotation.
@OneToOne(cascade = {PERSIST, REMOVE}, fetch = LAZY) (1)

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Erläutern Sie, welcher Code für Logging sinnvoller ist: (1) trace.logger(“LOGGER {}”, meldung)
oder
trace.logger(“LOGGER” + meldung).

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Warum wird beim Anlegen und Verändern nicht in der Präsentationsschicht, sondern richtigerweise in der Anwendungsschicht validiert? (1)

A

Da einige Daten nur mithilfe von Daten des Servers validiert werden können z. B. ob eine E-Mail bereits genutzt wurde.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Erläutern Sie die drei grundlegenden Bestandteile eines Tests. (1)

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Für welche Methoden werden sinnvollerweise keine Unit-Tests geschrieben? (1)

A

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#)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Erklären Sie, warum Integrationstests langsamer als Unit-Tests sind. (1)

A

Da Integrationstest den gesamten Server testen und dafür die unterschiedlichen Server alle gestartet werden müssen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Was ist der Unterschied zwischen einem Container und einem Image? (1)

A

Ein Image ist nur eine Datei, die ausführbaren Code enthält. Ein Container ist eine gestartete Anwendung, die das Image als Template verwendet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Mit welchem Befehl listet man seine Images auf? (1)

A

Mit dem Befehl “docker images | sort” werden alle Images sortiert aufgelistet.

32
Q

Erläutern Sie, wie in Kubernetes Pod und Deployment zusammenhängen. Hier ist der Ausdruck in Kubernetes gemeint und nicht die Bereitstellung einer Anwendung. (1)

A

Ein Deployment verwaltet verschiedene Instanzes des gleichen Pods, es startet z. B. bei Bedarf weitere Instanzen des Pods.

33
Q

Wie können Sie bei der Konfiguration mit helm mehrere Umgebungen anlegen, um z.B. eine Umgebung für die Entwicklung, eine für das RZ zu haben? (1)

A

In der zugehörigen YAML-Datei können verschiedene Profile definiert werden, unter denen die unterschiedlichen Konfigurationen gesetzt werden. Beim Deployment kann in der build.gradle das gewünschte Profil aufgerufen werden.

34
Q

Warum ist es sinnvoll für die Kommunikation zwischen den Microservices, dass Kubernetes zusätzlich Services zu den Pods laufen lässt? (1)

A

Damit der Service für Load Balancing die ankommenden Requests auf die verschiedenen Pods verteilen kann.

35
Q

Wofür wird das neue HTTP-Interface aus Spring 6.x.x bei Microservices genutzt. (1)

A

Es wird zur Kommunikation mit anderen Microservices verwendet.

36
Q

Was ist bei einem Server der Unterschied zwischen liveness und readiness?
Warum sollte ein Server nicht auf 100% laufen?

A

Readiness bedeutet, dass der Server hochgefahren und bereit ist Requests entgegen zu nehmen. Liveness bedeutet, dass ein Server zwar hochgefahren ist, jedoch z.B. noch keine Datenbankverbindung hergestellt ist und somit ein Client für seinen Request keinen Response erhalten würde. Ein Server sollte niemals zu 100% fertig sein, da das Programm sonst fertig ist und er wieder runterfährt.

37
Q

Was ist der Unterschied zwischen dem HTTP- und dem HTTPS-Protokoll?

A

HTTPS ist HTTP zusätzlich erweitert um TLS (Transport Layer Security) und stellt somit eine sichere verschlüsselte Verbindung dar.

38
Q

Was ist Gradle? Welche Aufgaben hat Gradle für uns erledigt?

A

Gradle ist ein Build-System mit der Hauptaufgabe Software zu bauen. Gradle hat für uns den Compiler (Zur Laufzeit und Übersetzungszeit) aufgerufen, Dokumentationen (asciidoctor, javadoc) generiert und Code-Qualität (checkstyle, spotBugs)überprüft.

39
Q

Was haben Gradle und Maven gemeinsam?

A

Diese beiden Build-Systeme haben die selbe Verzeichnisstruktur (src). Main und test haben die selben Unterverzeichnisse. Im Ordner java liegt der Java-Quellcode, in ressources liegt der Rest (z.B. Konfigurationsdateien: .yaml, .json, .sql usw.)

40
Q

Was ist ein Cache? Was sind Vorteile und Nachteile eines Caches?

A

Ein Cache ist ein zweiter Speichertort an dem Ergebnisse zwischengespeichert werden.

Vorteil: Schnelles Lesen

Nachteil: Beim Schreiben muss 2x geschrieben werden, 1x in den Cache, 1x an den primären Speicherort.

41
Q

Was bedeutet der Zusatz -Ddb=h2 hinter gradle bootRun

A

Wir haben am Anfang des Projekts noch keine Datenbank gehabt, also haben wir so getan als hätten wir eine indem wir die Systemproperty “db” auf den Wert “h2” gesetzt haben.

42
Q

Was ist der Vorteil von helm gegenüber docker compose?

A

Es gibt immer mindestens zwei Umgebungen, welche man unterschiedlich konfigurieren muss:

1.) Die gedachte Umgebung im Rechenzentrum
2.) Die konkrete Umgebung auf einem Entwicklungsrechner

Mit docker compose können wir nur eine mögliche Konfiguration mitliefern, helm jedoch kann mehrere Konfigurationen unterstützen.

43
Q

Wozu dienen Annotationen?

A

Annotationen dienen zur Auslagerung technischer Querschnittsfunktionalität.

44
Q

Was ist eine MutlivalueMap?

A

Die MultiValueMap ist eine spezielle Art einer Map, bei der es zu einem Schlüssel mehrere Werte geben kann.

45
Q

Was ist der Unterschied zwischen Listen und Mengen?

A

Mengen besitzen keine Duplikate. Die Elemente einer Menge besitzen keine Reihenfolge. Listen besitzen beide dieser Eigenschaften.

46
Q

Was bedeutet Rückwärtskompatibilität und warum ist Java rückwärtskompatibel?

A

Rückwärtskompatibilität bedeutet, dass Software, die für eine frühere Version einer Technologie entwickelt wurde, auch in einer neueren Version der Technologie ausgeführt werden kann.

In der Softwareentwicklung ist Rückwärtskompatibilität ein wichtiges Konzept, da es Softwareentwicklern ermöglicht, neue Versionen ihrer Software zu veröffentlichen, ohne dass bestehende Anwendungen unterbrochen werden.

47
Q

Was ist ein enum und warum sind wir in unserem Projekt von der Default-Implementierung abgewichen?

A

Ein enum ist eine spezielle Art von Datentyp, mit der man eine feste Anzahl von Werten definiert, welche eine Variable annehmen könnte. In unserem Projekt haben wir die Werte mit einem Kürzel versehen, sodass weniger Datenvolumen zum laden der Strings bei der Übertragung der JSON-Daten benötigt wird.

48
Q

Warum definiert man für Konstanten definiert eine Klasse und kein Interface?

A

Von Konstanten will man keine Objekte erzeugen. Wenn man die Konstanten in einem Interface implementiert, dann können Klassen dieses Interface implementieren und somit ein Objekt davon erzeugen. Um das zu verhindert implementiert man eine Klasse mit einem privaten Konstruktor, sodass keine Objekte davon erzeugt oder vererbt werden können.

49
Q

Was ist eine NullPointerException? Wie kann man NPE’s vermeiden?

A

Wenn auf einem Objekt mit dem Wert Null eine Methode aufgerufen wird, dann wird eine NPE geworfen und das Programm stützt ab. Man kann Objekte in Optional-Klassen packen, sodass wenn das Objekt null ist, man trotzdem ein Objekt der Klasse Optional hat und somit keine NPE geworfen wird.

50
Q

Wie funktionieren Textblöcke in Java?

A

final var textblock = “"”Eine $variable, die ersetzt werden kann.”””
Auf dem textblock kann ich dann .replace($variable, “Drilon”) um die Variable zu ersetzen.

51
Q

Was versteht man unter Implicit Classes und Enhanced Main Methods

A

Bisher musste man die main-Methode in einem Interface implementieren, damit sie funktioniert. Zusätzlich musste im Argument String[] args stehen.
Nun kann eine main-Methode so aussehen: void main() {…} ohne sich in einem Interface befinden zu müssen.

52
Q

Was ist ein String-Template?

A

Früher hat man Strings mit String-Konkatenation über ‘+’-Operator zusammengefügt: String1 + String2
Heute benutzt man das String-Template: STR.”{String1} {String2}”

53
Q

Was versteht man unter records und value records?

A

-> Records sind Datenhaltungsklassen ohne implementierte Logik, dessen Attribute alle immutable sind und weder erben noch vererben können. Die Standardmethoden wie Getter, Setter, Konstruktor, Equals, HashCode, toString werden generiert und Equals und hascode basieren auf Objektidentität.

-> Value Records sind spezielle Typen von records und sind zusätzlich noch immutable, jedoch basieren die Methoden Equals und HashCode auf dem Inhalt der Record-Attribute.

54
Q

Was versteht man unter Pattern-Matching?

A

Es können nicht nur Switch Expressions für primitive Typen implementiert werden, sondern auch für Objekte wie Integer oder Kunde.

55
Q

Was ist der Unterschied zwischen Switch-Anweisungen und Switch-Expressions?

A

Bei Switch-Anweisungen kann kein Wert zurückgegeben werden, sondern muss in jedem case der Variablen zugewiesen werden und nach jedem case muss ein break gemacht werden.
Bei Switch-Expressions kann ein Wert zurückgegeben werden, sodass die Variablen wegfallen und bei jedem case mit einem ‘->’-Operator auf die Werte verwiesen wird ohne ein break zu brauchen.

56
Q

Was ist der Unterschied zwischen einem Ausdruck und einer Anweisung?

A

Anweisungen sind Code-Fragemente, die eine Aktion ausführen, aber keinen Wert zurückgeben.
Beispiel: int x = 5; System.out.println(“Der Wert von x ist:” + x);
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.
Beispiel: int y = 2*(x+3)

57
Q

Was ist Autoboxing und Unboxing?

A

In Java gibt es neben den primitiven Typen wie int, bool etc. auch die zugehörin Klassen Integer, Boolean usw.. Autoboxing und Unboxing von Java erleichtern die Konvertierung der jeweiligen Datentypen.
Autoboxing: Integer obj = 5; // int wird in Integer-Objekt verpackt
Unboxing: int x = obj; // Wert aus Integer-Objekt wird ausgepackt

58
Q

Was ist ein Superkonstruktor?

A

Ein Superkonstruktor einer Klasse ruft bei der Objekterzeugung den Konstruktor der Superklasse auf, d.h. von der abgeleiteten Klasse.

59
Q

Was ist lombok und wo haben wir es in unserem Projekt verwendet?

A

Lombok ist eine importierte Java-Bibliothek, welche für uns durch die Verwendung von Annotation einzelne Code-Fragemente generiert, damit wir zeiteffizient robuste und leicht lesbare Software entwickeln können.
Beispiele: @Getter, @Setter, @RequiredArgsConstructor, @ToString,

60
Q

Was bedeutet Type Inference?

A

Bei der Deklaration einer Variablen wird der Datentyp nicht explizit angegeben, sondern implizit gesetzt durch den zugewiesenen Wert.

61
Q

Nennen Sie 3 HOF’s und erläutern Sie wann man diese einsetzt?

A

ForEach um durch eine Liste von Objekten zu gehen. Map um ein Objekt abzubilden. Filter um nach einem Kriterium auszusortieren.
Wir programmieren unsere Klasse und Methoden objektorientiert und innerhalb der Methoden funktional mit HOF’s und Lambda-Ausdrücken.

62
Q

Welches Werkzeug haben wir benutzt um Images zu inspizieren?

A

Wir konnten unser Image mit dem task dive in der Powershell inspizieren oder mit dem Tool Window Services von IntelliJ.

63
Q

Erläutern Sie wie in Kubernetes Pod und Deployment zusammenhängen

A

In Kubernetes stellt ein Pod die kleinste Einheit dar, die eine oder mehrere Container enthält, während ein Deployment u.a. die Aktualisierung und Überwachung von Pods ermöglicht, um z.B. sicherzustellen, dass die gewünschte Anzahl von Pods ständig verfügbar ist.

64
Q

Wie können Sie bei der Konfiguration mit helm mehrere Umgebungen anlegen, z.B. eine Umgebung für die Entwicklung und eine fürs Rechenzentrum?

A

In der zugehörigen YAML-Datei können verschiedene Profile definiert werden, unter denen die unterschiedlichen Konfigurationen gesetzt werden. Beim Deployment kann in der build.gradle das gewünschte Profil aufgerufen werden.

65
Q

Warum ist es sinnvoll, dass Kubernetes Services zusätzlich zu den Pods laufen lässt für die Kommunikation zwischen den Microservices?

A

Kubernetes Services zusätzlich zu Pods dienen als stabile Endpunkte, unabhängig von den sich ändernden Pods. Dadurch können Microservices über den Service-Namen kommunizieren, was eine lose Kopplung und Flexibilität ermöglicht.

66
Q

Was ist der Unterschied zwischen einem Proxy und Reverse Proxy

A

-Ein Proxy sitzt vor den Client-Endpunkten, fängt eingehende Anfragen ab und stellt sicher, dass die Server nicht direkt mit den Clients kommunizieren.

-Reverse Proxys sitzen vor dem Webserver und stellen sicher, dass Clients nicht direkt mit dem Server kommunizieren können.

67
Q

Was ist der größte Vorteil von Container-Software wie Docker und Kubernetes gegenüber Virtualisierung-Software wie VMWare und VirtualBox?

A

Eine Virtualisierungssoftware braucht durch das implementierte umfangreiche Betriebssystem lange bis es hochfährt. Ein Docker-Container kann in nur wenigen Sekunden starten.

68
Q

Was versteht man unter “run everywhere” und “run anything”

A

Run anything bedeutet, dass das was auf dem Rechner läuft auch im Container läuft. Run everywhere bedeutet, dass Container und Rechnerarchitektur zusammenpassen müssen.

69
Q

Welchen Unterschiede gibt es aus Entwicklersicht und Betriebssicht auf Container?

A

Aus interner Entwicklersicht sind Code, Daten und unsere Bibliotheken relevant. Aus externe Betriebssicht ist Logging, Monitoring, Remote-Zugriff sowie die Netzwerkkonfiguration relevant.

70
Q

Welche Komponenten benötigt man für das Deployment?

A

1 Container und 1 Microservice als deployable artifact

71
Q

Welche 2 Varianten haben wir kennengelernt um ein Docker-Images zu bauen?

A

Cloud Native Buildpacks: Hier braucht man lediglich den Quellcode (gradle bootBuildImage). Fremdsoftware stellt uns die Cloud Native Buildpacks bereit.

Dockerfile: Im Dockerfile stehen eine Reihe von Befehlen um Schritt für Schritt ein Docker-Image aufzubauen (docker buildx build).

71
Q

Wie kann man die Begriffe Kubernetes, Docker und Images im Zusammenhang erklären.

A

Ein Image ist ein Software-Paket, welches u.a. aus ein abgespeckten BS, Bibliotheken und die eigene Anwendung besitzt.
Ein Docker-Container ist eine isolierte und portable Umgebung, in dem ein Image ausgeführt werden kann.
Kubernetes ist eine Plattform und bietet eine robuste und flexible Umgebung zur Verwaltung von Containern über mehrere Hosts hinweg.

71
Q

Was ist der größte Unterschied zwischen Docker und Podman?

A

Bei Podman benötigt man keine Administratorrechte im Gegensatz zu Docker -> Besser bzgl. IT-Security.

71
Q

Was ist ein Pod in Kubernetes?

A

Ein Pod ist die kleinste berechenbare Einheit in Kubernetes und repräsentiert z.B. einen einzelnen Microservice. Pods sind vergänglich und können bei Bedarf erstellt, aktualisiert oder gelöscht werden.

72
Q

Was ist ein Service in Kubernetes?

A

Ein Service ist ein Objekt mit einer festen IP-Adresse und einem festen Port, das einen stabilen Netzwerkendpunkt für eine Gruppe von Pods bereitstellt. Es abstrahiert die zugrunde liegenden Pods und ermöglicht anderen Services mit ihnen zu kommunizieren.

73
Q

Was ist ein Deployment in Kubernetes?

A

Deployment: Ein Deployment ist ein Kubernetes-Objekt, das verwendet wird, um die gewünschte Anzahl von Pods und deren Lebenszyklus zu verwalten. Ein Deployment ermöglicht es, Anwendungen auf einfache Weise zu skalieren, zu aktualisieren und wiederherzustellen.

74
Q

Was macht docker SBOM?

A

SBOM steht für Software Bill of Materials für Docker. SBOM ist eine Liste der Komponenten und Abhängigkeiten, die zur Erstlelung eines Softwarepakets verwendet werden. Dies für Transparenz und Vertrauen im Softwarebereitstellungsprozess sorgen.