Table de Hachage : Comment le Hachage Fonctionne

Chercher une clĂ© dans un dict Python contenant dix entrĂ©es prend le mĂȘme temps que dans un dict qui en contient dix millions. Ce n’est pas un hasard liĂ© Ă  un langage rapide. Le dict de Python, le HashMap de Java et la Map de JavaScript sont tous des tables de hachage, et toute leur conception vise Ă  faire tourner recherche, insertion et suppression en O(1) en moyenne. La notation Big O donne Ă  cette recherche l’étiquette “temps constant”. Voici le mĂ©canisme qui la justifie. ...

4 novembre 2026 Â· 9 min Â· 1731 mots Â· SpaghettiCoder

Ownership et Borrowing en Rust Expliqués

Un programme en C qui libĂšre un buffer puis continue Ă  le lire compile quand mĂȘme. Il corrompt ensuite la mĂ©moire, parfois immĂ©diatement, parfois trois requĂȘtes plus tard, dans une partie du code qui n’a jamais touchĂ© ce buffer. Rust rejette ce programme dĂšs le cargo build, sans aucun garbage collector. Le compilateur garde la trace de qui possĂšde chaque valeur et qui peut y accĂ©der. Ce suivi, c’est l’ownership et le borrowing. ...

3 novembre 2026 Â· 8 min Â· 1681 mots Â· SpaghettiCoder

Mock, Stub, Fake et Spy : les Test Doubles Expliqués

Un test pour place_order a besoin d’une passerelle de paiement, d’un client SMS et d’un calculateur de taxes. Branchez les vraies dĂ©pendances, et chaque exĂ©cution de test dĂ©bite une carte et envoie un SMS. Un test unitaire doit s’exĂ©cuter en quelques millisecondes, sans rĂ©seau : les trois doivent donc ĂȘtre remplacĂ©es par autre chose. Cet « autre chose » existe en cinq variantes, chacune rĂ©solvant un problĂšme diffĂ©rent, et les traiter comme interchangeables est la raison pour laquelle les dĂ©bats « mets juste un mock » en revue de code tournent en rond. ...

2 novembre 2026 Â· 9 min Â· 1719 mots Â· SpaghettiCoder

ESLint vs Prettier : Différences et Comment les Combiner

Vous enregistrez un fichier, Prettier le reformate, et ESLint signale immĂ©diatement une erreur sur la ligne que Prettier vient de toucher. Les deux outils sont configurĂ©s, les deux tournent, et au lieu de vous aider, ils se bloquent l’un l’autre. Les deux outils ne font pas le mĂȘme travail. Le problĂšme, c’est qu’ils ont tous les deux un avis sur une seule chose : l’apparence du code Ă  l’écran. Ce qu’ESLint vĂ©rifie rĂ©ellement ESLint transforme votre code en arbre de syntaxe abstraite et exĂ©cute des rĂšgles sur sa structure. Son intĂ©rĂȘt principal vient des rĂšgles qui dĂ©tectent de vrais bugs : une variable jamais dĂ©finie, un return inaccessible aprĂšs un autre return, un import restĂ© inutilisĂ© aprĂšs un refactoring, une clĂ© d’objet dupliquĂ©e qui Ă©crase silencieusement la premiĂšre. Ce sont des vĂ©rifications sĂ©mantiques : ESLint lit ce que le code fait. ...

1 novembre 2026 Â· 7 min Â· 1319 mots Â· SpaghettiCoder

Expressions RéguliÚres : Comment le Regex Fonctionne

<.+> appliquĂ© Ă  <b>bold</b> and <i>italic</i> ne trouve pas <b>. Il trouve la chaĂźne entiĂšre, du premier < au tout dernier >. Rien n’est cassĂ©. C’est exactement ce qu’un quantificateur greedy est censĂ© faire, et c’est aussi le bug le plus courant de “mon regex matche trop”. Une fois que vous savez ce que fait le moteur pendant qu’il lit votre motif, ce bug et la plupart de ses cousins arrĂȘtent d’ĂȘtre des mystĂšres. ...

28 octobre 2026 Â· 8 min Â· 1676 mots Â· SpaghettiCoder

Les Generics TypeScript Expliqués avec des Exemples

Pourquoi any fait-il perdre le type que vous avez passĂ© ? Typez un paramĂštre en any et TypeScript arrĂȘte de vĂ©rifier tout ce qui sort de la fonction : 1 2 3 4 5 6 function firstElement(arr: any[]): any { return arr[0]; } const n = firstElement([1, 2, 3]); n.toUpperCase(); // compile, plante Ă  l'exĂ©cution Vous savez que vous avez passĂ© un tableau de nombres. Le compilateur, non, car any lui dit d’arrĂȘter de regarder. n est de type any, donc appeler une mĂ©thode de string sur un number compile sans problĂšme et lĂšve TypeError: n.toUpperCase is not a function Ă  l’exĂ©cution. ...

27 octobre 2026 Â· 8 min Â· 1622 mots Â· SpaghettiCoder

Exceptions vs Valeurs d'Erreur : Quelle Stratégie Choisir

Ouvrez un fichier qui n’existe pas en Python, open() lĂšve un FileNotFoundError qui remonte hors de votre fonction. Faites la mĂȘme chose en Go, os.ReadFile vous renvoie une valeur error accompagnĂ©e d’un slice d’octets nil. MĂȘme Ă©chec, deux formes de code complĂštement diffĂ©rentes autour. La diffĂ©rence n’est pas cosmĂ©tique. Elle dĂ©cide si l’appelant peut ignorer l’échec par accident, et si le compilateur le repĂšre quand ça arrive. Qu’est-ce que les exceptions et les valeurs d’erreur font rĂ©ellement diffĂ©remment ? Une exception est un flux de contrĂŽle qui saute. Quelque chose Ă©choue, la fonction lĂšve, et l’exĂ©cution quitte la pile d’appels en cours pour atterrir dans le premier bloc catch ou except correspondant, peu importe le nombre de niveaux au-dessus. La signature de la fonction ne donne aucun indice que cela puisse arriver. loadConfig(path: string): Config en TypeScript ressemble exactement Ă  une fonction qui ne peut pas Ă©chouer, jusqu’à ce qu’elle lĂšve une exception pour un fichier manquant. ...

26 octobre 2026 Â· 8 min Â· 1674 mots Â· SpaghettiCoder

Rate Limiting d'API : Algorithmes et Comment le Construire

Un client coincĂ© dans une boucle de retry sans backoff peut mettre plus de charge sur votre API en une minute que vos dix mille autres clients rĂ©unis. De votre cĂŽtĂ©, ça ne ressemble pas Ă  une attaque. Ça ressemble Ă  un bug chez eux, et ça devient un incident chez vous. Un rate limiter bloque ce client avant qu’il n’en arrive lĂ . Que dĂ©cide vraiment un rate limiter ? À chaque requĂȘte, le rate limiter se pose une seule question : cette clĂ© a-t-elle fait trop de requĂȘtes dans la fenĂȘtre actuelle ? Trois choix transforment cette question en quelque chose d’implĂ©mentable. ...

23 octobre 2026 Â· 8 min Â· 1628 mots Â· SpaghettiCoder

Intersection Observer : Lazy Loading et Scroll Infini

Un listener scroll sur window peut se dĂ©clencher des centaines de fois pendant un seul swipe. Si vous exĂ©cutez getBoundingClientRect() sur chaque carte d’un feed Ă  chacun de ces Ă©vĂ©nements, cinquante images suffisent Ă  faire ralentir la page. L’Intersection Observer API retire cette vĂ©rification du scroll : vous enregistrez les Ă©lĂ©ments Ă  observer, et le navigateur vous prĂ©vient quand leur visibilitĂ© change rĂ©ellement. Comment fonctionne IntersectionObserver Un observer surveille un ou plusieurs Ă©lĂ©ments target par rapport Ă  un root (le viewport, par dĂ©faut) et appelle une callback chaque fois qu’un target franchit un seuil de visibilitĂ©. ...

21 octobre 2026 Â· 6 min Â· 1160 mots Â· SpaghettiCoder

Qu'est-ce qu'Unicode et Comment Fonctionne l'UTF-8

Ouvrez un fichier enregistrĂ© en UTF-8 avec un outil qui suppose un autre encodage, et cafĂ© devient café. Les octets sur le disque n’ont pas changĂ©. Seule la rĂšgle utilisĂ©e pour les retransformer en caractĂšres a changĂ©, et les deux rĂšgles ne sont pas d’accord sur ce que signifie l’octet 0xC3. La plupart des bugs de “caractĂšres bizarres” partagent la mĂȘme origine : noms de fichiers cassĂ©s, formulaires illisibles, un emoji qui fait Ă©chouer un insert en base de donnĂ©es, deux chaĂźnes identiques Ă  l’Ɠil mais diffĂ©rentes Ă  la comparaison. Dans chaque cas, on confond deux choses distinctes : Unicode et UTF-8. ...

20 octobre 2026 Â· 9 min Â· 1708 mots Â· SpaghettiCoder