Escolar Documentos
Profissional Documentos
Cultura Documentos
Preparação para Entrevistas de Programação
Preparação para Entrevistas de Programação
ENTREVISTAS DE
PROGRAMAÇÃO
autor: github.com/leandromoreira
——————————————————————————————————————————
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 1 of 20
:
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;
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 2 of 20
:
○ á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
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.
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 3 of 20
:
Editar com o app Documentos
Faça ajustes, deixe comentários e compartilhe
com outras pessoas para editar
simultaneamente.
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.
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 4 of 20
:
Fonte: https://interviewnoodle.com/preparing-for-the-facebook-interview-a-brutally-honest-guide-
8e09f3b8a054
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 medium[4] que
cobrem vários algoritmos e estruturas de dados do leetcode.com.
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 5 of 20
:
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
Laakmann[5].
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 6 of 20
:
Fonte para esquemas/templates de preparo para coding e soft skills.
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 7 of 20
:
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
questionar[6].
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
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
● https://www.uber.com/pt-BR/blog/coding-interview-dicas-para-o-processo-seletivo-de-
engenharia-da-uber/
Colabore com a pessoa entrevistando como se fosse um par de trabalho[7]. Converse até
mesmo papo fiado faz bem mas tenha noção do seu tempo, ele é curto.
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 8 of 20
:
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.
Um exemplo:
● [entendi] Ouvi sobre TCP/IP antes da faculdade e entendi o básico que era:
○ Um conjunto de protocolos de rede para garantir[8] 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 disciplinei[9] 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 pessoas[10] têm a tendência de abrir muitas "abas de
conhecimento" mas neste momento o importante mesmo é o foco; um assunto por vez.
repetição espaçada
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 9 of 20
:
Eu criei um sistema[11] no qual registro o problema que resolvi, quantas vezes, categoria, como
resolvi e etc. E para memorizar o aprendizado, resolvo problemas "velhos" a cada X[12] 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.
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 10 of 20
:
O meu conhecimento de TCP/IP foi aumentando[13] à medida que dedicava mais e mais ao
assunto, mas não se engane continuo ignorante.
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 11 of 20
:
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"
A. Duração média - Alvin Zablan - Youtube - Grátis The Complete Guide to Big O
Notation & Complexity Analysis for Algorithms: Part 1 of 2
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 G[17] é
extremamente recomendado.
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 12 of 20
:
É 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
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 13 of 20
:
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.
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)
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 14 of 20
:
● 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.
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 15 of 20
:
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.
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 16 of 20
:
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 mais[18]. Eu recomendo fazer 1x por
semana inicialmente e aumentar ou diminuir ao perceber como você reage a uma simulação de
entrevista.
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
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 17 of 20
:
estes exercícios te assustem[19] 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.
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 18 of 20
:
O legal desse roadmap[20] é 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!!!
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 19 of 20
:
[18] ou revisar um conteúdo novamente ou mais profundo
[19] eles me assustaram inicialmente, por não entender alguns deles
[20] além de ser de graça e persistente, basta logar com seu gmail ou github
https://docs.google.com/document/d/1gRL6ILI2XI8_eFGCrr-Q_ZxkdcnzECa-WN0kX0GVIDc/mobilebasic 2024-01-24, 7 19 AM
Page 20 of 20
: