Pergunta de entrevista para Desenvolvedor Backend

Usuários precisam subir arquivos de até dois gigabytes. Como você projetaria isso de ponta a ponta?

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

Resposta rápida

Não passe os bytes pela sua API. Faça o cliente pedir uma URL de upload pré-assinada, subir direto para o armazenamento de objetos com multipart upload para arquivos grandes, e depois avisar o seu serviço, que verifica o objeto e registra os metadados. Valide tipo de conteúdo e limites de tamanho no nível da política, escaneie de forma assíncrona antes de o arquivo ficar utilizável, e gere URLs assinadas de vida curta para download em vez de tornar os objetos públicos.

Por que os entrevistadores perguntam isso

É uma pergunta de design que traz muita coisa de uma vez: streaming versus buffering, escolha de armazenamento, segurança e processamento assíncrono. O entrevistador quer que você evite o design ingênuo em que uma thread de requisição segura dois gigabytes, e que pense em validação e retomada. As perguntas seguintes sobre segurança, escopo da URL pré-assinada e conteúdo de arquivo não confiável, separam engenheiros cuidadosos de quem só fez funcionar.

Como estruturar sua resposta

  • Mantenha os bytes fora da sua aplicação: direto para armazenamento de objetos.
  • Descreva o fluxo: pré-assinatura, multipart upload, callback de conclusão.
  • Cubra validação, varredura de vírus e como o arquivo se torna utilizável.
  • Trate downloads com URLs assinadas de vida curta e checagem de acesso.

Exemplo de resposta

Exemplo falado, em primeira pessoa

A primeira decisão é que o arquivo nunca passa pela minha API, porque dois gigabytes através de um handler de requisição prende um worker, custa banda duas vezes e quebra no momento em que uma conexão cai. Então o cliente pede ao meu serviço uma URL de upload pré-assinada, com escopo apertado para uma chave, um tipo de conteúdo e uma expiração curta, e sobe direto para o armazenamento de objetos. Para arquivos desse tamanho eu uso multipart upload, o que me dá retomada, já que uma parte que falhou é repetida em vez do arquivo inteiro. Quando o upload termina o cliente avisa, ou melhor, o armazenamento emite um evento, e meu serviço verifica que o objeto existe e bate com o tamanho esperado antes de gravar os metadados. O arquivo começa num estado pendente e só fica utilizável depois do processamento assíncrono: varredura, checagem do tipo de conteúdo real a partir dos bytes em vez de confiar na extensão, e geração de miniaturas. Downloads passam por uma URL assinada de vida curta emitida após uma checagem de autorização, nunca por um bucket público, que é de onde vem um número surpreendente de vazamentos de dados.

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 você impede que alguém use uma URL pré-assinada para subir outra coisa?
  • Como você trataria um cliente que some no meio do upload?
  • Como você suportaria uploads retomáveis numa conexão móvel instável?

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