Dies ist ein Interview mit Anton Batiaev vom Technologiezentrum der Deutschen Bank. Wir werden darüber sprechen, was Finanzmathematiker tun, woher Daten von Banken stammen, wie sie verarbeitet und optimiert werden. Über die Komplexität des Einstiegs in den Finanzsektor, den Handel an der Börse und den allgemeinen Bedarf an Banken.

Was und wie zählen sie auf der Bank?
- Stellen Sie sich bitte vor: Sagen Sie mir, wer Sie sind, was Sie tun.
Ich bin Anfang Januar dieses Jahres in das Deutsche Bank TechCenter gewechselt und entwickle jetzt die Serverseite in einem Projekt, das verschiedene Arten von Finanzinstrumentenrisiken für viele verschiedene Händler auf der ganzen Welt und andere Teams, die diese Daten benötigen, berücksichtigt.
Das Projekt hat eine ziemlich umfangreiche Infrastruktur aufgebaut, die viele gängige Standard-Frameworks verwendet, nicht relationale Datenbanken, die mit Big Data auf Kafka arbeiten. Wir arbeiten auch mit einem Raster für Zehntausende von CPUs, verwenden verschiedene benutzerdefinierte Projekte, optimieren die Arbeit mit Protobuf, implementieren Berechnungen in der Finanzmathematik,
Im Rahmen der Infrastruktur gibt es eine Reihe zusätzlicher Optimierungen und Chips. Vielleicht ist dies offensichtlich, aber es ist äußerst schwierig, konsistent und logisch zu sagen, was in der Bank passiert. Ein paar Prozent haben es geworfen und finanzielle Ressourcen erhalten - dies sind komplexe Aufgaben in den Bereichen Mathematik, Algorithmen und große Infrastruktur sowie Technik und Optimierung.
- Komm schon in Ordnung. Sie sagten, dass Sie in TechCenter Berechnungen fĂĽr die globale Bankplattform durchfĂĽhren. Und was kann man in der Bank beachten?
Nach meiner Erfahrung werden im Rahmen der Investitionstätigkeit sowohl die Preise als auch eine Reihe anderer Indikatoren für verschiedene Instrumente berücksichtigt. Wenn wir über Aktien sprechen, ist alles klar: Ein Angebot ist ihr Preis. Bei Anleihen ist dies ein Prozentsatz des Nennwerts.
Wenn es sich um Derivate (derivative Finanzinstrumente) handelt, entspricht der Preis der Höhe der Prämie, die für dieses Instrument gezahlt werden muss. Es wird nach vielen verschiedenen Formeln berechnet. Es gibt eine Black-Scholes-Formel , die den Wert von Optionen schätzt. Diese Funktion hängt von der Funktion des aktuellen Kurses, des zugrunde liegenden Vermögenswerts, der Volatilität, der Zeit bis zum Ablauf und vielen anderen Faktoren ab.
Es gibt Modelle, mit denen Sie den Wert des Portfolios des Händlers berechnen können. Eine Abteilung oder ein Unternehmen verfügt über eine Reihe von Transaktionen und derivativen Finanzinstrumenten in einem Portfolio, und Sie müssen berechnen, wie viel diese derzeit kosten. Separat kann es einen Preis geben, aber insgesamt - sie können irgendwie korrelieren, Rabatte gewähren und so weiter. Zum Beispiel synthetische Positionen: Wie man eine Option baut, die Futures aus Optionen entspricht. Dies ist beispielsweise für nichtlineare Vermögenswerte wie Optionen geeignet, gilt jedoch nicht unbedingt für alle Arten von Derivaten. Die Bewertung basiert auf der Notierung des Basiswerts, auf dem das Derivat basiert. Zum Beispiel das Notieren eines oder mehrerer Währungspaare. Derivate können auf verschiedenen zugrunde liegenden Vermögenswerten aufbauen: Für Währungen sind die zugrunde liegenden Vermögenswerte Euro, Dollar usw.; für Warenderivate - Öl, Gold, Weizen; für Spot - verschiedene Aktien und Anleihen.
Neben der Bewertung von Derivaten werden auch Risiken berücksichtigt - was passiert, wenn die Preise am Markt stärker stürmen (Volatilitätsänderungen). Oder was passiert, wenn der Dollar nicht 60, sondern 100 Rubel gegenüber einer oder allen anderen Währungen wert ist? Was passiert mit einem bestimmten Instrument, Portfolio?
Sie müssen dies in Echtzeit berechnen und den aktuellen Status des Portfolios an verschiedene nachteilige Ergebnisse von Preisbewegungen für jede der Währungen sowie an Änderungen der Marktvolatilität anpassen. Zu diesem Zweck erstellen wir eine Matrix aller möglichen Änderungen, die zeigt, was jetzt ist, was morgen passieren wird und was passieren wird, wenn eine Marktkrise auftritt.
Dies ist notwendig, um beurteilen zu können, was im aktuellen Moment gekauft und verkauft werden soll und welche Risiken bestehen. Und bewerten Sie unter anderem, was in Zukunft passieren wird, bewerten Sie Handelsstrategien und reagieren Sie genauer auf Marktveränderungen. Zum Beispiel hat eine der Quanten einen neuen Algorithmus zur Berechnung von Risiken entwickelt - Sie müssen historische Daten überprüfen, beispielsweise jahrzehntelang alle Austauschinformationen abrufen und sehen, was passiert.
Für diese Anforderungen gibt es eine Infrastruktur, die mit verschiedenen Austauschplattformen verbunden ist, die Marktdaten an uns übermitteln. Da unser Unternehmen weltweit über viele Daten verfügt, müssen wir Voraggregate irgendwie speichern und erstellen, um sie schnell verarbeiten zu können.
- Bevor wir zum Infrastrukturteil übergehen, möchte ich Sie fragen, was Sie bereits gesagt haben. Sie haben über eine Reihe von Analysealgorithmen aller Art gesprochen. Woher kommen diese Algorithmen? Ist dies eine Art Buchwissen oder Ihre Best Practices?
Es gibt einige Punkte. Zunächst werden bekannte Formeln und Algorithmen verwendet, die von Mathematikern erfunden wurden. Das allgemein akzeptierte Optionspreismodell ist beispielsweise die Black-Scholes-Formel. Daneben gibt es jedoch interne Verbesserungen: Insbesondere verwenden wir andere Gesetze der Preisverteilung, wir verdrehen die Koeffizienten in diesen Formeln. Die Formel für die Verteilungskurve für Preise, Deals und andere Indikatoren kann sehr unterschiedlich sein.
Wenn wir über Optimierung sprechen, sind dies bereits interne Verbesserungen. Beispielsweise können Entwickler anstelle der Berechnung von Indikatoren an jedem Punkt Schlüsselwerte berechnen und Annäherungen vornehmen, was 20-mal weniger Computerzeit kostet, aber gleichzeitig eine akzeptable und ausreichende Genauigkeit bietet.
Alle Daten ändern sich ständig, und dies ist für uns nicht nur wichtig für die Berichterstattung, sondern auch, um den Händlern ein aktuelles Bild der Marktlage zu vermitteln.
- Dies sind ziemlich komplizierte Informationen, und es ist wahrscheinlich ziemlich schwierig, sie von Person zu Person zu ĂĽbertragen. Wie groĂź ist Ihr Team und wie ĂĽbertragen Sie Wissen zwischen Ihnen?
Unser Projekt in Moskau beschäftigt 35 Mitarbeiter. Dies sind mehrere Teams, die sich mit bestimmten Funktionen befassen: Benutzeroberfläche, Backend, Infrastruktur, Finanzmathematik. Jedes dieser Teams verfügt über fundiertes Fachwissen in Bezug auf die Funktionalität eines bestimmten Moduls. Neben diesen Personen gibt es jedoch ebenso viele Personen, die an Systemen beteiligt sind, die mit unserem Projekt zusammenhängen.
Alle Informationen zu unserem Projekt werden von Analysten bei Confluence beschrieben und sind auch in den Aufgabenbeschreibungen in JIRA enthalten, wo Links zu Standardmechanismen und öffentlichen Formeln vorhanden sind. Beispiele für die Verwendung von Funktionen finden Sie in Tests. Nun, die menschliche Kommunikation wurde nicht abgebrochen.
- Finanzmathematiker: Wie viele gibt es und wer sind sie? Irgendwelche wichtigen Wissenschaftler?
Ja, es handelt sich hauptsächlich um Spezialisten (Quanten), die in London sitzen und Finanzmodelle für die Funktionsweise des Marktes erstellen. Meistens haben sie einen Doktortitel in Finanzen oder Mathematik. Sie wissen, wie der Markt funktioniert, was Händler brauchen, und können ein mathematisches Modell entwickeln, das die Marktlage, Risikoberechnungsalgorithmen und die korrekte Bewertung von Derivaten beschreibt.
Zum Beispiel schrieb mein Kollege Alexander einen Artikel über Habré , in dem er bereits die Erfahrung mit Quanten erwähnte.
- Können normale Entwickler mit ihnen kommunizieren? Wie läuft diese Kommunikation? In der Tat haben Mathematik und konventionelle Entwicklung völlig unterschiedliche Welten.
Sie können kommunizieren und kommunizieren: Es ist klar, dass einige Geschäftsaufgaben und -konzepte auf höchster Ebene mit Führungskräften besprochen werden, aber im Rahmen spezifischer Risikoberechnungen oder anderer Indikatoren kommuniziert der Entwickler direkt mit dem Händler oder Quantum, der dieses Modell erstellt hat.
In Wirklichkeit ist dies jedoch ein gegenseitiger Interaktionsprozess, da der theoretische Algorithmus in der Praxis nicht immer implementiert ist. Daher können Entwickler Änderungen am Modell vorschlagen, damit es auf der aktuellen Anwendungsarchitektur basiert.
Es gibt viele Möglichkeiten zur Interaktion - dasselbe Skype, Telefon, alle Standard-Kommunikationstools.
- Die Software, die als Ergebnis herauskommt, ist automatisch? Gibt es diese Roboter oder gibt es etwas für Händler, die sich mit technischen Analysen beschäftigen - Charts oder etwas anderes?
Es gibt verschiedene Optionen für die Verwendung von Software: Die erste erfolgt automatisch, d. H. Handelsroboter, der zweite ist ein Assistent des Händlers, der den aktuellen Status des Portfolios anzeigt und die Risiken bei verschiedenen Indikatoren, die Optionen für den Handel, die er jetzt ausführen kann, sowie den zukünftigen Status des Portfolios und die Risiken basierend auf den Ergebnissen dieser Operationen detailliert. Es gibt auch Indikatoren für Händler, Risikoberechnung und Daten zum Status von Portfolios.
- Eine andere Metrik ist die Häufigkeit der Datenanalyse. Wie oft machen Sie das? Auf der einen Seite des Spektrums, so wie ich es verstehe, einige Mikrosekunden und auf der anderen Seite die Analyse von Big Data, die Wochen dauern kann.
Abhängig von der Komplexität und Wichtigkeit der Indikatoren können dies Live-Indikatoren sein, die für jeden Tick neu berechnet werden. Anschließend erfolgt die Berechnung für Millisekunden. Und wenn wir die Kosten für Portfolios berechnen, erfolgen Aktualisierungen einmal pro Sekunde, sodass das menschliche Auge Zeit hat, sie wahrzunehmen.
Wenn Sie lange Berechnungen beschreiben (z. B. einige komplexe Risiken), deren Daten tagsüber benötigt werden, die Aufgaben an das Raster gesendet werden, wird das Szenario der Änderung von Währungskursen berücksichtigt. Der allgemeine Mechanismus lautet wie folgt: Sie berücksichtigen alle neuen Transaktionen innerhalb eines bestimmten Zyklus und erledigen dann eine schwierige Aufgabe im Netz, um die Indikatoren für die gesamte Gruppe von Transaktionen in der aktuellen Marktlage neu zu berechnen.
Solche Aufgaben können einmal pro Stunde aktualisiert werden. Wenn Sie Handelsstrategien verdrängen müssen - dies ist eine lange Aufgabe, werden sie geworfen und je nach Komplexität und Datenmenge für mehrere Stunden in Betracht gezogen. Aufgaben im Raster können entweder sehr klein sein, z. B. eine Formel berechnen und ein Ergebnis liefern, oder groß, z. B. für Tabellen, in denen Sie die Korrelationen aller möglichen Risikoszenarien berechnen und das kombinierte Ergebnis angeben müssen.
Hier erscheint die Aufgabe, die Last des Gitters zu optimieren und den Zeitpunkt der Berechnung der Aufgabe in Abhängigkeit von der Art des Werkzeugs, der Datenmenge und anderen Indikatoren vorherzusagen, um es maximal zu laden. Denn wenn Sie eine große Aufgabe erledigen, warten alle anderen in der Schlange, obwohl Sie in dieser Zeit etwas anderes zählen könnten.
Im Allgemeinen ist die Aufgabe eines Rucksacks und anderer Optimierungen. Wenn der Ping an das Grid länger ist als die Berechnungszeit selbst, wird dies im Backend durchgeführt, wo bereits ein Mini-Cluster für solch kleine Aufgaben bereitgestellt wurde.
- Kann ich es irgendwie in eine Art Struktur bringen? Soweit ich weiĂź, werden je nach Aufgabenvolumen unterschiedliche Optimierungsmethoden angewendet. Bei kleinen Aufgaben ist es sinnvoll, den JIT-Compiler zu optimieren, und bei groĂźen Aufgaben etwas anderes. Sagen Sie mir, was sind die Problembereiche und welche Methoden werden dort verwendet, um zu beschleunigen und zu optimieren.
Ein Beispiel für eine große Aufgabe ist die Berechnung aller Finanzinstrumente und -risiken, wenn die Kurse jeder Währung um 1-2-3-10% geändert werden. In diesem Fall besteht die Optimierung darin, Geschäfte in Bündel zu gruppieren, sodass innerhalb eines Bündels Geschäfte für einen Portfoliotyp oder eine Währung bestehen.
Damit es nicht viele Risikoberechnungen für jede Transaktion gibt, präsentieren wir sie als eine Transaktion für ein großes Volumen und teilen die Ergebnisse dann proportional auf. Dadurch reduzieren wir die Anzahl der notwendigen Berechnungen.
Ein weiteres Optimierungsbeispiel ist diesmal mit Währungspaaren. Nehmen wir an, es gibt zwei Paare von "Rubel-Dollar" und "Rubel-Euro". Im ersten Paar können Sie sich vorstellen, dass der Rubel fällt, aber es ist möglich, dass der Dollar wächst. In der Tat ist dies ein und dasselbe. Gleiches gilt für das Rubel-Euro-Paar. Dementsprechend können wir Paare betrachten, die auf den ersten Blick in einer Packung unterschiedlich sind, basierend darauf, dass sich der Rubel in beiden Fällen ändert.
Die Anzahl der Berechnungen wird reduziert und das Ergebnis beschleunigt. Es scheint eine Währung geändert zu haben (in unserem Beispiel der Rubel), aber tatsächlich haben wir die Risiken heterogener Vermögenswerte berechnet.
- Und können Sie das Problem direkt lösen und zu einem riesigen Cluster zusammenfassen?
Es gibt einen solchen Cluster, der jedoch bereits mit vielen Berechnungen geladen ist. Der Cluster ist trotz der derzeit vorhandenen Zehntausende von CPUs kein Gummi.
- Und aus Sicht von Software, In-Memory DataGrid oder Hadoop?
Ja, es gibt Hadoop und Kafka für die Verarbeitung all dessen und die ClickHouse-Datenbank für die Optimierung der Arbeit mit Big Data. In Bezug auf das Stapeln von Daten ist klar, dass das Fahren von JSONs, gelinde gesagt, ineffizient ist. In dieser Hinsicht gibt es Momente der Optimierung mit Protobuf. Es ist wichtig, dass wir nicht nur die Binärdaten ablegen, sondern dies auch mithilfe von Wörterbüchern so genau wie möglich tun.
In ihnen speichern wir beispielsweise Vertragsspezifikationen des gleichen Typs für alle Transaktionen. Aufgrund dieser Optimierung mit Wörterbüchern sparte ein Kollege 30% des belegten Speichers.
- Befinden sich diese Wörterbücher auf bestimmten Knoten und sind dupliziert oder befinden sie sich in einer zentralen Basis?
Unterschiedlich. Meistens in einer zentralen Basis. Und es gibt Wörterbücher, die Sie mit einer Reihe von Berechnungen in das Raster übertragen. Sie möchte so kompakt wie möglich sein, um nicht viele Daten zu ziehen, da Internetkanäle nicht aus Gummi bestehen.
Wie funktioniert es Sie senden die Berechnungsaufgabe mit allen erforderlichen Informationen an das Raster, die Sie in Wörterbücher packen, um Duplikate zu vermeiden. Im Inneren befindet sich bereits der gesamte Inhalt, und Sie müssen nicht zu zusätzlichen Repositorys wechseln. Dies spart Netzwerkverkehr und reduziert die Latenz bei Berechnungen.
- Soweit ich weiß, haben Banken eine Analyse historischer Daten, bei der es sich um ein riesiges Datenpaket pro Gigabyte-Terabyte handelt. Und der Ansatz mit einer einzigen Datenbank funktioniert nicht? Sie können 2 TB auf den Schlüssel setzen, aber es ist nicht gut.
Ja, solche Momente werden durch Portionieren entschieden. Sie haben lokale Caches nach Ländern, die durch Austauschinformationen verteilt sind, da das Senden von Informationen über alle Transaktionen von New York nach Singapur ressourcenintensiv ist. Es ist klar, dass hier die Aufteilung nach Ländern logisch ist: Beispielsweise werden Transaktionen in den USA in amerikanischen Rechenzentren durchgeführt. Eine ähnliche Situation mit Anführungszeichen: Sie müssen ein Routing erstellen und bestimmen, um welche Art von Geschäft es sich handelt und zu welcher Region es gehört. Um zu verstehen, wo sich die Caches befinden, müssen Sie es an die erforderlichen Speicher und Datenbanken senden und die Daten nicht erneut verfolgen.
- Und es kommt vor, dass Sie Daten aus verschiedenen Regionen zusammenfĂĽhren mĂĽssen?
Ja, das ist eine schwierige Aufgabe. Es ist klar, dass wir nicht Terabyte an Daten aus allen Regionen herauspumpen werden, um aggregierte Ergebnisse zu erhalten. Höchstwahrscheinlich berechnen Sie in jeder Region das lokale Aggregat dieser Region und sammeln dann alle diese Ergebnisse, um zusammenfassende Daten zu erhalten.
- Höchstwahrscheinlich gibt es externe Daten, z. B. den Austauschverlauf. Und wie geht man damit um? Spiegeln Sie sich im Inneren oder gibt es Möglichkeiten, sie zu verarbeiten?
Es gibt Protokolle und Verbindungen zu Standarddatenanbietern: Reuters, Bloomberg, die Austauschinformationen bereitstellen. Wir speichern die benötigten Daten in internen Speichern, aber einige Dinge können vom Datenanbieter erneut angefordert werden. Wieder nach Regionen, um den Verkehr nicht anzutreiben.
Es ist klar, dass sie auch Server auf der ganzen Welt bereitgestellt haben, um Geschwindigkeit und Leistung sicherzustellen.
- Und die Daten zum Lesen oder Lesen / Schreiben? Wenn der Rekord nicht beängstigend ist, solche Bände zu rollen?
Grundsätzlich wird beim Lesen und Schreiben Informationen über Transaktionen und andere von den Aufsichtsbehörden geforderte Informationen aufgezeichnet. Grundsätzlich Berechnungen für den Inlandsbedarf: Risiken, Wert von Portfolios usw. Dies ist eine interne Küche. Sie übergeben die Daten einer Region oder eines Rechenzentrums, ohne sie nach außen zu senden.
- Wenn ein Teil den Mond abbricht und zu einem Rechenzentrum fliegt, was passiert dann? Ist alles vorbei?
Daten in Rechenzentren werden gespiegelt. Es ist klar, dass sich die Daten innerhalb der Region nicht auf einer Festplatte in einem Rechenzentrum befinden. Andernfalls könnte wie bei diesem Fahrrad jede Putzfrau versehentlich den Server ausschalten. Alles wird online kopiert: Es gibt einen Datenstrom in beide Richtungen, Sie lesen aus dem nächsten Spiegel und Sie synchronisieren mit der Aufzeichnung, um die Konsistenz sicherzustellen.
In der Regel stehen jedoch viel weniger Informationen für die Aufzeichnung zur Verfügung, da diese dem Benutzer angezeigt werden müssen. Wenn er die Nachzählung nicht jetzt, sondern 2 Sekunden später von einer anderen Quelle sieht, ist es traurig, aber Sie können leben. Es ist klar, dass die Daten, die für Regulierungsbehörden, externe Vermarkter und Marktteilnehmer benötigt werden, in mehreren Quellen dupliziert und synchronisiert werden, um nichts zu verlieren.
Wie das Tech Center Deutsche Bank Daten aufbereitet und MĂĽll sammelt

- Frage zur Datenaufbereitung. Soweit ich weiĂź, hat jede Quelle ihr eigenes Format, und eine sofortige Konvertierung ist keine gute Idee. Bereiten Sie sie irgendwie auf Berechnungen vor?
Es gibt ein internes Einzelformat. Es ist klar, dass es bequemer ist, mit denselben Daten zu arbeiten, aber dies führt dazu, dass sie konvertiert werden müssen. Es gibt Datenströme und Teams, die für den Informationsaustausch verantwortlich sind und eine Verbindung zu Lieferanten herstellen. Sie bilden und bereichern Daten in unserem einzigen Format. Um Leistungsprobleme zu lösen, gibt es zwei Datenströme, einer davon ist ein schneller Zyklus, der Informationen aus dem Austauschdatenstrom ausgibt. Aus diesem Grund ist es weniger notwendig, zu verschiedenen Lagern zu gehen und eine Standardstruktur zu bilden. Darauf können Sie die benötigten Indikatoren in Echtzeit berechnen.
Und es gibt einen langsameren Zyklus, der denselben Stream verarbeitet, jedoch mit allen erforderlichen Feldern in unserem Format. Es werden immer langsamere Berechnungen ausgeführt, für die eine Reihe zusätzlicher Informationen, Felder und alles andere erforderlich sind.
- Wie sieht das aus Entwicklersicht aus? Wissen Sie immer, welcher Bereich der Datenbank von umfangreichen Berechnungen betroffen ist?
Es kommt ein Ereignis zu Ihnen, dessen Felder sowohl zu 100% als auch nur teilweise ausgefüllt werden können. Bei schnellen Ereignissen zählen Sie Indikatoren, die online schnell nachgezählt werden. In einem langen und langsameren Zyklus mit einem vollständigen Datensatz erzählen Sie Aufgaben, für die alle Indikatoren erforderlich sind. Dies ist der Fall, wenn Sie nicht tief gehen, da alles von den Besonderheiten der Aufgaben abhängt.
- Und auf was werden die Daten gespeichert? Festplatte, SSD, RAM, komplett im RAM?
Meistens in der Erinnerung. Wir arbeiten mit großen Heps an Backends, die Daten entweder in Standardstrukturen in Java oder in einem In-Memory-Datenraster verbrauchen und speichern, je nachdem, wie schnell und wie nah die benötigten Daten sind. Es ist klar, dass die historischen Daten der letzten Tage auf SSDs und Festplatten gespeichert werden. Was jedoch für Berechnungen benötigt wird oder benötigt wird, wird in den Cache im Speicher geladen.
- Ist es möglich, etwas ohne Caching, aber mit Informationsverlust und ungenauen Berechnungen zu tun?
Ja Ich habe ein wenig erwähnt, dass Sie manchmal das Risiko für die Änderungskette eines Vermögenswerts von 0 auf 100% berechnen müssen, da sich die Indikatoren geändert haben. Das Verteilungsdiagramm wird als Prozentsatz gemäß einer Formel oder einer linearen Beziehung erstellt. Sie erstellen wichtige Punkte und machen Annäherungen. Es werden die ungefähren Ergebnisse erhalten, die nicht zu 100% mit dem tatsächlichen Wert übereinstimmen, wenn wir an jedem bestimmten Punkt in der Grafik gezählt haben, aber ausreichen würden, um mit diesen Daten zu arbeiten.
Dieser Ansatz wird häufig verwendet, weil beispielsweise nicht alle Berechnungen durchgeführt werden können, wenn der Wert jeder Währung in Bezug auf alle anderen Währungen in Schritten von einem Cent geändert wird. Sie berechnen entweder die Bewegung mit einem seltenen Schritt oder wählen einige bestimmte Punkte aus und interpolieren den Rest. Werte für die Genauigkeit sind ausreichend.
- Ist es in Java immer sehr heiĂź oder ist alles off-hip?
Liegt meistens auf der HĂĽfte.
- Wie kämpfen Sie dann mit der Müllabfuhr?
Zusätzlich zur Standardüberwachung der Zuordnungen und der Häufigkeit des Garbage Collectors können Sie einige Dinge wie große Seiten optimieren, eine Reihe von Dingen ausführen, z. B. den richtigen Garbage Collector auswählen und so weiter. Sie können beispielsweise versuchen, Shenandoah zu verwenden. Einige Komponenten werden basierend auf dem Fehlen einer vollständigen GC als Phänomen gebaut und abgestimmt.
Dies ist ein iterativer Prozess: Jeden Tag erfassen Sie live ein Flammendiagramm, schauen sich an, wer Ressourcen wo verwendet, schauen sich die Häufigkeit der Zuweisungen an und worauf sie fallen, und beginnen, heiße Algorithmen im Code neu zu schreiben, um sie optimaler zu gestalten oder die Berechnung als Ganzes zu optimieren.
- Und wie sammelt man Metriken, wie erstellt man einen Flammengraphen?
, - Java-, , . ELK-, GC- , , . 150 — , . , 150 . , .
— Java GC ?
Java 8, 11- . . , , G1.
— ?
, . JVM.
— , , . - , ?
Ja, das kannst du. , . . ( 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. -, . , . , , , . .
, .
— ?
, «» . , , - , - . , , - «» . , , , , , .
— ?
-, , . Ich
: , , . . , , , . , .
, 150 , . - . , .
, , , . , , , — . , , .
-

— - , , , ?
, — . , - , - . , . , 4, .
, - . — . , .
, , . , .
— - - , ?
« ». — , — , .
- - , , - . , , .
, . , , . — . - , . , -.
, , . , , - ( -, - ).
— ?
. , . , , .
— , , , - . , — , .
. , : , - , .
, , - , , . , , , , — . , , , .
( , )
— , ? ?
, , Java. dependency injection, , , — , . , . . : , - .
Es ist sehr wichtig, sich um Multithreading zu kümmern, da Sie auf Leistungsprobleme stoßen. Wenn Sie mit der Parallelisierung von Berechnungen beginnen, ist es wichtig zu verstehen, was die Installation von Barrieren verursacht, wie die Synchronisierung korrekt durchgeführt wird und wo dies geschieht, bevor dies geschieht. Es ist notwendig zu entscheiden, in welcher Reihenfolge die Berechnungen gestartet werden, wie nicht standardmäßige Dinge für ein größeres und dichteres Styling verwendet werden sollen.
Wie Sie wissen, umfassen Dinge wie IntStream#distinct
das IntStream#distinct
in Java-Typen und anschließend die umgekehrte Operation. Es scheint nicht sehr beängstigend zu sein, aber bei großen Datenmengen werden Massenboxen und Anboxen spürbar, Speicher wird vergeblich verwendet. Sie müssen die Eingeweide von Java selbst verstehen, da Sie bei Kleinigkeiten wie dem Boxen eine Reihe zusätzlicher Zuordnungen generieren können, die Sie nicht benötigen. Und um dies rechtzeitig zu bemerken, müssen Sie in der Lage sein, Tools zu verwenden, um die Leistung zu bewerten, Metriken zu sammeln und andere Standards zu verstehen.
- MĂĽssen Sie die Besonderheiten der Bank kennen?
Nein, im Grunde. Wir alle verstehen, dass diejenigen, die die Besonderheiten der Bank kennen, bereits in Banken arbeiten. Wenn Sie aus einer anderen Sphäre kommen, kennen Sie sie höchstwahrscheinlich nicht. Ganz am Anfang können Sie die Dokumente zu allgemeinen Punkten studieren: Was sind Futures, was ist eine Option, wie unterscheiden sie sich, was sind die Risiken. Und Sie tauchen einfach ein und beginnen, die geschäftlichen Besonderheiten zu verstehen.
Trotzdem ist es wichtig. Zunächst können Sie einfach Funktionen implementieren, die nicht an eine bestimmte Geschäftsspezifität gebunden sind, sondern nach und nach komplexere und fachspezifische Dinge lernen. Was ist hier, was war am letzten Arbeitsplatz (als ich als Abteilungsleiter Mitarbeiter anstellte) - Sie bemerken, dass, wenn von zehn Personen mindestens einer versteht, was Zukunft ist, dies bereits gut ist.
Wenn Sie Kenntnisse über Algorithmen, Multithreading und Java im Allgemeinen haben, ist das Studium der Geschäftsspezifikationen nicht schwierig. Es stellt sich heraus, wenn Sie in diese Umgebung eintauchen, Dokumente lesen und verstehen.
- Wie werden Sie beim Interview so tiefe Java-Kenntnisse testen? Ist das echt?
Es ist klar, dass Sie sie höchstwahrscheinlich nicht überprüfen werden. Es gibt jedoch Standardaufgaben zu Logik, Algorithmen und zum Verständnis interner Strukturen. Dies ist eine Testaufgabe und Whiteboard-Codierung. Zum Beispiel eine Aufgabe zum Implementieren eines Caches in einer Warteschlange, die ein Verständnis dafür vermittelt, ob ein Kandidat Multithreading versteht - Rennen, Deadlocks und alles andere. Unterwegs können Sie Fragen dazu stellen, wie viel Speicher es verbraucht, warum TreeMap und nicht HashMap. Wenn Sie also ein allgemeines Problem lösen, können Sie die Momente aus verschiedenen Einzelheiten heraus betrachten. Hier eher die Praxis, nach der bestimmte Nuancen berechnet werden.
- Was muss Ihrer Meinung nach getan werden, um als Programmierer besser zu werden?
Entwickle dich! Codieren und Beobachten, welche Technologien und Algorithmen sind, welche neuen Sprachen, um algorithmische Probleme zu lösen. In der Tat hängt viel von der Erfahrung ab. Wenn Sie viele Probleme mit Algorithmen gelöst haben, können Sie etwas Ähnliches aus früheren Aufgaben in einem neuen Unbekannten finden. Es ist notwendig, das Denken zu entwickeln, die Fähigkeit, schnell Antworten zu finden. Die Möglichkeit, auf StackOverflow zu googeln und Lösungen zu finden, ist sehr nützlich. Wenn Sie etwas nicht wissen, aber wissen, wo Sie es finden können, ist dies der Weg zum Erfolg.
Sprachen ändern sich, Technologien und Frameworks werden transformiert. Neue Muster kommen, aber einige Muster bleiben, die jeder verwendet. Java-Konferenzen ohne Berichte über Reactive Streams und Gespräche über Kotlin werden nicht mehr bestanden. Es ist seltsam, in einem Kokon zu sitzen und nicht zu verstehen, dass Event-Sourcing in gewissem Sinne allmählich die Welt erobert.
Es ist notwendig, einen Hintergrund zu entwickeln. Zum Beispiel sind Knuts BĂĽcher immer noch relevant. Basis plus neue Technologien. Und Sie mĂĽssen wissen, wo und was Sie googeln sollen.
- Was war das Letzte, was er verstand?
In Kotlin Coroutines. Cool, ich mag es. Sowohl in der Syntax als auch in der Logik. Ich schaue mir an, wie man mit Multithreading und Asynchronität darin arbeitet. Bisher musste ich Kotlin sehr wenig verwenden. Jetzt studiere ich es aktiv, einige Projekte nutzen es bereits. Es existiert sogar in einigen kleinen Modulen auf dem Produkt.
