Carregando
0xA0Lição 11 de 13

Projete um encurtador de URL

Percorra um enunciado clássico: códigos curtos, redirecionamentos e escala.

20 min Questionário com 6 perguntas
Ao final desta lição, você saberá
  • Definir o escopo e estimar um encurtador de URL.
  • Gerar códigos curtos únicos com codificação base62.
  • Escolher entre redirecionamentos 301 e 302 e um modelo de armazenamento.

Requisitos. Funcionais: criar um link curto para uma URL longa; redirecionar um link curto para a URL original; opcionalmente, aliases personalizados e expiração. Não funcionais: os redirecionamentos precisam ser rápidos e altamente disponíveis; o sistema tem muitíssima leitura (cada link é criado uma vez, mas clicado muitas vezes); os códigos não devem ser fáceis de adivinhar. Estimativas: 100 milhões de links novos por mês dão ~40 escritas por segundo; com 100:1, são ~4.000 redirecionamentos por segundo. Com ~500 bytes por link, cinco anos dão 100M × 60 meses × 500 B ≈ 3 TB.

API, códigos e armazenamento

  • API: POST /links {longUrl} retorna {code}; GET /{code} responde com um redirecionamento.
  • Espaço de códigos: base62 (0-9, a-z, A-Z) com 7 caracteres dá 62^7 ≈ 3,5 trilhões de códigos - mais que suficiente.
  • Gerando códigos: (1) calcular o hash da URL longa e pegar 7 caracteres, verificando colisões; ou (2) pegar um ID inteiro único e codificá-lo em base62. Para evitar um contador único, cada servidor de aplicação reserva um bloco de IDs (digamos, 1.000 por vez) com um coordenador.
  • Armazenamento: uma busca chave-valor code → {longUrl, createdAt, expiresAt, ownerId} combina com um banco chave-valor ou de colunas largas, ou com uma tabela relacional com sharding. Os códigos mais acessados ficam em cache.

Base62 funciona como qualquer outra base: 125 é 2 × 62 + 1, então vira 21. Sete caracteres dão 62^7, ou cerca de 3,5 trilhões de códigos.

Redirecionamentos: um 301 (permanente) deixa os navegadores guardarem o redirecionamento em cache, o que reduz a carga, mas esconde os cliques repetidos das métricas. Um 302 (temporário) faz cada clique passar pelo serviço, o que permite medir. Aprofundamentos de que os entrevistadores gostam: tratar colisões de hash, impedir a enumeração de códigos sequenciais, bloquear URLs maliciosas, expirar links e registrar as métricas de cliques de forma assíncrona por uma fila, para os redirecionamentos continuarem rápidos.

Prática: dimensione o sistema

Experimente

Até 15 XP

Estime um encurtador de URL

Suponha 100 milhões de links novos por mês, 100 redirecionamentos para cada link criado e cerca de 500 bytes por link.

Pergunta 1 de 4Pontuação 0/4
escritas/segundo
Você pode escrever 10000, 10k, 1e4 ou 10^4.

Prática: sobreviva ao aprofundamento

Experimente

Até 15 XP

O entrevistador aprofunda

Você desenhou o projeto de alto nível, e agora começam as perguntas. Escolha suas respostas e depois tente outro caminho.

  1. EntrevistadorComo você gera o código curto?

O que você responde?

Juntando tudo: uma simulação de entrevista

Experimente

Até 15 XP

Apresente um projeto em voz alta

Explique o seu projeto como faria na sala, desenhando no papel se puder. Você tem cinco minutos para o esboço, então não se prenda aos detalhes.

Pergunta 1

“Projete um encurtador de URL.”

Avalia: Buscas com muita leitura

A pergunta fica oculta até você começar. Responda em voz alta, como faria na entrevista.

Principais conclusões

  • Sete caracteres em base62 dão ~3,5 trilhões de códigos.

  • Gere códigos por hash com verificação de colisão, ou codificando em base62 IDs únicos reservados com antecedência.

  • Use 302 quando precisar de métricas de cliques; guarde em cache os códigos mais acessados para manter os redirecionamentos rápidos.

Quiz da aula

6 perguntas · aprovação com 5 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…