Pelo visto você está participando de nosso processo de seleção… excelente hein!

Este é um processo de seleção especial e queremos muito encontrar os próximos estagiários para trabalhar e se divertir conosco.

Neste processos queremos identificar sua coragem em enfrentar o problema, sua capacidade de buscar uma solução (na sua cabeça, no google, onde puder) e principalmente sua disposição para aprender.

1 – Teste de algoritmo básico com HackerRank

Você fará duas etapas de testes usando o HackerRank, que é uma plataforma para testes de programação online bem legal. Para começar a primeira etapa:

  1. Crie sua conta no HackerRank e responda nosso email de boas vindas com o link para seu perfil;
  2. Acesse o Contest App Masters PHP Q4/18 e realize os quatro desafios (imaginamos que tudo deve levar menos de 30 minutos), comece pelo “Solve Me First” para entender como funciona a ferramenta;
  3. Ao concluir os 4 desafios nos avise pelo email.

Algumas dicas rápidas:

  • Ao criar sua conta, editando seu perfil, você pode selecionar o português como língua, e talvez algumas coisas fiquem em português;
  • Use um tradutor online para traduzir os problemas se precisar;
  • Para cada desafio você pode selecionar sua linguagem de programação preferida, recomendamos PHP;
  • Os desafios já vêm com uma parte do código pronta, deixando você livre para implementar somente a parte da solução mesmo;
  • Se tiver alguma duvida sobre o HackerRank ou o processo de seleção, fale conosco por whatsapp.

Prazo para concluir esta primeira etapa: 3 dias corridos

2 – Teste de PHP

Para os desafios desta segunda etapa nossa dica é que busque no google como fazer cada uma das partes que não souber ainda. Queremos ver sua capacidade de implementar algo que nunca tenha feito, seguindo a especificação passada.

Concluindo esta etapa e ficando entre os três primeiros colocados, você ganhará uma super caneca. Nas demais posições ganhará dois adesivos.

Especificação do projeto

Precisamos que desenvolva uma API simples que basicamente irá receber listas de emails, validar os endereços e salvar os válidos em arquivos, depois simular um envio de email para os endereços salvos. Não haverá banco de dados neste projeto, tudo deverá ser salvo em arquivos de texto.

  1. O projeto deve ser implementado usando Lumen;
  2. Deverá existir uma rota /emails/add/ que receberá um post com apenas um campo “emails”, contendo uma lista de emails (exemplo);
  3. Esta rota deverá separar os emails e validar cada um deles;
  4. Os emails válidos deverão ser incluídos no arquivo /emails.txt, onde não deverão se repetir;
  5. Adicionalmente, para cada post recebido deverá ser criado um arquivo /emails_{timestamp}.txt, onde ficarão os emails válidos por ordem alfabética, recebidos naquele momento/timestamp;
  6. Deverá existir uma rota /emails/send/ que receberá um post contendo “subject” e “body“;
  7. Nesta rota a API deverá simular o envio do email com o assunto e conteúdo recebidos pelo post (subject e body) para todos os endereços de email.txt (como descrito abaixo);
  8. Após o envio simulado para todos os emails, a rota deverá retornar um JSON com as seguintes informações: {emails: X, emails_sent: Y, emails_fail: Z} informando as respectivas quantidades;

A classe Email:

  1. Deverá existir uma classe Email (não pode ser a mesma do controller) com um método estático filter, que recebe uma string e retorna um array de emails;
  2. Na classe Email deverá existir um segundo método estático sort, que recebe um array de emails e retorna o array por ordem alfabética;
  3. Deverá existir um método de instância send() que irá realizar o envio simulado daquele email.

Envio simulado dos emails

Não é necessário enviar nenhum email usando SMTP, vamos apenas simular que alguns foram enviados ou não, registrar isso e retornar para o utilizador.

  1. Instalar o pacote fzaninotto/Faker;
  2. Para o envio, para cada email da lista de emails criar uma nova instância de Email usando $email = new Email($enderecoEmail);
  3. Cada instância e Email irá simular um envio chamando o método $email->send() que deverá ser implementado;
  4. O método send deverá chamar $faker->boolean que irá “sortear” (true ou false), para simular que o email foi enviado ou não;
  5. Caso o email seja enviado, usar monolog para adicionar um registro em sent.log contendo a hora, endereço e assunto;
  6. Caso não seja enviado, adicionar um registro em fail.log contendo a hora, endereço e assunto;

Em caso de duvidas envie suas perguntas no canal #app_masters do DevJf, estamos lá e te ajudaremos no que for possível.

Prazo para concluir esta segunda etapa: 3 dias corridos.

3 – Entrevista por WhatsApp

Nesta etapa iremos enviar algumas perguntas simples pelo WhatsApp para entender se você está no momento certo.

4 – Projeto prático e seleção final

Selecionaremos alguns candidatos para ficarem dois ou três dias na App Masters participando de projetos simples (não comerciais), mas práticos, como etapa final do nosso processo.

 

 

Os candidatos selecionados serão convidados para comer um hambúrguer conosco e poderão começar o estágio logo no dia seguinte. 🙂