Développeur C++
Créez une application pouvant être utilisée pour rechercher une chaîne de caractères dans des fichiers.
Entrée :
L’application recevra deux paramètres de ligne de commande. Le premier paramètre est un chemin vers un fichier ou un dossier, tandis que le deuxième paramètre est la chaîne de caractères à rechercher (longueur maximale de 128 caractères).
Sortie :
Affichez la sortie dans stdout sous forme de lignes au format <file>(<position>): <prefix>…<suffix>”.
<file> : nom d’un fichier contenant la chaîne de caractères
<position> : décalage dans le fichier où commence la chaîne de caractères (base zéro).
<prefix> : contient trois caractères avant la correspondance
<suffix> : contient trois caractères après la correspondance.
Lorsqu’il n’y a pas assez de caractères pour former le préfixe ou le suffixe complet (au début ou à la fin du fichier), utilisez autant de caractères que possible. Dans les préfixes et les suffixes, les tabulations doivent être affichées sous la forme « \t » et les nouvelles lignes sous la forme « \n ».
Supposez que le chemin peut pointer vers un seul fichier texte ou vers un répertoire contenant des fichiers et/ou d’autres dossiers (votre application doit pouvoir parcourir récursivement et traiter tous les fichiers des sous-répertoires). L’application doit tenir compte du fait que les fichiers peuvent être très volumineux (contraintes ou limites potentielles de mémoire). L’application ne doit planter pour aucune raison (assurez-vous que les exceptions sont traitées correctement, que les erreurs provenant des fonctions d’API sont gérées, etc.) et doit afficher des messages d’erreur significatifs lorsqu’un problème survient (par exemple, lorsqu’un nombre insuffisant d’arguments a été fourni, que le chemin d’entrée est invalide, etc.).
Remarque! La solution doit utiliser le multithreading pour traiter les données (au moins en théorie). Veuillez noter qu’une solution monothread peut être plus rapide dans cette analyse séquentielle, surtout sur des disques plus lents. Essayez de maximiser la vitesse et de comparer vos résultats avec une solution monothread.
Ce que nous évaluerons
La façon dont vous concevez votre solution vous appartient. Veuillez prendre le temps nécessaire pour bâtir votre solution. Il vaut toujours mieux prendre plus de temps et fournir une excellente solution que de prendre moins de temps et fournir une solution « correcte ». Nous utiliserons votre solution pour estimer votre niveau d’expérience en ingénierie logicielle. Une solution bien réalisée garantira une entrevue, un niveau de poste plus élevé et une offre salariale plus attrayante. Votre solution sera discutée en détail lors d’une entrevue.
Votre code source doit démontrer :
- votre style de programmation,
- l’utilisation des principes de la programmation orientée objet,
- les meilleures pratiques de programmation en C++,
- l’utilisation systématique de conventions de nommage,
- l’utilisation des bons commentaires aux bons endroits,
- une bonne structure de code,
- la gestion des états d’erreur et des exceptions,
- l’évitement des constructions dangereuses ou susceptibles de causer des erreurs,
- votre compréhension du « fonctionnement interne » de C++ et des fonctions standards (par exemple : le gaspillage de mémoire ou les opérations inutiles de copie de chaînes ou de mémoire, qu’elles soient implicites ou internes).
Évitez bien sûr les fuites de mémoire (par exemple, en raison d’une exception non gérée). Nous préférons voir l’utilisation des bibliothèques standard C++14, mais l’utilisation de Boost est également acceptable.
Une citation qui l’explique très bien : « Codez toujours comme si la personne qui finira par maintenir votre code était un psychopathe violent qui sait où vous habitez. » :-)
Envoyez le défi à challenge@joineset.com
En relevant ce défi, vous acceptez les conditions générales d’ESET et reconnaissez avoir pris connaissance de la politique de confidentialité d’ESET