这个周末是
Joker 2018 ,这很有趣! 但是会议不仅有演讲。 所有赞助商公司都试图在“竞争对手”的背景下脱颖而出,我们也不例外。
Sberbank Technologies的展台上有很多有趣的事情,但是我想谈一谈我们的杰出表现。
我们 SberTech的
Apache Ignite开发
团队准备了任务,并吸引了敢于解决这些问题的人们。
在剪切下,您将在注释中找到任务,解决方案分析以及证明自己版本的解决方案的能力。
祸commit者
Petya和Kolya每天在
Apache Ignite中提交一项功能。
Masha快速测试每个功能并回滚包含错误的提交。
Petit的第三个初始提交和Kolya的第三个提交都包含一个错误。
Petya花了额外的2天时间来修正错误,Kolya 3,然后他们再次这样做
提交。
如果Masha喜欢Petya,那么在86个工作日内将传达多少功能,
她只有在他被误认为的那一天才注意到他的错吗?解决方案从第13天开始,形成了一个循环,该循环使Petya仅能修复第二个错误。

维拉里博和维拉巴乔
在对一组帐户进行操作期间处理不可靠的银行会阻止密钥
在操作中按照其声明顺序进行结算,即 从左到右。
银行的专家会手动解决每个僵局,而僵局的处理时间会增加十倍。
时间比正常运转。
处理可靠的银行总是会阻止密钥升序,但要花费2
比不可靠银行的正常交易高出三倍。
两家银行都有10个帐户,帐户密钥是1到10之间的数字。
每个银行的处理需要12次操作。
并行执行操作,一次执行两次。 每次操作最多影响3
帐户:
-工序1(帐户:A,B,C),其中A = i,B = A + 1,C =(A + B)%10,
-工序2(帐户:D,E,F),其中D = 11-i,E = D-1,F =(D + E)%10,
我从1到6不等。
仅在完全完成后才开始执行下一对操作
前一个。
根据银行的政策,每个操作中的一个都会锁定密钥,从开始
从操作编号1。
如果该键已在其中一项操作中锁定,但需要执行另一项操作,
然后首先完成第一个操作,然后继续第二个操作。
预计在顺序模式下强制执行一对操作要比并行执行慢2倍。
哪个银行可以完成操作并快几倍?提示总计:
-6次迭代,
-12次操作
-在所有操作中,一个键除外,每个键3个。

解决方案如果所有键都不相同,则可以并行执行。
如果不是,则为否,并且可能发生死锁。

计算方式一家不可靠的银行在一笔交易上花了1笔“圆通”,在“困难”情况下花了2笔,在僵局的情况下则花了10笔。
一家可靠的银行在交易2“措施”和“困难”情况下花费4。 可靠的死锁不存在。

公共存储库风险
Serezha是一位非常有经验的程序员,极度赌博并且极度贪婪。
一旦他在github上找到了自己喜欢的手提袋的源代码。
Seryozha可以赢得的最低下注是多少?随附一个简化的手提袋清单:
class Bid {
提示3 th1{ bid.restricted = true; bid.checked = true; } ... th2{ while (!bid.checked) { sleep(1); } assert bid.restricted;
没有直观期望的可见性保证。
您可以如下添加它们:
volatile boolean checked;
答案 java.lang.Integer#MIN_VALUE
但是,“ 0”甚至“ 1”被认为是正确的决定。
优胜者
最好的解决了这个问题
-
叶夫根尼·祖本科 (
Evgeny Zubenko)-
亚历山大·诺维科夫-
安德烈·戈利科夫 (
Andrey Golikov)他们得到了品牌的背包,T恤,当然还有书籍。