Advanced Programming Techniques - Cheatsheet
Singleton, Factory und Observer Design Patterns
Definition:
Singleton, Factory und Observer Design Patterns - schnelle Übersicht für Fortgeschrittene
Details:
- Singleton: Stellen sicher, dass eine Klasse nur eine Instanz hat und bieten einen globalen Zugriffspunkt.
- Factory: Erstellen Objekte, ohne ihre konkrete Implementierung offenzulegen, oft durch eine Factory-Methode.
- Observer: Ermöglichen ein Abhängigkeitsverhältnis zwischen Objekten, sodass bei einer Zustandsänderung eines Objektes alle abhängigen Objekte benachrichtigt und aktualisiert werden.
Threads und Thread-Synchronisation
Definition:
Threads: Ausführungsstränge innerhalb eines Prozesses. Thread-Synchronisation: Koordination der Ausführung von Threads, um Konkurrenzprobleme zu vermeiden.
Details:
- Thread: leichtergewichtig, teilt Speicher mit anderen Threads desselben Prozesses
- Vorteile: Parallelität, bessere CPU-Auslastung
- Probleme: Race Conditions, Deadlocks
- Synchronisation: Mutex, Semaphore, Monitore
- Mutex: wechselseitiger Ausschluss
- Semaphore: Signalisierung und Zähler
- Monitor: höhere Abstraktion, eingebauter Lock und Signalisierung
Lambda-Ausdrücke und Closures in funktionalen Programmiersprachen
Definition:
Kurze, anonyme Funktionen mittels derer Funktionen als Argumente oder Rückgabewerte genutzt werden können. Closures kapseln Variablen aus ihrem definitorischen Kontext.
Details:
- Syntax für Lambda: \(\text{\texttt{\textbackslash x -> x * 2}}\)
- Ermöglicht höhere Ordnung der Programmierung
- Closures schließen über Umgebung: Funktion + gebundene Variablen
- Beispiele: Haskell, Python, JavaScript
Garbage Collection Algorithmen (z.B. Mark-and-Sweep, Generational GC)
Definition:
Garbage Collection-Algorithmen werden verwendet, um nicht mehr benötigte Speicherbereiche in einer Programmiersprache automatisch zu verwalten und freizugeben.
Details:
- Mark-and-Sweep: Zwei Phasen, Markieren & Bereinigen. Unreachable Objekte entfernt.
- Generational GC: Heaps in Generationen unterteilt. Junge Objekte häufiger bereinigt, da Kurzlebigkeiten vermehrt auftreten.
- Beibehaltung Performance & Effizienz durch Minimierung von Pausenzeiten & Optimierung Speicherverwaltung.
Graph-Algorithmen: DFS, BFS und Dijkstra
Definition:
Untersuche und navigiere in Graphenobjekten, um Pfade und Verbindungen zu finden.
Details:
- Tiefensuche (DFS): Erkundet so tief wie möglich, bevor es zurückklettert.
- Breitensuche (BFS): Erkundet alle Nachbarn, bevor es in die Tiefe geht.
- Dijkstra: Finde den kürzesten Pfad von einem Startknoten zu allen anderen Knoten in einem Graphen mit nicht-negativen Gewichtungen.
- DFS Algorithmus: Rekursiver oder stack-basierter Ansatz, zeitliche Komplexität: \(\text{O}(V + E)\).
- BFS Algorithmus: Warteschlangen-basiert, zeitliche Komplexität: \(\text{O}(V + E)\).
- Dijkstra Algorithmus: Heaps/ Priority-Queue-basiert, zeitliche Komplexität: \(\text{O}(V^2)\) oder \(\text{O}(V + E \,\log \,V)\) mit Priority-Queue.
- DFS/BFS Anwendung: Netzwerkdurchsuchung, Pfadfindung, Verbundkomponenten.
- Dijkstra Anwendung: Verkehrsnetze, Routensuche, Navigationssysteme.
Refactoring und Clean Code Techniken
Definition:
Refactoring ist das Umstrukturieren von Code, ohne dessen externes Verhalten zu ändern. Clean Code Techniken helfen, lesbaren und wartbaren Code zu schreiben.
Details:
- Kleine, verständliche Methoden: Methoden sollten eine Aufgabe haben und nicht mehr als 20 Zeilen lang sein.
- Sprechende Namen: Variablen- und Methodennamen sollten selbsterklärend sein.
- KISS-Prinzip: Keep It Simple, Stupid - Einfachheit vor Komplexität.
- DRY-Prinzip: Don't Repeat Yourself - Vermeidung von Redundanzen.
- SOLID-Prinzipien: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion.
- Regelmäßiges Refactoring: Häufiges Refactoring zur kontinuierlichen Verbesserung der Codequalität.
- Automatisierte Tests: Tests zur Sicherstellung der Funktionsfähigkeit nach Refactorings.
Locks, Semaphoren und Deadlocks
Definition:
Mechanismen zur Kontrolle des Zugriffs auf geteilte Ressourcen in parallelen/konkurrierenden Systemen und zur Vermeidung von Deadlocks.
Details:
- Locks: Synchronisationsmechanismen, die Ressourcen exklusiv bereitstellen
- Mutex (Mutual Exclusion): Vermeidung doppelter Ressourcennutzung
- Spinlock: aktives Warten auf Ressourcenzugriff
- Semaphoren: Zählerbasierte Synchronisationswerkzeuge
- Binäre Semaphoren: ähnlich wie Mutex, aber reentrancy möglich
- Zählsmaphore (Counting Semaphore): ermöglicht Zugriff auf mehrere Instanzen einer Ressource
- Deadlocks: Situation, in der zwei oder mehr Prozesse auf Ressourcen warten, die von einander blockiert werden; keine Prozesse können fortfahren
- Hinweis: Deadlock-Bedingungen (Kaffman-Bedingungen)
- Mutual Exclusion
- Hold and Wait
- No Preemption
- Circular Wait
Speicherlecks und deren Vermeidung
Definition:
Speicherlecks treten auf, wenn ein Programm Speicher alloziert, aber nicht freigibt, sodass es zu einem Ressourcenverlust kommt.
Details: