As 30 principais perguntas e respostas para entrevistas de design de sistemas (2026)
Preparar-se para uma entrevista de design de sistemas significa antecipar como os entrevistadores avaliam o pensamento arquitetônico sob pressão. Perguntas da entrevista de design de sistema Revelar profundidade, vantagens e desvantagens, avaliação de escalabilidade e comunicação por meio de discussões estruturadas.
Uma sólida preparação abre portas para oportunidades em plataformas de nuvem, sistemas distribuídos e engenharia de dados, comprovando expertise técnica por meio de análises práticas. Profissionais atuantes na área desenvolvem habilidades práticas, apoiam equipes, auxiliam gestores na tomada de decisões e esclarecem dúvidas comuns, desde iniciantes até profissionais experientes, abrangendo perspectivas avançadas, básicas e técnicas em um contexto global. Leia mais ...
👉 Download gratuito do PDF: Perguntas e respostas para entrevistas de design de sistemas
Principais Perguntas e Respostas da Entrevista de Design de Sistema
1) Explique o que é projeto de sistemas e por que ele é importante na engenharia de software.
O projeto do sistema é o processo de definição da arquitetura, componentes, interfaces e dados de um sistema Para atender a requisitos específicos de forma escalável, confiável e de fácil manutenção, o projeto de sistema faz a ponte entre objetivos de alto nível (o que o sistema deve realizar) e decisões concretas sobre tecnologia, protocolos e padrões de arquitetura. Um projeto de sistema robusto garante que uma aplicação tenha bom desempenho sob carga, permaneça tolerante a falhas e possa evoluir ao longo do tempo sem a necessidade de reescritas completas.
Em entrevistas, isso demonstra sua capacidade de equilibrar requisitos funcionais com as restrições não funcionais como escalabilidade, latência, consistência e disponibilidade. Todas as grandes empresas de tecnologia avaliam as habilidades de projeto de sistemas de um candidato para medir seu discernimento em engenharia no mundo real.
2) Como você distingue o projeto de alto nível (HLD) do projeto de baixo nível (LLD) na arquitetura de sistemas?
O projeto de alto nível (HLD, na sigla em inglês) concentra-se em Visão geral da arquitetura e principais componentes Sem entrar em detalhes de implementação. Mostra como os sistemas interagem — por exemplo, servidor web, banco de dados, esconderijo, Gateway de API e sistemas de mensagens.
O projeto de baixo nível (LLD) aprofunda-se em Definições de classes, métodos, estruturas de dados e lógica detalhada. Dentro de cada componente. O HLD (Desenvolvimento de Alto Nível) trata dos componentes que você usará e como eles interagem; o LLD (Desenvolvimento de Baixo Nível) trata de como você implementará essas interações. Compreender ambos os aspectos ajuda os entrevistadores a avaliar tanto sua visão geral quanto suas habilidades de engenharia detalhadas.
3) Quais são as principais métricas de desempenho que você deve considerar ao projetar um sistema e por quê?
As métricas de desempenho ajudam a quantificar o quão bem um sistema atende às necessidades dos usuários e da empresa. As principais métricas são:
- latência: Tempo necessário para processar uma única solicitação. Menor latência significa respostas mais rápidas.
- Taxa de transferência: Quantidade de trabalho processado em um período (ex.: solicitações por segundo). Uma taxa de transferência mais alta significa maior eficiência sob carga.
- Disponibilidade: Proporção de tempo em que um sistema está operacional. Alta disponibilidade é crucial para serviços globais.
Essas métricas ajudam os projetistas a equilibrar as vantagens e desvantagens. Por exemplo, o armazenamento em cache reduz a latência, mas complica a consistência dos dados. Demonstrar familiaridade com elas mostra que você se importa com a qualidade do sistema no mundo real.
| métrico | Definição | Importância |
|---|---|---|
| Latência | Tempo por solicitação | Experiência do usuário |
| Produtividade | Solicitações por unidade de tempo | Global |
| Disponibilidade | Tempo de atividade versus tempo de inatividade | Confiabilidade |
4) Descreva o balanceamento de carga e por que ele é fundamental em sistemas distribuídos.
O balanceamento de carga é o processo de distribuir solicitações recebidas entre vários servidores ou serviços Para evitar que qualquer nó individual se torne um gargalo, garante-se a utilização ideal da capacidade, melhorando os tempos de resposta e aumentando a confiabilidade do sistema ao desviar o tráfego de instâncias com problemas.
Existem diferentes tipos de balanceadores de carga. Um Camada 4 (L4) O balanceador opera na camada de transporte (IP/porta), enquanto um Camada 7 (L7) O balanceador opera na camada de aplicação, compreendendo a semântica HTTP/S. O balanceamento de carga é crucial para a tolerância a falhas, escalabilidade sem tempo de inatividade e atualizações contínuas em sistemas de produção. Responder bem a esta pergunta demonstra que você compreende as compensações fundamentais entre desempenho, consistência e custo em sistemas distribuídos.
5) Como você projetaria um Tiny?URL serviço? Descreva os componentes e etapas principais.
Projetando um espaço pequenoURL O serviço abrange tanto os requisitos funcionais (abreviação) URLs, redirecionamento de usuários) e requisitos não funcionais (escalabilidade, exclusividade, desempenho).
Em primeiro lugar, perguntas esclarecedoras ajudam a definir restrições: volume esperado, políticas de expiração, necessidades de análise, etc. Os principais componentes são:
- Camada de API: Recebe e processa solicitações de encurtamento/redirecionamento.
- Banco de dados e armazenamento em cache: Lojas originais ↔ abreviadas URL mapa,pingO armazenamento em cache melhora o desempenho de leitura.
- Gerador de ID curto: Utiliza IDs únicos codificados por hash ou em base.
Para gerar chaves exclusivas de forma eficiente, você pode:
- Uso codificação base-62 de um ID sequencial (ex.: 1 → a, 2 → b, etc.).
- Usar um função hash com resolução de colisões.
Você também deve considerar análises, limites de taxa e gerenciamento de tráfego intenso. URLs com camadas de cache ou CDN para reduzir a carga. Descrever essas compensações demonstra profundidade tanto nos padrões de projeto quanto nas considerações de escalabilidade.
6) O que é cache e como ele melhora o desempenho do sistema?
Armazenamento em cache dados acessados com frequência ou de alto custo computacional Em um meio de armazenamento mais rápido (memória, cache distribuído) para reduzir cálculos repetitivos e a carga do banco de dados. Isso melhora significativamente a latência e a taxa de transferência, atendendo rapidamente às solicitações mais populares.
O armazenamento em cache pode ocorrer em várias camadas: memória do aplicativo, Redis/Ehcache, servidores de borda de CDN ou armazenamento local do navegador. Embora o cache reduza os tempos de resposta, ele introduz desafios de obsolescência e invalidação, que você deve abordar durante o projeto. Por exemplo, você pode usar políticas de tempo de vida (TTL) ou estratégias de invalidação de cache quando os dados subjacentes forem alterados. Boas respostas mostram que você entende ambos os aspectos. benefícios e armadilhas de armazenamento em cache.
7) Explique o Teorema CAP e suas implicações no projeto de sistemas distribuídos.
O Teorema CAP afirma que, em um sistema distribuído, você pode escolher no máximo duas das três garantias a seguir:
- Consistência: Todos os nós veem os mesmos dados ao mesmo tempo.
- Disponibilidade: Cada solicitação recebe uma resposta (sem garantia de correção).
- Tolerância de partição: O sistema continua a operar apesar das falhas na rede.
Nenhum sistema distribuído prático consegue atingir os três objetivos simultaneamente na presença de partições de rede. Por exemplo, durante uma partição, os sistemas precisam escolher entre fornecer dados desatualizados (disponibilidade) ou rejeitar solicitações até que a consistência seja restabelecida (consistência). Compreender o CAP demonstra que você pode fazer escolhas ponderadas com base em prioridades operacionais — uma habilidade fundamental em entrevistas de design de sistemas.
8) Em termos gerais, como você projetaria um serviço de mensagens instantâneas como o WhatsApp?
Para projetar um sistema de bate-papo em grande escala, comece identificando os principais requisitos: entrega de mensagens em tempo real, persistência, ordenação de mensagens, suporte offline e escalabilidade.
Em alto nível:
- Clientes Conecte-se aos servidores de gateway através da web/dispositivo móvel.
- Roteadores de mensagens Processar mensagens recebidas e encaminhá-las aos destinatários (através de conexões persistentes como WebSockets).
- Bases de dados Armazenar o histórico de mensagens, com particionamento adequado para grandes bases de usuários.
Os componentes adicionais incluem caches para chats recentes, filas para entrega assíncrona e serviços de notificação para usuários offline. Você deve discutir Como as mensagens são armazenadas, ordenadas e entregues a vários dispositivos por usuário. e como você lida com failover e tolerância a falhas.
9) O que é sharding e como ele ajuda no escalonamento de bancos de dados?
O particionamento é uma forma de escala horizontal onde um grande conjunto de dados é dividido em partições menores e independentes chamadas shards, cada uma armazenada em um nó de banco de dados diferente. Isso melhora o desempenho e a escalabilidade, distribuindo os dados e a carga de consultas por várias máquinas, em vez de escalar uma única instância.
Os dados podem ser fragmentados por ID do cliente, região geográfica ou hash. Embora a fragmentação reduza a carga por nó, ela introduz complexidade em consultas entre fragmentos e no rebalanceamento ao adicionar ou remover nós. Os entrevistadores esperam que você entenda essas vantagens e desvantagens e como o uso de hash consistente ou gerenciadores de fragmentos pode facilitar as operações.
10) Descreva como as APIs e os microsserviços diferem de uma arquitetura monolítica.
A Monolithic architecture Agrupa todos os componentes da aplicação em uma única unidade implantável. Isso pode simplificar o desenvolvimento inicialmente, mas torna-se difícil de escalar, manter e atualizar ao longo do tempo.
Microservices dividir o sistema em serviços pequenos e implantáveis de forma independenteCada um responsável por uma capacidade de negócio específica. As APIs (Interfaces de Programação de Aplicativos) permitem a comunicação entre esses serviços.
| Aspecto | Monolítico | Microservices |
|---|---|---|
| desenvolvimento | Única unidade | Serviços independentes |
| Global | Limitada | Escalabilidade por serviço |
| Isolamento obrigatório | Ruim | Forte |
| Complexidade | Inicialmente, mais simples. | Operações mais complexas |
Os microsserviços melhoram a escalabilidade e a flexibilidade de implantação, mas exigem ferramentas operacionais avançadas (descoberta de serviços, tracing e tolerância a falhas). Discutir isso mostra que você consegue raciocinar sobre a evolução da arquitetura e as compensações entre simplicidade e flexibilidade.
11) Como funciona uma Rede de Distribuição de Conteúdo (CDN) e quais são as suas vantagens?
A Rede de entrega de conteúdo (CDN) é uma rede distribuída de servidores proxy estrategicamente localizados em diversas regiões geográficas. Seu principal objetivo é Entregar conteúdo aos usuários com latência mínima. Servindo-o a partir do servidor mais próximo (conhecido como nó de borda).
Quando um usuário solicita um recurso da web (por exemplo, uma imagem, um vídeo ou um arquivo estático), a CDN armazena o conteúdo em cache e o entrega diretamente de um servidor de borda. Se o conteúdo não estiver em cache, ela o busca no servidor de origem e o armazena para solicitações subsequentes.
Vantagens das CDNs:
| Fator | A Vantagem |
|---|---|
| Latência | Reduz o tempo de resposta ao fornecer conteúdo mais próximo dos usuários. |
| Largura de Banda | Descarrega o uso de largura de banda dos servidores de origem. |
| Confiabilidade | Oferece tolerância a falhas com nós distribuídos. |
| Global | Lida com grandes volumes de tráfego de forma eficiente. |
As CDNs são vitais para sistemas globais como Netflix, YouTubeou plataformas de comércio eletrônico, garantindo alto desempenho e disponibilidade.
12) O que é limitação de taxa e por que é essencial no design de APIs?
Limitação de taxa Restringe o número de solicitações que um cliente pode fazer a uma API dentro de um período especificado. É crucial para prevenção de abuso, mantendo o uso justo e protegendo serviços de back-end de ataques de sobrecarga ou de negação de serviço (DoS).
Os algoritmos comuns para limitação de taxa incluem:
- Balcão de janela fixa — Simples, mas pode causar picos nos limites das janelas.
- Tronco deslizante / Janela deslizante — Proporciona um processamento de solicitações mais eficiente.
- Balde de Fichas / Balde Furado — Permite picos de demanda dentro de certos limites e mantém um fluxo constante de solicitações.
Por exemplo, o GitHub limita as chamadas à API a 5000 por hora por usuário. A implementação de limites de taxa garante a estabilidade do sistema e melhora a qualidade geral do serviço.
13) Como garantir a consistência dos dados em sistemas distribuídos?
Manter a consistência em sistemas distribuídos é um desafio devido à replicação e à latência da rede. Existem diversas estratégias, dependendo do equilíbrio necessário entre consistência e disponibilidade:
| Tipo de consistência | Descrição | Caso de uso |
|---|---|---|
| Consistência forte | Todos os clientes visualizam os mesmos dados instantaneamente. | Sistemas bancários |
| Consistência Eventual | As atualizações se propagam de forma assíncrona; diferenças temporárias são permitidas. | Feeds de mídia social |
| Consistência Causal | Mantém a ordem de causa e efeito | Aplicativos colaborativos |
Técnicas como registros de gravação antecipada, relógios vetoriais, algoritmos de consenso (Raft, Paxos) e compromisso de duas fases (2PC) Ajudar a manter a sincronização. Os entrevistadores esperam que você explique. when Flexibilizar a consistência para obter ganhos de desempenho e escalabilidade.
14) Explique a diferença entre escala horizontal e escala vertical.
Escalabilidade refere-se ao aumento da capacidade de um sistema para lidar com mais carga. Existem dois tipos principais:
| Tipo de escala | Forma | Vantagens | Desvantagens |
|---|---|---|---|
| Escalonamento vertical (aumento de escala) | Adicionar mais recursos (CPU, RAM) a uma única máquina | Mais simples de implementar | Limitações de hardware, ponto único de falha |
| Escalonamento horizontal (Scale-Out) | Adicione mais máquinas para distribuir a carga. | Alta disponibilidade, custo-benefício | Complexo de gerenciar e coordenar. |
Por exemplo, aumentar a capacidade de um servidor web de 2 CPUs para 8 CPUs é um exemplo de escalonamento vertical, enquanto adicionar vários servidores atrás de um balanceador de carga é um exemplo de escalonamento horizontal. Sistemas distribuídos modernos, como o Kubernetes, favorecem esse tipo de escalonamento. escala horizontal para elasticidade.
15) O que são filas de mensagens e por que são usadas em arquiteturas distribuídas?
A fila de mensagens desacopla produtores e consumidores armazenando mensagens temporariamente até que sejam processadas. Isso permite comunicação assíncrona, melhorando a resiliência e a escalabilidade em sistemas distribuídos.
Os corretores de mensagens mais populares incluem: RabbitMQ, Kafka, Amazon SQS e Google Pub / Sub.
Benefícios:
- Suaviza picos de tráfego
- Serviços de desacoplamento
- Habilita mecanismos de repetição e persistência
- Melhora a tolerância a falhas
Exemplo: Em uma plataforma de comércio eletrônico, um serviço de pedidos pode publicar uma mensagem (“Pedido realizado”) que os serviços de estoque e faturamento consomem de forma independente, evitando dependências diretas.
16) Como você projetaria um sistema de armazenamento de arquivos escalável como este? Google Drive or Dropbox?
Para projetar um sistema de armazenamento de arquivos baseado em nuvem, divida-o em componentes principais:
- Serviço de Front-end: Gerencia o upload/download de arquivos via APIs REST.
- Serviço de Metadados: Armazena a propriedade dos arquivos, as permissões de acesso e o histórico de versões.
- Serviço de armazenamento: Gerencia fragmentos de arquivos em armazenamento distribuído (por exemplo, S3, HDFS).
- Fragmentação: Os arquivos são divididos em partes menores (por exemplo, 4 MB) para armazenamento e transmissão eficientes.
Os desafios incluem garantir desduplicação de dados, consistência e sincronizando alterações em todos os dispositivos. A implementação da sincronização em nível de bloco e do hash de conteúdo garante eficiência e integridade da largura de banda.
17) Quais são os principais fatores a serem considerados ao projetar um esquema de banco de dados escalável?
Um esquema escalável equilibra desempenho, flexibilidade e facilidade de manutenção. Considerações importantes incluem:
- Particionamento de dados (fragmentação) para lidar com o crescimento.
- Normalização vs. Desnormalização: Normalizar para integridade; desnormalizar para desempenho em operações de leitura intensiva.
- Estratégia de indexação Para pesquisas rápidas.
- Armazenamento em cache e replicação Para lidar com alto tráfego.
Exemplo: Em uma aplicação de mídia social, os dados do usuário e as postagens podem ser armazenados separadamente para reduzir o acoplamento e melhorar o desempenho das consultas. As decisões de design de esquema devem estar alinhadas com padrões de acesso e frequência de consulta.
18) Quais são as vantagens e desvantagens de usar a arquitetura de microsserviços?
Os microsserviços se tornaram a espinha dorsal das aplicações modernas em nuvem, mas isso tem suas desvantagens.
| Vantagens | Desvantagens |
|---|---|
| Implantação e escalonamento independentes | Maior complexidade operacional |
| Isolamento de falhas e resiliência | A depuração distribuída é mais difícil. |
| Adoção de tecnologia facilitada | Requer uma cultura DevOps sólida. |
| Melhor manutenção do código | Maior latência devido aos saltos na rede. |
Os microsserviços são ideais para sistemas grandes e em constante evolução, mas exigem monitoramento robusto, gateways de API e estratégias de comunicação entre serviços.
19) Como você lidaria com a replicação de banco de dados em um sistema de grande escala?
Replicação de banco de dados Envolve a cópia de dados de um banco de dados primário para uma ou mais réplicas, a fim de melhorar a disponibilidade e o desempenho de leitura. Existem dois tipos principais:
| Tipo de replicação | Descrição | Caso de uso |
|---|---|---|
| Síncrono | As alterações são gravadas nas réplicas imediatamente. | Consistência forte |
| Assíncrono | O servidor primário confirma a gravação antes da atualização das réplicas. | Melhor desempenho |
A replicação aumenta tolerância ao erro, permite distribuição geográficae suporta dimensionamento de leitura (réplicas de leitura). No entanto, isso introduz desafios como atraso na replicação e resolução de conflitos. Ferramentas como MySQL Replicação em grupo, MongoDB Conjuntos de Réplicas e PostgreSQL replicação de streaming São soluções padrão.
20) O que é arquitetura orientada a eventos e onde ela é mais útil?
A arquitetura orientada a eventos (EDA) é um paradigma de projeto no qual os componentes se comunicam por meio de semelhantes — mensagens que sinalizam mudanças de estado ou ações. Em vez de solicitações diretas, os serviços publicam e se inscrevem em eventos de forma assíncrona.
Este design é ideal para sistemas fracamente acoplados, como plataformas de IoT, comércio eletrônico e sistemas de análise em tempo real.
Benefícios:
- alta escalabilidade
- Componentes desacoplados
- Capacidade de resposta em tempo real
Exemplo: Na arquitetura da Uber, quando uma viagem é reservada, um evento aciona atualizações simultâneas nos sistemas de preços, de busca de motoristas e de notificações — tudo isso sem acoplamento rígido.
21) O que é idempotência no projeto de sistemas e por que ela é importante?
Idempotência significa que realizar a mesma operação várias vezes tem o O efeito é o mesmo que executá-lo uma vez.Isso garante a confiabilidade em sistemas distribuídos onde as solicitações podem ser repetidas devido a falhas ou atrasos na rede.
Por exemplo:
- ENTRE e EXCLUIR As requisições são naturalmente idempotentes (repeti-las não altera o estado).
- POST As requisições (como a criação de uma transação) não são idempotentes, a menos que sejam especificamente projetadas para sê-lo.
Para implementar a idempotência:
- Uso IDs de solicitação exclusivos para track submissões duplicadas.
- Manter um log de transações Ignorar operações repetidas.
Este princípio é fundamental em gateways de pagamento, processamento de pedidos e sistemas de e-mail onde ações duplicadas podem causar inconsistências graves.
22) Explique o conceito de consistência eventual com um exemplo.
Consistência eventual É um modelo em bancos de dados distribuídos onde as atualizações não são imediatamente visíveis para todos os nós, mas o sistema converge para um estado consistente ao longo do tempo.
Exemplo:
In Amazon'S DynamoDBQuando um item é atualizado em uma região, as réplicas em outras regiões podem temporariamente conter dados desatualizados. No entanto, elas serão sincronizadas eventualmente por meio da replicação em segundo plano.
Este modelo é útil em sistemas de priorização. disponibilidade Acima de consistência rigorosa, Tais como:
- Linhas do tempo das redes sociais
- Sistemas de cache
- Registros DNS
A principal compensação reside entre tolerância ao envelhecimento e velocidade de resposta.
23) Como você projetaria um sistema de notificação que suportasse múltiplos canais (e-mail, SMS, notificações push)?
Projetar um sistema de notificação escalável exige modularidade e flexibilidade.
Architextura:
- API de Notificação – Recebe solicitações de notificação de aplicativos.
- Barramento de filas/mensagens – Armazena e distribui eventos (Kafka, SQS).
- Serviços ao Trabalhador – Processadores específicos para cada canal (e-mail, SMS, notificações push).
- Provedores de entrega – Integre com APIs externas como Twilio ou Firebase.
- Banco de dados de preferências do usuário – Armazena as configurações de ativação/desativação e as preferências de frequência.
Consideracoes chave:
- Tente novamente as entregas que falharam utilizando estratégias de recuo.
- Use modelos para manter a consistência.
- Priorização de suporte (mensagens urgentes versus mensagens de baixa prioridade).
Esse design modular garante confiabilidade e extensibilidade à medida que novos canais de notificação surgirem.
24) O que é indexação de banco de dados e como ela afeta o desempenho?
A índice do banco de dados É uma estrutura de dados (normalmente uma árvore B ou uma tabela hash) que melhora a velocidade das consultas, reduzindo o número de registros que o banco de dados examina.
Por exemplo, indexar a coluna de e-mail em uma tabela de usuários permite que o mecanismo do banco de dados encontre usuários por e-mail rapidamente, sem precisar examinar a tabela inteira.
| Aspecto | Com índice | Sem índice |
|---|---|---|
| Velocidade de consulta | Pesquisas rápidas | Varreduras sequenciais lentas |
| Velocidade de escrita | Mais lento (atualizações de índice necessárias) | Escritas mais rápidas |
| Armazenamento | Mais espaço em disco | Less armazenamento |
Os índices melhoram o desempenho de leitura, mas devem ser usados com cautela, pois podem torná-lo mais lento. com muita escrita sistemas devido aos custos de manutenção.
25) Como você garantiria a tolerância a falhas em um sistema distribuído de grande escala?
Tolerância ao erro Significa que um sistema continua funcionando mesmo quando componentes falham. Isso é alcançado por meio de redundância, monitoramento e recuperação automática.
As estratégias incluem:
- Replicação: Dados ou serviços duplicados entre regiões.
- Mecanismos de failover: Redirecionar automaticamente as solicitações para nós saudáveis.
- Verificações de integridade e balanceadores de carga: Detectar e isolar instâncias defeituosas.
- Disjuntores: Evitar falhas em cascata entre serviços dependentes.
Exemplo: NetflixO projeto "Chaos Monkey" da [nome da empresa] desliga intencionalmente instâncias em produção para testar a resiliência — uma aplicação avançada dos princípios de tolerância a falhas.
26) Qual a diferença entre comunicação síncrona e assíncrona em sistemas distribuídos?
| Característica | SyncComunicação crônica | Comunicação Assíncrona |
|---|---|---|
| Dependência | O remetente aguarda resposta. | O remetente procede de forma independente. |
| Exemplos | Chamadas de API REST HTTP | Filas de mensagens, Kafka |
| Latência | Maior (bloqueio) | Menor latência percebida |
| Confiabilidade | Menor sob falhas | Nível superior (as mensagens podem persistir) |
SyncSistemas cronológicos são mais simples, porém fortemente acoplados, enquanto sistemas assíncronos melhoram a escalabilidade e o isolamento de falhas.
Por exemplo, o processamento de pedidos em um sistema de comércio eletrônico pode ser assíncrono, mas a confirmação de pagamento deve permanecer síncrona para garantir feedback imediato ao usuário.
27) Como você projetaria um limitador de taxa para um sistema de API distribuído?
Um limitador de taxa distribuído garante o uso justo da API em vários servidores.
Abordagens:
- Algoritmo de balde de token – Cada usuário recebe fichas que se recarregam com o tempo.
- Algoritmo do Balde Furado – Os pedidos são processados a um ritmo constante.
- Contador centralizado (ex: Redis) – Mantém a contagem de solicitações por usuário.
Exemplo de implementação:
- Utilize contadores atômicos do Redis com TTL.
- Track registros de data e hora de requisição por chave de usuário.
- Rejeitar solicitações que excedam os limites.
A limitação da taxa impede abuso, Ataques DoS e aumentos inesperados de custos, garantindo uma qualidade de serviço consistente para todos os clientes.
28) O que é um algoritmo de consenso distribuído e por que ele é necessário?
Os algoritmos de consenso distribuído garantem que vários nós em um sistema concordar com um único valor de dados, mesmo quando ocorrem falhas.
Algoritmos comuns:
- Paxos
- Raft
- zab (usado no ZooKeeper)
Eles são essenciais para a manutenção. eleição de líder, replicação de estado e a consistência dos dados em bancos de dados distribuídos e gerenciadores de clusters como o Kubernetes.
Exemplo: O Raft garante que todos os nós concordem com as entradas de log antes de aplicá-las às máquinas de estado, garantindo a confiabilidade mesmo se os nós falharem.
29) Como você projetaria um sistema de registro e monitoramento para microsserviços?
O monitoramento de sistemas distribuídos requer observabilidade centralizada para detectar e resolver problemas.
Componentes do núcleo:
- Exploração madeireira: Colete registros de todos os serviços usando ferramentas como Fluentd or Logstash.
- Métricas: Use o Prometheus ou o Datadog para track indicadores de desempenho (CPU, memória, latência de requisição).
- Tracing: Implementar sistemas distribuídos tracing (Jaeger, Zipkin) para track caminhos de requisição entre serviços.
- Alerta: Defina limites para acionar alertas no PagerDuty ou Slack.
Melhor Prática:
Uso IDs de correlação para tracUma única solicitação de usuário em vários microsserviços é crucial para depurar problemas em produção.
30) Quais são as principais considerações de projeto para a construção de um sistema de alta disponibilidade (HA)?
A Alta disponibilidade (HA) O sistema minimiza o tempo de inatividade e garante a continuidade do serviço.
Principais fatores de design:
- Redundância: Utilize vários servidores por componente.
- Eliminar pontos únicos de falha (SPOF).
- Failover automático: Redirecione o tráfego durante interrupções.
- Replicação de dados: Garantir a durabilidade dos dados em todas as zonas.
- Monitoramento de saúde: Detectar e substituir nós com problemas automaticamente.
- Recuperação de desastres (DR): Implementar backups e georreplicação.
Exemplo: A AWS implementa serviços em Zonas de Disponibilidade (AZs) e usa Elastic Load Balancers para failover automático, garantindo SLAs de disponibilidade de 99.99%.
🔍 Principais perguntas de entrevista sobre design de sistemas com cenários reais e respostas estratégicas
1) Como você abordaria o projeto de um sistema distribuído de grande escala partindo do zero?
Esperado do candidato: O entrevistador quer entender seu raciocínio estruturado, sua capacidade de esclarecer requisitos e como você decompõe problemas complexos em componentes gerenciáveis.
Resposta de exemplo: "Começo por esclarecer os requisitos funcionais e não funcionais, como escalabilidade, disponibilidade e latência. Em seguida, esboço uma arquitetura de alto nível, identifico os componentes principais, defino o fluxo de dados e seleciono as tecnologias apropriadas. Depois disso, considero os gargalos, os cenários de falha e as compensações antes de refinar o projeto."
2) Você pode explicar a diferença entre escala horizontal e vertical, e quando usar cada uma delas?
Esperado do candidato: O entrevistador está avaliando seu conhecimento fundamental sobre escalabilidade e sua capacidade de aplicar a estratégia correta em sistemas reais.
Resposta de exemplo: “O escalonamento vertical envolve adicionar mais recursos a uma única máquina, enquanto o escalonamento horizontal adiciona mais máquinas para lidar com a carga. O escalonamento vertical é mais simples, porém limitado, enquanto o escalonamento horizontal é mais complexo, mas oferece melhor tolerância a falhas e escalabilidade a longo prazo.”
3) Como garantir alta disponibilidade no projeto de um sistema?
Esperado do candidato: O entrevistador deseja avaliar seu conhecimento sobre redundância, mecanismos de failover e resiliência de sistemas.
Resposta de exemplo: “Na minha função anterior, assegurei alta disponibilidade utilizando balanceadores de carga, implementando serviços em múltiplas zonas de disponibilidade, realizando verificações de integridade e projetando serviços sem estado sempre que possível. Essas estratégias reduziram os pontos únicos de falha.”
4) Descreva uma situação em que você teve que fazer uma escolha entre consistência e disponibilidade.
Esperado do candidato: O entrevistador está avaliando sua compreensão do teorema CAP e sua capacidade de tomar decisões sob restrições.
Resposta de exemplo: “Em um emprego anterior, trabalhei em um sistema onde a baixa latência era crucial. Optamos pela consistência eventual em vez da consistência forte para manter a disponibilidade durante partições de rede, o que era aceitável para o caso de uso da empresa.”
5) Como você decide qual banco de dados usar para um determinado sistema?
Esperado do candidato: O entrevistador quer ver como você alinha as opções de armazenamento de dados com os requisitos do sistema.
Resposta de exemplo: "Eu avalio padrões de acesso a dados, requisitos de consistência, necessidades de escalabilidade e complexidade de consultas. Bancos de dados relacionais funcionam bem para dados estruturados e transações, enquanto bancos de dados NoSQL são melhores para alto desempenho e esquemas flexíveis."
6) Como você projetaria um sistema para lidar com picos repentinos de tráfego?
Esperado do candidato: O entrevistador está testando sua capacidade de projetar soluções que sejam escaláveis e capazes de lidar com cargas imprevisíveis.
Resposta de exemplo: “Eu utilizaria grupos de escalonamento automático, balanceadores de carga e camadas de cache, como armazenamentos em memória. No meu último cargo, essas técnicas permitiram que o sistema absorvesse picos de tráfego sem afetar o desempenho.”
7) Qual o papel do cache no projeto de sistemas e onde você o implementaria?
Esperado do candidato: O entrevistador quer entender como você otimiza o desempenho e reduz a carga nos serviços principais.
Resposta de exemplo: "O armazenamento em cache melhora o tempo de resposta e reduz a carga do banco de dados. Ele pode ser implementado em várias camadas, incluindo no lado do cliente, na CDN, no nível do aplicativo e no cache de consultas ao banco de dados, dependendo do caso de uso."
8) Como você lida com o particionamento e fragmentação de dados?
Esperado do candidato: O entrevistador está avaliando sua capacidade de projetar sistemas que escalem dados horizontalmente.
Resposta de exemplo: “Escolho uma chave de fragmentação que distribua os dados uniformemente e minimize as consultas entre fragmentos. Também planejo a refragmentação e monitoro a distribuição de dados para evitar pontos de acesso intenso à medida que o sistema cresce.”
9) Descreva uma situação em que o monitoramento do sistema influenciou uma decisão de projeto.
Esperado do candidato: O entrevistador quer ver como você utiliza a observabilidade para melhorar a confiabilidade e o desempenho do sistema.
Resposta de exemplo: “O monitoramento de métricas como latência e taxas de erro revelou um gargalo em um serviço de API. Com base nessa constatação, redesenhei o serviço para ser assíncrono, o que melhorou significativamente a taxa de transferência.”
10) Como você comunica projetos de sistemas complexos para partes interessadas não técnicas?
Esperado do candidato: O entrevistador está avaliando suas habilidades de comunicação e sua capacidade de alinhar decisões técnicas com objetivos de negócios.
Resposta de exemplo: “Eu me concentro em conceitos de alto nível, uso diagramas e relaciono componentes técnicos a resultados de negócios. Essa abordagem ajuda as partes interessadas a entender o valor e o impacto do projeto sem se perderem em detalhes técnicos.”

