O guia definitivo da entrevista de codificação

Atualizar: Seguindo o conselho escrito abaixo, recebi ofertas do Google, Microsoft, Amazon, Quantcast e Bloomberg.

Este é um guia abrangente que contém tudo o que você precisa saber sobre a entrevista de codificação. Explica bem o que aprender, como aprender e, mais importante, como apresentar a solução durante a entrevista.

Se você quiser passar na entrevista de codificação, você encontrou o artigo certo. Depois de ler isto você pode ser tentado a procurar por outros artigos sobre o mesmo tópico, porque “Talvez eu encontre mais dicas e truques que me ajudem”.

Pára de procurar dicas e truques, isto é o que te afasta do emprego dos teus sonhos.

Não há dicas nem truques para conseguir esse emprego. É apenas trabalho duro, ponto final. Então, se você realmente quer esmagar essa entrevista, vá e pratique depois de ler este artigo.

O artigo tem três partes & três vídeos e levará cerca de 30 minutos para ler.

  1. Qual é a entrevista de codificação?
  2. Como se preparar para a entrevista de codificação?
  3. Como dar o seu melhor durante a entrevista de codificação?

Primeiro, deixe-me apresentar, para que você saiba que estou confiante no que estou falando.

A maior competição de programação da Europa Noroeste

O meu nome é Andrei e tenho sido um programador competitivo nos últimos cinco anos. Participei nas finais mundiais do Google HashCode, a maior competição algorítmica organizada pelo Google, e antes disso, ganhei três medalhas de ouro nas Olimpíadas da Computação na Romênia. Tendo esta experiência, publiquei o curso online “Introdução a Algoritmos e Estruturas de Dados em C++” que tem ajudado mais de 8000 estudantes de 135 países com seus primeiros passos no campo.

Agora estou estudando Ciências da Computação no University College London e enquanto isso, estou criando um curso para ajudar estudantes e jovens profissionais a se prepararem para a entrevista de codificação nas grandes empresas de tecnologia. Assim, neste artigo, quero partilhar a minha experiência com a entrevista de codificação e dizer-vos a forma mais directa de a passar. Você pode me contactar aqui.

Deixe-me fazer-lhe uma pergunta: você já sonhou em trabalhar em uma grande empresa de tecnologia, como a Microsoft? Se sim, tenha certeza de que a maioria de nós também sonhou. E porque há uma demanda tão grande por algumas dezenas de empregos, eles precisam de uma maneira de ver quais candidatos estão melhor preparados.

Antes de ser convidado para a entrevista de codificação, você precisa se candidatar ao cargo e ter um currículo que brilhe entre os outros. Neste artigo, vou falar sobre a entrevista de codificação real e como você pode se preparar para ela, e não sobre o processo de candidatura ao cargo.

Para a maioria das empresas de tecnologia, a entrevista de codificação consiste em Algoritmos & Problemas de estrutura de dados. Pense neles como perguntas de resolução de problemas, nas quais o entrevistador procura avaliar a sua capacidade para resolver um problema que você nunca viu antes. Uma entrevista leva cerca de 45 minutos e você terá um ou dois problemas de codificação. O entrevistador espera que você encontre a melhor solução, codifique-a e explique o que você acabou de codificar.

Por último, você terá a chance de fazer-lhe algumas perguntas sobre a empresa ou qualquer coisa que lhe interesse. Discutiremos exaustivamente todos estes passos na última parte deste artigo.

Como se preparar para a entrevista de codificação?

Quero ser claro consigo desde o início: não existe tal atalho ou truque para passar a entrevista. A única maneira de encontrar soluções óptimas para problemas algorítmicos é praticando, resolvendo o maior número possível de problemas.

Em duas palavras, é um trabalho árduo.

Pode não gostar e começar a procurar noutro lugar um truque para entender como resolver as questões da entrevista, mas não existe. Pense por um segundo: se houvesse tal truque, por que todos não o usariam e passariam na entrevista?

Então, você precisa entender que a única variável de passar na entrevista é o quanto você pratica antes. A sua experiência, inteligência e tudo o resto já está resolvido. Portanto, o tempo gasto na prática fará a diferença entre os candidatos que passarem e falharem.

A entrevista de codificação é uma luta consigo mesmo, e a única maneira de ganhar é praticar muito.

O primeiro passo é sentir-se confortável com uma linguagem de codificação convencional, tal como C/C++, Java ou Python. Algumas empresas também aceitam outras linguagens, e a maioria clara fica com estas três. Escolha a que você mais gosta e fique com ela. Não decida na metade da preparação que você quer mudar a linguagem! Para o resto do artigo, eu vou assumir que você escolheu uma linguagem e conhece bem sua sintaxe.

Agora, normalmente a entrevista de codificação é tudo sobre Algoritmos e Estruturas de Dados. Eles incluem alguns tópicos fundamentais que você precisa entender completamente, e nem mesmo considere ir à entrevista sem se sentir confortável com eles.

Below há uma lista dos Algoritmos e Estruturas de Dados que você precisa conhecer. Escrevi-os por ordem de importância e é o melhor caminho de aprendizagem.

1) Grande O complexidade: É uma necessidade e forma a base do seu pensamento algorítmico. Entenda o que significa e chegue ao ponto em que você pode dizer a complexidade de um algoritmo básico só de olhar para ele.

2) Arrays: Você deve estar familiarizado com o conceito de arrays neste ponto. Este tópico refere-se a problemas onde o array é usado apenas para armazenamento e a solução inclui técnicas básicas, como a iteração com dois ponteiros. Um problema clássico é verificar se um dado array é uma permutação.

3) Strings: Saiba como manipular uma string na sua linguagem, e estar familiarizado com problemas que lhe pedem para concatená-los ou girá-los.

4) Listas Ligadas: É comum encontrar um problema de lista vinculada na entrevista. Aqui você precisa prestar atenção especial aos casos de canto. Pense no que acontece se a lista de links estiver vazia? Ou tem apenas um elemento? Ou você quer iterar até o último elemento? Quando você resolver um problema com listas vinculadas, pense duas vezes sobre os casos de canto.

5) Hash Tables: Estrutura de dados fundamentais que está presente na maioria das entrevistas. Se você for mais fundo em um tópico, escolha tabelas de hash. Seja fluente na biblioteca de tabelas hash do seu idioma e pratique pelo menos cinco problemas. No final, aceite este desafio: Como você encontraria o subarranjo mais longo com entradas distintas?

6) Pilhas: Esteja familiarizado com a idéia de que você pode manipular apenas uma ponta da pilha. Resolva este desafio: Implemente uma pilha com uma MAX API, o que significa que a cada momento você pode perguntar qual é o elemento máximo na pilha.

7) Filas de espera: Não as confunda com pilhas, porque têm duas pontas. Implemente o problema clássico de simular uma fila usando duas pilhas.

8) Ganancioso: Esta técnica é bastante simples e você provavelmente a usa todos os dias. Basicamente refere-se a tomar a melhor decisão possível em um momento específico, sem considerar conseqüências futuras. Pratique alguns problemas, e não pense que qualquer problema pode ser resolvido usando Greedy.

9) Tipos primitivos: Preocupa-se principalmente com a manipulação de bits e operações básicas sobre números. No entanto, alguns problemas podem tornar-se bastante complicados. Como se pode contar o número de 1’s numa representação binária?

10) Árvores binárias: Foco em travessias, antepassados comuns e iteração recorrente através das árvores.

11) Pilhas: São amplamente utilizadas em aplicações do mundo real, por isso conheça os montes! Pratique até que você possa estar confiante quando usar uma pilha de minas ou uma pilha máxima. Como você imprimiria os cinco maiores elementos de uma sequência numérica? Você usa uma sequência de min-heap ou max-heap?

12) Pesquisando: Pesquisar é um assunto central que todos devem conhecer. Então, pratique pelo menos três problemas usando a pesquisa binária.

13) A classificar: Assegura-te que consegues implementar a fusão e a selecção rápida. Conheça muito bem suas melhores, médias e piores complexidades de casos. Se você tiver tempo, aprenda também Heapsort.

14) Árvores de Busca Binária: Eles são amplamente solicitados na entrevista de codificação, e você precisa ser capaz de implementar todas as suas operações básicas, incluindo a exclusão de um elemento!

15) Backtracking: Basicamente significa gerar todas as soluções possíveis e tomar as que respeitam as suas exigências. Implementar um gerador do conjunto de potência do conjunto e o problema n-Queen.

16) Gráficos: São provavelmente a estrutura de dados mais usada na informática. Você sabia que toda rede social é apenas um enorme gráfico? Pratique em fazer uma cópia do gráfico na memória e detectar ciclos nos gráficos.

17) Programação dinâmica: A programação dinâmica é vista pela maioria como o tópico mais assustador. Mas é o mais bonito, se você entender o pensamento por trás disso. Então, pratique as cinco perguntas mais comuns e fique com elas até entender de onde vêm as recorrências.

No curso, estou criando agora, estou explicando cada tópico nesta ordem. Ainda estou trabalhando no curso, mas você pode ter acesso antecipado a algumas das lições e também me ajudar com seu feedback, juntando-se ao grupo do curso no Facebook.

Se muitos tópicos não lhe são familiares, significa que você precisa começar a praticar logo após este artigo. Chega de procurar outros guias online, apenas vá e pratique. Lembre-se que a entrevista é uma luta consigo mesmo, quanto mais você praticar, maior será a sua chance de ganhar. Cabe a você aumentar a zona de conforto dos seus problemas.

Como dar o seu melhor durante a entrevista de codificação?

A entrevista tem cinco partes que vamos discutir em profundidade. Veja os vídeos explicativos para exemplos reais.

1) Introdução

Esta parte começa a entrevista e leva cerca de três a cinco minutos. O entrevistador quer saber mais sobre si e dá-lhe a oportunidade de se apresentar. Tipicamente, ele está interessado em quais projetos você já trabalhou antes e qual foi o mais impressionante. Agora, esta é a sua oportunidade de brilhar, por isso não a desperdice!

Não tente ser lisonjeador. É fácil detectar uma personalidade falsa que te tenta enganar. Eu e todos os outros odiamos essas pessoas, por isso certifique-se de mostrar a sua verdadeira personalidade.

Você precisa saber de antemão o que vai dizer sobre o seu projeto favorito, por isso prepare-o antes da entrevista. Agora, a maioria das pessoas diz apenas duas frases curtas, o que é mau. Que resposta você gosta mais?

1) “Eu trabalhei em uma aplicação web para melhor gerenciar pacientes em hospitais. Escrevi o backend em Node.js.”

A maneira como você se apresenta realmente importa

2) “Um projeto que eu realmente gostei foi sobre a criação de uma aplicação web para os Serviços Nacionais de Saúde do Reino Unido, para ajudá-los a gerenciar melhor os pacientes no hospital. Fazia parte do currículo da Universidade, levou dois meses e eu fui o líder de uma equipe de três.

Pegamos o projeto de uma idéia básica e o transformamos em uma aplicação real. Eu fui responsável pela codificação do backend no Node.js e do banco de dados em MongoDB. Foi a primeira aplicação que criei para um cliente e eu não estava familiarizado com as tecnologias web. O processo de desenvolvimento foi iterativo, e cometemos alguns erros no caminho.

No final, entregamos demais com muitas funcionalidades, e a minha favorita é que os usuários podem atualizar os quartos do hospital, ao invés de serem codificados com código rígido.

Eu aprendi muitas coisas com este projeto, especialmente como trabalhar em equipe. Houve alguns momentos em que surgiram problemas técnicos ou de equipe, mas no final, tudo correu bem e conseguimos a nota mais alta do ano!”

Transforme esta apresentação em sua vantagem! O entrevistador está realmente interessado em encontrar mais sobre você, então comece com uma introdução concisa do projeto, explicando do que se trata. Depois diga qual foi a sua contribuição (se você ajudou a equipe com uma idéia inteligente, diga!), e o que você aprendeu com o processo de desenvolvimento. Você também pode mencionar que diferença você fez para os usuários.

Você deve falar um-dois minutos sobre seu projeto.

2) Entenda o problema

O entrevistador lhe dirá brevemente a declaração do problema que você precisa resolver. Eu disse ‘brevemente’ porque ele não lhe dará muitos detalhes sobre as restrições, casos de canto ou como você recebe os dados. Faz parte do seu trabalho pedir tudo o que você precisa para resolver o problema. Repita a declaração em voz alta para ter certeza de que você a recebeu corretamente.

Deixe um comentário