Você está na página 1de 20

PREPARAÇÃO PARA

ENTREVISTAS DE
PROGRAMAÇÃO
autor: github.com/leandromoreira
——————————————————————————————————————————
PREPARAÇÃO PARA ENTREVISTAS DE PROGRAMAÇÃO...................................................... 1
TLDR;............................................................................................................................................ 3
você só tem um mês................................................................................................................3
você tem mais tempo...............................................................................................................3
introdução, rejeição e consistência................................................................................................4
processo e planejamento...............................................................................................................6
início da entrevista antes de escrever qualquer código...........................................................8
no meio da entrevista enquanto codifica................................................................................. 8
entender versus aprender............................................................................................................10
repetição espaçada................................................................................................................11
conhecimento em ondas........................................................................................................ 11
recomendação de introdução: estrutura de dados, algoritmos e big oh......................................13
introdução a complexidade algorítmica - big oh.................................................................... 13
introdução a algoritmos e estrutura de dados....................................................................... 14
prática de exercício......................................................................................................................16
pratica de mock........................................................................................................................... 17
recomendação de exercícios.......................................................................................................19
TLDR;

você só tem um mês


Siga o roteiro:
● introdução
● processo para abordar os problemas
● introdução a complexidade algorítmica B e A
● introdução a algoritmos D e E
● assista os dez exercícios mais comuns
● faça um ou dois exercícios por dia do roteiro
● marque pelo menos uma entrevista mock por semana

Se você tem mais tempo


Siga o roteiro:
● introdução
● processo para abordar os problemas
● leia entender é diferente de aprender
● introdução a complexidade algorítmica B e A
● introdução a algoritmos D e E
○ introdução prática de listas encadeada J,
○ grafos I,
○ programação dinâmica H e
○ árvores binárias K
● assista os dez exercícios mais comuns
● faça um ou dois exercícios por dia do roteiro
● marque pelo menos uma entrevista mock por semana
introdução, rejeição e consistência
"What happened to the funny paper?
Smiling was your money maker"

Eis aqui (mais) um guia de como se preparar para entrevistas de código focado em empresas
no estilo FAANG. As sugestões que descrevo e recomendo são sob o meu ponto de vista,
portanto tudo que ler aqui coloque mentalmente "na minha opinião"1 antes de cada parágrafo.

As ideias que apresento "funcionaram" pra mim mas não hesite em adaptar para o seu
contexto. Primeiro alguns pontos que são importantes reconhecer.

● Tenha consciência de que falhar em entrevistas é mais comum do que parece. Ouvi
diversas vezes de pessoas que recrutam que é natural falhar 2x, 3x ou 4x e até casos
de 8x e isto não tem relação com ser uma pessoa inteligente/competente ou não.
○ Muitas amigas e amigos que considero geniais e talentosas não passaram em
alguns destes processos. Enfim, isso é muito habitual.
● Existem empresas que fazem entrevistas mas sem formalmente exigir este estilo de
desafio de programação.2
● Só consegui passar depois de falhar numerosas vezes e persistir/insistir com
consistência em estudar/praticar e simular; que é o que vou descrever aqui.

Fonte: reddit (não sei se é o OP)

1
2
no caso na minha, não na sua pessoa que lê 😛
normalmente existem mais tipos de entrevistas como system design, soft skills, e etc
Não acredito em fórmula mágica da paz do estilo "aprenda tudo de Y em X dias"3. Sempre que
obtive aprendizado ou compreensão razoável de um assunto foi por ter errado, estudado,
praticado o assunto por muito tempo.

Fonte:
https://interviewnoodle.com/preparing-for-the-facebook-interview-a-brutally-honest-guide-8e09f3
b8a054

3
exceto quando X é suficientemente grande para realmente aprender 🤡
processo e planejamento
"Meu amor, disciplina é liberdade
Compaixão é fortaleza"

Antes de pensar no que estudar (conteúdo) ou em como estudar (estratégia), acho que vale a
pena comprometer-se com um tempo de estudos e seguir de forma consistente. Exemplos:
● 3 vezes na semana 2h (antes de ter uma entrevista) por 3 meses,
● 5 vezes na semana 1h (com a entrevista marcada) até a entrevista

Seguir um planejamento sem objetivo real é muito difícil. :( Então, talvez o seu primeiro
objetivo pode ser um pré-preparo para entrevistas. E como saber se está pré-preparada?! Uma
forma de avaliar isto pode ser a sua capacidade de responder perguntas easy e medium4 que
cobrem vários algoritmos e estruturas de dados do leetcode.com.

O fato importante é que você precisará de tempo, quanto mais tempo melhor e mais
abrangente será o preparo.

Mas tão importante como ter um planejamento (horário dedicado) é ter um template ou
processo para abordar os problemas nas entrevistas. Gosto muito da proposta da Gayle
Laakmann5.

4
não exatamente todas sempre
5
e recomendo ver este vídeo pra entender a proposta da mesma explicada por ela
Fonte para esquemas/templates de preparo para coding e soft skills.
início da entrevista antes de escrever qualquer código
Mantenha-se verbalmente falando como se estivesse apresentando tudo o que você pensa, até
mesmo o que você pensa ser "bobo":

1. Ouça bem quem entrevista, preste muita atenção em tudo, se quiser anote num
caderninho de lado. Tenha plena certeza que entendeu o problema.
a. Saiba que é comum problemas descritos de forma ambígua, incompleta ou
vaga para gerar uma "conversação inicial" e testar sua capacidade de pensar e
questionar6.
2. Usualmente a pessoa que entrevista te dá um exemplo de entrada e saída esperada,
tenha certeza que entendeu o mesmo MAS além deste exemplo proponha e debugue
outros exemplos mais completos
a. Não escolha um exemplo MUITO GRANDE pois pode tomar seu tempo precioso
3. Proponha uma pseudo solução de força bruta, se possível, normalmente a primeira
que vem a nossa cabeça
a. A proposta ainda é em pseudo código ou graficamente
b. Diga verbalmente qual a complexidade de tempo e memória
4. Proponha e discuta uma pseudo solução otimizada para o problema
a. Aprender a otimizar vem com experiência de se fazer muitos exercícios.
5. Debugue sua pseudo proposta usando os exemplos que você achou mais completos

no meio da entrevista enquanto codifica


Continue verbalmente expressando o que pensa e só agora vá para o código:

6. Implemente sua proposta na linguagem preferida


a. Uso python pois ela tem muita coisa útil pra entrevistas já built-in e é uma
linguagem bem simples
7. Teste o código, debugando com exemplo ou rodando a depender da empresa
a. Neste momento é comum encontrarmos erros bobos, do tipo um loop indo além
do esperado e etc.
8. Discuta a complexidade de tempo e memória
9. Se possível crie testes de unidade para casos como vazio, nulo, negativo, elementos
muito grandes/pequenos, valores 0, elementos repetidos;
a. use seu julgamento para criar os testes pensando

Recomendo ver sessões simuladas, se possível de empresas similares às que você deseja
aplicar para ter uma noção do que é esperado. Veja como as partes (entrevistadora,
entrevistada) colaboram:
● https://www.youtube.com/watch?v=XKu_SEDAykw
● https://www.youtube.com/watch?v=21pmwl0hrME
6
a pessoa é, muitas vezes, avaliada pelas perguntas que faz ⭐
● https://www.uber.com/pt-BR/blog/coding-interview-dicas-para-o-processo-seletivo-de-en
genharia-da-uber/

Colabore com a pessoa entrevistando como se fosse um par de trabalho7. Converse até
mesmo papo fiado faz bem mas tenha noção do seu tempo, ele é curto.

7
esse foi um conselho de um grande amigo que fez muito sentido pra mim desde o primeiro dia que ele
me contou
entender versus aprender
“If you can't explain it simply, you don't understand it well enough.”

Há diferenças entre entender e aprender. Conseguir entender bem enquanto assistimos


alguém no youtube é bem distinto de dizer que aprendeu o que foi visto.

Classifico entender como o processo intelectual de compreender um fato, uma explicação.


Enquanto aprender seria a capacidade de conseguir aplicar/explicar o que foi
compreendido para si ou outra pessoa em um outro contexto/momento distante do ponto onde
ocorreu o aprendizado.

Um exemplo:
● [entendi] Ouvi sobre TCP/IP antes da faculdade e entendi o básico que era:
○ Um conjunto de protocolos de rede para garantir8 a entrega dos dados.
● [entendi] Estudei TCP/IP na faculdade:
○ Aprendi sobre ACK, handshake, paridade de bit, classes IP, sub máscara,
controle de congestão e etc.
● [entendi] No início da vida profissional tive contato superficial (como usuário) com
TCP/IP configurando máquinas (sem DHCP), configurando bancos de dados em
aplicações e etc.
● [aprendi] Ainda na vida profissional (na globo principalmente) tive contato mais
aprofundado de TCP/IP
● [aprendi] Hoje sei que apesar de ter um bom entendimento sobre TCP/IP não sou um
especialista de redes (mesmo sendo interessado e continuamente estudando o
assunto)

O mesmo tive que fazer para estrutura de dados e algoritmos para entrevistas. Me disciplinei9 a
estudar, praticar, ler e reler, ver vídeos no youtube de várias fontes e fazer isso ser parte da
rotina.

Cuidado com a dispersão, pois algumas pessoas10 têm a tendência de abrir muitas "abas de
conhecimento" mas neste momento o importante mesmo é o foco; um assunto por vez.

8
tenta garantir é o termo mais adequado
9
mas como a maioria dos seres humanos, uma semana era menos aplicada do que a outra, mas o que
10
🤡
vale é consistência e persistência
eu
repetição espaçada

Eu criei um sistema11 no qual registro o problema que resolvi, quantas vezes, categoria, como
resolvi e etc. E para memorizar o aprendizado, resolvo problemas "velhos" a cada X12 tempo
sem olhar nas minhas notas, depois, se necessário, olhando as notas. Assim consigo testar o
quanto eu entendi versus aprendi.

Exemplo, esta semana fiz o exercício #3, semana que vem refaço o mesmo exercício. Em tese
esta revisão é rápida e ajuda a fixar na memória.

É importante resolver os problemas se possível explicando para outra pessoa, senão encontrar
outra pessoa, fale consigo como se estivesse apresentando. A habilidade de explicar o
processo de pensamento é importante demais para entrevistas.

conhecimento em ondas
Já teve a impressão de ter encontrado o link/livro/vídeo que explica de forma ótima aquele
assunto que você vem estudando a vida toda?!

Eu tenho a sensação de que na verdade é nossa capacidade de entender que vai se


expandindo, daí temos a intuição de ter encontrado o recurso definitivo. Talvez só agora
entendamos melhor o assunto mas na verdade o que você sabe hoje é a soma de tudo que
experimentou no passado.

😡éX mentira,
11
me inspirei em algum desses links que coloquei no corpo do texto mas não lembro qual foi
12
variando de 1 a 2 semanas, mas às vezes é bom revisar o que já foi feito próximo às entrevistas
O meu conhecimento de TCP/IP foi aumentando13 à medida que dedicava mais e mais ao
assunto, mas não se engane continuo ignorante.

Fonte do gráfico acima sindlurb.

Conhecimento irá necessariamente precisar de tempo, persistência, diversidade de


apresentações14 sobre o assunto, trabalho, prática, erros e persistência.

13
o conhecimento aumenta em função da dedicação no tempo f(dedicação, tempo)
14
no sentido de visões / explicações sobre o estudo, várias fontes trazem maior entendimento.
recomendação de introdução: estrutura de dados,
algoritmos e big oh
"The story of a woman on the morning of a war
Remind me if you will exactly what we're fighting for"

É importante rever ou aprender os principais algoritmos, estruturas de dados e o conceito de


complexidade algorítmica (o big oh) antes de iniciar nos exercícios15.

Recomendo anotar num caderno ou num google/microsoft docs e intercalar os assuntos e os


revisar uma semana depois. Se possível apresente/escreva o que aprendeu16 para outra
pessoa.

introdução a complexidade algorítmica - big oh

TLDR; Veja B e depois A. É importante iniciar a prática dos exercícios o mais rápido
possível e se necessário revise a sessão depois com mais contexto/prática.

Os melhores recursos sobre o assunto:

A. Duração média - Alvin Zablan - Youtube - Grátis


The Complete Guide to Big O Notation & Complexity Analysis for Algorithms: Part …
B. Duração curta - Neetcode - Youtube - Grátis Big-O Notation - For Coding Interviews
a. Ou/e o duração curta - HackerRank - Youtube - Grátis Big O Notation
C. Duração longa - Inside Code - Udemy - Pago Complexity Analysis
D. Duração média - Stanford (Tim Roughgarden) - Youtube - Grátis
2 1 The Gist 14 min
a. Do livro "Algorithms Illuminated (Part 1): The Basics"
E. Duração média - Steven Skiena - Youtube - Grátis
CSE373 --- Lecture 2: Asymptotic Notation (Fall 2021)
a. Do livro: "The Algorithm Design Manual"
F. Duração curta - William Fiset - Youtube - Grátis Introduction to Big-O
G. Duração média - Kantan Coding - Youtube - Grátis Big O Notation - Full Course

Minha sugestão é iniciar com a introdução rápida B e partir pra média A, depois avalie se
conseguiu entender razoavelmente bem, senão explore os demais recursos. O G17 é
extremamente recomendado.

😂
15
na verdade penso que pode ser simultâneamente, ou até revisando posterior a um exercício

🌝
16
como estou fazendo aqui recursivamente
17
introdução a algoritmos e estrutura de dados
TLDR; Veja D depois E. É importante iniciar a prática dos exercícios o mais rápido
possível e se necessário revise a sessão depois com mais contexto/prática.

É importante aprender o que é e como funciona:

A. Estruturas de dados
○ Array estática e array dinâmica (1d e 2d)
○ Lista encadeada (simples e duplamente encadeada)
○ Filas
○ Pilhas
○ Hash table / Set
○ Árvores
○ Trie
○ Grafos
■ lista adjacente
■ array 2d
■ sem formato claro
○ Heaps
B. Algoritmos
○ Pelo menos um algoritmo de sorting (ex: merge sort)
○ Busca binária
○ Recursividade
○ Greedy (gulosos)
○ Técnicas ou padrões
■ dois ponteiros
■ janela deslizante
■ monotonic stack
■ duas heaps
■ dois ponteiros rápido e lento para detecção de ciclo
○ BFS
○ DFS
■ pre-order
■ post-order
■ in-order
○ Dijkstra
○ Disjoint set
○ Programação dinâmica
○ Topological sort
Os melhores recursos sobre o assunto:
A. Duração longa - Neetcode - Pago https://neetcode.io/courses
○ E.D., algoritmos e padrões de código para entrevista
B. Duração média - William Fiset - Youtube - Grátis Data structures introduction
○ E.D. e alguns algoritmos
C. Duração longa - Kantan Coding - Youtube - Grátis Algorithmic Patterns: Intro
○ Só padrões de código
D. Duração curta - HackerRank - Youtube - Grátis
Data Structures: Balanced Parentheses in Expression
○ E.D.
E. Duração curta - HackerRank - Youtube - Grátis Algorithms: Recursion
○ Algoritmos
F. Duração longa - Stanford (Tim Roughgarden) - Youtube - Grátis
2 1 The Gist 14 min
○ Algoritmos
G. Duração longa - Steven Skiena - Youtube - Grátis
CSE373 --- Lecture 2: Asymptotic Notation (Fall 2021)
○ Algoritmos
H. Duração média - Alvin Zablan (freeCodeCamp.org) - Youtube - Grátis
Dynamic Programming - Learn to Solve Algorithmic Problems & Coding Challenges
○ Algoritmos especificamente programação dinâmica
I. Duração média - Alvin Zablan (freeCodeCamp.org) - Youtube - Grátis
Graph Algorithms for Technical Interviews - Full Course
○ Algoritmos especificamente grafos
J. Duração média - Alvin Zablan (freeCodeCamp.org) - Youtube - Grátis
Linked Lists for Technical Interviews - Full Course
○ Algoritmos específicos lista encadeada
K. Duração média - Alvin Zablan (freeCodeCamp.org) - Youtube - Grátis
Binary Tree Algorithms for Technical Interviews - Full Course
○ Algoritmos específicos árvores binárias
L. Duração longa - Alving Zablan - Pago https://structy.net/
○ Algoritmos e E.S.

Minha sugestão é iniciar com D e E, e partir para os exercícios. Se quiser uma introdução mais
elaborada e prática de lista encadeada (J), grafos (I), programação dinâmica (H) e árvores
binárias (K) recomendo muito os vídeos do Alvin Zablan, ele é muito didático.

Durante os exercícios revise B e C de acordo com a demanda do seu entendimento. É


importante iniciar a prática dos exercícios o mais rápido possível e se necessário revise
a sessão depois com mais contexto/prática.
prática de exercício
"Sonhe bem, pense bem, ajude alguém
A noite é fria, seu doutor, você não vem"

Se preparar para entrevistas de código lembra muito o ato de aprender uma nova língua, por
exemplo Russo, Japonês e etc. Os motivos:
● Não é sua linguagem materna (foge de sua rotina)
● Você pode aprender sozinha mas com suporte você pode acelerar o seu
desenvolvimento (recursos/vídeos)
● Tem gírias e jeitos (padrões de solução) difíceis de aprender sozinha
● Necessita muita prática (exercitar)

Conselhos para enquanto resolve os exercícios:


● Tente seguir um processo
● Converse/apresente (mesmo sozinha) sobre como resolver o problema
● Tente resolver sozinha, mas caso passe mais de 1h sem ideias busque a resposta na
Internet. Tem exercícios que dificilmente uma pessoa chegaria a solução sozinha em um
tempo razoável e o tempo é crucial para o preparo.
● Registre cada exercício que você fez capturando como resolveu, a categoria deste
problema e o refaça em um tempo futuro pra solidificar o aprendizado.
pratica de mock
"Por que que eu passo a vida inteira com medo de morrer?"

Simular a entrevista é muito importante. Basicamente você pode fazer a entrevista com uma
outra pessoa e ela faz de volta com você. Durante a simulação tente respeitar o tempo e o
formato da entrevista, observando para dar e receber feedback.

A plataforma Pramp oferece este mesmo modelo de treinar com outra pessoa. Você pode
escolher fazer entrevistas com pessoas treinando (amigas/amigos ou aleatório) de graça ou
pagar para ser entrevistado por profissionais.

A plataforma cobre os principais tipos de entrevista.


Uma vez agendado, você precisa se preparar para fazer a entrevista. O site oferece o material
para o preparo. Um ponto bom da plataforma é que você poderá cair com uma pessoa que não
fala sua língua materna então terão que usar o inglês, o que pode ser ótimo para treinar
também.

O meu conselho é fazer várias simulações desde o início da preparação. Elas são ótimas para
construir confiança e entender onde você precisa treinar mais18. Eu recomendo fazer 1x
por semana inicialmente e aumentar ou diminuir ao perceber como você reage a uma
simulação de entrevista.

18
ou revisar um conteúdo novamente ou mais profundo
recomendação de exercícios
"My name is 'I love you'
I come from the same place as everyone"

Todos os conselhos anteriores são excelentes mas sem prática eles não servem muito. Aqui é
onde você deve aplicar o que foi visto seguindo um roteiro de exercícios.

O primeiro passo que recomendo é ver uns 10 exercícios comuns utilizados em entrevistas.
Estes exercícios não servem para te aquecer mas para calibrar sobre o que esperar. E pode
ser que estes exercícios te assustem19 mas a ideia é ser exposto ao que é esperado, não se

🚀
desmotive os próximo parágrafo contém um plano para aprender como resolver eles e outros
.

Após ter tido um contato amplo com perguntas e a organização sugiro seguir o roteiro criado no
site Neetcode. Ele está formatado como uma árvore, agrupando os assuntos por categorias.

19
eles me assustaram inicialmente, por não entender alguns deles 😣
A ordem recomendada é iniciar pela raiz e ir descendo. Inicialmente resolvendo todos os
exercícios easy para cada categoria e ir avançando.

O legal desse roadmap20 é que ele tem a solução em vídeo para todos os problemas. A pessoa
é bem didática para resolver estes problemas. Então, caso fique muito tempo bloqueada
num exercício, olhe a solução ali mesmo.

São 150 exercícios, mas acredito que após completar metade você já se sentirá mais
preparada tanto para entrevistas quanto pra continuar praticando. E não se esqueça de

🍀
revisar, se comunicar e fazer mock interviews pra fazer desse processo mais natural e obter
sucesso! Boa sorte!!!

20
além de ser de graça e persistente, basta logar com seu gmail ou github

Você também pode gostar