Ce projet a pour objectif d'évaluer les compétences intrinsèques des candidats de Automata pour intervenir sur nos projets Back-end Java de manière autonome.
Les compétences mesurées sont :
- Utilisation de Maven en multi module projects
- Compréhension des cycles de vies des produits
- Réalisation de tests unitaires et d'intégrations
- Réalisation d'un code de qualité
- Investissement dans des erreurs simples et moyennes
- Développement d'une feature complète
Nous vous demandons de faire attention à la qualité et de réaliser ces tâches avec la qualité d'un produit qui doit aller en production. La scalabilité et la maintenabilité sont des critères importants.
Afin de réaliser le test, veuillez forker le projet puis nous donner accès à ce repository avec vos modifications.
Pour rendre le projet, veuillez notifier par mail les personnes suivantes :
- Rémi GELIBERT : remi.gelibert@akt.io
- Alexis SEGURA : alexis.segura@akt.io
- Dorian HENAULT : dorian.henault@akt.io
- Damien LENCI : damien.lenci@akt.io
Vous venez d'être embauché en tant que développeur dans une entreprise qui propose une application de type réseau social : AutoMeta.
Le projet a été implémenté par des stagiaires. L'entreprise vous a embauché pour terminer le MVP et vérifier que le projet est de bonne qualité. La direction compte beaucoup sur vous, en particulier le CTO.
On attend de vous un regard critique sur le projet. Il y a de nombreux problèmes : dans le code, dans les POM, dans les dépendances, au niveau de la sécurité...
Le projet est un projet Maven multi-modules composé de :
- Module :
automata-commons(contient des éléments de la couche commune). - Module :
algorithm-library(contient des algorithmes utiles). - Module :
user-service(API pour la ressource user). - Module :
post-service(API pour la ressource post).
user-service et post-service sont déployés de manière indépendante et ont des bases de données séparées.
La direction d'AutoMeta attend un backend scalable, capable de traiter plusieurs centaines de requêtes par minutes.
L'objectif étant de juger votre savoir faire, nous vous demandons de garder l'esprit de qualité de développement.
Toutes vos analyses et remarques nous intéressent. Vous pouvez écrire dans le fichier doc.md du projet. Si vous bloquez sur une question, vous pouvez donner des explications dans ce fichier.
Vos missions sont :
- Prenez en main le projet.
- Vous débutez par le projet
algorithm-library.- Implémentez l'algorithme de décryption.
- Vous continuez par le
user-service.- Vous remarquez que les mots de passe des utilisateurs sont stockés en clair dans la base. Encryptez-les. Votre CTO souhaite que le service d'encryption soit un bean dans le context Spring.
- Vous remarquez qu'aucune verification n'est faite sur les données de l'utilisateur alors que tous les champs sont obligatoires. Modifiez le code pour vérifier le format des données. Réutilisez un maximum de l'existant.
- Lancez le service en local et verifiez que vous arrivez bien à accéder au Swagger.
- Vous continuez sur le
post-service.- Faites compiler le projet (
mvn compileOK). - Faites le nécessaire pour que les deux endpoints du service soient fonctionnels.
- BONUS : Ajoutez un endpoint REST pour supprimer un post par son ID. La suppresion doit être logique et non physique.
- Lancez le service en local et vérifiez que vous arrivez bien à accéder au Swagger.
- Faites compiler le projet (
- A cette étape, le CTO vous demande une démonstration.
- Tous les projets doivent compiler (
mvn compileOK) dans le dossier parent. - Tous les tests (unitaires et d'intégration) doivent passer avec la commande (
mvn verifyOK). - Vous devez lui montrer que les Swagger fonctionnent correctement sur
user-serviceetpost-service.
- Tous les projets doivent compiler (
- La direction espère que le CTO est content de votre démonstration. Ce dernier a des questions à vous poser (répondez
dans le fichier doc.md en quelques lignes, soyez bref, vous pouvez faire une liste de points ou des pros/cons). (PAS
DE CODE ICI)
- Pensez-vous que la structure du projet est la bonne (projet multi-modules maven) ? Pourquoi ?
- La direction souhaite envoyer une notification lorsqu'un post est créé. Pour cela, il suggère d'ajouter
un
notification-service. Comment est-ce que vous implémenteriez le trigger qui permettrait d'envoyer une notification lorsqu'un post est crée ? Le CTO n'impose aucune contrainte sur les technologies, temps de développement ...
- BONUS : Ajoutez un algorithme de permutation.
- Cet algorithme doit pouvoir permuter 2 à 2 les éléments de la chaîne de caractère
- Si le nombre de caractère est impaire, nous devons appliquer l'algorithme existant (ROT13) sur ce dernier caractère.
- Par exemple : KAYA devient AKAY (K <-> A et Y <-> A)
- Exemple avec Impair : KAYAK devient AKAYX
- BONUS : Un concurrent d'AutoMeta aurait tout intérer à connaitre le nombre d'utilisateurs du réseau social. Votre CTO
ne souhaite pas que cette information fuite.
Une rapide analyse de
user-servicepermet de détecter le problème. Résolvez-le. - BONUS : Vous avez entendu dire que les virtual threads de Java 21 pouvaient améliorer les performances de vos services. Configurez le projet pour que lorsque les requêtes utilisateurs arrivent, elles soient traitées par des virtual threads.
The objective of this project is to evaluate the intrinsic skills of Automata's candidates to intervene on our Java Back-end projects in an autonomous manner.
The skills measured are:
- Use of Maven in multi-module projects
- Understanding of product life cycles
- Performing unit and integration tests
- Achieving quality code
- Investing in simple and medium errors
- Development of a complete feature
We ask you to pay attention to the quality of the product and to perform this task with the quality of a product that has to go into production. Scalability and maintainability are important criteria.
In order to perform the test, please *fork the project and give us access to this repository with your modifications.
To make the project, please notify by mail the following people:
- Rémi GELIBERT : remi.gelibert@akt.io
- Alexis SEGURA : alexis.segura@akt.io
- Dorian HENAULT : dorian.henault@akt.io
- Damien LENCI : damien.lenci@akt.io
You've just been hired as a developer at a company offering a social networking application: AutoMeta.
The project has been implemented by interns. The company has hired you to complete the MVP and check that the project is of good quality. Management is relying heavily on you, especially the CTO.
You're expected to take a critical look at the project. There are many problems: in the code, in the POM, in dependencies, in security...
The project is a multi-modules Maven project made up of :
- Module :
automata-commons(contains elements of the common layer). - Module :
algorithm-library(contains useful algorithms). - Module :
user-service(API for the user resource). - Module :
post-service(API for the post resource).
user-service and post-service are deployed independently and have separate databases.
AutoMeta's management expects a scalable backend, capable of handling several hundred requests per minute.
As our aim is to judge your know-how, we ask you to keep in mind the quality of your development.
We are interested in all your analyses and comments. You can write in the project's doc.md file. If you get stuck on a question, you can provide explanations in this file.
Your tasks are :
- Take charge of the project.
- You start with the
algorithm-libraryproject.- Implement the decryption algorithm.
- You continue with the
user-service.- You notice that user passwords are stored in clear text in the database. Encrypt them. Your CTO wants the encryption service to be a bean in the Spring context.
- You notice that no verification is performed on user data, even though all fields are mandatory. Modify the code to check the data format. Reuse as much of the existing code as possible.
- Run the service locally and check that you can access the Swagger.
- Continue with the
post-service.- Compile the project (
mvn compileOK). - Make sure both service endpoints are functional.
- BONUS: Add a REST endpoint to delete a post by its ID. The deletion must be logical, not physical.
- Run the service locally and check that you can access the Swagger.
- Compile the project (
- At this stage, the CTO asks for a demonstration.
- All projects must compile (
mvn compileOK) in the parent folder. - All tests (unit and integration) must pass with the command (
mvn verifyOK). - You must show that Swagger works correctly on
user-serviceandpost-service.
- All projects must compile (
- Management hopes the CTO is happy with your demonstration. He has some questions for you (answer them in the doc.md
file in a few lines, be brief, you can make a list of points or pros/cons). (NO CODE HERE)
- Do you think the project structure is the right one (multi-module maven project)? Why or why not?
- Management wants to send a notification when a post is created. To do this, they suggest adding
a
notification-service. How would you implement the trigger to send a notification when a post is created? The CTO imposes no constraints on technology, development time, etc.
- BONUS: Add a permutation algorithm.
- This algorithm must be able to permute 2 by 2 the elements of the character string
- If the number of characters is odd, we must apply the existing algorithm (ROT13) to the last character.
- For example: KAYA becomes AKAY (K <-> A and Y <-> A)
- Example with Odd: KAYAK becomes AKAYX
- BONUS: A competitor of AutoMeta's would like to know the number of users of the social network. Your CTO doesn't want
this information to leak out.
A quick
user-serviceanalysis detects the problem. Solve it. - BONUS: You've heard that Java 21's virtual threads can improve the performance of your services. Configure your project so that when user requests arrive, they are processed by virtual threads.

