"Ils ont suggéré de se familiariser avec les calculs d'un indicateur, et il y a deux feuilles avec intégrales et dérivées secondes"

Ceci est une interview d'Anton Batiaev du Deutsche Bank Technology Center. Nous parlerons de ce que font les mathématiciens financiers, d'où proviennent les données des banques, comment elles sont traitées et optimisées. Sur la complexité d'entrer dans le secteur financier, le commerce en bourse et le besoin général de banques.



Quoi et comment comptent-ils à la banque?


- Présentez-vous, s'il vous plaît: dites-moi qui vous êtes, ce que vous faites.


J'ai déménagé au Deutsche Bank TechCenter au début de janvier de cette année et je suis en train de développer le côté serveur sur un projet qui prend en compte différents types de risques liés aux instruments financiers pour de nombreux traders du monde entier et d'autres équipes qui ont besoin de ces données.


Le projet a construit une infrastructure assez étendue qui utilise de nombreux cadres standard populaires, des bases de données non relationnelles, qui fonctionne avec des mégadonnées sur Kafka. Nous travaillons également avec une grille pour des dizaines de milliers de CPU, utilisons divers projets personnalisés, optimisons le travail avec protobuf, implémentons des calculs en mathématiques financières,


Dans le cadre de l'infrastructure, il existe un certain nombre d'optimisations et de puces supplémentaires. C'est peut-être évident, mais il est extrêmement difficile de dire de manière cohérente et logique ce qui se passe dans la banque. Quelques pour cent ont levé et obtenu des ressources financières - ce sont des mathématiques complexes, des algorithmes et de grandes infrastructures, des tâches techniques et d'optimisation.


- Allez dans l'ordre. Vous avez dit que dans TechCenter, vous effectuez des calculs pour la plate-forme bancaire mondiale. Et que peut-on envisager à la banque?


D'après mon expérience, dans le cadre des activités d'investissement, les prix et un certain nombre d'autres indicateurs de divers instruments sont pris en compte. Si nous parlons de stocks, alors tout est clair: un devis est leur prix. Pour les obligations, ce sera un pourcentage de la valeur nominale.


Si nous parlons de produits dérivés (instruments financiers dérivés), le prix correspond à la taille de la prime qui doit être payée pour cet instrument. Il est calculé par de nombreuses formules différentes. Il existe une formule de Black-Scholes qui estime la valeur des options - il s'agit d'une fonction qui dépend de la fonction du cours actuel, de l'actif sous-jacent, de la volatilité, du délai d'expiration et de nombreux autres facteurs.


Il existe des modèles qui vous permettent de calculer la valeur du portefeuille du trader. Un département ou une entreprise a un ensemble de transactions, des instruments financiers dérivés dans un portefeuille, et vous devez calculer combien ils coûtent actuellement. Séparément, il peut y avoir un prix, mais dans l'ensemble - ils peuvent d'une manière ou d'une autre corréler, accorder des remises, etc. Par exemple, les positions synthétiques: comment construire une option équivalente aux futures à partir d'options. Cela convient, par exemple, aux actifs non linéaires tels que les options, mais pas nécessairement vrai pour tous les types de dérivés. L'évaluation est basée sur la cotation de l'actif sous-jacent sur lequel le dérivé est construit. Par exemple, la cotation d'une ou plusieurs paires de devises. Les dérivés peuvent être construits sur différents actifs sous-jacents: pour la devise, les actifs sous-jacents seront l'euro, le dollar, etc. pour les dérivés de matières premières - pétrole, or, blé; pour spot - diverses actions et obligations.


En plus d'évaluer les produits dérivés, les risques sont également pris en compte - que se passera-t-il si les prix sur le marché baissent plus fortement (changements de volatilité). Ou ce qui se passera si le dollar ne vaut pas 60, mais 100 roubles par rapport à une ou toutes les autres devises. Qu'adviendra-t-il d'un instrument spécifique, un portefeuille?


Vous devez calculer cela en temps réel, et également rapprocher l'état actuel du portefeuille de divers résultats défavorables des mouvements de prix pour chacune des devises, les changements de la volatilité du marché. Pour ce faire, nous construisons une matrice de tous les changements possibles, qui montre ce qui est maintenant, ce qui se passera demain et ce qui se passera en cas de crise du marché.


Cela est nécessaire pour évaluer ce qu'il faut acheter et vendre dans le moment actuel et quels sont les risques. Et, notamment, évaluer ce qui se passera à l'avenir, évaluer les stratégies de trading et répondre plus précisément aux changements du marché. Par exemple, l'un des quanta a proposé un nouvel algorithme de calcul des risques - vous devez vérifier les données historiques, conduire, par exemple, pour toutes les informations d'échange pendant des décennies et voir ce qui se passe.


Pour ces besoins, il existe une infrastructure connectée à diverses plateformes d'échange qui nous transmettent des données de marché. Étant donné que notre entreprise possède de nombreuses données dans le monde, nous devons en quelque sorte stocker et créer des pré-agrégats afin de les traiter rapidement.


- Avant de passer à la partie infrastructure, je voudrais demander ce que vous avez déjà dit. Vous avez parlé d'un tas d'algorithmes d'analyse de toutes sortes, d'où viennent ces algorithmes? S'agit-il d'une sorte de connaissance du livre ou de vos meilleures pratiques?


Il y a quelques points. Tout d'abord, des formules bien connues, des algorithmes inventés par des mathématiciens sont pris. Par exemple, le modèle de tarification des options généralement accepté est la formule Black-Scholes. Mais, en plus de cela, il y a des améliorations internes: en particulier, nous utilisons d'autres lois de distribution des prix, nous tordons les coefficients dans ces formules. La formule de la courbe de distribution des prix, des offres et d'autres indicateurs peut être très différente.


Si nous parlons d'optimisation, ce sont déjà des améliorations internes. Par exemple, au lieu de calculer des indicateurs à chaque point, les développeurs peuvent calculer des valeurs clés et effectuer une approximation, ce qui coûtera 20 fois moins de temps d'ordinateur, mais en même temps, donnera une précision acceptable et suffisante.


Toutes les données changent constamment, ce qui est important pour nous non seulement pour le reporting, mais aussi pour donner aux traders une image à jour de l'état du marché.


- Il s'agit d'informations assez compliquées, et il est probablement assez difficile de les transférer de personne à personne. Quelle est la taille de votre équipe et comment transférez-vous les connaissances entre vous?


Notre projet à Moscou emploie 35 personnes. Ce sont plusieurs équipes qui s'occupent de certaines fonctionnalités: interface utilisateur, backend, infrastructure, mathématiques financières. Chacune de ces équipes possède une expertise approfondie dans la fonctionnalité d'un module particulier. Mais à côté de ces personnes, il y a autant de personnes impliquées dans les systèmes liés à notre projet.


Toutes les informations sur notre projet sont décrites par les analystes de Confluence, et elles sont également contenues dans les descriptions de tâches dans JIRA, où il existe des liens vers des mécanismes standard et des formules publiques. Des exemples d'utilisation des fonctionnalités peuvent être trouvés dans les tests. Eh bien, la communication humaine n'a pas été annulée.


- Mathématiciens financiers: combien y en a-t-il et qui sont-ils? Des scientifiques importants?


Oui, ce sont principalement des spécialistes (quanta) qui siègent à Londres et construisent des modèles financiers du fonctionnement du marché. Le plus souvent, ils ont un doctorat en finance ou en mathématiques. Ils savent comment fonctionne le marché, ce dont les traders ont besoin et peuvent trouver une sorte de modèle mathématique qui décrit l'état du marché, les algorithmes de calcul des risques et l'évaluation correcte des dérivés.


Par exemple, mon collègue Alexander a écrit un article sur Habré , où il a déjà mentionné l'expérience du quantum.


- Les développeurs ordinaires peuvent-ils communiquer avec eux? Comment se passe cette communication? En effet, les mathématiques et le développement conventionnel ont des mondes complètement différents.


Ils peuvent communiquer et communiquer: il est clair que certaines tâches et concepts métier de haut niveau sont discutés avec les dirigeants, mais dans le cadre de calculs de risques spécifiques ou d'autres indicateurs, le développeur communique directement avec le trader ou quantum qui a construit ce modèle.


Mais en réalité, il s'agit d'un processus d'interaction mutuel, car l'algorithme théorique n'est pas toujours mis en œuvre dans la pratique. Par conséquent, les développeurs peuvent proposer des modifications au modèle afin qu'il repose sur l'architecture d'application actuelle.


Il existe de nombreuses façons d'interagir - le même Skype, le même téléphone, tous les outils de communication standard.


- Le logiciel qui en résulte est automatique? Existe-t-il des robots ou existe-t-il quelque chose pour les commerçants qui sont engagés dans l'analyse technique - des graphiques ou autre chose?


Il existe plusieurs options d'utilisation du logiciel: la première est automatique, c'est-à-dire robots de trading, le second est un assistant pour le trader, qui montre l'état actuel du portefeuille, détaillant les risques à divers indicateurs, les options de trading qu'il peut désormais faire, ainsi que l'état futur du portefeuille et les risques en fonction des résultats de ces opérations. Il existe également des indicateurs pour les commerçants, le calcul des risques et des données sur l'état des portefeuilles.


- Une autre mesure est la fréquence de l'analyse des données, à quelle fréquence le faites-vous? D'un côté du spectre, si je comprends bien, quelques microsecondes, et de l'autre, l'analyse des mégadonnées qui peut prendre des semaines.


Selon la complexité et l'importance des indicateurs, il peut s'agir d'indicateurs en direct, qui sont recalculés pour chaque tick, puis le calcul se fait en millisecondes. Et si nous calculons le coût des portefeuilles, les mises à jour se produisent une fois par seconde, afin que l'œil humain ait le temps de le percevoir.


Si vous décrivez de longs calculs (par exemple, certains risques complexes), dont les données sont nécessaires au cours de la journée, puis les tâches sont envoyées à la grille, le scénario de changement des cotations de devises est considéré. Le mécanisme général est le suivant: vous considérez toutes les nouvelles transactions dans un certain cycle, puis vous effectuez une tâche difficile sur la grille pour recalculer les indicateurs pour l'ensemble des transactions dans l'état actuel du marché.


Ces tâches peuvent être mises à jour une fois par heure. Si vous devez chasser les stratégies de trading - c'est une tâche longue, elles sont lancées et pendant plusieurs heures, elles sont prises en compte, en fonction de la complexité et de la quantité de données. Les tâches sur la grille peuvent être très petites, par exemple, calculer une formule et donner un résultat, ou grandes, par exemple, pour les tableaux où vous devez calculer les corrélations de tous les scénarios de risque possibles et donner le résultat combiné.


Ici apparaît la tâche d'optimiser la charge de la grille et de prédire le temps de calcul de la tâche en fonction du type d'outil, de la quantité de données et d'autres indicateurs afin de la charger au maximum. Parce que si vous lancez une grosse tâche, tout le monde attendra en ligne, bien que pendant ce temps vous puissiez compter autre chose.


En général, la tâche d'un sac à dos et d'autres optimisations. Lorsque le ping sur la grille est plus long que le temps de calcul lui-même, nous le ferons sur le backend, où un mini-cluster a déjà été déployé pour ces petites tâches.


- Puis-je en quelque sorte le mettre dans une sorte de structure? Autant que je sache, différentes méthodes d'optimisation sont appliquées en fonction du volume de tâches. Sur les petites tâches, il est logique d'optimiser le compilateur JIT, et sur les grandes tâches, autre chose. Dites-moi quels sont les domaines du problème et quelles méthodes y sont utilisées pour accélérer et optimiser.


Un exemple d'une grande tâche est de calculer tous les instruments financiers et les risques lors du changement des cotations de chaque devise de 1-2-3-10%. Dans ce cas, l'optimisation consistera à regrouper les transactions en bundles de sorte que dans un bundle, il y ait des transactions pour un type de portefeuille ou une devise.


Pour qu'il n'y ait pas beaucoup de calculs de risques pour chaque transaction, nous les présentons comme une transaction pour un volume important, puis divisons proportionnellement les résultats. Ainsi, nous réduisons le nombre de calculs nécessaires.


Un autre exemple d'optimisation est cette fois avec des paires de devises. Disons qu'il y a deux paires de «rouble dollar» et de «rouble euro». Dans la première paire, vous pouvez imaginer que le rouble baisse, mais il est possible que le dollar augmente. En fait, c'est la même chose. Il en va de même pour la paire rouble-euro. En conséquence, nous pouvons considérer des paires qui sont différentes à première vue dans un seul paquet, sur la base que le rouble change dans les deux cas.


Le nombre de calculs est réduit et le résultat est accéléré. Il semble avoir changé une devise (dans notre exemple, le rouble), mais en fait, nous avons calculé les risques d'actifs hétérogènes.


- Et pouvez-vous résoudre le problème de front et le transformer en un énorme, énorme cluster?


Il existe un tel cluster, mais il est déjà chargé de nombreux calculs. Le cluster n'est pas en caoutchouc, malgré les dizaines de milliers de processeurs qui y sont actuellement.


- Et du point de vue des logiciels, In-Memory DataGrid ou Hadoop?


Oui, il y a Hadoop et Kafka pour le traitement de tout cela, et la base de données ClickHouse pour optimiser le travail avec les mégadonnées. En termes d'empilement de données, il est clair que la conduite de JSON est, pour le moins, inefficace. À cet égard, il y a des moments d'optimisation avec Protobuf. Il est important pour nous non seulement de mettre des données binaires, mais en même temps de le faire aussi étroitement que possible, en utilisant des dictionnaires.


Nous y stockons, par exemple, des spécifications contractuelles du même type pour toutes les transactions. Grâce à cette optimisation avec les dictionnaires, un collègue a économisé 30% de la mémoire occupée.


- Ces dictionnaires sont-ils sur des nœuds spécifiques et dupliqués ou situés dans une base centrale?


De différentes manières. Surtout dans une base centrale. Et il y a des dictionnaires que vous transférez sur la grille avec un tas de calculs. Elle veut être aussi compacte que possible afin de ne pas faire glisser beaucoup de données, car les canaux Internet ne sont pas en caoutchouc.


Comment ça marche? Vous envoyez la tâche de calcul à la grille avec toutes les informations nécessaires pour cela, que vous emballez dans des dictionnaires pour éviter les doublons. À l'intérieur, il y aura déjà tout le contenu, et vous n'avez pas besoin d'aller dans des référentiels supplémentaires. Cela économise le trafic réseau et réduit la latence dans les calculs.


- Pour autant que je sache, les banques ont une analyse des données historiques, qui est un énorme paquet de données par gigaoctet-téraoctets. Et l'approche avec une base de données unique ne fonctionne pas? Vous pouvez mettre 2 To sur la clé, mais ce n'est pas bon.


Oui, ces moments sont décidés par portionnement. Vous aurez des caches locaux par pays, répartis par échange d'informations, car l'envoi d'informations sur toutes les transactions de New York à Singapour nécessite beaucoup de ressources. Il est clair qu'ici la répartition par pays est logique: par exemple, les transactions aux États-Unis seront placées dans des centres de données américains. Une situation similaire avec des citations - vous devez créer un routage et déterminer de quel type d'accord il s'agit, à quelle région il appartient, afin de comprendre où se trouvent les caches, l'envoyer aux stockages et bases de données nécessaires et ne pas poursuivre les données à nouveau.


- Et il arrive que vous ayez besoin de joindre des données de différentes régions?


Oui, c'est le cas, et c'est une tâche difficile. Il est clair que nous n'allons pas pomper des téraoctets de données de toutes les régions afin d'obtenir des résultats agrégés. Très probablement dans chaque région, vous calculerez l'agrégat local de cette région, puis vous collecterez tous ces résultats pour obtenir des données résumées.


- Très probablement, il existe des données externes, par exemple, l'historique des échanges. Et comment les gérer? Vous reflétez-vous à l'intérieur ou existe-t-il des moyens de les traiter?


Il existe des protocoles et des connexions aux fournisseurs de données standard: Reuters, Bloomberg, qui fournissent des informations d'échange. Nous stockons les données nécessaires sur des stockages internes, mais certaines choses peuvent être demandées de nouveau au fournisseur de données. Encore une fois, par région, afin de ne pas générer de trafic.


Il est clair qu'ils ont également déployé des serveurs dans le monde entier pour garantir la vitesse et les performances.


- Et les données de lecture ou de lecture / écriture? Si le record n'est pas effrayant de rouler de tels volumes?


Fondamentalement, pour la lecture, l'écriture va tout en enregistrant les informations sur les transactions et autres informations requises par les régulateurs. Fondamentalement, les calculs des besoins intérieurs: les risques, la valeur des portefeuilles, etc. Il s'agit d'une cuisine interne, vous retournez les données d'une région ou d'un centre de données, sans les envoyer à l'extérieur.


- Si un morceau se détache de la lune et vole vers un centre de données, que se passera-t-il? C'est fini?


Les données des centres de données sont mises en miroir. Il est clair que dans la région, les données ne se trouvent pas sur un seul disque dur dans un centre de données. Sinon, comme dans ce vélo, toute femme de ménage pourrait accidentellement couper le serveur. Tout est copié en ligne: il y a un flux de données dans les deux sens, vous lisez dans le miroir le plus proche et vous synchronisez avec l'enregistrement pour assurer la cohérence.


Mais, en règle générale, beaucoup moins d'informations sont disponibles pour l'enregistrement, car elles doivent être affichées pour l'utilisateur. S'il voit le récit non pas maintenant, mais 2 secondes plus tard d'une autre source, c'est triste, mais vous pouvez vivre. Il est clair que les données nécessaires aux régulateurs, aux spécialistes du marketing externe et aux acteurs du marché sont dupliquées et synchronisées dans plusieurs sources afin de ne rien perdre.


Comment le Tech Center Deutsche Bank prépare les données et recueille les déchets



- Question sur la préparation des données. Pour autant que je comprends, chaque source a son propre format, et les convertir instantanément n'est pas une bonne idée. Les préparez-vous en quelque sorte pour les calculs?


Il existe un format unique interne. Il est clair qu'il est plus pratique de travailler avec les mêmes données, mais cela se traduit par la nécessité de les convertir. Il existe des flux de données et des équipes chargées d'échanger des informations et de se connecter aux fournisseurs. Ils forment et enrichissent les données dans notre format unique. Pour résoudre les problèmes de performances, il y aura deux flux de données, l'un d'eux est un cycle rapide qui fournira des informations provenant du flux de données d'échange. Pour cette raison, il est moins nécessaire d'aller à différents stockages et de former une structure standard. Sur celui-ci, vous pouvez calculer les indicateurs nécessaires en temps réel.


Et il y a un cycle plus lent qui traite le même flux, mais avec tous les champs nécessaires, dans notre format. Il exécute des calculs de plus en plus lents, qui nécessitent un tas d'informations supplémentaires, des champs et tout le reste.


- A quoi cela ressemble-t-il du point de vue du développeur? Savez-vous toujours quelle zone de la base de données est affectée par des calculs lourds?


Un événement vous arrive, les champs dans lesquels peuvent être remplis à 100% et seulement partiellement. Lors d'événements rapides, vous comptez les indicateurs qui sont recomptés en ligne rapidement. Sur un cycle long et plus lent avec un ensemble complet de données, vous recomptez les tâches qui nécessitent tous les indicateurs. C'est si vous n'allez pas en profondeur, car tout dépend des spécificités des tâches.


- Et les données sont stockées sur quoi? Disque dur, SSD, RAM, entièrement en RAM?


Surtout dans la mémoire. Nous travaillons avec de grands heps sur des backends qui consomment et stockent des données dans des structures standard en Java ou dans une grille de données en mémoire, selon la vitesse et la proximité des données dont vous avez besoin. Il est clair que les données historiques des derniers jours seront stockées sur des SSD et des disques. Mais ce qui est nécessaire ou peut être nécessaire pour les calculs sera chargé dans le cache, en mémoire.


- Est-il possible de faire quelque chose sans mise en cache, mais avec la perte d'informations, en utilisant des calculs inexacts?


Oui J'ai mentionné un peu que parfois il faut calculer le risque sur la chaîne de variation d'un actif de 0 à 100%, car les indicateurs ont changé. Le graphique de distribution est construit en pourcentage, selon une formule ou une relation linéaire. Vous construisez des points clés et faites des approximations. Les résultats approximatifs sont obtenus, ce qui ne coïncidera pas avec la valeur réelle de 100% si nous comptons à chaque point spécifique du graphique, mais serait suffisant pour travailler avec ces données.


Cette approche est souvent utilisée car elle permet, par exemple, de ne pas faire tous les calculs lors du changement de la valeur de chaque devise par rapport à toutes les autres devises, par incréments d'un centime. Vous calculez soit le déplacement avec une étape rare, soit la sélection de quelques points spécifiques, et l'interpolation du reste. Les valeurs de précision seront suffisantes.


- Est-ce toujours des grosses chaleurs en Java ou tout est-il décalé?


Se trouve principalement sur la hanche.


- Comment luttez-vous alors avec la collecte des ordures?


En plus de la surveillance standard des allocations et de la fréquence du garbage collector, vous commencez à peaufiner certaines choses comme des pages énormes, en faisant un certain nombre de choses comme choisir le bon garbage collector, etc. Par exemple, vous pouvez essayer d'utiliser Shenandoah. Certains composants sont construits et réglés en fonction du manque de GC complet en tant que phénomène.


Il s'agit d'un processus itératif: chaque jour, vous collectez un graphique de flamme en direct, voyez qui consomme des ressources et où, regardez la fréquence des allocations et ce sur quoi elles abandonnent, et commencez à réécrire des algorithmes chauds dans le code pour des algorithmes plus optimaux ou optimisez le calcul dans son ensemble.


- Et comment collectez-vous des métriques, comment construisez-vous un graphique de flamme?


, - Java-, , . ELK-, GC- , , . 150 — , . , 150 . , .


— Java GC ?


Java 8, 11- . . , , G1.


— ?


, . JVM.


— , , . - , ?


Oui tu peux. , . . ( UAT — user acceptance testing ) — , . , , . 2 , — 3 , , .


. , , , . , .


— , - , , ? ?


. : , GC, live set . - . — . , . , .


-, - . , . , JSON diff. JSON .


, . , , . .


— , , ?


, , . 100 «», . , . .


master, , , . , , , , . .


, , , , . , , . CI, .


— ?


. — , , . , , , , . - , .



— , .
— , , . , , , , - .


, - , — - , UI, . , , , , UI.


— ? «» Spring?


Spring, Java, MongoDB Protobuf, dependency injection. UI React, gRPC , .


— Mongo, Oracle. - ?


, , . . - , JDBC . - SpringData , JDBC. , , , .


— - CQRS?


, , .



— ? , …


.


— ? , .


, . , , ++ . GNU/Linux, Java. -, . , . , , , . .


, .


— ?


, «» . , , - , - . , , - «» . , , , , , .


— ?


-, , .
: , , . . , , , . , .


, 150 , . - . , .


, , , . , , , — . , , .


-



— - , , , ?


, — . , - , - . , . , 4, .


, - . — . , .


, , . , .


— - - , ?


« ». — , — , .


- - , , - . , , .


, . , , . — . - , . , -.


, , . , , - ( -, - ).


— ?


. , . , , .


— , , , - . , — , .


. , : , - , .


, , - , , . , , , , — . , , , .


( , )


— , ? ?


, , Java. dependency injection, , , — , . , . . : , - .


Il est très important de prendre soin du multithreading, car vous rencontrerez des problèmes de performances. Si vous commencez à paralléliser des calculs, il est important de comprendre ce qui provoquera l'installation de barrières, comment effectuer la synchronisation correctement, où se produira-avant. Il est nécessaire de décider dans quel ordre les calculs seront commencés, comment utiliser des choses non standard pour un style plus grand et plus dense.


Comme vous le savez, des choses comme IntStream#distinct impliquent des enveloppes de primitives dans les types Java et par la suite l'opération inverse. Cela ne semble pas très effrayant, mais sur de grandes quantités de données, la boxe de masse et l'anboxing seront perceptibles, la mémoire sera utilisée en vain. Vous devez comprendre les tripes de Java lui-même, car sur des bagatelles comme la boxe, vous pouvez générer un tas d'allocations supplémentaires dont vous n'avez pas besoin. Et pour le remarquer à temps, vous devez être en mesure d'utiliser des outils pour évaluer les performances, collecter des métriques et comprendre d'autres choses standard.


- Avez-vous besoin de connaître les spécificités de la banque?


Non, fondamentalement. Nous comprenons tous que les personnes qui connaissent les spécificités de la banque travaillent déjà dans les banques. Lorsque vous venez d'une autre sphère, vous ne la connaissez probablement pas. Au tout début, vous pouvez étudier les documents sur des points généraux: quels sont les futurs, ce qui est une option, en quoi diffèrent-ils, quels sont les risques. Et vous plongez et commencez à comprendre les spécificités de l'entreprise.


Mais néanmoins, c'est important. Au début, vous pouvez simplement implémenter des fonctionnalités qui ne sont pas liées à une spécificité métier spécifique, mais apprendre progressivement des choses plus complexes et spécifiques à un sujet. Qu'est-ce qui est ici, ce qui était au dernier lieu de travail (quand j'ai, en tant que chef du département, embauché des employés) - vous remarquez que si sur dix personnes au moins une comprend ce que sont les futurs, c'est déjà bien.


Si vous avez des connaissances sur les algorithmes, le multithreading et Java en général, étudier les spécificités de l'entreprise ne sera pas difficile. Il se révèle quand vous plongez dans cet environnement, lisez des documents et comprenez.


- Comment allez-vous tester une connaissance aussi approfondie de Java lors de l'entretien? Est-ce réel?


Il est clair que vous ne les vérifierez probablement pas. Mais il y a des tâches standard sur la logique, les algorithmes, la compréhension des structures internes. Il s'agit d'une tâche de test et d'un codage de tableau blanc. Par exemple, une tâche pour implémenter un cache dans une file d'attente qui permettra de savoir si un candidat comprend le multithreading - races, blocages et tout le reste. En cours de route, vous pouvez poser des questions sur la quantité de mémoire consommée, pourquoi TreeMap, pas HashMap. Ainsi, en résolvant un problème général, vous pouvez parcourir les moments de différentes spécificités. Ici, plutôt, la pratique par laquelle certaines nuances sont calculées.


- Que pensez-vous qu'il faut faire pour devenir meilleur en tant que programmeur?


Évoluez! Coder et regarder quelles sont les technologies et les algorithmes, quels nouveaux langages, résoudre les problèmes algorithmiques. En fait, cela dépend beaucoup de l'expérience. Si vous avez résolu de nombreux problèmes sur les algorithmes, vous pouvez trouver quelque chose de similaire à partir des tâches passées dans une nouvelle inconnue. Il est nécessaire de développer la réflexion, la capacité à trouver rapidement des réponses. La possibilité de google et de trouver des solutions sur StackOverflow est très utile. Si vous ne savez pas quelque chose, mais vous savez où le trouver, c'est la voie du succès.


Les langues changent, les technologies et les cadres se transforment. De nouveaux modèles viennent, mais certains modèles restent que tout le monde utilise. Les conférences Java sans rapports sur les flux réactifs et les discussions sur Kotlin ne passent plus. Il est étrange de s'asseoir dans un cocon et de ne pas comprendre que maintenant la recherche d'événements, dans un sens, envahit progressivement le monde.


Il est nécessaire de développer un fond. Par exemple, les livres de Knut sont toujours pertinents. Base plus nouvelles technologies. Et vous devez savoir où et quoi google.


- Quelle est la dernière chose qu'il a comprise?


Dans Kotlin Coroutines. Cool, j'aime ça. Tant en syntaxe qu'en logique. Je regarde comment y travailler avec le multithreading et l'asynchronie. Auparavant, je devais très peu utiliser Kotlin. Maintenant je l'étudie activement, certains projets l'exploitent déjà. Il existe même dans certains petits modules sur le prod.


Source: https://habr.com/ru/post/fr449630/


All Articles