Pergunta de entrevista para Desenvolvedor Backend

Como você pagina um endpoint de coleção grande, e por que não usar simplesmente limit e offset?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Prefira paginação por chave, também chamada de paginação por cursor: ordene por uma chave única e estável, retorne um cursor opaco para a última linha e consulte as linhas depois dele. Paginação por offset faz o banco ler e descartar cada linha pulada, então a página cinco mil é lenta, e linhas inseridas ou removidas durante a rolagem causam duplicatas e buracos. A paginação por chave mantém tempo constante por página e é estável sob escrita.

Por que os entrevistadores perguntam isso

É uma decisão de design pequena que separa quem já operou uma API em escala de quem não operou. O entrevistador quer as duas falhas específicas do offset, custo e instabilidade, mais a consciência de que um cursor precisa codificar uma ordenação determinística. As perguntas seguintes normalmente sondam as partes complicadas: ordenar por uma coluna não única, pular para uma página arbitrária e contagens totais, que são caras e muitas vezes desnecessárias.

Como estruturar sua resposta

  • Dê a recomendação primeiro, depois justifique.
  • Cite as duas falhas do offset: custo de páginas profundas e resultados que se deslocam.
  • Explique o que o cursor codifica e por que ele precisa de um critério de desempate.
  • Reconheça o que você perde, como pular para a página cinquenta.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Meu padrão é paginação por chave. O cliente pede uma página, recebe os itens mais um cursor opaco, e a próxima requisição diz: me dá as linhas depois deste cursor. Por baixo dos panos isso é uma cláusula where na chave de ordenação, então com o índice certo é um seek de índice e o custo é o mesmo na página um e na página mil. Offset não consegue isso, porque o banco ainda percorre e joga fora tudo que vem antes do offset, e pior, se uma linha for inserida enquanto alguém rola a tela, todas as páginas seguintes se deslocam e a pessoa vê uma duplicata ou perde um item completamente. O detalhe que pega as pessoas é o desempate: se eu ordeno por created at e duas linhas têm o mesmo timestamp, a ordem não é determinística, então o cursor codifica created at mais o id e a comparação é feita sobre o par. O que eu abro mão é o salto arbitrário de página e as contagens totais baratas. Num feed de rolagem infinita ninguém sente falta disso; numa tabela administrativa que precisa de números de página eu uso offset com um máximo limitado.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Como você suportaria ordenação por uma coluna escolhida pelo usuário com cursor?
  • Como você retorna uma contagem total sem varrer a tabela?
  • O que o cursor deve conter, e os clientes deveriam conseguir decodificá-lo?

Mais perguntas para Desenvolvedor Backend

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot