- 🖥️ I’m a Java Software Engineer
- 🌱 I’m currently honing my programming skills
- 📫 Contact: https://linkedin.com/in/ruslanaprus
- 📖 I speak 🇺🇦 Ukrainian 🇬🇧 English 🇵🇱 Polish
A Java Spring application that provides a REST API to shorten URL. This project enables users to create short URLs for long links, manage those links, and track usage statistics like click counts.
• Java 21 • Spring Boot 3 • Spring Data JPA • Spring Security • JWT • PostgreSQL • Flyway • Jakarta Bean Validation • JUnit 5 • Mockito • Testcontainers • Docker • GitHub Actions • Springdoc OpenAPI
Details of the project
Short URL Management features:
- Generate unique short URLs for given long URLs.
- Allow users to define custom short codes (if not already in use).
- Track click statistics for each URL.
- URLs can have an optional expiration date.
- Support for active and expired URL statuses.
REST API:
- Fully-documented API using Springdoc OpenAPI.
- RESTful endpoints for creating, reading, updating, and deleting URLs.
- Pagination support for listing URLs.
Security:
- User authentication using JWT (JSON Web Tokens).
- Endpoints for user registration and login:
/api/v1/signup- Register a new user./api/v1/login- Authenticate a user and generate a JWT.
- Passwords are securely hashed using BCryptPasswordEncoder.
- Stateless, token-based session management.
A Java Spring application that provides a REST API and website for notes management. The purpose of this application is to provide an interface for managing notes, which handles user authentication, session management, account lockout mechanisms, and input validation. The application has two independent parts:
- MVC Module: Handles traditional web-based interactions.
- REST API Module: Offers standardised endpoints for integration with external systems.
Both modules share a centralised architecture for core functionalities, including JPA repositories, services, database entities, and caching, ensuring consistency and reusability.
• Java 21 • Spring Boot • Spring Data JPA • Spring Security • JWT • PostgreSQL • Flyway • Jakarta Bean Validation • Thymeleaf • JUnit 5 • Mockito • Springdoc OpenAPI •
Details of the project
REST API: CRUD endpoints for managing notes with operations like GET, POST, PUT, DELETE.
- Query-based searching to locate notes by a keyword.
- Data frequently reused within a request (e.g., fetched user details) is temporarily cached.
Security:
- Each user's notes are isolated and private.
- New users can sign up via
/api/v1/signup. - Endpoints
/api/v1/signupand/api/v1/loginare publicly accessible, while all other endpoints require authentication. - Stateless architecture is implemented with JWT authentication for secure token-based sessions.
- Passwords are hashed using a secure
PasswordEncoderimplementation. - Failed login attempts are tracked, with accounts locked temporarily after 3 unsuccessful login attempts.
Database:
- Managed with Spring Data JPA and PostgreSQL.
- Flyway handles schema migrations and initial data seeding.
Open API Documentation: Provides interactive Swagger UI for testing endpoints.
Web Application:
- Implements user-friendly navigation using the Thymeleaf template engine.
- Provides forms for login, signup, and note operations with dynamic content rendering.
A Java command-line application built as a performance analysis tool for computing Fibonacci numbers. The purpose of this project is to study and compare multiple algorithmic strategies, analyse their efficiency, and provide insights into execution time, memory usage, and system behaviour. The application consists of two main parts:
- Computation Module: Implements multiple independent strategies (recursive, iterative, dynamic programming, matrix exponentiation) for calculating Fibonacci numbers with varying complexity and performance characteristics.
- Benchmarking Module: Uses JMH to evaluate and compare implementations based on execution time, memory allocation, and garbage collection metrics.
Both modules share a structured architecture for core logic, ensuring consistency in computation, logging, and performance analysis across different strategies.
• Java 21 • Java Microbenchmark Harness (JMH) • JUnit 5 • Mockito
Details of the project
Computation Strategies: Multiple approaches for calculating Fibonacci numbers, each optimised for different use cases:
- Recursive (O(2ⁿ)): Simple and educational, suitable for small inputs.
- Iterative (O(n), O(1) space): Efficient for medium-sized inputs.
- Dynamic Programming (O(n)): Uses bounded memoization for improved performance.
- Matrix Exponentiation: Supports both linear and logarithmic implementations, enabling efficient large-scale computations.
High-Precision Calculations:
- Supports BigInteger and BigDecimal for handling extremely large Fibonacci numbers.
- Configurable precision using
MathContextfor fine-grained control in calculations.
Performance Analysis:
- Execution time is logged for each computation strategy.
- Benchmarks implemented with JMH provide detailed insights, including:
- Throughput (operations per millisecond)
- Memory allocation rates
- Garbage collection frequency and duration
- Results are exported (CSV/JSON) for further analysis.
Optimisation Insights:
- Identifies performance bottlenecks through collected metrics.
- Enables comparison of algorithm efficiency under different workloads.
Command-Line Interface:
- Interactive input for selecting computation strategy and Fibonacci index.
- Designed for experimentation and comparative analysis.
A Java-based web app managing clients, destinations, and tickets using PostgreSQL. Supports CRUD operations with Thymeleaf for HTML rendering and Hibernate ORM for data access.
• Java 21 • Hibernate ORM • Flyway • Thymeleaf • Jakarta Servlet • Tomcat • PostgreSQL • Docker • Gradle •
Details of the project
- Provides backend services to manage clients, planets, and tickets through HTTP.
- DAO layer is used to manage database transactions.
- DTO pattern is used for fetching and presenting a subset of entity attributes.
- The
IGenericServiceinterface andGenericServiceclass define reusable CRUD methods that can handle any type of entity. TicketServiceuses Hibernate Query Language to execute custom queries for data fetching by joining multiple tables and selecting specific fields.- Servlet is used to translate HTTP requests into service calls following the MVC design pattern.
- Thymeleaf templates to render responses.
A simple Java servlet app that displays time in a selected time zone together with a cat image. Uses cookies to remember previously selected time zone.
• Java 21 • Jakarta Servlet • Tomcat • Thymeleaf • SLF4J • Logback • JUnit • Mockito • Gradle • Docker • GitHub Actions •
Details of the project
- Returns pictures of the cute cats.
- Uses HttpFilter checking requests to
/timeendpoint to validatetimezoneparameter. - Uses
Thymeleafto render response pages (for both success and error). - You can deploy the application using Docker with the official Tomcat 10 image from Docker Hub.
A simple web server that serves images representing different HTTP status codes. These images are fetched from the https://http.cat API or served from a local cache.
• Java 21 • http.cat API • SLF4J • Logback • ttf font •
Details of the project
- This is an exercise in web server implementation based on
com.sun.net.httpserver.HttpServer. - Before downloading images from
http.catAPI, the application sends a HEAD request to ensure the image exists at the source. - For image handling optimization, caching is implemented at two levels:
- In-Memory Caching: To minimize file system access and API calls, recently requested images are stored as
CachedImageobjects, which include the image bytes and a timestamp. - File System Caching: Before fetching an image from the remote API, the file system is checked for a locally stored copy to avoid repeated downloads.
- In-Memory Caching: To minimize file system access and API calls, recently requested images are stored as
- During the download, images are written to temporary files to avoid partial downloads in case of network errors.
- Added custom cat-like fonts as a cute extra feature.
This project extends the functionality of the original SQL Database Operations Manager by introducing several significant new features, including database migrations using Flyway, implementation of CRUD operations for Workers, Clients, and Projects, and a flexible HTTP server to handle client requests for database communication.
• Java 21 • JDBC • PostgreSQL • SQLite • Jackson • Flyway • HikariCP • SLF4J • Logback • Dropwizard Metrics • JUnit • Mockito •
Details of the project
- Used Flyway Gradle Plugin for DB migrations.
- Used Template Method Pattern to implement
AbstractGenericService. The class works as a template and provides methods that represent steps for CRUD operations (preparing statements, executing queries, handling result sets) that vary by entity type, so they are implemented in subclasses. - Created 2 mappers:
EntityMapper- to map domain objects to SQL statements and vice versa, isolating SQL interactions from business logic, andJsonEntityMapper- to handle JSON data conversion, allowing the API to send and receive JSON-formatted data. MyHttpServerhandles HTTP requests by checking the HTTP method (GET,POST,PUT,DELETE) and routing the request to the appropriate service method. Includes error handling for unsupported methods (405), missing resources (404), invalid requests (400).HttpServerFactoryregisters context paths (endpoints) for each service, enabling the API to expose different resources (e.g.,/client,/worker). In this way, each service operates within a defined context path to provide clear routing based on resource type.
A collaborative project - Telegram bot that provides real-time currency exchange rates from various banks. It allows users to interact with the bot through a conversational interface, enabling them to customise settings and receive notifications based on their preferences.
My contribution: Designed and developed an interface component (keyboard) for a Telegram bot that is agnostic to specific settings and can automatically display new options and settings by dynamically generating keyboards based on provided data. This tool improved accessibility for users regardless of their preferences.
• Java 21 • Maven • Telegram Bot API • Telegram Client • Jackson • SLF4J • Logback •
Details of the project
- Real-Time Currency Rates: Fetches and displays the latest exchange rates from multiple banks.
- User Settings:
- Allows users to customise their settings, including preferred currencies and notification times.
- Settings are loaded from storage during initialisation, allowing the bot to resume with the same settings as before a shutdown.
- User settings can be stored in a JSON file and updated once the user clicks on a specific button. If the user doesn't choose any settings, default settings will be applied.
- Notifications:
- Bot sends notifications to users based on their settings.
- User can choose the convenient for them time for notifications.
- Scalability: Designed to be easily extendable for adding new banks or currencies, using external storage for user settings.


