Praxisnahe, zeitlose Guides fuer Entwickler. Jeder baut auf echten Befehlen und lauffaehigen Beispielen auf und sagt klar, wann man das behandelte Werkzeug nicht einsetzen sollte.
Unten steht alles, neueste zuerst.
Praxisnahe, zeitlose Guides fuer Entwickler. Jeder baut auf echten Befehlen und lauffaehigen Beispielen auf und sagt klar, wann man das behandelte Werkzeug nicht einsetzen sollte.
Unten steht alles, neueste zuerst.
Wenn Sie ein Modell um eine Antwort in JSON bitten, funktioniert json.loads() meistens problemlos. Die AusfĂ€lle sind die, die Sie eine Debugging-Sitzung kosten: ein einzeiliger Kommentar innerhalb des Objekts, ein Markdown-Code-Fence darum, ein SchlĂŒssel als userEmail geschrieben, wo Ihr Code user_email erwartet. Ein strikterer Prompt (âantworte NUR mit dem JSON-Objekt, kein weiterer Textâ) macht diese FĂ€lle seltener. Unmöglich macht er sie nicht, denn das Modell kann die Anweisung trotzdem ignorieren. Strukturierte Ausgabe macht diese Anweisung ĂŒberflĂŒssig: Sie ĂŒbergeben der API ein JSON Schema, und das schrĂ€nkt das Token-Sampling des Modells selbst so ein, dass die Antwort dazu passen muss. ...
Sie schreiben .sidebar .card { color: blue; }, laden die Seite, und die Card ist immer noch rot â wegen einer Regel, die Sie eine Stunde vorher hinzugefĂŒgt haben: .card { color: red; }. Ihre neue Regel steht spĂ€ter in der Datei. Sie verliert trotzdem. Der Browser vergleicht die beiden Selektoren mit einem festen Punktesystem, und .sidebar .card erhĂ€lt eine höhere Punktzahl als .card, egal welcher zuletzt geschrieben wurde. Dieses Punktesystem ist die SpezifitĂ€t. Sobald Sie sie auf den ersten Blick berechnen können, wird âwarum wirkt mein CSS nichtâ zu Arithmetik. Mit dem Layout hat das nichts zu tun: Grid oder Flexbox entscheidet, wo ein Element sitzt; die SpezifitĂ€t entscheidet, welche Regel Farbe oder GröĂe setzt, wenn zwei Regeln sich widersprechen. ...
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. ...
Ein C-Programm, das einen Buffer freigibt und trotzdem weiter daraus liest, kompiliert problemlos. Danach beschĂ€digt es den Speicher, manchmal sofort, manchmal erst drei Requests spĂ€ter, in einem Teil des Codes, der diesen Buffer nie berĂŒhrt hat. Rust lehnt dieses Programm schon beim cargo build ab, ganz ohne Garbage Collector. Der Compiler verfolgt, wem jeder Wert gehört und wer ihn ansehen darf. Dieses Verfolgen ist Ownership und Borrowing. Was sind Rusts Ownership-Regeln? Rusts Ownership-Modell lĂ€sst sich auf drei Regeln zurĂŒckfĂŒhren: ...
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â. ...
Sie speichern eine Datei, Prettier formatiert sie neu, und ESLint meldet sofort einen Fehler in der Zeile, die Prettier gerade angefasst hat. Beide Tools sind konfiguriert, beide laufen, und statt zu helfen, bekĂ€mpfen sie sich gegenseitig. Die beiden Tools erledigen unterschiedliche Aufgaben. Das Problem: Beide haben eine Meinung zu genau einer Sache â wie der Code auf der Seite aussieht. Was ESLint tatsĂ€chlich prĂŒft ESLint zerlegt Ihren Code in einen abstrakten Syntaxbaum und fĂŒhrt Regeln gegen dessen Struktur aus. Der gröĂte Teil seines Nutzens kommt von Regeln, die echte Bugs finden: eine Variable, die nie definiert wird, ein nicht erreichbares return nach einem anderen return, ein ungenutzter Import, der nach einem Refactoring ĂŒbrig blieb, ein doppelter Objekt-Key, der den ersten lautlos ĂŒberschreibt. Das sind semantische PrĂŒfungen â ESLint liest, was der Code tut. ...
Warum eine BankĂŒberweisung mehr als zwei UPDATE-Anweisungen braucht Verschieben Sie 50 ⏠von einem Konto auf ein anderes, und die naive Version sind zwei Anweisungen: vom Konto A abziehen, dem Konto B hinzufĂŒgen. FĂŒhren Sie sie getrennt aus, und wenn der Prozess abstĂŒrzt oder die Verbindung zwischen den beiden abbricht, ist das Geld von A verschwunden und kommt nie bei B an. Die Datenbank hat genau das getan, was ihr gesagt wurde, zweimal. Das GeschĂ€ft hat trotzdem 50 ⏠verloren. ...
Warum âsieht richtig ausâ kein Test fĂŒr einen Prompt ist Sie schĂ€rfen die Formulierung eines Prompts, der Tickets routet, testen ihn an den drei Beispielen, die in Ihrem Scratch-Notebook offen sind, und bringen ihn live. Eine Woche spĂ€ter landen Rechnungsbeschwerden, die frĂŒher in der richtigen Warteschlange ankamen, plötzlich bei âFrageâ. Nicht die drei FĂ€lle, die Sie geprĂŒft haben: die anderen vierhundert, die Sie nicht geprĂŒft haben. Nichts stĂŒrzt ab. Es gibt keinen Stacktrace. Der Prompt klingt, laut vorgelesen, immer noch gut. ...
Eine Chat-Komponente baut ihre WebSocket-Verbindung jedes Mal neu auf, wenn Sie einen Buchstaben in ein Suchfeld eingeben, das mit dem Chat nichts zu tun hat. Eine andere Komponente rendert sich in einer Schleife neu, bis der Tab einfriert. Eine dritte loggt beim Mount zweimal aus ihrem useEffect, aber nur in der Entwicklung. Keiner dieser FĂ€lle ist ein React-Bug. Die ersten beiden sind das Dependency-Array, das genau das tut, was Sie ihm gesagt haben, und der dritte ist der Strict Mode, der prĂŒft, ob Ihr Effekt sich selbst aufrĂ€umen kann. ...
<.+> 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. ...