Choisissez d'abord la dimension de la limite, en général la clé d'API plutôt que l'IP, puis choisissez un algorithme : token bucket pour autoriser des rafales, fenêtre glissante pour une application plus lisse. Gardez les compteurs dans un magasin partagé comme Redis pour que toutes les instances soient d'accord, avec des incréments atomiques et une expiration. Renvoyez un 429 avec un en-tête Retry After et le quota restant, et laissez passer en cas d'échec si le limiteur lui-même est indisponible pour qu'il ne puisse pas faire tomber votre API.
Pourquoi les recruteurs posent cette question
Ça teste la pensée systèmes sur un problème petit et borné. Le recruteur veut que le problème d'état distribué soit nommé, parce que des compteurs par instance n'imposent pas de limite globale, plus un choix d'algorithme motivé, une sémantique HTTP correcte au rejet, et du jugement opérationnel sur ce qui se passe quand le magasin de compteurs est en panne. Ça révèle aussi si vous pensez à l'expérience du client qui se fait limiter.
Comment structurer votre réponse
- Choisissez la dimension de clé et justifiez-la.
- Choisissez un algorithme et dites quel comportement il produit.
- Expliquez comment les compteurs restent cohérents entre instances.
- Définissez la réponse et le mode de défaillance du limiteur lui-même.
Exemple de réponse
Je commence par ce sur quoi je limite, et pour une API publique c'est la clé d'API, pas l'IP, parce que des clients derrière un même NAT ne devraient pas s'éliminer les uns les autres. Ensuite l'algorithme. Le token bucket est mon défaut, parce qu'il laisse un client faire une petite rafale, ce qui correspond au comportement des vraies intégrations : elles se réveillent, envoient vingt requêtes, puis se taisent pendant une heure. Un journal à fenêtre glissante est plus précis mais stocke davantage par clé. La partie importante, c'est que le compteur doit être partagé, parce que si chacune de mes six instances suit son propre compte, la vraie limite est six fois celle que j'annonce, donc Redis avec un incrément atomique et une expiration, ou un petit script Lua quand j'ai besoin de la vérification et du décrément ensemble. Au rejet, je renvoie un 429 avec Retry After et le quota restant dans les en-têtes, parce qu'un client capable de reculer proprement arrête de me marteler. Et je laisse passer en cas d'échec, puisqu'un limiteur qui fait tomber l'API a fait plus de mal que l'abus qu'il empêchait.
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 marcheQuestions de relance à prévoir
- Comment donneriez-vous à un client une limite temporairement plus haute ?
- Qu'est-ce qui change si la limite doit être appliquée en périphérie ?
- Comment limiteriez-vous différemment les endpoints coûteux ?
Autres questions pour Ingénieur logiciel
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