Pergunta de entrevista para Desenvolvedor Full Stack

Como você renomearia uma coluna em uma tabela com 50 milhões de linhas sem downtime?

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

Resposta rápida

Expandir, migrar, contrair. Adicione a coluna nova, implante um código que escreve nas duas e ainda lê a antiga, preencha em lotes com throttle, depois vire as leituras para a coluna nova em um deploy separado, e só remova a coluna antiga quando nada mais a referenciar. Nunca combine uma mudança de schema e uma virada de código no mesmo release, porque você perde a capacidade de fazer rollback de forma limpa.

Por que os entrevistadores perguntam isso

Isso testa se você já entregou migrações com tráfego ao vivo ou só rodou localmente. O entrevistador quer a sequência de vários deploys, consciência do comportamento de lock em tabelas grandes, e uma história de rollback. Candidatos que respondem com um único comando ALTER normalmente nunca viram uma migração pegar um lock exclusivo e travar toda requisição em um banco de produção no pico.

Como estruturar sua resposta

  • Cite o padrão de expandir e contrair logo de cara.
  • Percorra os deploys em ordem, dizendo o que cada um faz.
  • Explique como você preenche sem travar nem saturar o banco.
  • Diga qual é a posição de rollback em cada passo.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Um rename na verdade é uma sequência de mudanças pequenas e seguras em vez de um comando só. O primeiro deploy adiciona a coluna nova como anulável, o que é barato no Postgres porque não reescreve a tabela, e entrega um código que escreve nas duas colunas enquanto ainda lê a antiga. Depois eu preencho em lotes, talvez cinco mil linhas por vez com um sleep curto, observando o atraso de replicação e as esperas por lock, para eu nunca segurar uma transação longa. O segundo deploy vira as leituras para a coluna nova, com a escrita dupla ainda no lugar para eu conseguir reverter na hora se algo estiver errado. Só depois de aquilo ficar estável por alguns dias é que o terceiro deploy para de escrever na coluna antiga e a remove. O motivo de eu insistir em deploys separados é o rollback. Se a mudança de schema e a mudança de código vão juntas, reverter o código deixa o banco em um formato que o código antigo não consegue ler. Eu também crio índices de forma concorrente e configuro um lock timeout para uma migração falhar rápido em vez de ficar na fila atrás de uma query longa e congelar as escritas.

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

  • Qual desses passos pega um lock no Postgres, e por quanto tempo?
  • Como você verificaria que o preenchimento está correto antes de virar as leituras?
  • Qual é o seu rollback se o preenchimento estiver na metade?

Mais perguntas para Desenvolvedor Full Stack

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