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
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 funcionaPerguntas 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