Dieses Wochenende war
Joker 2018 , es war interessant! Die Konferenz war jedoch nicht nur reich an Reden. Alle Sponsorenunternehmen haben versucht, sich vor dem Hintergrund der âWettbewerberâ abzuheben, und wir sind keine Ausnahme.
Am Stand von Sberbank Technologies gab es viele interessante Dinge, aber ich möchte darĂŒber sprechen, wofĂŒr wir uns auszeichneten.
Unser Apache Ignite- Entwicklungsteam bei SberTech bereitete die Aufgaben vor und zog unter denjenigen, die es wagten, sie zu lösen, ein Unentschieden.
Unter dem Schnitt finden Sie in den Kommentaren Aufgaben, Lösungsanalysen und die Möglichkeit, Ihre eigene Lösung zu rechtfertigen.
Wehe Committern
Petya und Kolya legen in
Apache Ignite ein Feature pro Tag fest.
Masha testet schnell alle Funktionen und setzt festgeschriebene Commits zurĂŒck.
Jedes dritte anfĂ€ngliche Commit von Petit und jedes fĂŒnfte von Kolya enthĂ€lt einen Fehler.
Petya verbringt zusÀtzliche 2 Tage, um den Fehler zu beheben, Kolya 3, und sie tun es erneut
begehen.
Wie viele Funktionen werden in 86 Arbeitstagen mitgeteilt, wenn Mascha Petja mag?
und sie bemerkt seinen Fehler nur an dem Tag, an dem nur er sich irrt?LösungAb dem 13. Tag wird ein Zyklus gebildet, der es Petya ermöglicht, nur jeden zweiten Fehler zu beheben.

Die Antwort64 + 54 = 118;
Villaribo und Villabaggio
Die Verarbeitung einer unzuverlĂ€ssigen Bank wĂ€hrend des Betriebs einer Gruppe von Konten blockiert SchlĂŒssel
Konten in der Reihenfolge ihrer ErklÀrung in der Operation, d.h. von links nach rechts.
Jeder Deadlock wird von den Spezialisten der Bank manuell gelöst und dauert zehnmal lÀnger.
Zeit als normaler Betrieb.
Die Verarbeitung einer zuverlĂ€ssigen Bank blockiert immer die aufsteigenden SchlĂŒssel, gibt jedoch 2 aus
mal mehr als eine normale Transaktion in einer unzuverlÀssigen Bank.
Beide Banken haben 10 Konten, die SchlĂŒssel der Konten sind Zahlen von 1 bis 10.
Die Verarbeitung jeder Bank erfordert 12 Operationen.
Die Operationen werden parallel durchgefĂŒhrt, zwei gleichzeitig. Jede Operation betrifft bis zu 3
Konten:
- Operation Nr. 1 (Konten: A, B, C), wobei A = i, B = A + 1, C = (A + B)% 10,
- Operation Nr. 2 (Konten: D, E, F), wobei D = 11-i, E = D-1, F = (D + E)% 10,
Ich variiere von 1 bis 6.
Die AusfĂŒhrung des nĂ€chsten Operationspaars beginnt erst nach vollstĂ€ndiger Fertigstellung
der vorherige.
Die SchlĂŒssel werden gemÀà den Richtlinien der Bank gesperrt, wobei jeweils einer der VorgĂ€nge beginnt
von Operation Nummer 1.
Wenn der SchlĂŒssel bereits in einer der Operationen gesperrt ist, aber eine andere ausfĂŒhren muss,
dann ist zuerst die erste Operation abgeschlossen, dann wird die zweite fortgesetzt.
Es wird erwartet, dass die erzwungene AusfĂŒhrung eines Operationspaars im sequentiellen Modus zweimal langsamer als parallel erfolgt.
Welche Bank und wie oft schneller wird der Betrieb abgeschlossen?HinweisGesamt:
- 6 Iterationen,
- 12 Operationen
- bei allen Operationen auĂer einer, jeweils 3 Tasten.

LösungWenn alle SchlĂŒssel unterschiedlich sind, ist eine parallele AusfĂŒhrung möglich.
Wenn nicht, dann nein, und Deadlock ist möglich.

BerechnungenEine unzuverlĂ€ssige Bank gibt fĂŒr eine Transaktion 1 "Takt", 2 fĂŒr "Schwierigkeiten" und bis zu 10 fĂŒr Deadlocks aus.
Eine zuverlĂ€ssige Bank gibt fĂŒr Transaktion 2 "MaĂnahmen" und 4 fĂŒr "Schwierigkeiten" aus. ZuverlĂ€ssige Deadlocks gibt es nicht.

Die AntwortZur gleichen Zeit abschlieĂen.
Risiken fĂŒr das öffentliche Repository
Serezha ist ein sehr erfahrener Programmierer, extrem spielend und unendlich gierig.
Einmal fand er den Quellcode seiner Lieblingstasche auf einem Github.
Was ist der Mindesteinsatz, den Seryozha gewinnen kann?Eine vereinfachte Trageliste ist beigefĂŒgt:
class Bid {
Tipp 1- 131072?
- Nein, raus aus der Falle :)
Tipp 2Was ist der Mindesteinsatz, den Seryozha gewinnen kann?
Tipp 3 th1{ bid.restricted = true; bid.checked = true; } ... th2{ while (!bid.checked) { sleep(1); } assert bid.restricted;
Es gibt keine intuitiv zu erwartenden Sichtbarkeitsgarantien.
Sie können sie wie folgt hinzufĂŒgen:
volatile boolean checked;
Tipp 4Was ist der Mindesteinsatz , den Seryozha gewinnen kann?
Die Antwort java.lang.Integer#MIN_VALUE
"0" und sogar "1" wurden jedoch als die richtige Entscheidung angesehen.
Gewinner
Am besten löste das Problem
-
Evgeny Zubenko-
Alexander Novikov-
Andrey GolikovDie Jungs bekamen MarkenrucksĂ€cke, T-Shirts und natĂŒrlich BĂŒcher.