Destacando-se em entrevistas de design de sistema em nível de equipe

6 min read

entrevistasStanding Out in Staff Level System Design Interviews

Há muito mistério em torno da entrevista de design de sistema em nível de equipe nas principais empresas de tecnologia. Isso faz sentido. A maioria dos recursos online tem como alvo talentos de nível médio ou sênior. Há também muito menos entrevistadores ao nível do pessoal, o que significa que o conjunto de pessoas que partilham conhecimento interno é visivelmente menor. Tudo isso contribui para que os Candidatos à Equipe se sintam inseguros e inseguros sobre como se diferenciar de um bom candidato sênior.

Meu nome é Evan, passei 5 anos na Meta, onde fui engenheiro de equipe e entrevistador. Agora sou cofundador da Hello Interview, uma empresa que ajuda a preparar candidatos de engenharia de software para as próximas entrevistas FAANG e adjacentes a FAANG. Como parte disso, conduzi simulações para centenas de candidatos somente nos últimos meses, com níveis que variam de diretor júnior a diretor sênior. A questão é que eu vi muita coisa, e para o propósito deste blog, eu vi exatamente o que diferencia um Candidato Passageiro de “apenas mais um forte candidato sênior”.

Vamos começar com o básico: espera-se que um candidato a funcionário se aprofunde mais do que um candidato sênior. Isso exige comprometer a amplitude. Você pode ler tudo sobre essa compensação entre amplitude e profundidade em Este artigo. Resumindo, não perca tempo falando sobre coisas óbvias. Eu, como entrevistador, sei que você sabe o que é escala horizontal. Eu sei que você sabe o que é um balanceador de carga. Eu sei especialmente que você conhece os tipos de campos/colunas em seu modelo de dados. Não desperdice o meu ou o seu tempo entrando nessas coisas. Em vez disso, espero que um Staff Candidate consiga um design funcional de alto nível com relativa rapidez, para que possamos passar a maior parte do nosso tempo nos aprofundando em 2 ou 3 lugares. Esses locais de profundidade devem estar alinhados com o que torna o sistema específico que você está projetando desafiador/interessante, mas também devem ser as áreas que você conhece bem. Cabe a você conduzir a conversa em direção a essas minas de ouro profundas.

Precisa de alguns exemplos de onde se aprofundar? Role para baixo até as seções de “aprofundamento” em cada uma das análises do problema aqui.

Ok, mais profundidade é bastante óbvio e você provavelmente já ouviu isso antes. Mas existem três outras dimensões críticas que merecem ser destacadas com mais detalhes.

1. Ensine-me algo2. Confiança no que você não sabe3. Sofisticação na simplicidade

Ensine-me algo

Não vou perder muito tempo analisando este aqui, pois o título diz quase tudo o que há a dizer. Quando entrevisto um candidato forte, geralmente saio da entrevista tendo aprendido alguma coisa. Muitas vezes, isso é algo pequeno (o que é ótimo!), mas vem do fato de eles se aprofundarem em um lugar onde têm muito mais experiência do que eu. O software é um campo vasto. Provavelmente, se você for um candidato a funcionário qualificado, saiba mais sobre um pequeno conjunto de coisas do que a maioria das outras pessoas no planeta – mostre isso!

Confiança em saber o que você não sabe

Isso é sutil, admito. Mas seu entrevistador é humano. Além do conjunto imparcial de sinais que são instruídos a extrair, eles também avaliam subconscientemente se acham que se trata de alguém que age como um engenheiro de equipe. Uma coisa que observei os candidatos fazerem e que muitas vezes me deixa com a impressão de que eles são funcionários é que estão confiantes naquilo que não sabem. Ao projetar o sistema, eles podem determinar que precisam de uma tecnologia com a qual tenham menos experiência prática. Em vez de ficarem confusos e arrancarem regurgitações incompletas de algo que leram on-line (como geralmente é o caso com candidatos de nível médio e sênior), eles explicam com segurança que não conhecem os meandros da tecnologia específica, mas a conhecem. pode ser usado para resolver X.

Por exemplo, imagine que você está sendo solicitado a projetar um sistema TopK que tenha restrições rígidas de memória. Um esboço de contagem mínima (CMS) normalmente é a estrutura de dados ideal – mas poucas pessoas têm experiência prática com CMS. Um candidato a funcionário sabe que esse conhecimento é um pouco esotérico e dirá algo como: “Não sei de cara qual é a estrutura de dados ideal, mas imagino que exista uma estrutura de dados probabilística que eu poderia usar aqui para reduzir a memória. Eu acho que funciona de forma semelhante aos filtros Bloom, mas para contagem. Se eu estivesse realmente projetando este sistema, faria algumas pesquisas para encontrar a estrutura de dados ideal que atendesse a essas restrições.” Legal, eles não sabiam que existia CMS, não é grande coisa. Mas eles sabiam como iriam encontrá-lo.

Outro exemplo inventado pode ser quando eles precisam de consultas geoespaciais em seu banco de dados Postgres. Eles diriam: “Não tenho certeza de que tipo de suporte o Postgres tem para indexação geoespacial, mas a maioria dos bancos de dados modernos tem suporte nativo ou extensões para árvores quádruplas ou similares. Então, supondo que funcione também, eu usaria isso. Do contrário, eu mudaria para outro banco de dados SQL que tenha.” Nesse caso, eles não sabiam que o Postgres pode ser estendido via PostGIS para suportar índices geoespaciais, e daí, eles sabiam que não precisavam saber disso. Em vez disso, eles explicaram o que precisavam e como fariam para encontrá-lo. A chave aqui é a confiança diferenciada em reconhecer quando um detalhe é esotérico e sentir-se confortável em admitir ignorância, demonstrando ainda uma estratégia clara de como você preencheria essa lacuna de conhecimento para resolver efetivamente o problema.

Beleza na Simplicidade

Ok, guardei o melhor para o final. Este é um grande problema. Se você tirar apenas uma coisa deste artigo, deveria ser esta: engenheiros qualificados têm uma capacidade impressionante de simplificar sistemas. Para alguns, isso pode parecer contra-intuitivo, mas vamos detalhar um pouco.

Standing Out in Staff Level System Design Interviews

O diagrama acima mostra a antiguidade dos candidatos versus a complexidade de seu design. Naturalmente, mais candidatos juniores têm designs simples, isso ocorre porque eles atingiram o limite de seu conhecimento – eles não estão cientes de mais complexidade. Candidatos seniores projetam sistemas com complexidade máxima, muitas vezes até acima da engenharia. Eles lançam filas de mensagens em todos os lugares, elaboram estratégias complexas de escalonamento e geralmente tentam resolver problemas adicionando mais componentes.

Os candidatos da equipe, curiosamente, às vezes até projetam sistemas com um nível de complexidade mais semelhante aos candidatos juniores. A diferença, no entanto, é que eles conhecem a solução complexa e são capazes de articular claramente por que é um exagero ou um excesso de engenharia para este problema específico.

Vejamos um exemplo simples. Imagine que você está projetando o Yelp. Um candidato sênior pode entrar em detalhes sobre a importância da fragmentação por local e a complexidade que advém da consulta de empresas que existem na fronteira entre duas regiões fragmentadas. Por outro lado, um Candidato a Pessoal pode salientar que este problema de fronteira é comum nestes tipos de sistemas e que, dado o número de empresas existentes na nossa base de dados (digamos, 100 milhões), poderíamos encaixar todas as empresas numa única instância e não precisamos de nenhum shard – evitando assim a necessidade de lidar com a questão dos limites em primeiro lugar.

Em última análise, os engenheiros da equipe se destacam no projeto de sistemas que resumem a elegância através da simplicidade. Essa elegância não nasce da ignorância, mas de uma escolha estratégica para otimizar a eficiência, a capacidade de manutenção e a escalabilidade.

🚀Taro organizou recentemente um Painel de engenheiros de equipe ouvir perspectivas sobre a função de Staff Eng em diversas empresas.

Palavras Finais

Passar em uma entrevista com a equipe não é fácil. Mas é possível. Embora as dicas acima possam ajudar a esclarecer as qualidades demonstradas pelos principais candidatos à equipe, não existem truques simples que o deixem pronto para passar em uma entrevista da noite para o dia.

Se você quiser praticar com pessoas como eu, que podem apontar exatamente onde sua entrevista pode estar falhando, considere fazer uma simulação ou duas via Olá Entrevista. As entrevistas são estressantes e os riscos são altos, vale a pena praticar algumas repetições antes de entrar na arena para o dia do jogo.

E claro, boa sorte!

https://www.jointaro.com/blog/standing-out-in-staff-level-system-design-interviews/
Autor: Evan King

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *