Was Ist Eine Hash-Tabelle? Hashing Und Kollisionen ErklÀrt

Ob Sie einen SchlĂŒssel in einem Python-dict mit zehn EintrĂ€gen suchen oder in einem mit zehn Millionen: Es dauert gleich lange. Das liegt nicht an einer besonders schnellen Sprache. Pythons dict, Javas HashMap und JavaScripts Map sind allesamt Hash-Tabellen, und das gesamte Design existiert, damit Suche, EinfĂŒgen und Löschen im Durchschnitt mit O(1) laufen. Die Big-O-Notation nennt diese Suche “konstante Zeit”. Hier ist der Mechanismus, der das verdient. Wie eine Hash-Tabelle einen SchlĂŒssel in einen Array-Index umwandelt Eine Hash-Tabelle ist ein Array plus eine Funktion, die einen SchlĂŒssel in eine Position in diesem Array umwandelt. ...

4. November 2026 Â· 7 Minuten Â· 1450 Wörter Â· SpaghettiCoder

Mock, Stub, Fake und Spy: Test Doubles ErklÀrt

Ein Test fĂŒr place_order braucht ein Payment-Gateway, einen SMS-Client und einen Steuerrechner. Setzen Sie die echten Objekte ein: Jeder Testlauf belastet dann eine Karte und verschickt eine SMS an eine echte Telefonnummer. Ein Unit-Test soll in Millisekunden laufen, ohne Netzwerkzugriff — also mĂŒssen alle drei durch etwas anderes ersetzt werden. Dieses „etwas andere“ gibt es in fĂŒnf Varianten, die jeweils ein anderes Problem lösen. Wer sie fĂŒr austauschbar hĂ€lt, erlebt im Code-Review immer wieder dieselbe Debatte: „dann mock das doch einfach“. ...

2. November 2026 Â· 8 Minuten Â· 1596 Wörter Â· SpaghettiCoder

RegulĂ€re AusdrĂŒcke ErklĂ€rt: Wie Regex Wirklich Funktioniert

<.+> gegen <b>bold</b> and <i>italic</i> findet nicht <b>. Es findet die gesamte Zeichenkette, vom ersten < bis zum allerletzten >. Nichts ist defekt. Genau das soll ein greedy Quantifizierer tun, und es ist auch der hĂ€ufigste “Regex matcht zu viel”-Bug ĂŒberhaupt. Sobald klar ist, was die Engine beim Lesen des Musters tut, hören dieser Bug und die meisten seiner Verwandten auf, RĂ€tsel zu sein. Wie eine Regex-Engine Ihr Muster Liest Eine Regex-Engine vergleicht Ihr Muster nicht mit der Zeichenkette wie man zwei Zeichenketten auf Gleichheit vergleicht. Die Engines, die Sie tĂ€glich nutzen (re in Python, RegExp in JavaScript, PCRE, .NET, Java), sind regex-directed: Sie lesen das Muster von links nach rechts, Token fĂŒr Token, und versuchen fĂŒr jedes Token, Zeichen aus der Zeichenkette an der aktuellen Position zu konsumieren. Wenn ein Token passt, rĂŒckt die Engine sowohl den Muster-Zeiger als auch den Zeichenketten-Zeiger vor. Wenn ein Token fehlschlĂ€gt, macht die Engine Backtracking: Sie geht zum letzten Punkt zurĂŒck, an dem sie eine Wahl hatte, etwa ein Quantifizierer, der weniger Zeichen hĂ€tte matchen können, oder ein noch nicht probierter Alternationszweig, und probiert die andere Option. ...

28. Oktober 2026 Â· 8 Minuten Â· 1508 Wörter Â· SpaghettiCoder

Was sind Unicode und die UTF-8-Kodierung

Öffnen Sie eine als UTF-8 gespeicherte Datei in einem Tool, das eine andere Kodierung annimmt, und aus cafĂ© wird café. Die Bytes auf der Festplatte haben sich nicht geĂ€ndert. GeĂ€ndert hat sich nur die Regel, mit der sie wieder in Zeichen zurĂŒckverwandelt werden, und die beiden Regeln sind sich nicht einig, was das Byte 0xC3 bedeutet. Die meisten Bugs mit “komischen Zeichen” laufen auf dasselbe hinaus: kaputte Dateinamen, zerstörte Formulareingaben, ein Emoji, das einen Datenbank-Insert zum Absturz bringt, zwei Strings, die identisch aussehen, aber beim Vergleich nicht gleich sind. Jedes Mal werden zwei getrennte Dinge verwechselt: Unicode und UTF-8. ...

20. Oktober 2026 Â· 8 Minuten Â· 1492 Wörter Â· SpaghettiCoder

Was ist TDD? Der Red-Green-Refactor-Zyklus ErklÀrt

Ein Test, der nach dem Code geschrieben wird, prĂŒft meist, was der Code tut, nicht, was er tun sollte. Testgetriebene Entwicklung (TDD) behebt das, indem sie die Reihenfolge umdreht: Sie schreiben den Test, sehen ihn fehlschlagen und schreiben dann den kleinsten Code, der ihn bestehen lĂ€sst. Weil der Test existiert, bevor der Code existiert, den er prĂŒft, kann er nicht stillschweigend bestĂ€tigen, was der Code gerade zufĂ€llig zurĂŒckgibt. Kent Beck hat diese Schleife in seinem Buch Test-Driven Development: By Example von 2002 als red, green, refactor formalisiert. Der Name ist geblieben. ...

18. Oktober 2026 Â· 7 Minuten Â· 1389 Wörter Â· SpaghettiCoder

Rekursion ErklÀrt: Wann Einsetzen, Wann Nicht

Eine Funktion, die sich selbst aufruft, hat eine maximale Tiefe, und die ist kleiner, als die meisten erwarten: 1.000 Aufrufe in CPython standardmĂ€ĂŸig, etwa 10.000 bis 15.000 in Node und in Browser-Engines, je nachdem, wie viel jeder Frame belegt. Wird dieses Limit ĂŒberschritten, wird das Programm nicht einfach langsamer. Es stĂŒrzt ab. Python löst RecursionError: maximum recursion depth exceeded aus; JavaScript löst RangeError: Maximum call stack size exceeded aus. Beide Fehler haben die gleiche Ursache, und wenn Sie sie einmal verstanden haben, wissen Sie, wann Rekursion das richtige Werkzeug ist und wann sie zum Risiko wird. ...

13. Oktober 2026 Â· 7 Minuten Â· 1427 Wörter Â· SpaghettiCoder

SOLID-Prinzipien ErklÀrt mit Python-Beispielen

Eine Klasse, die einen Nutzer in der Datenbank speichert, ihm eine Willkommens-E-Mail schickt und eine Quittung formatiert, ist eine Änderung davon entfernt, zwei Funktionen zu zerstören, mit denen sie nichts zu tun hat. Fassen Sie das E-Mail-Template an, riskieren Sie den Schreibzugriff auf die Datenbank. Fassen Sie das Quittungslayout an, riskieren Sie die E-Mail. SOLID ist der Sammelbegriff fĂŒr fĂŒnf Regeln gegen genau diese Art von Verknotung, jede aus einem anderen Blickwinkel. Sie teilen eine Idee: Eine Klasse soll nur einen Grund haben, sich zu Ă€ndern, und der Rest des Codes soll davon abhĂ€ngen, was etwas zu tun verspricht, nicht davon, wie es das tut. ...

10. Oktober 2026 Â· 9 Minuten Â· 1870 Wörter Â· SpaghettiCoder

Was ist eine Race Condition und wie behebt man sie

Zwei Anfragen treffen im Abstand von einer halben Millisekunde auf denselben “100€ abheben”-Endpunkt. Das Konto hat 150€. Beide Anfragen lesen diesen Kontostand, beide sehen genug Guthaben, beide werden genehmigt, beide ziehen 100€ ab. Das Konto landet bei -50€, und kein Codepfad hĂ€tte das zulassen dĂŒrfen. Das ist eine Race Condition: Das Ergebnis hĂ€ngt davon ab, welche Operation zufĂ€llig zuerst fertig wird, und “zuerst” war nie eine Entscheidung, die der Code getroffen hat. ...

9. Oktober 2026 Â· 9 Minuten Â· 1831 Wörter Â· SpaghettiCoder

Python-Decorators ErklÀrt mit Beispielen

Was ein Decorator wirklich mit Ihrer Funktion macht Sie wollen jede Funktion zeitlich messen, die eine langsame externe API aufruft. Sie können time.perf_counter()-Aufrufe in jede einzelne einfĂŒgen, oder die Messung einmal schreiben und ĂŒberall anwenden. Ein Decorator ist die zweite Option: eine Funktion, die eine andere Funktion nimmt, sie in zusĂ€tzliches Verhalten einwickelt und die eingewickelte Version unter dem ursprĂŒnglichen Namen zurĂŒckgibt. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import time def timed(func): def wrapper(*args, **kwargs): start = time.perf_counter() result = func(*args, **kwargs) elapsed = time.perf_counter() - start print(f"{func.__name__} took {elapsed:.3f}s") return result return wrapper @timed def fetch_price(ticker): time.sleep(0.2) # Platzhalter fĂŒr einen Netzwerkaufruf return 142.50 fetch_price("AAPL") # fetch_price took 0.201s @timed ĂŒber def fetch_price ist die Kurzform von fetch_price = timed(fetch_price). Python ruft timed einmal auf, direkt nachdem fetch_price definiert wurde, und bindet den Namen fetch_price neu an das, was timed zurĂŒckgibt. Das ist alles, was das @ tut. ...

7. Oktober 2026 Â· 6 Minuten Â· 1242 Wörter Â· SpaghettiCoder

Warum 0.1 + 0.2 Nicht 0.3 Ergibt: Gleitkommazahlen ErklÀrt

FĂŒhren Sie 0.1 + 0.2 in einer Python-Shell aus, kommt nicht 0.3 heraus, sondern 0.30000000000000004. Probieren Sie es in JavaScript, Java, Go, C oder Rust, und Sie bekommen denselben sechzehnstelligen Schwanz. Jede dieser Sprachen tut genau das, was der Hardware-Standard vorschreibt. Eine Zahl, die unendlich viele BinĂ€rstellen brĂ€uchte, wird in 64 Bit gepresst, und irgendetwas muss nachgeben. Warum sich 0.1 nicht exakt binĂ€r speichern lĂ€sst Computer speichern Gleitkommazahlen zur Basis 2. In Basis 2 hat der Bruch 1/10 eine periodische Entwicklung, genau wie sich 1/3 in Basis 10 endlos wiederholt (0.3333...). Ausgeschrieben beginnt 0.1 binĂ€r so: ...

6. Oktober 2026 Â· 6 Minuten Â· 1078 Wörter Â· SpaghettiCoder