Processo Seletivo
Entenda as etapas do processo seletivo para vagas remotas em empresas estrangeiras.
Quando você é chamado para uma entrevista, você pode esperar que o processo tenha pelo menos três fases. É importante se preparar adequadamente para cada uma delas.
Entrevista inicial com RH para entender suas experiências e objetivos
Avaliação das suas habilidades técnicas através de testes e desafios
Conversa com hiring manager e/ou fundadores para avaliar fit cultural
Verificação de referências com ex-colegas e líderes (não tão comum)
Proposta formal de contratação
Espere que as entrevistas sejam totalmente em inglês (mesmo com brasileiros te entrevistando), prepare-se para isso.
Perguntas comuns nessa etapa
Dicas
Possíveis desafios nessa etapa
Tipos de testes técnicos
Existem diferentes formatos de testes técnicos que as empresas podem utilizar para avaliar suas habilidades. É importante se preparar para cada um deles.
Teste com tempo limitado
Geralmente as empresas utilizam alguma plataforma como o HackerRank. Antes de fazer o teste, teste a plataforma, veja as features disponíveis e depois de entender como ela funciona, já pode começar a fazer o teste.
Take home project
Leia bem os requisitos do desafio antes de começar a resolver, caso tenha alguma dúvida, mande mensagem pro recrutador pra entender melhor o que é esperado.
Conceitos fundamentais
Algoritmos e Estruturas de Dados
Entenda os principais algoritmos de ordenação, busca e manipulação de dados, além das estruturas como arrays, listas, árvores e grafos.
Complexidade de Tempo e Espaço
Saiba analisar a eficiência de algoritmos em termos de tempo de execução e uso de memória (notação Big O).
Manipulação de Dados
Conheça técnicas para processar, filtrar e transformar dados de forma eficiente.
Resolução de Problemas
Desenvolva a habilidade de decompor problemas complexos em partes menores e mais gerenciáveis.
Plano de estudos
- • Busca binária e suas variações
- • Algoritmos de ordenação (QuickSort, MergeSort)
- • Programação dinâmica
- • Algoritmos gulosos (Greedy)
- • Hashmaps e Sets
- • Árvores (Binária, BST, AVL)
- • Heaps e Filas de Prioridade
- • Grafos e algoritmos de travessia
- • Two pointers e sliding window
- • Divide and conquer
- • Backtracking
- • Memoização e tabulation
- • Manipulação do DOM
- • Gerenciamento de estado
- • Renderização e performance
- • Acessibilidade e responsividade
- • SEO e HTML semântico
1. Comunicação clara do seu raciocínio.
2. Validação de inputs e tratamento de edge cases.
3. Testes e verificação da solução.
4. Refatoração e melhoria de código.
Dicas para se preparar
Para vagas em startups mais consolidadas recomendo estudar algoritmos e estrutura de dados. Recomendo este livro de algoritmos, o canal do Neetcode e a própria plataforma do Leetcode.
Eu também tenho um site com conteúdos visuais pros algoritmos mais comuns em entrevistas, caso queira dar uma olhada, é o Standout Dev.
É possível que vagas de front cobrem também, mas recomendo focar em exercícios práticos envolvendo HTML, CSS, JS/TS puro e também treinar frameworks como React e TailwindCSS. Recomendo usar o Great Frontend pra treinar.
Dicas para Take Home Projects
Coloque-se no lugar da pessoa que vai revisar o seu teste, o que você gostaria que tivesse na solução de um candidato?
Documentação clara
Inclua um README detalhado com instruções de instalação, execução e testes do projeto.
Qualidade de código
Mantenha o código limpo, bem organizado e seguindo boas práticas de desenvolvimento.
Arquitetura sólida
Implemente uma arquitetura bem estruturada com separação clara de responsabilidades.
Testes automatizados
Inclua testes unitários e de integração para demonstrar a qualidade do seu código.
O que incluir no seu projeto
Inclua arquitetura do projeto, tradeoffs, decisões de design, racional da escolha das tecnologias, como executar o projeto, como rodar os testes e link para um vídeo de demo.
Demonstre que você se preocupa com a qualidade do código.
Facilite a execução do projeto para quem vai avaliar.
Mantenha o código organizado e bem estruturado.
Priorize código de fácil entendimento, com nomes auto-explicativos.
Dicas importantes
Dicas para Live Coding
O live coding é uma das etapas mais desafiadoras do processo seletivo. É importante se preparar adequadamente e manter a calma durante a entrevista.
Comunicação clara
Explique seu raciocínio em voz alta enquanto resolve o problema, compartilhando sua linha de pensamento.
Abordagem estruturada
Divida o problema em partes menores e resolva cada uma delas de forma metódica e organizada.
Estruturas de dados adequadas
Escolha as estruturas de dados mais apropriadas para o problema, justificando sua escolha.
Análise de complexidade
Analise a complexidade de tempo e espaço da sua solução e proponha otimizações quando possível.
Passos importantes
Exemplos de comunicação
"For this challenge I believe using hashmaps is the best way forward because it has O(1) lookup time and it's pretty straightforward to implement."
"I'll use this hashmap to store the numbers and their indices. Then, I'll iterate through the array, and for each element, I'll check if the complement (target - current element) exists in the hashmap. If it does, I'll return the indices of the two numbers. If it doesn't, I'll add the current element and its index to the hashmap and continue until the pair is found."
Pontos a considerar
- • Complexidade de tempo
- • Complexidade de espaço
- • Boas práticas de linguagem
- • Legibilidade do código
- • Extensibilidade
- • Reusabilidade
- • Testabilidade
- • Acessibilidade
- • Performance
- • Responsividade
- • SEO
- • Usabilidade
- • Componentização
- • Reusabilidade
- • Extensibilidade
System Design
Para essa fase, recomendo estudar boas práticas de arquitetura de software e design patterns. Além disso, é importante se aprofundar em diversos conceitos fundamentais.
Cloud Computing
Geralmente não é obrigatório saber tudo sobre AWS por exemplo, mas é bom saber os conceitos que são base de todas as soluções cloud.
Escalabilidade
Entenda como escalar sistemas horizontalmente e verticalmente, e quando usar cada abordagem.
Performance
Conheça técnicas para melhorar a performance de sistemas, como caching, otimização de consultas, etc.
Banco de dados
Entenda diferentes tipos de bancos de dados (SQL, NoSQL) e quando usar cada um.
Plano de estudos
- • Consistência forte, eventual e causal
- • Teorema CAP
- • Arquitetura baseada em eventos
- • CQRS (Command Query Responsibility Segregation)
- • Arquitetura serverless
- • Padrões de API gateway
- • Service discovery
- • Cache distribuído (Redis, Memcached)
- • Mensageria (Kafka, RabbitMQ)
- • Conteinerização (Docker) e orquestração (Kubernetes)
- • Infrastructure as Code (Terraform, CloudFormation)
- • Observabilidade (logs, monitoramento, tracing)
1. Relação custo-benefício, seja em termos de tempo de desenvolvimento, custos, escalabilidade, performance, etc.
2. Considerações sobre time-to-market (quanto antes a solução estiver no ar com clientes testando, melhor, a iteração rápida é essencial)
3. Designs flexíveis que se adaptam às necessidades do negócio (é muito comum em startups criar MVPs com uma solução em mente mas ter que mudar completamente com o feedback do mercado)
4. Soluções simples que minimizam o trabalho de manutenção
Na hora da entrevista
Recomendo estudar o Designing Data-Intensive Applications e o System Design Interview pra essa fase.
Esse site tem uma lista com os 10 casos mais comuns de system design e os racionais de cada uma dessas soluções.
Perguntas comuns nessa etapa
Dicas
Geralmente te pedem para fornecer alguns contatos de ex-colegas e líderes diretos.
Antes de fornecer esses contatos, recomendo conversar com eles para saber se tudo bem mandar o contato deles.
1. Leia a oferta com calma, não se sinta pressionado a aceitar logo de cara, principalmente se tem outros processos em andamento que queira ir até o final.
2. Caso tenha outros processos em andamento, recomendo alinhar com o recrutador sobre o status de cada processo e o prazo de resposta que você tem para dar aceitar ou não a oferta.