Um deadlock precisa de quatro condições ao mesmo tempo: exclusão mútua, segurar e esperar, ausência de preempção e espera circular. Quebre qualquer uma e ele não pode acontecer. Na prática você quebra a espera circular sempre adquirindo locks na mesma ordem global, e adiciona timeouts de lock para uma transação travada falhar rápido em vez de pendurar. Manter transações curtas e tocar linhas numa ordem consistente resolve a maior parte do caminho.
Por que os entrevistadores perguntam isso
Isso testa se você conhece a teoria e consegue transformá-la numa regra que um time consegue de fato seguir. Os entrevistadores querem a sacada da espera circular e a correção por ordenação, além do reconhecimento de que deadlocks são comuns em bancos e não só em código com threads. Mencionar timeouts de lock, retry com backoff e o fato de que o banco vai escolher uma vítima e abortá-la sinaliza experiência de produção.
Como estruturar sua resposta
- Liste as quatro condições que precisam valer todas juntas.
- Escolha a que você consegue quebrar na prática: a espera circular.
- Dê a regra de ordenação consistente de locks de forma concreta.
- Adicione timeouts e retries como rede de segurança.
Exemplo de resposta
Deadlock precisa de quatro coisas juntas, e a que eu de fato consigo controlar é a espera circular. Então a regra que eu instauro é que todo caminho de código pega locks na mesma ordem. Se uma transferência toca duas contas, eu ordeno por id de conta e travo a menor primeiro, e aí não importa em que direção o dinheiro está indo, nenhum ciclo pode se formar. A segunda alavanca é tempo. Eu mantenho transações curtas, então nunca seguro um lock de linha durante uma chamada de rede para um provedor de pagamento, que é um jeito clássico de transformar uma transação de cem milissegundos numa de cinco segundos. Depois eu configuro um lock timeout e retry com jitter, porque mais cedo ou mais tarde o banco vai detectar um ciclo, escolher uma vítima e abortá-la, e eu prefiro que esse caminho seja tratado em vez de vazar como um 500. No Postgres as entradas de log de deadlock nomeiam os dois comandos envolvidos, e nas duas vezes em que usei isso a correção foi ordenação.
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
- Como o banco detecta um deadlock?
- O que é livelock e como ele é diferente?
- Locking otimista evitaria esse problema por completo?
Mais perguntas para Engenheiro de Software
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