Question d'entretien pour Développeur full stack

Comment vous assureriez-vous qu'un webhook de paiement ne facture ou ne provisionne jamais un client deux fois ?

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Considérez la livraison comme au moins une fois et rendez le gestionnaire idempotent. Vérifiez d'abord la signature, puis stockez l'identifiant d'événement du fournisseur derrière une contrainte d'unicité et renvoyez 200 immédiatement si vous l'avez déjà vu. Faites le changement d'état et l'insertion de l'identifiant dans une seule transaction pour qu'un plantage ne puisse pas l'appliquer à moitié. Gardez le gestionnaire rapide en mettant le travail lent en file, et laissez le fournisseur réessayer quand vous échouez vraiment.

Pourquoi les recruteurs posent cette question

Les paiements, c'est là où les bugs de correction coûtent de l'argent et de la confiance, donc le recruteur veut la preuve que vous avez réfléchi aux garanties de livraison distribuée. Il écoute l'idempotence appliquée par la base plutôt qu'avec un ensemble en mémoire, la vérification de signature, et ce que votre gestionnaire renvoie en cas d'échec. Les candidats qui ont fait tourner ça en production mentionnent en général les événements dans le désordre, le deuxième bug que tout le monde rencontre.

Comment structurer votre réponse

  • Établissez que la livraison des webhooks est au moins une fois.
  • Décrivez l'idempotence garantie par une contrainte d'unicité.
  • Mettez l'effet et le marqueur dans une seule transaction.
  • Expliquez ce que vous renvoyez en cas de succès et d'échec.

Exemple de réponse

Exemple parlé, à la première personne

L'hypothèse de départ, c'est que le fournisseur livrera le même événement plus d'une fois, dans le désordre, et parfois avec des heures de retard, parce que les trois arrivent. Donc le gestionnaire vérifie d'abord la signature et l'horodatage, puis insère l'identifiant d'événement du fournisseur dans une table processed_events avec un index unique. Si cette insertion entre en conflit, c'est qu'on l'a déjà traité, et je renvoie 200 tout de suite plutôt que de refaire le travail. Le détail important, c'est que l'insertion et l'effet réel, accorder l'abonnement ou enregistrer le paiement, se font dans la même transaction, pour qu'un processus qui meurt à mi-chemin ne puisse pas laisser l'un sans l'autre. Tout ce qui est lent, comme envoyer un e-mail de reçu, part dans une file avec sa propre clé d'idempotence. Je stocke aussi l'horodatage de l'événement et j'ignore un événement plus ancien que l'état que j'ai déjà, ce qui vous sauve quand une annulation arrive avant la mise à niveau qui la précédait. En cas d'échec je renvoie délibérément un 500 pour que le fournisseur réessaie, et j'alerte si un événement atterrit dans la file de rebut.

Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.

Voir comment ça marche

Questions de relance à prévoir

  • Que faites-vous quand les événements arrivent dans le désordre ?
  • Comment rejoueriez-vous les événements après avoir corrigé un bug dans le gestionnaire ?
  • Comment gérez-vous un message qui échoue à chaque tentative ?

Autres questions pour Développeur full stack

Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.

Prédire mes questions

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot