Préouverture · toutes les fiches sont en lecture libre. Les ventes ouvriront prochainement.

Synthèse d’entretien

AlgofiTech & Data

Préparer un entretien : Business Analyst

  • Paris, France
  • Fiche mise à jour en septembre 2026
Entretiens : août 2025Contrat, durée et début du poste : non documentés

Recrutement historique. Cette synthèse ne constitue pas une offre d’emploi actuellement ouverte.

Fondateurs Avanttoi — Synthèse éditoriale

Toutes les fichesLecture gratuite — sans compte
Sommaire

Fondateurs Avanttoi — Synthèse éditoriale

Synthèse originale de faits rapportés dans un témoignage de candidat, non authentifié par Avanttoi. Les conseils et exercices sont créés par Avanttoi. Cette expérience n’a pas été vécue par les fondateurs et ne décrit pas nécessairement le recrutement actuel de l’entreprise.

Faits rapportés · un témoignage

Business AnalystParis, France

Période des entretiens · août 2025

  • Une présentation de l’entreprise et des fonctions de Business Analyst est rapportée.
  • Le candidat mentionne des tests Python et SQL d’une heure et demie.

Publication du témoignage : 1 octobre 2025. Le lien de provenance est conservé dans le dossier éditorial privé.

Sujets de ce recrutement

Questions et thèmes réellement rapportés

Les citations conservent la formulation publiée par le candidat. Les thèmes décrivent le sujet documenté lorsque l’énoncé complet n’est pas disponible. Les corrigés d’entraînement figurent dans la partie Avanttoi.

01 · Thème rapporté

Évaluation Python et SQL

Tests techniques

Les deux langages et la durée sont précisés ; aucun exercice ni jeu de données n’est publié.

02 · Question rapportée · citation

Connaissances du domaine bancaire

Entretien · tour exact non précisé

Que connaissez vous dans le domaine bancaire ?

Formulation publiée par le candidat ; aucun sous-domaine ni réponse attendue n’est indiqué.

Conseils originaux Avanttoi

Ce que vous pouvez travailler

Entraînez-vous sur des jeux de données courts où une jointure, un doublon ou une valeur absente change le résultat. En SQL, annoncez le grain de chaque table avant de joindre ; en Python, vérifiez les types et ajoutez des cas limites. Réservez du temps pour relire vos résultats dans une séance chronométrée. Pour la question bancaire, préparez un mécanisme simple et un exemple chiffré dont vous pouvez expliquer chaque étape et les hypothèses.

Exercices créés par Avanttoi

Entraînez-vous sur des cas originaux

Ces scénarios pédagogiques et leurs corrigés ne sont pas des questions posées par Algofi.

EXERCICE 01

Rapprocher deux tables SQL avec doublons et NULL

Exercice original Avanttoi. En PostgreSQL, entièrement exécutable via des CTE VALUES sans base externe. La table fictive releve contient (id_op, reference, montant) = (1,'A',100),(2,'A',100),(3,'B',50). La table fictive comptable contient (4,'A',100),(5,'C',75). Toutes les références sont non NULL dans ce jeu. Règle pédagogique : une même référence répétée avec le même montant dans releve est un doublon technique à éliminer avant jointure ; une même référence avec un montant différent entre les deux tables est un conflit à isoler, jamais à supprimer. Écrivez la requête complète de rapprochement par FULL OUTER JOIN.

Voir le corrigé et les critères

Corrigé pédagogique

WITH releve(id_op, reference, montant) AS (
  VALUES (1, 'A', 100), (2, 'A', 100), (3, 'B', 50)
),
comptable(id_op, reference, montant) AS (
  VALUES (4, 'A', 100), (5, 'C', 75)
),
releve_dedupe AS (
  SELECT DISTINCT reference, montant FROM releve
)
SELECT
  COALESCE(r.reference, c.reference) AS reference,
  r.montant AS montant_releve,
  c.montant AS montant_comptable,
  CASE
    WHEN r.reference IS NOT NULL AND c.reference IS NOT NULL AND r.montant = c.montant THEN 'rapproche'
    WHEN r.reference IS NOT NULL AND c.reference IS NOT NULL AND r.montant <> c.montant THEN 'ecart'
    WHEN r.reference IS NOT NULL AND c.reference IS NULL THEN 'releve_seul'
    ELSE 'comptable_seul'
  END AS status
FROM releve_dedupe r
FULL OUTER JOIN comptable c ON r.reference = c.reference;

La référence A apparaît deux fois dans releve avec le même montant 100 : c'est un doublon technique, éliminé par le DISTINCT dans releve_dedupe avant toute jointure, sinon la jointure multiplierait les correspondances. Sur ce jeu de données, le résultat exact est : A avec montant_releve 100, montant_comptable 100, status rapproche ; B avec montant_releve 50, montant_comptable NULL, status releve_seul ; C avec montant_releve NULL, montant_comptable 75, status comptable_seul. Une référence présente avec des montants différents dans les deux tables (non observée dans ce jeu) serait classée ecart et isolée pour vérification manuelle, jamais supprimée automatiquement. Le NULL du côté où une référence est absente signifie qu'aucune écriture correspondante n'existe, et ne doit jamais être interprété comme un montant de zéro.

Pour évaluer votre réponse

La requête complète est exécutable telle quelle via CTE VALUES sans table externe, le doublon A/A est dédupliqué avant jointure, les statuts rapproche/releve_seul/comptable_seul/ecart sont distincts et le cas ecart isole plutôt que supprime, et le résultat numérique exact (A rapproché 100/100, B releve_seul 50/NULL, C comptable_seul NULL/75) est donné.

EXERCICE 02

Consolider des montants en centimes entiers en Python

Exercice original Avanttoi. Trois écritures fictives valent 19,99 €, 5,01 € et 0,03 €, déjà connues en centimes entiers [1999, 501, 3]. Écrivez une fonction Python qui consolide une liste de montants en centimes entiers, sans jamais convertir en float même pour l'affichage, et formate le résultat en euros. Ajoutez des cas limites en commentaire ou en assertion.

Voir le corrigé et les critères

Corrigé pédagogique

def consolider_centimes(montants_centimes: list[int]) -> str:
    total = sum(montants_centimes)  # entier, aucune conversion en float
    signe = '-' if total < 0 else ''
    euros, centimes = divmod(abs(total), 100)
    return f"{signe}{euros},{centimes:02d} \u20ac"
assert consolider_centimes([1999, 501, 3]) == "25,03 \u20ac"
assert consolider_centimes([]) == "0,00 \u20ac"
assert consolider_centimes([-3]) == "-0,03 \u20ac"

Avec [1999, 501, 3], la somme entière vaut 1999+501+3 = 2503 centimes. Le formatage utilise divmod(abs(total), 100) pour séparer euros et centimes, avec un signe géré séparément pour les totaux négatifs (ou, si l'on préfère, on peut restreindre explicitement la fonction aux montants non négatifs en levant une erreur sur un total négatif). Aucune opération, y compris l'affichage, ne passe par un float : diviser ou multiplier par 100.0 réintroduirait une représentation binaire imprécise pour des valeurs comme 0.1, ce qui provoquerait des écarts d'arrondi cumulés invisibles à l'œil mais détectables sur de grands volumes d'écritures. La fonction ne doit jamais arrondir une entrée qui est déjà un entier de centimes : l'arrondi n'a de sens qu'au moment de la conversion initiale d'une source décimale externe, en amont de cette fonction.

Pour évaluer votre réponse

Le total en centimes vaut 2503 pour l'entrée [1999, 501, 3], aucune opération n'utilise de float y compris pour l'affichage, le formatage repose sur divmod, et les cas liste vide et montant négatif sont couverts par des assertions.

EXERCICE 03

Traiter un virement fictif sans double débit

Exercice original Avanttoi. Dans un système pédagogique fictif à deux comptes internes A et B, sans lien avec un réseau bancaire réel, le compte A a un solde de 50000 centimes et le compte B un solde de 10000 centimes. Un virement de 7500 centimes de A vers B est initié avec un identifiant operation_id, puis la même opération est rejouée une seconde fois avec le même operation_id. Décrivez, du point de vue du traitement des données, l'ordre des étapes, le traitement du doublon, et les notions de débit, crédit, atomicité, idempotence et trace, en donnant les soldes finaux.

Voir le corrigé et les critères

Corrigé pédagogique

Dans ce système pédagogique, une transaction atomique regroupe la réservation d’un operation_id unique, le contrôle du solde, le débit de A, le crédit de B et l’écriture de la trace. Une contrainte d’unicité sur operation_id empêche deux requêtes concurrentes de traiter la même opération. Un simple test « déjà présent ? » suivi d’un ajout séparé ne suffit pas. Le contrôle et la mise à jour du solde doivent également être protégés contre les opérations concurrentes.

Après validation, A vaut 50000 − 7500 = 42500 centimes et B vaut 10000 + 7500 = 17500 centimes. Le total reste 60000 centimes. Si une étape échoue avant validation de la transaction, aucun des deux soldes ni la trace de réussite n’est conservé. Lors du rejeu avec le même identifiant et les mêmes paramètres, le système renvoie le résultat déjà enregistré sans mouvement supplémentaire. Le même identifiant avec un autre montant ou destinataire est rejeté comme conflit.

L’atomicité concerne le caractère indivisible de l’opération ; l’idempotence concerne son rejeu. Cette règle est définie pour l’exercice et ne décrit pas un réseau bancaire réel.

Pour évaluer votre réponse

Les soldes finaux 42500 et 17500 sont corrects. Débit, crédit, identifiant unique et trace de réussite sont atomiques ; l’unicité résiste aux requêtes concurrentes. Le rejeu identique renvoie le résultat existant et un rejeu aux paramètres différents est rejeté.

Plan proposé par Avanttoi

Une séance de préparation ciblée

  1. 15 minutes : relisez les sujets rapportés et listez les notions que vous savez expliquer avec un exemple précis.
  2. 45 minutes : réalisez les trois exercices Avanttoi associés à cette fiche, puis comparez votre réponse aux critères et aux corrigés.
  3. 15 minutes : présentez à voix haute une réponse technique et une expérience réelle ; notez les hypothèses et informations à confirmer.
Périmètre de la fiche

Les informations encore inconnues

  • Ce compte rendu décrit un recrutement passé, déclaré par son auteur ; il ne constitue pas une validation indépendante ni le processus actuel officiel.
  • La référence de l’offre, la durée du contrat et le mois de prise de poste ne sont pas documentés. Le mois affiché est celui de l’entretien.
  • Les sujets rapportés ne donnent pas le barème ni un corrigé officiel. Les scénarios et réponses Avanttoi ci-dessous sont des créations pédagogiques.
  • Le niveau Junior n’est pas attesté dans l’intitulé du poste et n’est pas ajouté.

À demander à votre recruteur

  • Quelle est la référence exacte du poste, son équipe et son périmètre géographique ?
  • Quel type de contrat, quelle durée et quelle date de début sont prévus pour cette candidature ?
  • Quels formats, outils autorisés et étapes sont prévus pour cette session de recrutement ?

Les avis des lecteurs

Aucun avis publié pour cette fiche.