Le rituel du lancement, prêt à coller depuis ton téléphone. Chaque commentaire a son bouton Copier.
Rythme : Mardi = Défi (11h30) · Mercredi + Vendredi = Offre / besoin en direct (11h30, auto-send LinkedIn) · Jeudi = Jeu (12h30). Pour Défi et Jeu : le 1er commentaire (indice) dans la foulée (T0), une relance à +2h, la réponse d'ingé le lendemain (J+1) même heure - en version complète ou courte, au choix. Pour les Offres : pas de relance ni de réponse, juste le 1er commentaire (lien de l'offre) à coller manuellement à la publication. Défi et Offre sont auto-envoyés via le planificateur LinkedIn (Hootsuite) : charge-les la veille à 16h (rappel dédié dans l'agenda Outlook). Horaires en heure de Paris - à l'étranger, poste à l'équivalent local (ou garde l'heure de Paris, au choix).
💬 Réponses aux commentaires
Réagis dans l'heure, like les bonnes réponses. Ton : sharp, vrai, jamais corporate.
✅ Bonne réponse
Exactement ça 👌 Et sans filet en plus. C'est le réflexe qu'on aime voir.
Pile poil. Tu mérites ton café du mardi ☕
Dans le mille. Tu compiles ça dans ta tête en 2 secondes, nous on appelle ça un bon signe 👀
🔥 Bonne réponse + profil à matcher (puis DM)
Réponse propre ET l'explication qui va avec : exactement le profil qu'on cherche. Je te glisse un mot en privé 👀
Là tu réponds comme quelqu'un qui l'a déjà vu casser en prod. On a des postes où ça compte, je t'écris.
🤏 Presque / partiel
Tu chauffes 🔥 Il te manque juste le pourquoi exact, creuse encore deux minutes.
Bonne intuition, mais c'est pas tout à fait la racine. Regarde un cran plus bas, t'y es presque.
🤔 Faux mais bon raisonnement
Pas la bonne réponse, mais le raisonnement est sain, et c'est ça qui compte ici. Continue.
Faux sur la conclusion, juste sur la démarche. On préfère ça à une bonne réponse récitée par cœur 😉
❌ À côté (bienveillant)
Pas cette fois 😅 mais c'est tout l'intérêt : la réponse d'ingé tombe demain même heure, tu vas kiffer.
Là on s'éloigne un peu. Garde un œil, je lâche la solution demain et ça va faire tilt.
😏 Wrong Answers Only (joue le jeu)
Magnifique. Horrible, mais magnifique 👏
Ça, c'est le genre d'idée qui fait pleurer un SRE à 3h du matin. Validé pour le pire 🏆
Pire réponse, meilleur commentaire. On garde 😄
💬 Question / débat
Très bonne question, et y'a pas de réponse unique, c'est tout le sel. Toi tu ferais quoi en prod ?
Là tu touches un vrai débat d'ingé. Argumente, on adore se faire challenger 👀
👋 Faire participer / relancer un hésitant
Allez, tente même si t'es pas sûr : c'est comme ça qu'on apprend, et personne se moque ici 💪
T'as une intuition ? Balance, même à moitié. On creuse ensemble.
⚡ Réagir vite (golden hour, ultra court)
👀
Bien vu.
Ça sent l'expérience, ça 👌
Intéressant, continue.
Haha exactement.
🟥 Défi #01mardi 30 juin · 11h30
La boucle qui ne s'arrête jamais
cpp · Moyen
POST mardi 30 juin · 11h30Le post (programmé LinkedIn)
🔔 🟥 LE DÉFI DU MARDI #01
On a tous écrit cette boucle un jour. Elle parcourt un buffer de ticks à l'envers, du plus récent au plus ancien. Revue de code : OK. Tests sur 3 éléments : OK.
En prod, sur un gros buffer : boucle infinie, puis lecture hors limites. Un mardi à 9h02, évidemment.
Le bug tient en un seul caractère de type, il est sous tes yeux dans l'image 👇
Tu le vois ? Balance ta réponse en commentaire, on épingle la première bonne. Indice juste en dessous.
Réponse demain en commentaire 🫵🏻
#cpp #lowlatency #cppfr #financedemarche #xraystrading
T0 mardi 30 juin · 11h301er commentaire (indice)
Indice 👀 De quel type est i ? Et qu'est-ce qu'un std::size_t ne peut JAMAIS valoir ?
+2h mardi 30 juin · 10h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 mercredi 1 juillet · 11h30Réponse d'ingé (complète)
La réponse du #01 🟥
std::size_t est NON SIGNÉ : i >= 0 est toujours vrai, un unsigned ne peut pas être négatif. Quand i vaut 0, --i ne donne pas -1, il wrap à SIZE_MAX (18 446 744 073 709 551 615 en 64 bits). On lit ticks[SIZE_MAX] (hors limites) et la condition de sortie ne casse jamais.
On l'a compilé et exécuté : i = 2 → 1 → 0 → 18446744073709551615 → ...
Le compilo le voit aussi (GCC : -Wtype-limits, Clang : -Wtautological-compare - « comparison of unsigned expression >= 0 is always true »). Mets tes warnings, ils bossent pour toi.
Le fix idiome : for (std::size_t i = ticks.size(); i-- > 0; ) handle(ticks[i]);
(ou des reverse iterators / std::views::reverse en C++20).
Réf : conversion vers un type non signé = modulo 2^n ([conv.integral]). Défini, déterministe, et ça casse un buffer en prod.
C'est exactement le genre de détail qu'on traque chez XRAYS TRADING : une lecture hors-cache coûte des microsecondes, un crash coûte une session. On recrute des gens qui voient ce caractère 👉 drh@xrays.fr. Rendez-vous mardi prochain pour le #02.
J+1 mercredi 1 juillet · 11h30Réponse courte (option)
std::size_t est NON SIGNÉ : i >= 0 est toujours vrai, un unsigned ne peut pas être négatif. Quand i vaut 0, --i ne donne pas -1, il wrap à SIZE_MAX (18 446 744 073 709 551 615 en 64 bits).
💼 Offre #01mercredi 1 juillet · 11h30
Software Engineer C#/Python pricer
Sous la mer · lounge de verre · auto-send LinkedIn
POST mercredi 1 juillet · 11h30Le post (programmé LinkedIn, auto-send)
La ligne de code que tu commites ce matin price un ETF cet après-midi. Pas dans six mois, pas après trois comités. En direct, au contact du desk, pendant que le marché bouge. ⚡
@XRAYS TRADING recrute un(e) Software Engineer pour développer et faire vivre les pricers Front Office.
Concrètement, tu codes en C# et Python les moteurs de pricing sur produits ETF et market making. Tu bosses coude à coude avec les traders, tu optimises en conditions réelles, et tu vois l'impact de ton code sur le P&L le jour même.
Ce qui rend le poste rare, c'est cette boucle courte entre l'idée, le code et le marché. Tu n'écris pas pour une roadmap, tu écris pour une session de trading.
On veut quelqu'un de solide en C# et Python, qui sait que pricer juste et pricer vite, ce n'est pas la même contrainte. Français et anglais te servent au quotidien, le desk est international.
Si la perspective de toucher la prod en temps réel te parle, on devrait se parler. 😉
📨 Pour postuler → drh@xrays.fr
💶 Rémunération à partir de 3 200 € nets par mois, selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #csharp #python #pricing #frontoffice
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🎮 Jeu #01jeudi 2 juillet · 12h30
Devine La Techno
C++ false sharing · Difficile
POST jeudi 2 juillet · 12h30Le post (programmé LinkedIn)
Deux threads, deux compteurs différents, aucun verrou partagé. Sur le papier : zéro contention.
En prod, dès qu'on monte en threads, les perfs s'effondrent.
Les deux compteurs sont juste côte à côte en mémoire.
Le coupable ?
T0 jeudi 2 juillet · 12h301er commentaire (indice)
Indice : combien d'octets fait une ligne de cache, déjà ?
+2h jeudi 2 juillet · 14h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 vendredi 3 juillet · 12h30Réponse d'ingé (complète)
Le false sharing. Les deux compteurs tombent sur la même ligne de cache (64 octets) : chaque écriture d'un cœur invalide la ligne de l'autre, ping-pong de cache permanent. On pad/aligne sur 64 octets (alignas(64)) et ça repart.
J+1 vendredi 3 juillet · 12h30Réponse courte (option)
Deux compteurs indépendants, voisins en mémoire, perfs qui s'écroulent en multi-thread. Pourquoi ?
💼 Offre #02vendredi 3 juillet · 11h30
Trading Platform Specialist
Van au bord d’un lac de montagne · auto-send LinkedIn
POST vendredi 3 juillet · 11h30Le post (programmé LinkedIn, auto-send)
Un ordre reste coincé. Le trader te ping. Tu ne refermes pas le ticket en deux clics, tu remontes la chaîne : l'appli, le réseau, le flux, jusqu'à trouver où ça bloque vraiment. 🔍
C'est exactement le quotidien du Trading Platform Specialist qu'on cherche chez @XRAYS TRADING.
Ton terrain : le cycle de vie des ordres, le suivi de prod, le monitoring infra et réseau, les outils Front Office. Pas du support ticket par ticket. Comprendre, investiguer, débloquer.
Côté outils, tu vis dans Linux, Bash et Shell, tu scriptes en Python, tu lis du SQL et tu sais ce qui se passe sur le réseau quand un flux décroche.
Il y a des astreintes, on ne te le cache pas. En contrepartie, tu touches à toute la plateforme et tu deviens vite la personne qui sait où regarder quand quelque chose part de travers.
Bilingue français anglais apprécié, les équipes et les venues ne s'arrêtent pas aux frontières.
Ça te ressemble ? Écris-nous. 😎
📨 Pour postuler → drh@xrays.fr
💶 Rémunération à partir de 3 000 € nets par mois, selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #linux #python #production #trading
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🟥 Défi #02mardi 7 juillet · 11h30
string_view sur temporaire
cpp · Moyen
POST mardi 7 juillet · 11h30Le post (programmé LinkedIn)
🔔 🟥 LE DÉFI DU MARDI #02
Classique des feed handlers : on normalise un symbole, on le passe en string_view pour éviter une copie sur le hot path. Sauf que ce code la lit de la mémoire morte.
std::string_view v lie le résultat de venue_id() + "_MIC". Question simple : la string_view rendue par sym() pointe sur quoi, et pourquoi c'est cassé ?
Dites-moi en commentaire ce que voit le lecteur en aval.
Réponse demain en commentaire 🫵🏻
T0 mardi 7 juillet · 11h301er commentaire (indice)
string_view ne possède rien. Elle ne fait que pointer. Demandez-vous combien de temps vit le std::string temporaire produit par operator+.
+2h mardi 7 juillet · 10h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 mercredi 8 juillet · 11h30Réponse d'ingé (complète)
UB : dangling string_view. operator+ produit un std::string temporaire. v est construite dessus, mais string_view ne possède pas la donnée, elle ne fait que stocker pointeur + longueur ([string.view.template] : un view est non-owning). Le temporaire est détruit à la fin de l'instruction complète ([class.temporary]), bien avant le return. v pointe alors sur de la mémoire libérée : tout accès en aval est un comportement indéfini, pas une 'sortie'. Le fait que v soit liée à un view (et non à une const ref) signifie qu'il n'y a AUCUNE extension de durée de vie : seule la liaison directe d'un temporaire à une référence l'étend, jamais via un view. Fix idiomatique : renvoyer un std::string (possède la donnée), ou garder le std::string vivant dans le scope appelant et n'exposer la view que tant qu'il vit. Sur un feed handler, ne jamais stocker une view au-delà de la durée de vie du buffer source. C'est exactement ce qu'on traque chez XRAYS TRADING, on recrute : drh@xrays.fr
J+1 mercredi 8 juillet · 11h30Réponse courte (option)
UB : dangling string_view. operator+ produit un std::string temporaire.
💼 Offre #03mercredi 8 juillet · 11h30
Trading Platform Specialist
Van au bord d’un lac de montagne · auto-send LinkedIn
POST mercredi 8 juillet · 11h30Le post (programmé LinkedIn, auto-send)
Un ordre reste coincé. Le trader te ping. Tu ne refermes pas le ticket en deux clics, tu remontes la chaîne : l'appli, le réseau, le flux, jusqu'à trouver où ça bloque vraiment. 🔍
C'est exactement le quotidien du Trading Platform Specialist qu'on cherche chez @XRAYS TRADING.
Ton terrain : le cycle de vie des ordres, le suivi de prod, le monitoring infra et réseau, les outils Front Office. Pas du support ticket par ticket. Comprendre, investiguer, débloquer.
Côté outils, tu vis dans Linux, Bash et Shell, tu scriptes en Python, tu lis du SQL et tu sais ce qui se passe sur le réseau quand un flux décroche.
Il y a des astreintes, on ne te le cache pas. En contrepartie, tu touches à toute la plateforme et tu deviens vite la personne qui sait où regarder quand quelque chose part de travers.
Bilingue français anglais apprécié, les équipes et les venues ne s'arrêtent pas aux frontières.
Ça te ressemble ? Écris-nous. 😎
📨 Pour postuler → drh@xrays.fr
💶 Rémunération à partir de 3 000 € nets par mois, selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #linux #python #production #trading
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🎮 Jeu #02jeudi 9 juillet · 12h30
Le Terminal Raconte
Linux / Bash · Facile
POST jeudi 9 juillet · 12h30Le post (programmé LinkedIn)
Le terminal raconte.
"23h47. Personne ne me parle depuis 2h. Soudain un cron se réveille. Il lance un script que personne n'a relu depuis 2019. Le script ouvre une connexion, copie 4 Go vers un disque qui en a 3 de libre. Je commence à paniquer. À 23h51, je n'ai plus rien à offrir. df me regarde avec pitié. À 23h52, la prod tousse."
Qu'est-ce qui a vraiment tué la machine cette nuit-là ?
T0 jeudi 9 juillet · 12h301er commentaire (indice)
Le mot magique tient en trois lettres anglaises très connues : "no space left on...". Complétez et expliquez la prévention.
+2h jeudi 9 juillet · 14h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 vendredi 10 juillet · 12h30Réponse d'ingé (complète)
Format ouvert. Réponse : disque plein (no space left on device) provoqué par un job non supervisé. Cause profonde : pas de monitoring d'espace disque et pas de rotation/nettoyage automatique.
J+1 vendredi 10 juillet · 12h30Réponse courte (option)
Un vieux cron, un script de 2019, 4 Go copiés sur un disque qui en a 3 de libre. Le terminal raconte sa nuit. Le coupable ?
💼 Offre #04vendredi 10 juillet · 11h30
DevOps / Production Engineer
Désert · dune au coucher · auto-send LinkedIn
POST vendredi 10 juillet · 11h30Le post (programmé LinkedIn, auto-send)
Quand Singapour ferme sa journée, il passe le relais. À toi de prendre la main, puis tu repasses le flambeau à New York quelques heures plus tard. La prod ne dort jamais, elle change juste de fuseau. 🌍
@XRAYS TRADING cherche un(e) DevOps / Production Engineer pour ce modèle Follow The Sun, sur nos applis e-Commerce et trading.
Au programme : déploiements, monitoring, disponibilité, tests de charge, et la coordination avec les équipes de Singapour et New York pour que le passage de relais soit propre.
Ta stack de base : IIS, Apache, .NET, Ansible, Jenkins. Et tu croises régulièrement SQL Server, Oracle, Tomcat, WebSphere, Dynatrace et Geneos.
On cherche quelqu'un qui aime automatiser ce qui peut l'être et garder la tête froide quand un déploiement tourne mal. Le contexte est international, le français et l'anglais se croisent sur tous les canaux.
Le rythme mondial t'attire plutôt qu'il t'effraie ? Parlons-en. 🤝
📨 Pour postuler → drh@xrays.fr
💶 Rémunération à partir de 3 500 € nets par mois, selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #devops #ansible #jenkins #production
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🟥 Défi #03mardi 14 juillet · 11h30
Le tick qui ne tombe pas juste
java · Moyen
POST mardi 14 juillet · 11h30Le post (programmé LinkedIn)
🔔 🟥 LE DÉFI DU MARDI #3
Un grand classique du P&L qui dérive. On additionne deux prix, 0.1 et 0.2, et le test d'égalité avec 0.3 part en vrille. Les deux println affichent quoi exactement ?
Réponse demain en commentaire 🫵🏻
T0 mardi 14 juillet · 11h301er commentaire (indice)
Indice : IEEE 754 double binaire. Ni 0.1, ni 0.2, ni 0.3 ne sont représentables exactement. Comptez les décimales de la somme.
+2h mardi 14 juillet · 13h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 mercredi 15 juillet · 11h30Réponse d'ingé (complète)
Réponse : false, puis 0.30000000000000004.
Pourquoi (normatif) : double est un binary64 IEEE 754 (JLS 4.2.3). 0.1, 0.2 et 0.3 n'ont pas de représentation binaire finie, ils sont arrondis au plus proche double. La somme arrondie ne tombe PAS sur le même double que rep(0.3) : le bit de poids faible diffère. L'arithmétique flottante Java est strictement spécifiée (arrondi au plus proche, round half to even), donc 0.30000000000000004 est identique sur toute JVM conforme. Et Double.toString produit la chaîne la plus courte qui re-parse vers ce double.
Fix idiomatique : jamais de double pour de la monnaie. On utilise BigDecimal avec new BigDecimal("0.1") (constructeur String, pas double), ou des entiers (centimes, ticks). Pour comparer des doubles, un epsilon, jamais ==.
C'est exactement ce qu'on traque chez XRAYS TRADING, on recrute : drh@xrays.fr
J+1 mercredi 15 juillet · 11h30Réponse courte (option)
Réponse : false, puis 0.30000000000000004.
💼 Offre #05mercredi 15 juillet · 11h30
DevOps / Production Engineer
Désert · dune au coucher · auto-send LinkedIn
POST mercredi 15 juillet · 11h30Le post (programmé LinkedIn, auto-send)
Quand Singapour ferme sa journée, il passe le relais. À toi de prendre la main, puis tu repasses le flambeau à New York quelques heures plus tard. La prod ne dort jamais, elle change juste de fuseau. 🌍
@XRAYS TRADING cherche un(e) DevOps / Production Engineer pour ce modèle Follow The Sun, sur nos applis e-Commerce et trading.
Au programme : déploiements, monitoring, disponibilité, tests de charge, et la coordination avec les équipes de Singapour et New York pour que le passage de relais soit propre.
Ta stack de base : IIS, Apache, .NET, Ansible, Jenkins. Et tu croises régulièrement SQL Server, Oracle, Tomcat, WebSphere, Dynatrace et Geneos.
On cherche quelqu'un qui aime automatiser ce qui peut l'être et garder la tête froide quand un déploiement tourne mal. Le contexte est international, le français et l'anglais se croisent sur tous les canaux.
Le rythme mondial t'attire plutôt qu'il t'effraie ? Parlons-en. 🤝
📨 Pour postuler → drh@xrays.fr
💶 Rémunération à partir de 3 500 € nets par mois, selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #devops #ansible #jenkins #production
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🎮 Jeu #03jeudi 16 juillet · 12h30
Le coût d'une exception qu'on ne lance jamais
C++ · Moyen
POST jeudi 16 juillet · 12h30Le post (programmé LinkedIn)
🎮 Le Jeu du Jeudi 🎮
N°3. Le coût d'une exception qu'on ne lance jamais.
On vous dit que les exceptions C++ sont zero-cost et qu'il faut tout passer en noexcept sur le hot path pour gagner. Vous mesurez : sur le chemin nominal, où aucune exception n'est levée, retirer les try/catch ne change rien au temps. Le gain attendu n'arrive pas.
Pourquoi ?
Réponse demain en commentaire 🫵🏻
T0 jeudi 16 juillet · 12h301er commentaire (indice)
Indice : cherchez où exactement le compilateur place le coût, sur le chemin sans erreur ou ailleurs.
+2h jeudi 16 juillet · 14h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 vendredi 17 juillet · 12h30Réponse d'ingé (complète)
Le modèle table-based (zero-cost, dit aussi Itanium ABI) ne met aucune instruction sur le chemin nominal : pas de test, pas de registre dépensé quand on ne throw pas. Le coût est payé uniquement au moment du throw, via le déroulement de pile (unwinding) qui consulte des tables et peut coûter des microsecondes. Donc retirer le try/catch ne gagne rien sur le happy path. La vraie raison de noexcept est ailleurs : il autorise des optimisations (move au lieu de copy dans vector, devirtualisation de la gestion d'erreur) et garantit qu'aucun unwind imprévisible ne survient. Sur le hot path, ce qui tue, c'est de throw, pas d'avoir un catch.
J+1 vendredi 17 juillet · 12h30Réponse courte (option)
Exceptions zero-cost : que coûte vraiment un try/catch quand rien n'est lancé ?
💼 Offre #06vendredi 17 juillet · 11h30
Chef(fe) de projet - Onboarding
Phare isolé · terrasse sur l'océan · auto-send LinkedIn
POST vendredi 17 juillet · 11h30Le post (programmé LinkedIn, auto-send)
Un nouveau fonds ne se lance pas d'un clic. Avant le premier trade, il faut aligner huit équipes, valider chaque contrepartie et border chaque livrable. Ce chaînage, c'est toi qui le tiens. 🧭
@XRAYS TRADING cherche un(e) Chef(fe) de projet - Onboarding pour intervenir au sein des équipes Opérations d'un Asset Manager.
Ton terrain : l'onboarding de nouveaux produits, fonds, managed accounts et contreparties, de bout en bout. Tu orchestres la coordination entre Opérations, IT, Front Office, Recherche, Légal, Compliance et Investor Relations, tu suis les livrables au cordeau et tu fais progresser les workflows.
Ce qui fait le sel du poste, c'est le croisement : qualité, délais, documentation, automatisation et réduction du risque opérationnel, le tout sur des chaînes Front-to-Back que tu dois maîtriser.
On cherche un profil d'école d'ingénieurs, avec au moins 7 ans en gestion de projets opérationnels, idéalement côté Hedge Fund, Asset Management ou finance de marché. Ici l'autonomie n'est pas un mot d'offre : les sujets sont variés, concrets et stratégiques, et on attend de toi que tu sortes de ta zone de confort. Français et anglais te suivent au quotidien, le périmètre est international.
Piloter la complexité plutôt que la subir, ça te ressemble ? Parlons-en. 🤝
📨 Pour postuler → drh@xrays.fr
💶 Rémunération selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #assetmanagement #onboarding #operations #hedgefund
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🟥 Défi #04mardi 21 juillet · 11h30
__slots__ et le hot path CPython
python · Moyen
POST mardi 21 juillet · 11h30Le post (programmé LinkedIn)
🔔 🟥 LE DÉFI DU MARDI #4
Côté Python du desk : on instancie des millions de Tick pour rejouer un flux. La classe naïve marche, mais la RAM explose et le cache CPU pleure. Quelqu'un propose __slots__ = ('px', 'qty').
Deux effets à nommer précisément : (1) qu'arrive-t-il à la ligne A (t.source = 'X') APRÈS ajout des slots, et exactement quelle exception ? (2) pourquoi la mémoire par instance baisse en CPython ? Soyez précis sur le 'pourquoi'.
À vous.
Le verdict tombe demain en commentaire 👇
T0 mardi 21 juillet · 11h301er commentaire (indice)
Indice T0 : sans __slots__, chaque instance porte un __dict__ pour stocker ses attributs, ce qui permet d'en ajouter n'importe lequel à la volée (comme source). Avec __slots__, ce dictionnaire par instance disparaît. Que devient alors un attribut hors liste ?
+2h mardi 21 juillet · 13h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 mercredi 22 juillet · 11h30Réponse d'ingé (complète)
Réponse d'ingé :
(1) Après __slots__ = ('px', 'qty'), la ligne A lève AttributeError : 'Tick' object has no attribute 'source'. En déclarant des slots, on supprime le __dict__ par instance ; les seuls attributs autorisés sont ceux listés. Toute affectation d'un attribut hors liste échoue (sauf si on ajoute explicitement '__dict__' aux slots, ce qui annule l'intérêt).
(2) La mémoire par instance baisse parce qu'on élimine le __dict__ par instance. Sans slots, CPython alloue à chaque instance un dictionnaire (structure de hash avec sur-allocation) pour porter les attributs ; avec slots, les attributs sont rangés dans des descripteurs à offsets fixes directement dans l'objet, comme des champs d'une struct C. Résultat : moins d'octets par instance, et un layout plus compact donc plus cache-friendly quand on en parcourt des millions. Le gain réel dépend de la version de CPython (les key-sharing dicts atténuent l'écart sur les récents), mais le __dict__ supprimé reste la cause directe.
Fix idiomatique : __slots__ sur les objets à forte cardinalité et schéma fixe (Tick, OrderBookLevel), exactement comme on choisit un POD bien aligné en C++. Garder en tête : pas d'attribut dynamique, et interaction à vérifier avec l'héritage et le pickling.
C'est exactement ce qu'on traque chez XRAYS TRADING : le layout mémoire jusque dans le Python de replay et de tooling. On recrute : drh@xrays.fr
J+1 mercredi 22 juillet · 11h30Réponse courte (option)
Réponse d'ingé :
💼 Offre #07mercredi 22 juillet · 11h30
Chef(fe) de projet - Onboarding
Phare isolé · terrasse sur l'océan · auto-send LinkedIn
POST mercredi 22 juillet · 11h30Le post (programmé LinkedIn, auto-send)
Un nouveau fonds ne se lance pas d'un clic. Avant le premier trade, il faut aligner huit équipes, valider chaque contrepartie et border chaque livrable. Ce chaînage, c'est toi qui le tiens. 🧭
@XRAYS TRADING cherche un(e) Chef(fe) de projet - Onboarding pour intervenir au sein des équipes Opérations d'un Asset Manager.
Ton terrain : l'onboarding de nouveaux produits, fonds, managed accounts et contreparties, de bout en bout. Tu orchestres la coordination entre Opérations, IT, Front Office, Recherche, Légal, Compliance et Investor Relations, tu suis les livrables au cordeau et tu fais progresser les workflows.
Ce qui fait le sel du poste, c'est le croisement : qualité, délais, documentation, automatisation et réduction du risque opérationnel, le tout sur des chaînes Front-to-Back que tu dois maîtriser.
On cherche un profil d'école d'ingénieurs, avec au moins 7 ans en gestion de projets opérationnels, idéalement côté Hedge Fund, Asset Management ou finance de marché. Ici l'autonomie n'est pas un mot d'offre : les sujets sont variés, concrets et stratégiques, et on attend de toi que tu sortes de ta zone de confort. Français et anglais te suivent au quotidien, le périmètre est international.
Piloter la complexité plutôt que la subir, ça te ressemble ? Parlons-en. 🤝
📨 Pour postuler → drh@xrays.fr
💶 Rémunération selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #assetmanagement #onboarding #operations #hedgefund
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🎮 Jeu #04jeudi 23 juillet · 12h30
L'ordre qui hésite au bon montant
Python / pricing float · Moyen
POST jeudi 23 juillet · 12h30Le post (programmé LinkedIn)
🎮 Le Jeu du Jeudi 🎮
N°4. L'ordre qui hésite au bon montant.
Un calcul de prix : on additionne des montants en virgule flottante, on compare le total à un seuil, puis on déclenche un ordre si le total dépasse exactement ce seuil.
En test, parfait. En prod, sous certaines combinaisons de prix, l'ordre ne part pas alors qu'il devrait, ou part alors qu'il ne devrait pas.
Où est le piège ? Réponse en commentaire.
Réponse demain en commentaire 🫵🏻
T0 jeudi 23 juillet · 12h301er commentaire (indice)
Indice culte : essayez mentalement 0.1 + 0.2 et demandez-vous si c'est vraiment 0.3 pour la machine.
+2h jeudi 23 juillet · 14h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 vendredi 24 juillet · 12h30Réponse d'ingé (complète)
Format ouvert. Réponse : comparaison d'égalité stricte sur des flottants. L'arithmétique en virgule flottante introduit des erreurs d'arrondi minuscules, donc le total n'est jamais "exactement" égal au seuil. Il faut comparer avec une tolérance, ou travailler en entiers (centimes / ticks).
J+1 vendredi 24 juillet · 12h30Réponse courte (option)
On compare une somme de flottants à un seuil "exactement égal" pour déclencher un ordre. Ça déconne en prod. Pourquoi ?
💼 Offre #08vendredi 24 juillet · 11h30
Développeur confirmé Java FOREX
Tokyo · carrefour sous les néons · auto-send LinkedIn
POST vendredi 24 juillet · 11h30Le post (programmé LinkedIn, auto-send)
Le marché FX ne fait jamais de pause : il tourne 24h sur 24, cinq jours sur sept, et à ce rythme la milliseconde n'est pas une métrique, c'est une frontière. ⚡
@XRAYS TRADING recrute un(e) Développeur confirmé Java pour sa plateforme de trading électronique Forex, au contact direct des flux de marché.
Ici, pas de projet from scratch théorique : du temps réel, de la volumétrie, de la latence. Tu développes des composants critiques de trading FX, tu attaques des problématiques avancées de multithreading et de concurrence, tu optimises performance et scalabilité, et tu tunes les traitements à forte volumétrie.
Ta stack : Java, du vrai, poussé sur des systèmes multithreadés haute performance connectés directement aux flux de marché. Tu sais ce qu'un mauvais partage d'état coûte quand les messages arrivent par milliers à la seconde.
On cherche un profil d'école d'ingénieurs, très solide en Java, avec une expérience significative des systèmes multithreadés haute performance et un vrai passé en finance de marché ou electronic trading, là où latence, volumétrie et criticité ne pardonnent rien. Français et anglais te suivent au quotidien, le contexte est international.
Tu veux que ton code se voie en production, pas dans une roadmap ? Écris-nous. 😎
📨 Pour postuler → drh@xrays.fr
💶 Rémunération selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #java #forex #multithreading #lowlatency
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🟥 Défi #05mardi 28 juillet · 11h30
Le filtre fantôme
sql · Moyen
POST mardi 28 juillet · 11h30Le post (programmé LinkedIn)
🔔 🟥 LE DÉFI DU MARDI #5
Un collègue veut sortir les positions sans P&L calculé. Il pousse ça en prod, le rapport risque tourne, zéro ligne. Pourtant la moitié du book a un pnl NULL. Le serveur ne plante pas, ne renvoie aucune erreur.
Combien de lignes ramène cette requête, et pourquoi ?
À vos commentaires.
Demain je te donne la réponse en commentaire.
T0 mardi 28 juillet · 11h301er commentaire (indice)
Indice T0 : en SQL standard, NULL n'est égal à rien, pas même à un autre NULL. Que vaut le prédicat pnl = NULL pour chaque ligne ?
+2h mardi 28 juillet · 13h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 mercredi 29 juillet · 11h30Réponse d'ingé (complète)
Réponse : 0 ligne, toujours.
Pourquoi : NULL représente une valeur inconnue, et toute comparaison avec = NULL s'évalue à UNKNOWN (jamais TRUE), donc le WHERE ne retient aucune ligne. C'est de la logique ternaire SQL, pas un bug du moteur.
Fix idiomatique : WHERE pnl IS NULL (et IS NOT NULL pour l'inverse). Piège classique en revue de code risk : un = NULL silencieux masque tout un pan du book sans lever d'erreur.
C'est exactement ce qu'on traque chez XRAYS TRADING, on recrute : drh@xrays.fr
J+1 mercredi 29 juillet · 11h30Réponse courte (option)
Réponse : 0 ligne, toujours.
💼 Offre #09mercredi 29 juillet · 11h30
Développeur confirmé Java FOREX
Tokyo · carrefour sous les néons · auto-send LinkedIn
POST mercredi 29 juillet · 11h30Le post (programmé LinkedIn, auto-send)
Le marché FX ne fait jamais de pause : il tourne 24h sur 24, cinq jours sur sept, et à ce rythme la milliseconde n'est pas une métrique, c'est une frontière. ⚡
@XRAYS TRADING recrute un(e) Développeur confirmé Java pour sa plateforme de trading électronique Forex, au contact direct des flux de marché.
Ici, pas de projet from scratch théorique : du temps réel, de la volumétrie, de la latence. Tu développes des composants critiques de trading FX, tu attaques des problématiques avancées de multithreading et de concurrence, tu optimises performance et scalabilité, et tu tunes les traitements à forte volumétrie.
Ta stack : Java, du vrai, poussé sur des systèmes multithreadés haute performance connectés directement aux flux de marché. Tu sais ce qu'un mauvais partage d'état coûte quand les messages arrivent par milliers à la seconde.
On cherche un profil d'école d'ingénieurs, très solide en Java, avec une expérience significative des systèmes multithreadés haute performance et un vrai passé en finance de marché ou electronic trading, là où latence, volumétrie et criticité ne pardonnent rien. Français et anglais te suivent au quotidien, le contexte est international.
Tu veux que ton code se voie en production, pas dans une roadmap ? Écris-nous. 😎
📨 Pour postuler → drh@xrays.fr
💶 Rémunération selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #java #forex #multithreading #lowlatency
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🎮 Jeu #05jeudi 30 juillet · 12h30
Estimation latence
réseau / fibre · Moyen
POST jeudi 30 juillet · 12h30Le post (programmé LinkedIn)
🎮 Le Jeu du Jeudi 🎮
N°5. Estimation latence.
Un signal lumineux dans une fibre optique parcourt environ combien de kilomètres en 1 milliseconde ?
Pas de calculatrice, pas de Google. Posez votre estimation à l'instinct, puis on compare. L'ingénierie de latence commence par les ordres de grandeur.
Réponse demain en commentaire 🫵🏻
T0 jeudi 30 juillet · 12h301er commentaire (indice)
Indice : dans une fibre, la lumière est plus lente que dans le vide, environ deux tiers. Recalculez.
+2h jeudi 30 juillet · 14h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 vendredi 31 juillet · 12h30Réponse d'ingé (complète)
Format ouvert (estimation). Réponse : environ 200 km. Dans une fibre, la lumière voyage à environ deux tiers de sa vitesse dans le vide, soit à peu près 200 000 km/s, donc environ 200 km par milliseconde. C'est pour ça que la distance physique entre votre serveur et le marché est un paramètre de latence majeur.
J+1 vendredi 31 juillet · 12h30Réponse courte (option)
Combien de km parcourt la lumière dans une fibre en 1 ms ? Estimation à l'instinct, sans Google.
💼 Offre #10vendredi 31 juillet · 11h30
IT QUANT C++/C#
Planète sci-fi · auto-send LinkedIn
POST vendredi 31 juillet · 11h30Le post (programmé LinkedIn, auto-send)
Sur un desk de taux, la nanoseconde est un terrain de jeu. Tu joues sur deux tableaux à la fois : la justesse des maths et la pureté de la perf, sans jamais sacrifier l'une pour l'autre. 🧠
@XRAYS TRADING recrute un(e) IT Quant C++/C# pour ses produits de taux, du linéaire au structuré.
Tu écris du C++ et du C# haute performance, robustes et multi-threadés, tu optimises les calculs là où la latence compte vraiment, et tu construis des librairies de pricing au plus près des modèles mathématiques.
C'est le poste où le code et le modèle se rencontrent : il faut comprendre ce que le quant veut calculer pour décider comment le calculer vite, sans casser la précision.
On cherche un profil qui a un vrai goût pour la performance bas niveau et qui n'a pas peur de profiler, mesurer, recommencer. Le français et l'anglais sont tous deux utiles, l'environnement est international.
Tu aimes quand maths et perf se parlent ? Écris-nous. 😉
📨 Pour postuler → drh@xrays.fr
💶 Rémunération selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #cpp #csharp #quant #lowlatency #pricing
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🟥 Défi #06mardi 4 août · 11h30
comparaison signed/unsigned
cpp · Moyen
POST mardi 4 août · 11h30Le post (programmé LinkedIn)
🔔 🟥 LE DÉFI DU MARDI #6
Un garde-fou de risk : on refuse un ordre si qty est en dessous d'une limite. qty = -1 (un bug en amont), limit = 1000. Intuitivement -1 < 1000, donc ok() rend true.
Sauf que ce return ne fait pas ce que vous lisez. Que vaut ok(-1, 1000u) et pourquoi ? Déterminisme total ici, pas d'UB.
Balancez votre verdict en commentaire.
Rendez-vous demain en commentaire pour la correction.
T0 mardi 4 août · 11h301er commentaire (indice)
Quand on compare un int signé et un uint32_t, l'un des deux est converti. Lequel, et que devient -1 une fois converti en unsigned ?
+2h mardi 4 août · 13h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 mercredi 5 août · 11h30Réponse d'ingé (complète)
ok(-1, 1000u) rend false. Pourquoi : qty < limit compare un int et un uint32_t. Les conversions arithmétiques usuelles ([expr.arith.conv]) s'appliquent : sur LP64, int et uint32_t ont le même rang (32 bits), et la règle convertit l'opérande signé vers le type non signé. -1 devient (uint32_t)-1 = 4294967295 par réduction modulo 2^32 ([conv.integral]). La comparaison devient 4294967295u < 1000u, soit false. Le garde-fou laisse donc passer un ordre invalide : faille classique de risk. Fix idiomatique en C++20 : std::cmp_less(qty, limit) qui compare la valeur mathématique sans conversion piégeuse ; sinon valider le signe avant (if (qty < 0) reject) ou aligner les types. C'est exactement ce qu'on traque chez XRAYS TRADING, on recrute : drh@xrays.fr
J+1 mercredi 5 août · 11h30Réponse courte (option)
ok(-1, 1000u) rend false. Pourquoi : qty < limit compare un int et un uint32_t. Les conversions arithmétiques usuelles ([expr.arith.conv]) s'appliquent : sur LP64, int et uint32_t ont le même rang (32 bits), et la règle convertit l'opérande signé vers le type non signé. -1 devient (uint32_t)-1 = 4294967295 par réduction modulo 2^32 ([conv.integral]). La comparaison devient 4294967295u < 1000u, soit false. Le garde-fou laisse donc passer un ordre invalide : faille classique de risk. Fix idiomatique en C++20 : std::cmp_less(qty, limit) qui compare la valeur mathématique sans conversion piégeuse ; sinon valider le signe avant (if (qty < 0) reject) ou aligner les types. C'est exactement ce qu'on traque chez XRAYS TRADING, on recrute : drh@xrays.fr
💼 Offre #11mercredi 5 août · 11h30
IT QUANT C++/C#
Planète sci-fi · auto-send LinkedIn
POST mercredi 5 août · 11h30Le post (programmé LinkedIn, auto-send)
Sur un desk de taux, la nanoseconde est un terrain de jeu. Tu joues sur deux tableaux à la fois : la justesse des maths et la pureté de la perf, sans jamais sacrifier l'une pour l'autre. 🧠
@XRAYS TRADING recrute un(e) IT Quant C++/C# pour ses produits de taux, du linéaire au structuré.
Tu écris du C++ et du C# haute performance, robustes et multi-threadés, tu optimises les calculs là où la latence compte vraiment, et tu construis des librairies de pricing au plus près des modèles mathématiques.
C'est le poste où le code et le modèle se rencontrent : il faut comprendre ce que le quant veut calculer pour décider comment le calculer vite, sans casser la précision.
On cherche un profil qui a un vrai goût pour la performance bas niveau et qui n'a pas peur de profiler, mesurer, recommencer. Le français et l'anglais sont tous deux utiles, l'environnement est international.
Tu aimes quand maths et perf se parlent ? Écris-nous. 😉
📨 Pour postuler → drh@xrays.fr
💶 Rémunération selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #cpp #csharp #quant #lowlatency #pricing
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🎮 Jeu #06jeudi 6 août · 12h30
Le on-call de 3 h du matin
FIX / réseau / on-call · Moyen
POST jeudi 6 août · 12h30Le post (programmé LinkedIn)
🎮 Le Jeu du Jeudi 🎮
N°6. Le on-call de 3 h du matin.
3h02. Astreinte. Le téléphone hurle.
Alerte : le gateway FIX ne répond plus, les ordres ne partent plus. Le marché US tourne. Vous êtes seul.
Vous faites quoi EN PREMIER ?
A) Vous redémarrez le gateway tout de suite, on verra après.
B) Vous regardez les logs et le réseau avant de toucher quoi que ce soit.
C) Vous réveillez le métier et un collègue avant d'agir.
Votez. La suite de l'histoire dépendra de votre choix majoritaire, demain dans un nouveau post.
Réponse demain en commentaire 🫵🏻
T0 jeudi 6 août · 12h301er commentaire (indice)
Pas de jugement sur votre vote, mais une question : si vous redémarrez sans regarder et que ça repart, saurez-vous expliquer pourquoi c'était tombé ? Pensez-y avant de voter.
+2h jeudi 6 août · 14h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 vendredi 7 août · 12h30Réponse d'ingé (complète)
A redémarrer / B diagnostiquer / C alerter.
Réponse : B est généralement le bon premier réflexe (observer avant d'agir), avec une part de C en parallèle (alerter tôt). A en aveugle est le piège.
J+1 vendredi 7 août · 12h30Réponse courte (option)
3h, astreinte, gateway FIX muet, marché US ouvert, vous êtes seul. Vous faites quoi en premier : A redémarrer, B diagnostiquer, C alerter ? Votez.
💼 Offre #12vendredi 7 août · 11h30
Développeur Senior Front Office C++/Python (OMS)
Plage des Philippines · El Nido · auto-send LinkedIn
POST vendredi 7 août · 11h30Le post (programmé LinkedIn, auto-send)
Une archi d'OMS, ça ne se mesure pas en sprints, ça se mesure en années. Ce que tu poses aujourd'hui devra encaisser des volumes et des contraintes qu'on ne connaît pas encore, sans droit à l'erreur sur le cycle des ordres. 🏗️
@XRAYS TRADING cherche un(e) Développeur Senior Front Office C++/Python pour bâtir ce module OMS.
Tu prends le cycle complet des ordres de bout en bout, tu optimises latence et mémoire profiling à l'appui, et tu conçois une archi modulaire qui tient dans la durée plutôt qu'une qui marche juste aujourd'hui.
Ta stack : C++17 et C++20 pour le cœur perf, FIX pour le dialogue avec les venues, Python autour pour l'outillage. Tu sais ce qu'implique un mauvais ordre de mémoire ou un point de contention sur le hot path.
On veut un senior qui pense long terme, qui code propre et qui assume ses choix d'archi. Français et anglais te suivent au quotidien.
Construire quelque chose qui dure, ça te parle ? On devrait échanger. 💪
📨 Pour postuler → drh@xrays.fr
💶 Rémunération à partir de 3 800 € nets par mois, selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #cpp #oms #fix #lowlatency
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🟥 Défi #07mardi 11 août · 11h30
Le carnet mal trié
javascript · Moyen
POST mardi 11 août · 11h30Le post (programmé LinkedIn)
🔔 🟥 LE DÉFI DU MARDI #7
On trie les niveaux de prix du carnet d'ordres avec un sort() tout simple. En recette, le niveau 1000 se retrouve coincé entre 10 et 200, le carnet est incohérent.
Sans lancer Node : quelle est la sortie EXACTE de ce console.log, et c'est quoi le piège ?
Commentaires ouverts.
La bonne réponse ? Demain, en commentaire.
T0 mardi 11 août · 11h301er commentaire (indice)
Indice T0 : Array.prototype.sort() sans argument ne compare pas des nombres. Demandez-vous en quoi il convertit chaque élément avant de comparer.
+2h mardi 11 août · 13h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 mercredi 12 août · 11h30Réponse d'ingé (complète)
Réponse : [10, 1000, 200, 80, 9].
POURQUOI : sans fonction de comparaison, sort() convertit chaque élément en chaîne puis compare les chaînes par ordre des unités de code UTF-16, caractère par caractère. On compare donc '10','1000','200','80','9' lexicographiquement : '1'<'2'<'8'<'9', et entre '10' et '1000' le préfixe '10' est commun puis '1000' a un caractère de plus donc passe avant '200'. D'où [10,1000,200,80,9].
FIX idiomatique : toujours fournir un comparateur numérique, prix.sort((a,b)=>a-b).
C'est exactement ce qu'on traque chez XRAYS TRADING, on recrute : drh@xrays.fr
J+1 mercredi 12 août · 11h30Réponse courte (option)
Réponse : [10, 1000, 200, 80, 9].
💼 Offre #13mercredi 12 août · 11h30
Développeur Senior Front Office C++/Python (OMS)
Plage des Philippines · El Nido · auto-send LinkedIn
POST mercredi 12 août · 11h30Le post (programmé LinkedIn, auto-send)
Une archi d'OMS, ça ne se mesure pas en sprints, ça se mesure en années. Ce que tu poses aujourd'hui devra encaisser des volumes et des contraintes qu'on ne connaît pas encore, sans droit à l'erreur sur le cycle des ordres. 🏗️
@XRAYS TRADING cherche un(e) Développeur Senior Front Office C++/Python pour bâtir ce module OMS.
Tu prends le cycle complet des ordres de bout en bout, tu optimises latence et mémoire profiling à l'appui, et tu conçois une archi modulaire qui tient dans la durée plutôt qu'une qui marche juste aujourd'hui.
Ta stack : C++17 et C++20 pour le cœur perf, FIX pour le dialogue avec les venues, Python autour pour l'outillage. Tu sais ce qu'implique un mauvais ordre de mémoire ou un point de contention sur le hot path.
On veut un senior qui pense long terme, qui code propre et qui assume ses choix d'archi. Français et anglais te suivent au quotidien.
Construire quelque chose qui dure, ça te parle ? On devrait échanger. 💪
📨 Pour postuler → drh@xrays.fr
💶 Rémunération à partir de 3 800 € nets par mois, selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #cpp #oms #fix #lowlatency
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🎮 Jeu #07jeudi 13 août · 12h30
Le float qu'on relit en int
C++ · Difficile
POST jeudi 13 août · 12h30Le post (programmé LinkedIn)
🎮 Le Jeu du Jeudi 🎮
N°7. Le float qu'on relit en int.
Pour sérialiser vite, vous prenez l'adresse d'un float, vous la castez en uint32_t* et vous déréférencez pour lire les bits. Ça marche en debug, ça marche en release O0. En release O2, le résultat devient faux ou incohérent selon le contexte d'appel.
Quelle règle du langage avez-vous violée, et quelle est la voie propre ?
Réponse demain en commentaire 🫵🏻
T0 jeudi 13 août · 12h301er commentaire (indice)
Indice : le compilateur a le droit de supposer que deux pointeurs de types différents ne se chevauchent jamais.
+2h jeudi 13 août · 14h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 vendredi 14 août · 12h30Réponse d'ingé (complète)
C'est une violation du strict aliasing. Le standard autorise un objet à n'être accédé que via son propre type (ou un char/std::byte, ou un type compatible) ; lire un float via un uint32_t* est un comportement indéfini. Le compilateur, en supposant qu'un float* et un uint32_t* ne pointent jamais le même objet, réordonne ou élimine des accès mémoire, d'où un résultat faux en O2 alors qu'en O0 il ne fait pas ces hypothèses. La voie propre : std::bit_cast en C++20, ou à défaut memcpy vers un uint32_t, que le compilateur reconnaît et optimise sans UB. L'union-punning marche en C mais reste UB formel en C++.
J+1 vendredi 14 août · 12h30Réponse courte (option)
*reinterpret_cast<uint32_t*>(&f) casse en O2. Quelle règle ?
POST vendredi 14 août · 11h30Le post (programmé LinkedIn, auto-send)
Paris, Londres, New York, Hong Kong. Ton appli tourne sur tous ces fuseaux et sert un seul objectif : générer de l'alpha. C'est cette envergure mondiale qui change tout dans le métier de dev Front Office. 🌐
@XRAYS TRADING recrute un(e) Développeur Java Front Office pour ses applis en salle des marchés.
Au menu : génération d'alpha, gestion de portefeuille, back-testing, trading de modèles quantitatifs, monitoring des positions, du P&L et des risques, reporting, et génération d'indices à l'international.
Côté technique, tu construis du Java en client lourd, tu travailles le SQL et les bases de données, tu gères serveurs et batchs, le tout sur une intégration continue solide.
Ce qui rend le poste exigeant, c'est l'envergure : ton code sert des desks répartis sur la planète, avec les contraintes de fuseaux et de fiabilité qui vont avec.
On cherche un profil rigoureux, à l'aise sur du Java costaud. Le français et l'anglais sont du quotidien.
L'échelle internationale te motive ? Viens en discuter. 😎
📨 Pour postuler → drh@xrays.fr
💶 Rémunération selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #java #frontoffice #trading #quant
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🟥 Défi #08mardi 18 août · 11h30
narrowing en brace-init
cpp · Difficile
POST mardi 18 août · 11h30Le post (programmé LinkedIn)
🔔 🟥 LE DÉFI DU MARDI #8
On remplit un Tick avec un prix qui arrive en double depuis le pricer, et on le range dans un int32 via l'init par accolades, parce que c'est moderne et safe.
Question : que fait le compilateur de Tick t{raw} ? Compile-t-il, warning, ou erreur dure ? Et c'est pareil GCC et Clang ?
Votre verdict en commentaire.
On débriefe demain, en commentaire 🧠
T0 mardi 18 août · 11h301er commentaire (indice)
L'init par accolades { } interdit une catégorie de conversions que l'init par parenthèses ( ) tolère. double vers int32, ça tombe dans quelle catégorie ?
+2h mardi 18 août · 13h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 mercredi 19 août · 11h30Réponse d'ingé (complète)
Le programme est mal-formé : le standard EXIGE un diagnostic. Clang le refuse par défaut (erreur dure) ; GCC, lui, n'émet par défaut qu'un avertissement -Wnarrowing et compile quand même (101.5 tronqué à 101), il faut -pedantic-errors pour en faire une erreur dure. Pourquoi : l'initialisation par liste { } interdit les conversions rétrécissantes ([dcl.init.list]). double vers int32_t est une narrowing conversion car le type source flottant ne peut pas représenter toutes les valeurs du type cible et réciproquement, et raw n'est pas une expression constante dont la valeur tient exactement dans la cible. Le programme est donc ill-formed : le standard exige un diagnostic. C'est tout l'intérêt du brace-init : il transforme une troncature silencieuse (101.5 -> 101) en erreur. Fix idiomatique : convertir explicitement Tick t{ static_cast<int32_t>(raw) } si la troncature est voulue, ou mieux, fixer le prix en entier de ticks en amont. C'est exactement ce qu'on traque chez XRAYS TRADING, on recrute : drh@xrays.fr
J+1 mercredi 19 août · 11h30Réponse courte (option)
Le programme est mal-formé : le standard EXIGE un diagnostic. Clang le refuse par défaut (erreur dure) ; GCC, lui, n'émet par défaut qu'un avertissement -Wnarrowing et compile quand même (101.5 tronqué à 101), il faut -pedantic-errors pour en faire une erreur dure. Pourquoi : l'initialisation par liste { } interdit les conversions rétrécissantes ([dcl.init.list]). double vers int32_t est une narrowing conversion car le type source flottant ne peut pas représenter toutes les valeurs du type cible et réciproquement, et raw n'est pas une expression constante dont la valeur tient exactement dans la cible. Le programme est donc ill-formed : le standard exige un diagnostic. C'est tout l'intérêt du brace-init : il transforme une troncature silencieuse (101.5 -> 101) en erreur. Fix idiomatique : convertir explicitement Tick t{ static_cast<int32_t>(raw) } si la troncature est voulue, ou mieux, fixer le prix en entier de ticks en amont. C'est exactement ce qu'on traque chez XRAYS TRADING, on recrute : drh@xrays.fr
POST mercredi 19 août · 11h30Le post (programmé LinkedIn, auto-send)
Paris, Londres, New York, Hong Kong. Ton appli tourne sur tous ces fuseaux et sert un seul objectif : générer de l'alpha. C'est cette envergure mondiale qui change tout dans le métier de dev Front Office. 🌐
@XRAYS TRADING recrute un(e) Développeur Java Front Office pour ses applis en salle des marchés.
Au menu : génération d'alpha, gestion de portefeuille, back-testing, trading de modèles quantitatifs, monitoring des positions, du P&L et des risques, reporting, et génération d'indices à l'international.
Côté technique, tu construis du Java en client lourd, tu travailles le SQL et les bases de données, tu gères serveurs et batchs, le tout sur une intégration continue solide.
Ce qui rend le poste exigeant, c'est l'envergure : ton code sert des desks répartis sur la planète, avec les contraintes de fuseaux et de fiabilité qui vont avec.
On cherche un profil rigoureux, à l'aise sur du Java costaud. Le français et l'anglais sont du quotidien.
L'échelle internationale te motive ? Viens en discuter. 😎
📨 Pour postuler → drh@xrays.fr
💶 Rémunération selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #java #frontoffice #trading #quant
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🎮 Jeu #08jeudi 20 août · 12h30
Trading tech puzzle
FIX / latence / horloges · Difficile
POST jeudi 20 août · 12h30Le post (programmé LinkedIn)
🎮 Le Jeu du Jeudi 🎮
N°8. Trading tech puzzle.
Un ordre part à 9h00:00.000. Le marché le reçoit à 9h00:00.018. L'accusé de réception revient à 9h00:00.005.
L'accusé arrive AVANT que le marché reçoive l'ordre. Comment est-ce possible ?
Tous les indices sont là. À vous.
Réponse demain en commentaire 🫵🏻
T0 jeudi 20 août · 12h301er commentaire (indice)
Indice : et si les deux timestamps ne venaient pas de la même horloge ?
+2h jeudi 20 août · 14h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 vendredi 21 août · 12h30Réponse d'ingé (complète)
Format ouvert. Réponse : les horloges ne sont pas synchronisées. L'horodatage de l'accusé vient d'une machine dont l'horloge est en avance par rapport au récepteur. Sans synchronisation NTP/PTP rigoureuse, comparer des timestamps de deux machines différentes n'a aucun sens. Ce n'est pas de la physique, c'est un décalage d'horloges (clock offset entre deux machines non synchronisées).
J+1 vendredi 21 août · 12h30Réponse courte (option)
Ordre envoyé, reçu par le marché à +18ms, mais l'accusé revient à +5ms. L'accusé précède la réception. Comment ?
💼 Offre #16vendredi 21 août · 11h30
Développeur C#/Angular
Jungle · treehouse · auto-send LinkedIn
POST vendredi 21 août · 11h30Le post (programmé LinkedIn, auto-send)
Du front jusqu'au back, le module entier, c'est toi. L'archi, le dev, les tests, le support au contact des utilisateurs : tu portes la chaîne complète, pas une couche isolée. 🧩
@XRAYS TRADING cherche un(e) Développeur C#/Angular pour prendre l'ownership total d'une appli de pricing et de trading Front to Back.
Tu conçois l'architecture, tu développes le module, et tu mets en place les bonnes pratiques de test du premier commit jusqu'à la prod. Tu restes ensuite au plus près des utilisateurs métier pour faire vivre l'appli.
Ta stack : C#, .NET, Angular et Azure DevOps. Tu maîtrises ton sujet du back-end jusqu'à l'interface, sans zone d'ombre dans la chaîne.
On vise un profil avec au moins 6 ans d'expérience en C# et un solide bagage d'école d'ingénieurs. Français et anglais te servent au quotidien dans un environnement international.
Tu aimes posséder un périmètre de bout en bout ? Fais-toi connaître. 🙌
📨 Pour postuler → drh@xrays.fr
💶 Rémunération à partir de 4 000 € nets par mois, selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #csharp #angular #dotnet #azuredevops
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🟥 Défi #09mardi 25 août · 11h30
Le += qui perd des messages
python · Difficile
POST mardi 25 août · 11h30Le post (programmé LinkedIn)
🔔 🟥 LE DÉFI DU MARDI #9
Compteur de messages partagé entre 8 threads Python, count += 1 dans chaque. 'Le GIL sérialise tout, donc pas de souci de concurrence', entend-on souvent. On attend 800000 à la fin.
Le GIL garantit-il vraiment que count vaut 800000 ? Sinon, pourquoi, et que faut-il VRAIMENT pour rendre l'incrément correct ? Ne dites pas 'le GIL protège', dites POURQUOI ça ne suffit pas ici.
Vos analyses.
Réponse et explication demain en commentaire.
T0 mardi 25 août · 11h301er commentaire (indice)
Indice T0 : count += 1 n'est pas une opération atomique au niveau bytecode. C'est LOAD, ajout, puis STORE. Le GIL peut être relâché ENTRE ces bytecodes. Que se passe-t-il si deux threads lisent la même valeur avant que l'un ait réécrit ?
+2h mardi 25 août · 13h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 mercredi 26 août · 11h30Réponse d'ingé (complète)
Réponse d'ingé :
Non, count ne vaut pas 800000 de manière garantie : c'est une race au niveau application (lost updates). Le GIL garantit qu'UN bytecode s'exécute sans entrelacement, mais count += 1 se compile en plusieurs bytecodes : charger count, ajouter 1, ranger le résultat (LOAD_FAST/LOAD_GLOBAL, BINARY_OP, STORE_GLOBAL). L'interpréteur peut rendre le GIL entre deux bytecodes (historiquement tous les N instructions, aujourd'hui sur un intervalle de temps). Deux threads peuvent donc lire la même valeur, l'incrémenter chacun, et réécrire : un incrément est perdu. Le GIL protège l'intégrité de l'interpréteur, pas l'atomicité de tes opérations composées.
Nuance importante : ce n'est pas une UB façon C++ (Python a une sémantique définie, l'état final reste un entier cohérent), mais c'est bien un résultat non déterministe et faux. Et sur le free-threading (CPython sans GIL, 3.13+), le problème devient encore plus visible.
Fix idiomatique : sérialiser l'incrément composite avec un threading.Lock autour du += , ou utiliser une structure conçue pour, ou faire compter chaque thread localement puis sommer les totaux à la fin (pas de partage sur le hot path). Le verrou explicite est ce qui crée réellement l'exclusion mutuelle que le GIL ne fournit pas à ce niveau.
C'est exactement ce qu'on traque chez XRAYS TRADING : le mythe 'le GIL me protège' sur un compteur de messages partagé. On recrute : drh@xrays.fr
J+1 mercredi 26 août · 11h30Réponse courte (option)
Réponse d'ingé :
💼 Offre #17mercredi 26 août · 11h30
Développeur C#/Angular
Jungle · treehouse · auto-send LinkedIn
POST mercredi 26 août · 11h30Le post (programmé LinkedIn, auto-send)
Du front jusqu'au back, le module entier, c'est toi. L'archi, le dev, les tests, le support au contact des utilisateurs : tu portes la chaîne complète, pas une couche isolée. 🧩
@XRAYS TRADING cherche un(e) Développeur C#/Angular pour prendre l'ownership total d'une appli de pricing et de trading Front to Back.
Tu conçois l'architecture, tu développes le module, et tu mets en place les bonnes pratiques de test du premier commit jusqu'à la prod. Tu restes ensuite au plus près des utilisateurs métier pour faire vivre l'appli.
Ta stack : C#, .NET, Angular et Azure DevOps. Tu maîtrises ton sujet du back-end jusqu'à l'interface, sans zone d'ombre dans la chaîne.
On vise un profil avec au moins 6 ans d'expérience en C# et un solide bagage d'école d'ingénieurs. Français et anglais te servent au quotidien dans un environnement international.
Tu aimes posséder un périmètre de bout en bout ? Fais-toi connaître. 🙌
📨 Pour postuler → drh@xrays.fr
💶 Rémunération à partir de 4 000 € nets par mois, selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #csharp #angular #dotnet #azuredevops
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).
🎮 Jeu #09jeudi 27 août · 12h30
Question pour un ingé
multithreading · Difficile
POST jeudi 27 août · 12h30Le post (programmé LinkedIn)
🎮 Le Jeu du Jeudi 🎮
N°9. Question pour un ingé.
Deux threads écrivent dans la même structure de données partagée, sans verrou. Ça marche en test pendant des semaines. Ça casse en prod un jour de forte volatilité.
Pourquoi ça a tenu en test, et pourquoi ça casse pile ce jour-là ?
La meilleure explication sera épinglée. On veut le raisonnement, pas juste le mot "race condition".
Réponse demain en commentaire 🫵🏻
T0 jeudi 27 août · 12h301er commentaire (indice)
Indice pour cadrer : la question n'est pas "qu'est-ce qui casse" mais "pourquoi ce jour-là". Pensez probabilité et débit.
+2h jeudi 27 août · 14h30Relance
⏰ Plus qu'une heure pour tenter votre réponse 👇
Je lâche la solution demain, même heure. Postez vos hypothèses en commentaire, on en débat 👀
J+1 vendredi 28 août · 12h30Réponse d'ingé (complète)
Format ouvert. Réponse : la race condition existait depuis le début, mais la fenêtre de collision est minuscule. En test, le faible débit la rend quasi invisible. En prod, sous forte volatilité, le nombre d'écritures concurrentes par seconde explose, la probabilité de tomber dans la fenêtre devient quasi certaine. Le bug était latent, la charge l'a révélé.
J+1 vendredi 28 août · 12h30Réponse courte (option)
Deux threads écrivent sans verrou. OK en test, casse en prod un jour de forte charge. Pourquoi maintenant et pas avant ? Expliquez.
💼 Offre #18vendredi 28 août · 11h30
Software Engineer C#/Python pricer
Sous la mer · lounge de verre · auto-send LinkedIn
POST vendredi 28 août · 11h30Le post (programmé LinkedIn, auto-send)
La ligne de code que tu commites ce matin price un ETF cet après-midi. Pas dans six mois, pas après trois comités. En direct, au contact du desk, pendant que le marché bouge. ⚡
@XRAYS TRADING recrute un(e) Software Engineer pour développer et faire vivre les pricers Front Office.
Concrètement, tu codes en C# et Python les moteurs de pricing sur produits ETF et market making. Tu bosses coude à coude avec les traders, tu optimises en conditions réelles, et tu vois l'impact de ton code sur le P&L le jour même.
Ce qui rend le poste rare, c'est cette boucle courte entre l'idée, le code et le marché. Tu n'écris pas pour une roadmap, tu écris pour une session de trading.
On veut quelqu'un de solide en C# et Python, qui sait que pricer juste et pricer vite, ce n'est pas la même contrainte. Français et anglais te servent au quotidien, le desk est international.
Si la perspective de toucher la prod en temps réel te parle, on devrait se parler. 😉
📨 Pour postuler → drh@xrays.fr
💶 Rémunération à partir de 3 200 € nets par mois, selon expérience et niveau technique.
N'hésite pas également à consulter nos offres sur notre page LinkedIn ou directement sur xrays.fr 🚀
#financedemarche #recrutement #csharp #python #pricing #frontoffice
1er commentaire (à coller manuellement à la publication, non automatisable) : Le lien de l'offre (page Emplois LinkedIn XRAYS TRADING). Retape le « @ » devant XRAYS TRADING au moment de publier pour que la mention soit cliquable (un texte collé/CSV reste du texte brut).