Saudações, colegas desenvolvedores!
Ao longo da minha carreira, conduzi mais de 100 entrevistas com desenvolvedores de todos os níveis, desde desenvolvedores juniores até veteranos experientes. E sabe de uma coisa? Nesse período, elaborei um conjunto de 10 perguntas complicadas que coloco a cada novo candidato.
Por que? Bem, é simples: estas questões permitem-me ir além da mera avaliação das competências técnicas de alguém. Eles se aprofundam em seu processo de pensamento, abordagem de resolução de problemas, habilidades de trabalho em equipe e outras qualidades cruciais.
Você está pronto para esta batalha intelectual? Então preparem-se, porque essas perguntas não são para os fracos de coração!
Suponha que você esteja implementando um sistema de edição de periódico onde os editores possam editar artigos no painel de administração. Como você evitaria que dois editores editassem simultaneamente o mesmo artigo e substituíssem as alterações um do outro?
Quais são os princípios da implantação com tempo de inatividade zero, uma abordagem que implanta um aplicativo sem tempo de inatividade do serviço? Como isso é conseguido?
Cite aspectos de sua estrutura preferida que você não gosta ou que não funcionam da maneira que você gostaria. Explique como e onde surgem estas questões e como podem ser melhoradas.
4. Lidando com Cron Jobs de longa duração
O que poderia acontecer se o seu cron job, que é executado a cada minuto, começar a levar mais de um minuto para ser executado? Como isto pode ser evitado?
5. Desnormalizando dados em bancos de dados
Você já encontrou a necessidade de desnormalizar dados em um banco de dados? Em caso afirmativo, que problema você estava tentando resolver, que desafios enfrentou e como poderia ter sido feito melhor?
6. Simulação de chamadas externas em testes
Se você escreve testes, como contornar o problema de chamadas externas feitas pelo código que está testando? Considere o cenário onde as chamadas externas são proibidas no CI (integração contínua). Por que isso é uma boa prática?
7. Sincronizando alterações de e-mail com sistemas externos
Suponha que seu sistema implemente a funcionalidade de alteração de e-mail. No entanto, o email também é armazenado em um sistema externo, como um processador de pagamentos, que envia emails aos usuários (mas os usuários não interagem diretamente com ele). Como você implementaria a sincronização de e-mail com o sistema externo?
Como você aprende sobre erros que ocorrem na produção? Você confia em relatórios de usuários ou possui mecanismos automatizados?
Como você projetaria um aplicativo de bate-papo simples? Você pode perguntar ao engenheiro de back-end sobre a parte de back-end e ao engenheiro de front-end sobre a parte de front-end. Pode haver muitos ramos nesta conversa.
10. Isolando testes em um ambiente multiusuário
Como é garantido o isolamento dos testes quando vários testes são executados simultaneamente e acessam o banco de dados, potencialmente modificando-o? Se sua estrutura não oferece isolamento, como você a implementaria ou melhoraria?
Dicas adicionais:
Incentive o candidato a elaborar seu processo de pensamento e o raciocínio por trás de suas respostas.
Avalie suas habilidades de resolução de problemas, capacidade de pensar criticamente e conhecimento de tecnologias relevantes.
Avalie suas habilidades de comunicação e colaboração durante a entrevista.