Aufgaben
Hier sind alle Aufgaben des Kurses an einem Ort, nach Modulen. Jede führt zu der Lektion, die erklärt, was du brauchst.
Aufgaben aus den Lektionen
Abschnitt „Aufgaben aus den Lektionen“Entwurfsmuster
- Warum Muster
- Strategy
- Observer
- Factory Method und Simple Factory
- Builder
- Singleton und Dependency Injection
- Adapter und Facade
- Decorator
- Composite
- Command
- State
- Template Method und Iterator
- Repository
- Der Shop: welches Muster wohin: Die Zustände der Bestellung · Ein Rabatt über 100 € · Eine Speicherung, die sich erinnert · Ein fremder Kurierdienst
Sauberer Code und Refactoring
- Namen im Code
- Funktionen: eine Aufgabe, wenige Parameter, keine versteckten Seiteneffekte
- Kommentare, die lügen, und Kommentare, die helfen
- Code-Smells: lange Methode, große Klasse, Duplikate, Primitive statt Typen, lange if-Ketten
- Tests als Sicherheitsnetz
- Refactoring in kleinen Schritten
- SOLID ohne Dogma
- Übung: eine chaotische Klasse, Schritt für Schritt aufgeräumt: Der Kassenbon in einer eigenen Klasse · Der Tarif aus Text · Nacht aus der Uhrzeit · Der Student
Komplexität
- Zeitkomplexität: Schritte zählen
- Big-O: wie die Arbeit wächst
- Bester, durchschnittlicher und schlechtester Fall
- Speicherkomplexität
- Amortisierte Komplexität
Suchen
Sortieren
- Insertionsort und Selectionsort
- Mergesort und „Teile und herrsche“
- Quicksort und der schlechte Pivot
- Heap und Heapsort
- Countingsort und Radixsort
- Stabiles Sortieren und die eingebaute Sortierung
Rekursion
- Der Aufrufstapel von innen
- Von der Rekursion zur Schleife
- Schnelles Potenzieren
- Teile und herrsche und der Rekursionsbaum
Datenstrukturen
- Das dynamische Array von innen
- Verkettete Liste
- Stapel und Warteschlange
- Hashtabelle
- Binärer Suchbaum
- Prioritätswarteschlange
- Trie
- Union-Find
Graphen
- Graph: Adjazenzliste und Matrix
- BFS: die wenigsten Haltestellen
- DFS: Inseln und Zyklen
- Topologische Sortierung
- Dijkstra
- Minimaler Spannbaum
Dynamische Programmierung
- Überlappende Teilprobleme
- Das Wechselgeldproblem
- Das Rucksackproblem
- Die längste gemeinsame Teilfolge und Diff
- Eine DP-Aufgabe erkennen
Gierige Algorithmen
Techniken zum Lösen von Aufgaben
Projekt: Navigation in der Stadt
- Navigation in der Stadt
- Navigation in der Stadt
- Navigation in der Stadt
- Navigation in der Stadt
- Navigation in der Stadt
- Navigation in der Stadt
Nebenläufigkeit und Race Conditions
- Warum Threads
- Race Condition
- Sperren
- Atomare Operationen und unveränderliche Objekte
- Deadlock
- Producer und Consumer
- Thread-Pool und Aufgaben
- async ist kein Thread
- Nebenläufigen Code testen
Sicherheit für Entwickler
- Nicht vertrauenswürdige Eingaben
- Injektionen: wenn Daten zum Befehl werden
- XSS: ein fremdes Skript in deiner Seite
- Passwörter
- Sitzungen, Cookies und CSRF
- JWT und seine Fallen
- Geheimnisse im Code und in Git
- Abhängigkeiten: fremder Code, den dein Code ausführt
- Kryptografie, die du nicht selbst schreibst
Softwarearchitektur
- Schichten
- Hexagonale und Clean Architecture
- Monolith, modularer Monolith, Services
- Ereignisse und Warteschlangen
- Transactional Outbox
- API-Design: Vertrag, Versionen, wiederholte Anfragen
- Caching
- Skalierung
- ADR: Architekturentscheidungen festhalten
Der Architekt bei der Arbeit
- Nichtfunktionale Anforderungen, die du messen kannst
- Trade-offs
- Wenn der Nachbar langsam ist: Timeout, Retry, Circuit Breaker
- Eine Transaktion über Services hinweg (Saga)
- Alte und fremde Systeme anbinden
- Ein laufendes System verändern (Strangler Fig, Expand–Contract)
- Architektur-Review
- Die Unternehmenslandschaft und ihre Capabilities
- Deine erste Architekturaufgabe
- Deine erste Architekturaufgabe
- Deine erste Architekturaufgabe
- Deine erste Architekturaufgabe
- Deine erste Architekturaufgabe
- Deine erste Architekturaufgabe
- Deine erste Architekturaufgabe
- Deine erste Architekturaufgabe