Melhor resposta
Aqui estão algumas que recordo de meu escapadas de entrevistas:
- Crie instagram ou algum tipo de feed de conteúdo. Este é realmente SUPER comum, i deve ter conseguido 3 ou 4 vezes em várias empresas. É bastante simples e é provavelmente o que os entrevistadores que são preguiçosos para pensar em uma pergunta melhor farão.
- Tipo antecipado / preenchimento automático. Também recebi este várias vezes, às vezes com pequenas variações. Geralmente é baseado em uma estrutura de dados Trie. Este é ótimo para praticar!
- Projete um barramento de mensagens (apache kafka / zeromq / rabbitmq). Você pode obter algo assim se for uma entrevista para uma função de software orientado a infra-estrutura. Esse é um ótimo que pode gerar muitas áreas de foco e subquestões diferentes.
- Projete um cache LRU. Normalmente se resume a implementação de uma lista duplamente vinculada para obter remoção de tempo constante para os elementos menos usados recentemente quando o cache está cheio.
- Design um cache distribuído. Novamente, pode ser para uma função que seja orientada para a infra-estrutura. Também pode ser levado em muitas direções diferentes.
- Projete tabelas de banco de dados / data warehouse. Isso pode ser para uma função mais orientada ao engenheiro de dados, mas também é comum para SWEs, já que um bom design de dados é extremamente importante.
Aqui estão alguns que eu NÃO vi pessoalmente , apesar de ser geralmente aceito como comum:
- Crie um encurtador de URL
- Crie um site de loja na web / comércio eletrônico
Espero que isso ajude! Eu estaria disposto a apostar que as 4-5 primeiras cobrirão a MAIORIA das entrevistas de design do seu sistema – e para aquelas que eles não cobrem, o conhecimento que você adquire ao estudá-las deve ser bem transferido para diferentes variações das perguntas.
Resposta
Entrevistas de design do sistema testem suas habilidades de design e de trabalhar com serviços complexos e escaláveis. Seu desempenho nessas entrevistas determina qual cargo e salário você receberá. Se você tiver habilidades de design louváveis, receberá uma oferta maior. Um bom recurso para se preparar para esta entrevista: Grokking a entrevista de design do sistema
Alguns exemplos de problemas de design são:
- Projetando um serviço de encurtamento de URL como TinyURL
- Projetando o Instagram
- Projetando o Twitter
- Projetando o Youtube
- Projetando o Facebook Messenger
- Projetando o Dropbox
- Sugestão de design do Typeahead
- Design de sugestões do Facebook Feed de notícias
- Criação do Yelp
- Criação Uber
Além disso, é uma boa ideia se familiarizar com os conceitos de sistemas distribuídos, como Hashing consistente, Particionamento de dados , Balanceamento de carga , Redundância e replicação , Teorema CAP , etc.
Na minha experiência, os candidatos que tiveram um melhor desempenho nas entrevistas de design seguiram estas sete etapas:
Etapa 1: Esclarecimentos sobre os requisitos: sempre faça perguntas para encontrar o escopo exato do problema que você está resolvendo.
Etapa 2: Definição da interface do sistema: Defina quais APIs são esperadas do sistema. Isso também garantirá se você não errou em nenhum requisito.
Etapa 3: Estimativa do verso do envelope: É sempre uma boa ideia estimar a escala do sistema que você vai projetar.
Etapa 4: Defina o modelo de dados: embora seja não obrigatório no início, isso esclarecerá como os dados fluirão entre os diferentes componentes do sistema e, posteriormente, também o guiará para o particionamento de dados.
Etapa 5: Design de alto nível: desenhe um diagrama de blocos com 5-6 caixas representando os componentes principais do seu sistema.
Etapa 6: design detalhado dos componentes : Aprofunde-se em 2-3 componentes; o feedback dos entrevistadores deve sempre orientá-lo sobre quais partes do sistema ele deseja que você explique melhor.
Etapa 7: Gargalos: tente discutir tantos gargalos quanto possível e diferentes abordagens para mitigá-los.
Espero que tenha ajudado.