Netflix em 45 minutos: uma história rápida de uma entrevista de design de sistema, o que esperar + uma seleção de links úteis





Em nosso blog, escrevemos muito sobre como construir uma carreira na área de TI em diferentes países, como encontrar um emprego , diferenças no processo de entrevistar grandes empresas. No artigo de hoje, iremos mais além e cobriremos o tema das chamadas entrevistas de design de sistemas - esta é uma das etapas das entrevistas com empresas de tecnologia renomadas, onde muitos candidatos são eliminados.



Então, o que é design de sistema e como você passa por esse tipo de entrevista?



O que é isso



No mundo de hoje, os sistemas de TI se tornaram extremamente complexos. Cada novo "recurso" no produto deve atender a muitos requisitos, sempre há restrições entre as quais os engenheiros devem equilibrar. O que parece super fácil para o usuário médio - como enviar uma consulta de pesquisa pelo Google ou Yandex - na verdade carrega um grande nível de complexidade.



A diferença entre as entrevistas de projeto de sistema e as entrevistas técnicas regulares é que elas esperam que o candidato responda a perguntas ambíguas sobre estruturas de dados e algoritmos. Como regra, as tarefas nesta fase são tais que para elas não existe solução inequivocamente correta ou incorreta, elas provocam o processo de pensamento - é nele que o candidato se revela.



Grosso modo, uma entrevista de design de sistema é algo como uma sessão de brainstorming, onde uma pessoa pensa em voz alta, passa por possíveis soluções e analisa as deficiências de cada uma delas em tempo real. Esta é a dificuldade, mas também a principal vantagem - o processo de pensamento é mais importante aqui do que o resultado. Via de regra, essas entrevistas são conduzidas por grandes empresas que desenvolvem sistemas de grande escala ( FAANG e similares).



Como você passa por uma entrevista de design de sistema? Abaixo estão algumas dicas práticas.



, , @g-jobbot. , Telegram , – , .






Visto que em uma entrevista de design de sistema, o mais importante é como você resolve um problema, é extremamente importante no primeiro estágio entendê-lo claramente por si mesmo. O ex-engenheiro da Microsoft e do Facebook em seu artigo mostra a importância desse fato com um exemplo prático.



Normalmente, a tarefa é algo como "Como você projetaria o Netflix em 45 minutos?" À primeira vista, essas perguntas são um total absurdo. Esses sistemas em grande escala foram projetados e implementados por centenas e milhares de engenheiros ao longo dos anos. Quarenta e cinco minutos não serão suficientes para começar a discutir pelo menos um dos componentes de tal produto!



É aqui que compreender a tarefa é muito importante. Você precisa entender o que o entrevistador deseja. E ele obviamente quer que ele:



  1. deu uma resposta no formato "visão de helicóptero" de todo o sistema,
  2. então o decompus em componentes
  3. descreveu por que cada um deles é necessário (data center, armazenamento de dados, front-end, back-end, cache, trabalho com filas, rede e balanceamento de carga, etc.)






Imagem: system-design-primer



Você pode se debruçar sobre alguns desses componentes com mais detalhes - eles o indicarão ou você precisará perguntar. Normalmente, você nem mesmo precisa escrever código em uma entrevista sobre design de sistemas, e se você mergulhar imediatamente na selva técnica, sem primeiro discutir o sistema inteiro como um todo, isso será uma desvantagem.



Faça perguntas esclarecedoras



O principal objetivo da entrevista de projeto de sistemas é dar ao candidato a oportunidade de demonstrar seu conhecimento e experiência. Conforme afirmado acima, não existem respostas certas ou erradas. É muito mais importante não resolver o problema como tal - especialmente porque pode ser simplesmente impossível no tempo concedido - mas mostrar o seu processo de pensamento em toda a sua glória.



Portanto, é extremamente importante fazer perguntas, mesmo que de repente você saiba a resposta para a pergunta feita. Em tal situação, você não precisa apenas escrever uma solução para o problema, isso é contrário ao objetivo da entrevista. Você precisa esquecer a solução conhecida e começar a procurar por uma nova, fazendo perguntas ao longo do caminho.



Isso permitirá que o entrevistador entenda várias coisas ao mesmo tempo:



  • como o candidato aborda a avaliação do problema?
  • Ele avalia imediatamente as possíveis limitações e gargalos do sistema?
  • Ela pensa imediatamente na otimização das soluções e na contenção das restrições?


Neste artigo, um engenheiro do Twitter compartilhou sua experiência em entrevistas. Em particular, ele deu uma boa descrição de como fazer perguntas. Imagine que, em uma entrevista, você tenha recebido a tarefa de projetar uma caixa. Nenhuma outra informação é fornecida imediatamente.



As perguntas podem ser:



  1. O que exatamente o sistema deve ser capaz de fazer (quantos itens cabem na caixa, quais são seus tamanhos)?
  2. Quem é o público-alvo do produto?
  3. Quais são as expectativas dos usuários do produto?


As respostas a elas permitirão que você entenda que precisa criar uma caixa amarela com um emoticon desenhado nela, que caberá em pelo menos uma bola de tênis. No entanto, a bola não é muito comum - seu raio é de meio metro e seu peso é de cerca de 1 kg. A caixa será fácil de transportar segurando na parte inferior, portanto, não são necessárias alças.



Há muito mais informações, agora você pode pensar em como resolver um problema tão refinado.







Imagem: freecodecamp.com



Não tente impressionar



Um erro comum em entrevistas sobre design de sistemas - muitos candidatos pensam que, como neste estágio você precisa trabalhar no nível de abstração, será suficiente lançar termos e nomes legais de tecnologias da moda durante a conversa para se passar por um especialista. Não funciona assim.



Em primeiro lugar, a entrevista sobre design de sistemas provavelmente não será apenas de um recrutador, mas de um engenheiro que está procurando uma pessoa para integrar sua equipe. Não é suficiente para uma pessoa ouvir apenas palavras como No-SQL, Mongo DB e Hadoop. Ele obviamente começará a fazer perguntas de esclarecimento, e se você realmente não tiver muita experiência com as tecnologias mencionadas, isso ficará claro muito rapidamente.



Seja honesto



Uma entrevista de design de sistemas é um daqueles momentos em que não há problema em não saber com certeza. Portanto, respostas como “Nunca trabalhei com essa tecnologia em particular, mas sei que ela é freqüentemente usada para resolver problemas semelhantes” é uma boa opção. Além da honestidade, aqui o candidato demonstrou certo conhecimento e deixou claro para o entrevistador por onde começará a solucionar o problema (ele tentará uma solução conhecida, se não der certo, ele vai “cavar” mais).



Além disso, você não deve passar por sua solução como ideal e sem inconvenientes. Sempre há limitações, e um engenheiro-entrevistador experiente entende isso melhor do que ninguém. Portanto, durante a entrevista, vale a pena dizer honestamente que existem tais e tais gargalos na solução, mas você pode tentar contorná-los desta ou daquela forma, usar ferramentas adicionais ou realizar ainda mais pesquisas.



Isso deixará claro que o candidato não apenas apresenta uma solução e, em seguida, tenta duramente implementá-la, mas pode ser flexível, fazer ajustes e, em geral, ser adequado e compreender que sempre é possível fazer melhor.



Aqui está um adorável diálogo fictício em uma entrevista de design de sistemas que mostra como NÃO fazer:



: Twitter. ?



: NoSQL- MongoDB.



: MySQL?



: . MongoDB BigTable.



: Twitter MySQL, .



: , , , . - Facebook NO-SQL.



: Facebook MySQL.



: , , , . , MySQL , BigTable.



Entrevistador : Não importa. Onde vamos armazenar os dados analíticos?



Candidato : Obviamente em MySQL.



Entrevistador : Mas não há muitos para o MySQL? Agora temos HDFS para isso.



Candidato : Parece que você começou a desenvolver o Twitter antes mesmo do MongoDB desenvolver o suficiente. O MongoDB pode acomodar facilmente tweets e dados analíticos.



Entrevistador : Ótimo, obrigado pelo seu tempo. Foi bom conversar.


Como se preparar para uma entrevista: links úteis



Embora o projeto de sistemas seja uma das partes mais confusas de uma entrevista, você pode se preparar para ela. Para ajudar os candidatos, compilamos uma lista de materiais úteis:



  • Anatomia de uma entrevista de design de sistema
  • Como NÃO projetar o Netflix em sua entrevista de projeto de sistema de 45 minutos?
  • Crack the System Design interview: tips from a Twitter software engineer
  • 50+ system design
  • -:



All Articles