Pergunta de entrevista para Desenvolvedor Backend

Explique os níveis de isolamento de transação e qual deles seu banco de dados usa por padrão.

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

Resposta rápida

Os quatro níveis são read uncommitted, read committed, repeatable read e serializable, e eles trocam concorrência pelas anomalias que permitem: dirty reads, leituras não repetíveis, phantom reads e write skew. O PostgreSQL usa read committed por padrão, onde cada comando enxerga um snapshot novo; o MySQL com InnoDB usa repeatable read por padrão, onde a transação inteira enxerga um único snapshot. Serializable é o único nível que garante que o resultado corresponde a alguma ordem serial.

Por que os entrevistadores perguntam isso

Bugs de concorrência em sistemas backend costumam ser bugs de isolamento, e eles só aparecem sob carga, o que os torna caros. O entrevistador quer saber se você entende o que o banco realmente garante em vez de supor que uma transação deixa tudo seguro. Citar o padrão do seu engine e descrever uma anomalia real, como uma checagem de saldo que passa duas vezes, mostra que você depurou isso em vez de decorar uma tabela.

Como estruturar sua resposta

  • Liste os níveis junto com a anomalia que cada um elimina.
  • Diga o padrão do banco de dados que você realmente usa.
  • Descreva uma anomalia concreta que você já enfrentou.
  • Diga como você corrigiria: isolamento mais alto ou lock explícito.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Eles vão de read uncommitted até serializable, e cada passo elimina uma anomalia com algum custo de concorrência. Read committed elimina dirty reads, mas cada comando ganha o próprio snapshot, então a mesma query duas vezes na mesma transação pode retornar linhas diferentes. Repeatable read fixa um snapshot para a transação inteira. Serializable garante ainda que o resultado equivale a rodar as transações uma depois da outra, o que no Postgres é feito com rastreamento de predicados, então em vez de bloquear ele pode abortar uma transação e você precisa estar pronto para repetir. Os padrões importam: Postgres é read committed, InnoDB é repeatable read, o que surpreende quem migra entre os dois. O bug que eu de fato enfrentei foi write skew numa tabela de reservas, onde duas requisições checaram que não existia reserva sobreposta, ambas viram um snapshot limpo e ambas inseriram. Repeatable read não ajudou porque elas escreveram linhas diferentes. Resolvemos com serializable mais retry, e depois com uma constraint de exclusão, que é mais barata.

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

  • O que é write skew, e por que repeatable read permite isso?
  • Como você lida com falhas de serialização no código da aplicação?
  • Quando você usaria select for update em vez de subir o nível de isolamento?

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