Todos os artigos
Entrevista Técnica

System Design Interview Para Desenvolvedor Sênior: Como Passar

Como se preparar e passar em system design interviews de Big Tech. Framework completo: requisitos, high-level design, deep dive e trade-offs com exemplos práticos.

Alexandre Queiroz26 de março de 202660 leituras
Compartilhar:LinkedInXWhatsApp
# System Design Interview Para Desenvolvedor Sênior: Como Passar A system design interview é a mais diferenciadora das etapas de Big Tech. É ela que separa engenheiros de nível sênior dos demais — e é a que mais candidatos brasileiros subestimam na preparação. Diferente do coding interview onde existe uma resposta certa, no system design você precisa demonstrar como pensa sobre escalabilidade, trade-offs e problemas reais de engenharia. ## O Que É Avaliado em System Design As empresas avaliam sua capacidade de: 1. **Clarificar requisitos** — fazer as perguntas certas antes de desenhar qualquer coisa 2. **Estimar escala** — raciocinar sobre throughput, latência e armazenamento 3. **Projetar soluções escaláveis** — load balancers, caches, databases, filas de mensagem 4. **Identificar pontos críticos** — single points of failure, gargalos 5. **Discutir trade-offs** — não existe "melhor arquitetura", existe "melhor para esse contexto" ## O Framework RADIO Para System Design RADIO é o framework mais completo para estruturar sua resposta: **R — Requirements (Requisitos)** Sempre comece clarificando requisitos funcionais e não-funcionais: *Funcionais:* O que o sistema deve fazer? - "Usuários podem criar posts" - "Usuários podem seguir outros usuários" - "Feed mostra posts dos usuários seguidos" *Não-funcionais:* Como o sistema deve se comportar? - "Disponibilidade: 99.9% uptime" - "Latência: < 200ms para 95% das requests" - "Escala: 10 milhões de usuários ativos" **A — API Design** Defina os endpoints principais antes de entrar na arquitetura. Isso estabelece o contrato do sistema: ``` POST /posts → cria post GET /feed → retorna feed do usuário autenticado POST /follow/{userId} → segue usuário ``` **D — Data Model** Quais entidades existem? Quais são as relações? Que tipo de banco de dados faz sentido? **I — High-Level Design** Desenhe os componentes principais: client → CDN → load balancer → app servers → database. **O — Optimize / Deep Dive** Escolha 1-2 componentes para aprofundar. Onde estão os gargalos? Como escalar? ## Os Problemas Mais Comuns em Entrevistas ### 1. Design a URL Shortener (bit.ly) **Requisitos típicos:** 100M URLs criadas/dia, 10B redirects/dia **Solução de alto nível:** - Hash da URL original (MD5, truncado) para gerar o short code - Banco de dados chave-valor (Redis/DynamoDB) para lookup ultra-rápido - CDN na frente para cache dos redirects mais frequentes - Separação de leitura/escrita — reads são 100x mais frequentes **Trade-offs a discutir:** - Base62 vs MD5 para geração de IDs - Colisão de hashes: como detectar e resolver - TTL das URLs: como implementar expiração ### 2. Design a News Feed (Facebook/Twitter feed) **Requisitos típicos:** 500M usuários, pessoa média segue 200 pessoas **Duas abordagens:** - **Pull model:** Quando usuário abre o feed, busca posts de todos que segue em tempo real. Problema: lento para usuários com muitos seguidos. - **Push model (fan-out on write):** Quando alguém posta, o post é escrito no feed de todos os seguidores. Problema: celebridades com 10M seguidores criam 10M escritas. - **Solução híbrida:** Push para usuários normais, pull para celebridades. ### 3. Design a Distributed Cache (Redis-like) **Eviction policies:** LRU, LFU, TTL **Consistência:** Write-through, write-back, write-around **Sharding:** Consistent hashing para distribuir dados entre nós **Replication:** Leader-follower para alta disponibilidade ### 4. Design a Video Streaming Platform (YouTube) **Upload pipeline:** Client → Upload service → Message queue → Transcoding workers → CDN **Streaming:** Adaptive bitrate (ABR), segmentos HLS/DASH **Storage:** Metadata no banco relacional, vídeos no object storage (S3) **CDN:** Edge caching para conteúdo popular, origin pull para conteúdo raro ## Números Para Memorizar Ter noção de capacidades é crucial para estimativas credíveis: | Operação | Latência típica | |----------|-----------------| | L1 cache hit | 0.5 ns | | L2 cache hit | 7 ns | | RAM read | 100 ns | | SSD random read | 150 µs | | Network round trip (mesmo DC) | 500 µs | | HDD seek | 10 ms | | Network round trip (EUA→Europa) | 150 ms | | Dado | Tamanho típico | |------|----------------| | Tweet/post curto | 1 KB | | Foto de perfil | 100 KB | | Foto do Instagram | 3 MB | | Vídeo 1 minuto | 150 MB | Para estimativas: 1 servidor = ~50K requests/segundo com caching. ## Como Se Comportar Durante a Entrevista **Pense em voz alta sempre.** O entrevistador quer ver seu processo, não apenas a conclusão. Se ficar em silêncio por 2 minutos, isso é ruim mesmo que a solução final seja boa. **Não vá fundo demais muito cedo.** Um erro comum é começar a detalhar o banco de dados antes de ter o design de alto nível aprovado. Desenhe o quadro geral primeiro, então peça ao entrevistador qual componente você deve aprofundar. **Proponha e justifique trade-offs.** "Podemos usar SQL ou NoSQL aqui. SQL nos dá ACID e queries flexíveis, mas NoSQL escala melhor horizontalmente. Para esse caso com 10B reads/dia, eu escolheria NoSQL. Você concorda ou quer explorar SQL?" **Adapte ao entrevistador.** Alguns entrevistadores querem um design abrangente, outros querem profundidade em um subsistema. Leia as perguntas e comentários deles. Para praticar system design em português com feedback detalhado, use o **[Mock Interview do VagaNaGringa](https://vaganagringa.dev/mock-interview/)** — simula entrevistas de system design com o mesmo padrão das Big Techs.

Prepare-se para vagas internacionais com IA

Começar Gratuitamente
#system design interview#design de sistemas#senior developer#distributed systems#arquitetura de software