Question d'entretien pour Développeur backend

Comment pagineriez-vous un endpoint de collection volumineuse, et pourquoi ne pas simplement utiliser limit et offset ?

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

Réponse rapide

Préférez la pagination par clé, aussi appelée pagination par curseur : triez sur une clé unique et stable, renvoyez un curseur opaque pour la dernière ligne et demandez les lignes situées après. La pagination par offset oblige la base à lire puis jeter chaque ligne sautée, donc la page cinq mille est lente, et les lignes insérées ou supprimées pendant le défilement provoquent des doublons et des trous. La pagination par clé reste à coût constant par page et reste stable sous les écritures.

Pourquoi les recruteurs posent cette question

C'est une petite décision de conception qui sépare ceux qui ont exploité une API à l'échelle de ceux qui ne l'ont pas fait. Le recruteur veut les deux échecs précis de l'offset, le coût et l'instabilité, plus la conscience qu'un curseur doit encoder un tri déterministe. Les relances portent en général sur les parties délicates : trier sur une colonne non unique, sauter à une page arbitraire, et les comptages totaux, qui sont coûteux et souvent inutiles.

Comment structurer votre réponse

  • Donnez la recommandation d'abord, puis justifiez-la.
  • Nommez les deux échecs de l'offset : coût des pages profondes et résultats mouvants.
  • Expliquez ce que le curseur encode et pourquoi il lui faut un départage.
  • Reconnaissez ce que vous perdez, comme sauter à la page cinquante.

Exemple de réponse

Exemple parlé, à la première personne

Je pars par défaut sur la pagination par clé. Le client demande une page, reçoit des éléments plus un curseur opaque, et la requête suivante dit donnez-moi les lignes après ce curseur. Sous le capot c'est une clause where sur la clé de tri, donc avec le bon index c'est une recherche d'index et le coût est le même à la page un et à la page mille. L'offset ne peut pas faire ça, parce que la base parcourt et jette quand même tout ce qui précède, et pire, si une ligne est insérée pendant que quelqu'un défile, toutes les pages suivantes se décalent et il voit un doublon ou rate complètement un élément. Le détail qui piège, c'est le départage : si je trie par created at et que deux lignes partagent l'horodatage, l'ordre n'est pas déterministe, donc le curseur encode created at plus l'id et la comparaison porte sur la paire. Ce que j'abandonne, ce sont les sauts de page arbitraires et les comptages totaux peu coûteux. Sur un flux à défilement infini, personne ne les regrette ; pour une table d'administration qui a besoin de numéros de page, j'utiliserai un offset avec un maximum borné.

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

  • Comment prendriez-vous en charge un tri sur une colonne choisie par l'utilisateur avec un curseur ?
  • Comment renvoyez-vous un comptage total sans parcourir la table ?
  • Que doit contenir le curseur, et les clients devraient-ils pouvoir le décoder ?

Autres questions pour Développeur backend

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