
Projetar sistemas distribuídos em larga escala tornou-se parte padrão das entrevistas de trabalho dos desenvolvedores. O ex-programador do Facebook e da Microsoft Fahim ul Haq fez uma lista das perguntas mais frequentes nessas entrevistas e indicou o que procurar ao projetar um sistema.
1. Crie TinyURL ou bitly (serviço de redução de URL)

Como você cria um serviço que gera aliases curtos para URLs longos?
Discuta o seguinte:
- Como gerar IDs exclusivos para cada URL?
- Como você geraria IDs únicos em larga escala (milhares de solicitações de encurtamento de URL a cada segundo)?
- Como seu serviço manipulará os redirecionamentos?
- Como você suportaria URLs curtos personalizados?
- Como remover URLs expirados?
- Como rastrear estatísticas de cliques?
2. Crie YouTube, Netflix ou Twitch (serviço de streaming de vídeo)

Esse serviço armazenará e transferirá petabytes de dados. Você deve explicar como armazenar e distribuir dados de maneira eficaz para que um grande número de usuários possa assisti-los e compartilhá-los ao mesmo tempo (por exemplo, imagine transmitir o último episódio de Game of Thrones).
Discuta também o seguinte:
- Como você gravaria estatísticas sobre o vídeo – por exemplo, o número total de visualizações, curtidas e não curtidas?
- Como um usuário pode escrever comentários em um vídeo (em tempo real)?
3. Design Facebook Messenger ou WhatsApp (mensageiro global)

Os entrevistadores querem saber:
- Como você cria diálogos entre usuários.
- Como você pode apoiar bate-papos em grupo.
- O que fazer quando o usuário não está conectado à Internet.
- Quando enviar notificações.
- Você pode fornecer criptografia de ponta a ponta e como.
4. Design Quora, Reddit ou HackerNews (rede social + quadro de mensagens)

Os usuários desses serviços podem postar perguntas ou compartilhar links. Outros usuários podem responder a perguntas ou comentar em links. Aqui está o que o serviço deve ser capaz de fazer:
- Mantenha estatísticas de registros para cada resposta – por exemplo, o número total de visualizações, curtidas / não curtidas.
- Os usuários devem poder se inscrever em outros usuários ou tópicos.
- O feed deles deve exibir as perguntas mais populares dos usuários e os tópicos nos quais eles estão inscritos.
5. Projete o Dropbox, o Google Drive ou o Google Fotos (armazenamento global de arquivos)

Explique o seguinte:
- Como os usuários podem fazer upload / visualizar / pesquisar arquivos ou fotos e compartilhá-los?
- Como você rastreará as permissões de compartilhamento de arquivos?
- Como você permite que vários usuários editem o mesmo documento?
6. Crie Facebook, Twitter ou Instagram (rede social com um milhão de usuários)

Os entrevistadores estão interessados em saber como você criará os seguintes componentes:
- Armazenamento eficiente e procure postagens ou tweets.
- Geração de feed de notícias.
- Agenda social (quem adiciona quem aos amigos ou quem segue quem – especialmente quando milhões de usuários seguem uma celebridade)
Muitas vezes, os entrevistadores dedicam a maior parte do tempo a uma entrevista para criar um feed de notícias.
7. Design Uber ou Lyft (compartilhamento de equitação)

Discuta o seguinte:
- Os casos de uso mais importantes são quando um usuário solicita uma carona e como associá-la efetivamente a motoristas próximos.
- Como armazenar milhões de locais para motoristas em constante movimento.
- Como lidar com atualizações de localização de drivers (milhões de atualizações a cada segundo).
8. Crie um robô de pesquisa ou preenchimento automático

Para preenchimento automático – quando o usuário digita algo na barra de pesquisa – você precisa criar um serviço que ofereça as dez consultas mais populares. Discuta o seguinte:
- Como armazenar pesquisas anteriores.
- Como atualizar dados.
- Como encontrar as melhores correspondências.
- Como lidar com atualizações do usuário e velocidade de digitação rápida.
Para um robô de pesquisa, é necessário projetar um serviço escalável que possa analisar páginas da Web e salvar seu conteúdo de alguma forma especial em um servidor de mecanismo de pesquisa. Discuta o seguinte:
- Como encontrar novas páginas da web.
- Como priorizar páginas da web que mudam dinamicamente.
- Como garantir que seu robô não fique preso em um domínio.
9. Projete um terminador de solicitação de API

Você precisa desenvolver serviços de restrição de consulta que possam:
- Limite o número de solicitações que uma empresa pode enviar para a API em um determinado período de tempo – por exemplo, 15 solicitações por segundo.
- A restrição de consulta deve funcionar para um sistema distribuído, pois a API pressupõe trabalho em um cluster de servidores.
- Como você implementa a otimização?
10. Design Yelp ou Amigos / Locais próximos

Este serviço terá que armazenar locais para milhões de pessoas / lugares. Discuta o seguinte:
- Como os usuários podem procurar amigos / lugares próximos.
- Em que ordem colocar (com base na distância, comentários).
- Como armazenar efetivamente as informações de localização de acordo com a densidade populacional (por exemplo, em um quarto de Nova York, pode haver mais estabelecimentos / pessoas do que em uma cidade pequena)?