FAANG - Guia Descomplicado de Entrevistas - parte 2
Achou que hoje não ia ter post novo? Achou errado!
Hoje vai ter post novo sim e talvez seja a pergunta que eu mais recebo por DMs no finado Twitter.
Você leu o post anterior, aplicou com seu resume topado e agora o recrutador entrou em contato pra marcar uma entrevista. O que fazer? Nesse post vamos discutir algumas estratégias e materiais de estudo, vamos lá jovem gafanhoto(a) que a estrada é longa.
É importante mencionar que esse não é o único caminho, mas é o que funcionou comigo
Tabela de conteúdo
- Conversa com a pessoa recrutadora.
- Tempo de preparo
- Materiais de estudo para algoritmos
- Materiais de estudo para system design
- Estratégias de estudo.
Conversa com a pessoa recrutadora
Se o seu resume chamou atenção, a pessoa recrutadora vai te ligar para conversar e fazer um pente fino se você encaixa na vaga.
Dica importante (que nem deveria ser uma dica…): seja uma pessoa bacana com a pessoa recrutadora. Essa pessoa será sua aliada no processo de recrutamento. Eu já vi muito dev sendo arrogando com o pessoal de recrutamento e pow, tomou na cabeça!
Conversa vai e conversa vem, em dado momento a pessoa vai te perguntar sua disponibilidade para uma primeira fase de entrevista. Não se sinta pressionada(o) a dizer amanhã, não é assim que seleção de FAANG funciona. Pense em quanto tempo você precisa e marque respeitando essas datas. O pipeline de recrutamento é feita para acomodar isso.
Tempo de preparo
Show! Mas e por quanto tempo você deve se preparar? A resposta óbvia é que o tempo NUNCA vai ser o suficiente. A entrevista é uma questão de múltiplas variáveis onde você estuda para tentar diminuir a chance de te perguntarem algo que você não sabe, porém, SEMPRE vai ter algo que você não manda muito bem. Tendo dito isso, pense em quanto tempo você precisa pra exercitar o básico.
Eu gosto de pensar que existem 4 trilhas distintas dependendo do seu grau de preparo anterior. Quanto mais intimidade você tem com os materiais e preparo, menos tempo você precisa.
Para efeito de comparação, NORMALMENTE hoje em dia eu sigo a trilha level 5. Por que level 5? Para quem joga D&D sabe que é no level 5 que você tem acesso à bola de fogo e a brincadeira começa de verdade 😆.
Trilha aventureira level 10+
Normalmente, a pessoa já é uma veterana nesses tipos de entrevistas e já domina os tipos de questões diferentes que podem aparecer. Eu diria que nessa trilha aqui, a pessoa precisa de umas 2-4 semanas de preparo pra “refrescar” a memória.
Aqui eu diria pra focar nos tópicos que você lembra menos ou que exigem diversos conceitos, backtracking, grafos, greedy e programação dinâmica são bons candidatos.
Trilha aventureira level 5
Se você se enquadra aqui, bem-vinda(o) ao meu time. Normalmente, nessa categoria a pessoa precisa de 4 a 8 semanas de preparo, estudando no mínimo umas 2 horas por dia. A pessoa em questão já sabe a maioria das estruturas de dados mais comuns, conhece análise assintótica e já tem familiaridade com diversas questões e estratégias.
O objetivo aqui são 2:
- Praticar os algoritmos com diversas questões pra aprender mais estratégias ou exercitar as estratégias que já se conhece.
- Aprender algoritmos novos que por algum motivo você não tem tanta familiaridade.
Trilha aventureira level 1
Nessa categoria temos a pessoa que já cursou CC ou tem familiaridade com algoritmos, mas faz muito tempo que estudou qualquer coisa, fez questões, etc.
Eu recomendo de 8 - 12 semanas de treino intensivo. Você precisará praticar os diversos tópicos, aprender as estratégias, relembrar as análises de cada estrutura de dados e caminhar das questões fáceis até as questões médias/difíceis no leetcode.
Eu me enquandrava justamente aqui lá em 2013 quando fiz minha primeira seleção e de novo em 2020 quando comecei a praticar no leetcode pela primeira vez. É comum quando a gente fica enferrujado acabar voltando pra essa categoria, a boa notícia é que com o tempo, você vai ficar cada vez mais “estável” no level 5.
Trilha level 0 em algoritmos e ciência da computação
Se você se assustou com o level 1 e pensou “vixe, eu num caio nem aqui” não se desespere, essa categoria é para você, nobre aspirante à pessoa aventureira.
Por ter conhecimento 0 em algoritmos você vai precisar começar do básico fazendo um curso no assunto, estudando os algoritmos clássicos e brincando com as questões easy pra ir se acostumando. O ideal é que você comece implementando cada algoritmo/estrutura de dados pra saber como a coisa funciona.
Materiais de estudo para algoritmos
Agora que você tem uma ideia de quanto tempo vai levar, por onde você estuda? Eu deixo aqui os materiais que eu usei, vi por aí e/ou vejo outras pessoas recomendarem.
Livros
O Grokking algorithms é um livro bom pra quem tá no nível 0 acima. Ele é bem básico, mas te ajuda a molhar o pé no mundo dos algoritmos. Eu tenho ele e acho divertido como ele vai apresentando os conceitos.
Esse aqui é a “bíblia” pra entrevistas. Normalmente pro pessoal que está ali no level 1. Esse foi o primeiro livro a abordar o assunto quando era tudo mato. As explicações são boas e as questões que tem nele são clássicas.
Esse aqui tem pra várias linguagens, eu acho que tem versão em Python, Java e C++. Ele é mais direto ao ponto do que o cracking the coding e tem menos explicações. Eu cheguei a usá-lo brevemente, mas depois de um tempo eu prefiro só praticar no leetcode ou usar materiais que apontam questões no próprio leetcode. Eu deixo ele aqui mais por curiosidade se a pessoa realmente gosta do tópico de livros.
Outro ponto interessante é que ele trata de alguns temas que podem ser úteis em entrevistas para pessoas mais sênior como design, paralelismo, etc.
Vídeos
Em português, o Will e o Gustavo tem feito um trabalho excepcional abordando várias temas no canal deles do Twitch. Recomendo acompanhar as lives deles não só pelo conteúdo, mas também pela resenha que é sensacional 😂.
Existem centenas de canais de youtube abordando o assunto. Eu deixo aqui o meu favorito que é o Neetcode. A jornada do cara do Neetcode é bem interessante e vale a pena você dar uma olhada. As explicações dele, infelizmente, são em inglês, mas se isso não é uma barreira, eu recomendo.
Cursos
Eu vou recomendar 3 cursos aqui. 2 sobre algoritmos no geral e 1 focado em entrevistas:
- Curso de algoritmos de Princeton na Coursera. É puxado, mas tem muita info legal.
- Curso de algoritmos do William Fiset no youtube. Eu acho que hoje em dia tá gratuito. Ele tem curso cobrindo os principais algoritmos e ele também tem um curso focado em grafos.
- Curso para entrevistas do próprio leetcode. Esse é novo e o bom é que ele é um guia usando as próprias questões do leetcode.
Com exceção do curso do leetcode, os dois cursos acima podem ser feitos gratuitamente.
Sobre plataformas pagas (sem citar nome das famosas), eu não sou muito fã delas. Isso vai de cada um, eu não acho que o curso vai te dar nada que você não aprenda nos materias gratuitos. Porém, se você curte a didática da pessoa em questão vá em frente, o que vale é estudar e passar na entrevista 😀🤑.
Materiais de estudo para system design
Eu falei muito sobre algoritmos até agora, mas outro tópico cobrado em especial pra quem é pleno e sênior é o tal do System Design. E aí? Vai na lista abaixo que é sucesso:
- (Gratuito) Design Primer: Primeiro vamos de conteúdo gratuito né? A “bíblia” pra estudar design de sistemas é o repo no github “design primer”. Bom mencionar: a) é todo em texto, b) existe uma versão em português mas não sei o quanto já foi traduzido.
- (Pago) Livro System Design Interview do Alex Xu: Excelente intro e o livro 2 vai em alguns aspectos mais complexos. É uma boa base, mas cuidado em não sair decorando porque às vezes o autor se aprofunda mais em uma área que ele se interessa, mas que talvez você não precise focar durante a entrevista. Eu falarei mais sobre isso em um post mais adiante quando focarmos em System Design.
- (Pago) Eu curto o curso da educative.io Grokking the system design interview. Por muito tempo, esse era o único curso que “juntava” todo o conteúdo disponível pela internet.
Existem diversos canais de youtube falando sobre o tema, os dois que eu mais utilizei são o “System Design Fight Club” e o “Code with Irtiza”. Mais uma vez, muito cuidado em seguir cegamento o que eles falam, a maioria desses canais é de pessoas sem muito XP na indústria, eles só meio que repetem o que tá nos livros ou fazem designs SUPER complicados. Como exercício é interessante, mas na entrevista, muitas vezes a pessoa do outro lado só quer algo simples e que funcione.
Estratégias de estudo
Algumas estratégias básicas que funcionaram comigo:
- Siga um fluxo de estudo que vai de estrutura de dados mais básicas até as mais complexas.
- Mantenha uma planilha ou anotações sobre o quão bem você resolveu qual questão. Dá uma olhada no meu exemplo abaixo.
- As questões verdes foram fáceis, eu volto nelas após semanas.
- As questões amarelas eu sei por onde fazer, mas errei algum detalhe/besteira. Eu costumo voltar nelas após alguns dias.
- As questões vermelhas eu não sabia por onde ir. Leio como resolver e volto nela no mesmo dia ou no dia seguinte. O objetivo é fazer ela ficar amarela
- Não bata muito a cabeça contra as questões. Não conseguiu resolver em 10-15 min? Vá olhar a resposta e entender como fazer.
- Não foque em questões hard. Raramente elas caem em seleção (acho que só Google e Meta pedem elas hoje em dia). IMHO, não vale à pena, o esforço é muito alto e a recompensa é muito pequena.
- Tenha olhar crítico ao analisar soluções de system design. Questione e pense se dá pra fazer diferente.
- Dê pausas quando tiver muito estressado(a). É uma maratona. Cuidado com o burnoutinho.
- Você pode variar seu dia entre algoritmos e system design pra deixar mais dinâmico e evitar fadiga mental.
- É bacana colocar uma meta “2-3 questões por dia” e tentar focar nela. O que sair depois disso é lucro.
Conclusão
Como falei até aí em cima, é uma maratona, vá com calma que você chega lá.
Se você durou até aqui, parabéns! Nos vemos em breve na parte 3 sobre algoritmos e estruturas de dados. E se curtiu, segue aí, compartilha e espalhe a palavra 🥰.