Como me preparei para minha entrevista do Google

Todo engenheiro de software se esforça para impressionar as pessoas com sua habilidade técnica. Os gigantes da tecnologia deste mundo são um ótimo lugar para trabalhar para técnicos que podem fornecer serviços a bilhões de usuários. Em minha entrevista recente, houve várias rodadas, recebi ofertas do Google e da Amazon. Nos últimos anos, a comunidade online me ajudou muito na preparação para as entrevistas. Neste post, vou compartilhar tudo sobre meu caminho para a entrevista e trazer de volta a contribuição da comunidade para o meu aprendizado.








Entrevista SWE



O processo geralmente começa com o recrutador reunindo uma lista de candidatos potenciais. O candidato então passa por uma triagem inicial ou triagens nas quais é determinado se ele / ela é adequado para o trabalho. Uma vez que isso esteja claro, uma entrevista típica de SWE é conduzida, incluindo as seguintes etapas:



  • Programação - de 3 a 5 rodadas;

  • Projeto de sistemas - 1 rodada;

  • Princípios de Liderança - Rodada 1.



Vou me concentrar na preparação para o ciclo de codificação, pois ele ocupa a maior parte da entrevista. Mas daremos uma olhada rápida no design de sistemas e nas habilidades de liderança nas seções a seguir.



A. Programação



Os engenheiros de software frequentemente se encontram em situações difíceis, por exemplo, trabalhando com ambigüidade, requisitos pouco claros, dividindo tarefas complexas em subtarefas, lidando com casos extremos, terminando o trabalho em um compromisso com compromissos e assim por diante. Entrevistas de programação são uma maneira de ter uma ideia dessas habilidades.



Para simplificar, as etapas de programação se concentram na solução de problemas usando estruturas de dados e algoritmos. Essas perguntas são geralmente complexas e fornecem informações valiosas sobre a capacidade analítica do candidato.



Aprenda a resolver problemas usando algoritmos e estruturas de dados. Essa habilidade é adquirida com o tempo, não há atalho para ela; a única fórmula verdadeira é a consistência. Pratique, pratique e pratique até desenvolver sua habilidade natural de resolução de problemas.



Estratégia de preparação



1. Estimativa do tempo de preparação



A estimativa de tempo é freqüentemente ignorada e não considerada necessária. Eu sugiro calibrar o quão bem você está resolvendo problemas com algoritmos e estruturas de dados. Eu examinei meus pontos fortes e fracos e fiz uma estimativa aproximada do tempo de preparação. Essa avaliação me ajudou a preparar minha mente para uma meta de longo (e curto prazo) e me manteve motivado.



“Dê a si mesmo tempo suficiente para se preparar. Sempre. É melhor estar muito preparado do que não estar suficientemente preparado **.


O tempo total de preparação pode variar, dependendo da sua experiência. Em geral, eu dividi os níveis de treinamento da seguinte forma:



  • Um iniciante pode escrever código confortavelmente em pelo menos uma linguagem de programação. Ele não tem conhecimento básico de DS e algoritmos. Dificuldade em resolver problemas fáceis ou em tomar tempo.

  • Média. A pessoa conhece bem as estruturas de dados e algoritmos. Nenhum problema com dificuldade fácil. Pode resolver a maioria dos problemas de complexidade média. Luta muito.

  • Avançado. Nenhum problema com dificuldade média. Capaz de resolver os problemas mais complexos.



Antes da entrevista, coloquei-me no nível intermediário.





Estimativa do tempo de preparação



2. Plataformas onde você aprende a programar



Pratiquei principalmente programação com LeetCode , InterviewBit e GFG . Antes da entrevista, resolvi cerca de 320 problemas LeetCode, 80 InterviewBit e 30 questões GFG.





Como as tarefas foram distribuídas



As tarefas de dificuldade média são muito importantes: a maioria das perguntas da entrevista são de dificuldade média. Resolver problemas de dificuldade média tornará você mais rápido e aumentará suas habilidades de resolução de problemas.



No início, é importante começar com perguntas simples e médias. Comece com tarefas desafiadoras assim que sentir a confiança adequada. Mantenha-se motivado se não conseguir resolver problemas difíceis. Pode levar mais tempo do que você esperava para trabalhar e melhorar a solução. Sempre que me sentia sobrecarregado, para aumentar minha motivação, voltava às tarefas fáceis.



Mantenha uma mentalidade construtiva. Cada problema que você não consegue resolver é uma oportunidade de aprender algo novo.



  • LeetCode: , . LeetCode — . . , LeetCode Premium; .

  • InterviewBit: . . , ( ). InterviewBit .

  • GFG: Usei essa plataforma para encontrar problemas e artigos sobre noções básicas de algoritmos e estruturas de dados. As explicações dos tópicos e as implementações lá são muito boas. O GFG também possui um conjunto de tarefas relacionadas a empresas e temas específicos.



Não confiei inteiramente em nenhum recurso. Todos me deram novas idéias. Mantive um diário, expandindo constantemente meus conhecimentos.



  • Especialização em algoritmos no Coursera : essa faixa do Coursera é incrível! Existem 4 cursos no total, cobrindo todos os tópicos básicos e diversos tópicos avançados de estruturas de dados e algoritmos. Ótimo para iniciantes.

  • Youtube: . . ( , , THNLGf019nRo) — ! BackToBack SWE.

  • CTCI EPI:   . . , . .

  • CLRS:   , . , .



Por último, mas não menos importante, os artigos sobre a BaseCS de Vaidehi Joshi . Ela escreve explicações intuitivas e simples sobre vários tópicos de algoritmos e estruturas de dados.



3. Inicie o cronômetro



Como a duração das entrevistas diminui, é muito importante trabalhar em como você resolve os problemas. Normalmente, uma entrevista de programação dura 45-50 minutos e espera-se que o candidato resolva dois problemas intermediários, um difícil ou um problema fácil e outro difícil.



Mesmo que você pudesse ter resolvido a questão original, mas gastasse mais tempo, isso significa que você não tem tempo suficiente para resolver a segunda.



Eu defino um cronômetro para fazer a contagem regressiva do tempo que leva para resolver os problemas:



  • Tarefa média: 20 minutos.

  • Tarefa difícil: 40-45 minutos.



Os iniciantes podem ignorar o tempo: para eles, encontrar a solução certa é obviamente mais importante.



4. Entrevista simulada



Antes da entrevista real, passei por muitas simulações. Uma entrevista simulada pode ser muito útil. A falha no início de um ambiente de teste fornece informações úteis. Isso o ajudará a identificar lacunas em seu processo de pensamento. Tente consertar todos os erros e melhorar a cada entrevista falsa.



"Se você passar nas simulações várias vezes, considere isso um bom sinal."



Livre:



  • Imitação no LeetCode .

  • [Esquema ponto a ponto gratuito ] Pramp .

  • [Free peer-to-peer] InterviewBit .



Entrevistas simuladas pagas são benéficas. Por exemplo, o feedback pós-entrevista fornece muitos detalhes sobre o que o recrutador estava esperando.





5. Prepare um plano de promoção



Até agora, falamos muito sobre os vários elementos de preparação. Agora vamos tentar colocar tudo junto e criar um plano de promoção! Confira uma captura de tela do meu calendário um mês antes da entrevista.





Cronograma de preparação Divida



toda a preparação em tarefas. Estabeleça metas para cada dia nas semanas (e até meses) antes da entrevista. Isso me ajudou a evitar o caos e não me perder no caminho para o gol.



  • Nos dias de semana, eu poderia alocar algumas horas, porque estava fazendo trabalho de escritório. Eu planejei a solução de problemas para este tempo.

  • Eu li teoria nos fins de semana, quando poderia me dedicar muito a ela.

  • Mais perto da entrevista, planejei imitações. Nas últimas semanas, reduzi o número de sessões de programação e me concentrei na leitura do CTCI e do EPI.







Alocação de tempo semanal



Sei que muitos de nós temos responsabilidades familiares e empregos em tempo integral. Nem tudo e nem sempre sai conforme o planejado. Mas a ideia é criar um hábito. Acompanhe o seu progresso e o que não foi concluído. Ajuste a programação até encontrar uma adequada.



B. Projeto de sistemas



Esta rodada testa as habilidades de design técnico. Ele pode ser dividido em design de baixo nível (LLD) e design de alto nível (HLD). O conhecimento nesta área cresce com a experiência no setor.



Tente obter conhecimento de conceitos como sistemas distribuídos, balanceamento de carga, protocolos de rede, hashing consistente, teorema CAP, replicação, fragmentação, etc.





C. Princípios de liderança. Comportamento



Ao contrário das rodadas anteriores, esta seção não é técnica. A empresa espera aprender mais sobre o candidato com suas palavras. A empresa pode estar interessada em:

  • Personalidade do candidato.

  • Projetos anteriores e experiência de trabalho.

  • O que você fez em situações difíceis.

  • Como você respondeu às críticas boas e ruins.



O principal é ser transparente e ser você mesmo.

Destacarei a seção mencionada no CTCI sobre o modelo SAR (situação, ação, resultado). A ideia é identificar discussões importantes importantes, distribuindo histórias do trabalho anterior. Aqui está um mapa das habilidades da comunidade (também conhecidas como habilidades sociais) para que você possa aprender mais sobre elas.





SAR





  • LeetCode Codeforces. , , .

  • «Shuffle» LeetCode. . .

  • IDE, Google Docs, CollabEdit, .

  • . , .

  • , . , , . , .





T1. Em quais tópicos de estruturas de dados e algoritmos você deve se concentrar? A quais recursos você vinculou?

Os recursos de aprendizagem mencionados anteriormente serão úteis. Eu não adicionei um recurso separado para cada tópico, isso tornará a postagem muito grande.



Tópicos em nenhuma ordem particular:

Listas vinculadas, Manipulações de bits, Pilhas e filas, Pesquisa binária, Heaps, Algoritmos gananciosos, Programação dinâmica, Vetores / Lista de matriz, notação Big O, Tempo e espaço, classificações, ponteiros, janelas TCP / IP, sistemas separados conjuntos, operações de string, gráficos e árvores, mantendo a estabilidade do sistema, busca em largura e profundidade em primeiro lugar, recursão, retrocesso, hashing, árvore de sintaxe, poda de árvores e árvores binárias indexadas.



2º trimestre. Quais linguagens de programação você estudou?

Aprenda um idioma por dentro e por fora; na minha opinião, isso é o suficiente. Eu prefiro Java.



3º trimestre. Como você sabe quais tarefas são apropriadas para praticar para resolver todos os problemas?

É quase impossível resolver todos os problemas. No entanto, há um máximo de 12 a 15 tópicos no campo de estruturas de dados e algoritmos. Tente dominar cada tópico melhor resolvendo problemas temáticos. Com a prática, você será capaz de determinar a estrutura de dados e o algoritmo desejados. Foco na qualidade ao invés da quantidade.



Q4. Eu tenho alguma chance se não programar nas competições?

Sim absolutamente. A programação para competições neste contexto é opcional.



  • A programação de competição é um esporte e sua gama de tarefas é mais ampla do que a programação de produção. Plataformas como CodeChef e Codeforces são mais inclinadas a esse tipo de programação.

  • Claro, existem áreas onde a programação competitiva se sobrepõe à programação de produção e pode ser útil: por exemplo, ajuda a chamar a atenção do recrutador para o seu perfil, habilidades de resolução de problemas, etc.



No entanto, as rodadas de codificação representam um estágio muito diferente e têm prioridades diferentes.



Q5. Como consigo um convite para uma entrevista? Como você se inscreveu?

O recrutador entrou em contato comigo diretamente pelo LinkedIn. Não sei como os candidatos são selecionados. Mas tenho algumas sugestões.



  • Enquanto você for um estudante, concentre-se em seus estudos. Participe de concursos, hackathons, trabalhe em projetos interessantes e inovadores. Tente contribuir para um projeto de código aberto. Existem várias maneiras de fazer seu perfil se destacar.



Mais importante, aproveite sua viagem. Seja diligente em seu trabalho. Tenha paciência, respeito e se esforce sempre para ser melhor hoje do que ontem, e não se esqueça do código promocional especial do HABR, que adicionará 10% ao desconto no banner. O resto virá.






imagem






Outras profissões e cursos


















All Articles