Server-side software engineer
Concurrency and distributed systems
||Netty, Protocol Buffers, JMH, Spring Framework, Hibernate ORM, JUnit, Mockito|
||PostgreSQL, Redis + Sentinel, Cassandra|
||ZooKeeper + Curator|
||Maven, Git, Docker, basic front-end knowledge, good understanding of the Java memory model (JLS 17.4; this presentation may back this claim)|
MongoDB / Calgary, Canada (remote)
Senior Java driver engineer / Jan 2021–current
Synopsys / Calgary, Canada
Senior software engineer / Apr 2018–Nov 2020
- Coverity Connect server (Tomcat, PostgreSQL, Hibernate ORM) —
stores and manages issues detected by code analysis tools
designed and developed export/import functionality (the technical side is more complex than it sounds) in pair with a colleague, designed and implemented support of this functionality in a cluster environment on my own;
- migrated from JDK 8 to JDK 11, took me about 1.5 months in case you are curious;
- cluster — identified and fixed/mitigated multiple bugs, including replication failures caused by
- incorrect inference of the order of replicated changes, here is my related blog post;
- broken transaction isolation due to incorrect cache strategy;
- incremental updates functionality — allows automatically updating client applications; fixed a number of bugs, optimized the process of downloading updates so that updates that are not needed or have been cached would not be downloaded.
ZeptoLab / Moscow, Russia
Senior server-side developer / Jan 2016–Mar 2018
Server-side developer / Dec 2014–Dec 2015
- King of Thieves server
(Netty, ZooKeeper + Curator, Protocol Buffers, Redis + Sentinel, Cassandra, Docker, Ansible, Datadog, Mixpanel)
- joined this project in Aug 2015, 7 months after the global release, and supported it / developed new features until resigning;
- implemented validation and processing of in-app purchases and subscriptions, here is my related blog post;
- implemented automatic data extraction/grouping from Mixpanel and sending it to partners.
- Server and client homegrown frameworks (Netty)
- developed from scratch;
- the server framework is similar to my server project, which is based on it.
- Configuration server (Netty, Hibernate ORM, JGroups, PostgreSQL, Tapestry) —
manages and delivers game configurations to game clients, supports having configurations for split-testing
- a couple of dozen projects started using it compared to only a single one before redevelopment.
- Notifications server/client (Netty, ZooKeeper + Curator, JGroups, Protocol Buffers, PostgreSQL) —
provides unified access to major push notification services, e.g., Amazon Device Messaging, Apple Push Notification Service
- refactored the design as inappropriate usage of ActiveMQ and Quartz Scheduler was causing performance bottlenecks;
- improved the throughput by an order of magnitude;
- when I resigned, this server was used by all ZeptoLab games.
Netcracker / Moscow, Russia
Senior software programmer / Aug 2013–Dec 2014
Software programmer / Apr 2010–Aug 2013
- TELUS Self Service Portal (JMS, WebLogic Server, Oracle Database)
- integrated with Oracle OpenSSO;
- availability — developed functionality allowing front-end servers to persist and later initiate asynchronous execution of tasks on back-ends. This allowed users to use some features of the portal even when back-end servers are temporarily unavailable.
- Data objects, a homegrown persistence library — developed various concurrent caches.
- Implemented OpenID authentication.
- Data migration (Oracle Database, Oracle PL/SQL).
I.T. Information Technology / Moscow, Russia
Implementation engineer / Jul 2008–Apr 2010
V.A. Kotelnikov Institute of Radioengineering and Electronics RAS / Moscow, Russia
Student / Sep 2006–Jun 2009
Moscow Institute of Physics and Technology / Dolgoprudny, Moscow Region, Russia
MSc in applied mathematics and physics / Sep 2007–Jun 2009 / Grade: 4.7 out of 5.0
BSc in applied mathematics and physics / Sep 2003–Jun 2007 / Grade: 4.3 out of 5.0