Position: Java Software Engineer
Category: Java
Experience: 4 years | English: upper

- Decreased Cassandra database load, improved query performance and system resilience by tuning compaction strategies, optimizing table structures, enhancing partition and clustering keys, revising the data storage approach and data retrieval strategies.
- Improved Elasticsearch data indexing and retrieval by optimizing indices schema and queries structure. Reduced Elasticsearch disk utilization approximately 10 times by tuning data analyzers.
- Improved complex searches in PostgreSQL database in several times by optimizing queries and database schema.
- Drastically reduced search and tasks execution time  by introducing caches (Redis, Guava, common maps) and preserving intermediate results on different levels of business logic.
- Significantly reduced Kafka consumer applications requirements by making code execution asynchronous (without loosing the reliability), tuning databases (Cassandra, Kafka) connection options, minimizing the size of transferred and stored data, so that allowed to handle production load of ~150k Kafka messages/sec and ~300k Cassandra updates per sec in a comparatively small deployment.
- Enhanced the development process by introducing Gradle and Nexus Sonatype to the company, unifying build logic, designing project build approach and development pipelines. Prepared presentation and conducted training session on a company level.
- Work as a member and as a lead of the Middleware team. Own projects and maintain products.
- Develop highly-loaded server-side Java applications to retrieve big data from different sources (Apache Kafka, continuously updated file system), process and store data into different databases (Cassandra, Elasticsearch, Redis/KeyDb, PostgreSQL).
- Develop REST API for data retrieval from those databases with subsequent filtering, aggregating and processing by user request.
- Design database schemas to store and query data in the most efficient way. Review and improve existing database schemas and queries
- Develop data processing and analysis algorithms, implement analytical libraries and services.
- Develop microservices that communicate through the REST API or direct network messages (Utilized Netty for communication and Google Protocol Buffers for serialization).
- Profile code (Java Flight Recorder) to detect memory leaks, CPU wasting, redundant garbage allocation, multithreading synchronization and database interaction issues, application bottlenecks. 
- Develop common libraries and general approaches to be widely used by other components, projects, teams (database clients wrappers, core business logic functionalities, library facades, etc.).
- Revise system micro and macro architecture, features implementation, data processing approaches, assess code and provide feedback on improvements.
- Respond to application issues identified in production, closely cooperate and assist the PSO team.
Integrate third-party projects and functionalities, prepare and verify product PoC versions.
- Write and maintain build scripts (Ant, Gradle).
- Cover existing code by unit tests (JUnit5, Mockito, PowerMockito, AssertJ, Awaitility, JMH).
Looking for a position in a company where I can apply my knowledge and achieve professional growth as a Java back-end Software Engineer, develop my skills, learn and apply best practices.