Pergunta de entrevista para Engenheiro de Software

O que causa um deadlock, e como você evitaria um?

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

Resposta rápida

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

Exemplo falado, em primeira pessoa

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 funciona

Perguntas 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

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