Тимур Малик

Тимур Малик

Java Software Engineer

Я Java-разработчик, в основном занимаюсь серверной частью приложений. За время работы успел поучаствовать в проектах из разных областей: информационной безопасности, финансовых сервисов и государственных информационных систем.

За свою карьеру я участвовал в создании с нуля и выпуске четырёх программных продуктов. Работал на разных этапах разработки: от обсуждения требований и выбора технических решений до написания кода, тестирования и запуска готовых систем.

Мне интересно не просто реализовать отдельную задачу, а понимать, как работает система в целом, почему она устроена именно так и как её можно улучшить. Поэтому в моей практике есть и разработка новых сервисов, и работа со сложной логикой существующих систем, и поиск решений для повышения их производительности и надёжности.

Профессиональный опыт

Гарда Тех Солюшнс Групп

Ранее: Crosstech Solutions Group / CTSG

Май 2023 — сентябрь 2026

Java Backend Developer

Продукты информационной безопасности.

DAM/DBF — мониторинг и защита баз данных

Одним из самых интересных проектов для меня стала разработка системы класса Database Activity Monitoring / Database Firewall (DAM/DBF). Такие решения помогают контролировать обращения к базам данных, анализировать SQL-запросы и выявлять действия, которые могут нарушать политики безопасности.

На этом проекте у меня была своя основная зона ответственности — микросервис обработки SQL-трафика. Я занимался его разработкой и развитием, постепенно погружаясь в задачи, с которыми раньше практически не сталкивался. Именно здесь началось моё знакомство с Kafka Streams, которая впоследствии стала одной из основных технологий в моей работе.

Самой интересной и одновременно непростой частью оказалась обработка входящих данных. SQL-операции не всегда приходили в виде готовых запросов: прежде чем их анализировать, нужно было собрать связанные данные, восстановить целостную картину и подготовить её к дальнейшей обработке. Для решения этих задач я использовал Kafka Streams, работал с агрегацией, состоянием потоков и другими механизмами потоковой обработки.

Когда данные были подготовлены, начинался следующий этап — разбор SQL. Для этого я использовал ANTLR4, работал с грамматиками PostgreSQL, MySQL и Oracle, учитывал особенности их синтаксиса и постепенно расширял возможности парсера. Результат этой работы использовался для проверки операций на соответствие политикам безопасности и последующего анализа активности пользователей.

Со временем значительная часть работы сместилась в сторону развития и оптимизации микросервиса. Приходилось разбираться в поведении системы под нагрузкой, искать узкие места, пересматривать отдельные решения и добиваться более стабильной обработки данных.

Хотя основной моей специализацией оставался backend, я также работал с пользовательским интерфейсом на Jmix. В основном дорабатывал существующие экраны, когда новые возможности моего микросервиса требовали изменений в UI.

Кроме того, на этом проекте я разработал сервис уведомлений с отправкой сообщений по электронной почте. Он создавался как отдельный компонент, который могли использовать и другие продукты компании.

Jay Data — система маскирования данных

Jay Data — продукт для маскирования и обезличивания конфиденциальных данных, позволяющий использовать их в разработке и тестировании без раскрытия исходной информации.

Моя работа над проектом была связана преимущественно с развитием и оптимизацией существующих компонентов. Я занимался исправлением ошибок, переработкой механизма импорта конфигураций и переводом отдельных микросервисов с Jmix на классический Spring.

При таком переходе мы не ограничивались заменой технологий, а попутно пересматривали существующую реализацию, искали возможности упростить код, устранить лишние операции и повысить производительность.

Страница продукта

IDM — управление учётными записями и правами доступа

Ещё одним проектом, в разработке которого я участвовал, стала система класса Identity Management (IDM). Такие решения помогают компаниям централизованно управлять учётными записями сотрудников, их правами доступа и взаимодействием с различными корпоративными системами.

Мы подключились к проекту на раннем этапе его развития. Основной задачей команды была разработка и настройка интеграционных возможностей продукта под требования заказчика. Прежде чем приступить к полноценной разработке, пришлось достаточно глубоко разобраться в устройстве существующего решения, его возможностях и ограничениях.

Большая часть моей работы была связана с интеграциями. Я разрабатывал компоненты на Java, которые обеспечивали взаимодействие IDM с внешними информационными системами, занимался их настройкой, отладкой и тестированием. Это был интересный, хотя временами довольно непростой опыт: нужно было учитывать особенности взаимодействия разных систем и добиваться их корректной совместной работы.

Отдельной задачей стала организация тестирования интеграций. Чтобы не зависеть от доступности инфраструктуры заказчика, я с нуля разработал вспомогательный сервис, имитирующий поведение внешней системы. Он позволял управлять тестовыми данными и проверять различные сценарии взаимодействия. Со временем сервис стал полезен не только разработчикам, но и команде QA, аналитикам и Product Owner — каждый мог использовать его для проверки необходимых сценариев без обращения к реальной инфраструктуре заказчика.

Помимо разработки, я участвовал в развёртывании и демонстрации продукта в инфраструктуре заказчика. Позднее проект передали другой команде, и я помогал новым разработчикам разобраться в проделанной работе, особенностях интеграций и процессе развёртывания системы.

Страница продукта

Петрософт

Июнь 2022 — май 2023

Java Backend Developer

Государственные информационные системы

В Петрософте я занимался разработкой и сопровождением государственных информационных систем. Это был опыт работы с приложениями, которыми люди пользовались каждый день, поэтому здесь особенно важными были стабильность, корректная обработка данных и своевременное устранение ошибок.

Значительную часть работы составлял разбор инцидентов, поступавших от службы поддержки. Когда проблему не удавалось решить на её уровне, она передавалась разработчикам. Нужно было разобраться, что именно произошло, найти причину ошибки и исправить её, не нарушив работу других частей системы. Иногда проблема оказывалась достаточно простой, а иногда приходилось разбираться в существующей логике и взаимодействии нескольких компонентов.

Параллельно мы развивали функциональность действующих систем и участвовали в разработке их новых версий. Я работал с Java и Spring Boot, разрабатывал REST API, писал SQL-запросы для PostgreSQL и занимался интеграциями с внешними информационными системами.

Отдельной частью работы были интеграции через SOAP/XML. Здесь приходилось иметь дело с XSD-схемами, проверкой структуры сообщений и XSLT-преобразованиями. Это не самая увлекательная сторона разработки, но она дала мне хороший практический опыт работы со строгими форматами данных и требованиями к взаимодействию различных систем.

Помимо основных задач, я проводил code review и помогал junior-разработчику глубже разобраться в Java, Spring и особенностях проекта. Это был уже не первый мой опыт преподавания, поэтому мне было интересно не просто подсказывать решения, а объяснять, почему они работают именно так.

Andersen

Сентябрь 2021 — июнь 2022

Java Backend Developer

Java-разработка и микросервисные технологии

В Andersen я занимался Java-разработкой в рамках проекта банковского веб-приложения. Работа была сосредоточена на серверной части личного кабинета, взаимодействии между сервисами и механизмах безопасности.

Одним из основных направлений для меня стала работа со Spring Security. Я разбирался с аутентификацией и авторизацией пользователей, JWT-токенами, ролями и разграничением доступа к API. Параллельно занимался разработкой REST API и изучал особенности построения микросервисных приложений.

Значительная часть задач была связана с экосистемой Spring Cloud. Я работал с Eureka и Config Server, разбирался в организации взаимодействия сервисов и централизованном управлении конфигурацией. Также получил практику использования RabbitMQ для асинхронного обмена сообщениями.

Этот период стал важным этапом моего профессионального развития: я систематизировал знания Java и Spring, познакомился с командными процессами разработки и получил опыт работы над приложением, состоящим из нескольких взаимодействующих компонентов.

Сбербанк для Бизнеса

Июль 2021 — август 2021

Java Developer Intern

Практика Java-разработки

Моё знакомство с профессиональной Java-разработкой началось с участия в программе подготовки разработчиков от Сбербанка.

В рамках программы я проходил учебные курсы по Java, выполнял практические задания и постепенно закреплял знания на небольших задачах. Завершающим этапом стала итоговая задача, в которой нужно было применить изученный материал на практике.

Это был один из первых шагов в моём профессиональном развитии и хорошая возможность систематизировать знания перед дальнейшей работой с Java.

Преподавание и наставничество

Red Rover — преподавание Java

Октябрь 2021 — апрель 2023

Преподаватель Java

Мой преподавательский опыт начался довольно неожиданно. Во времена популярности Clubhouse я познакомился с людьми из IT-сообщества, и через эти знакомства узнал о школе Red Rover. Сначала сам прошёл у них курс по автоматизированному тестированию, а спустя некоторое время получил возможность помогать преподавать Java начинающим студентам.

Я работал вторым преподавателем на курсах подготовки QA Automation Engineer. Основной моей задачей было помогать студентам освоить Java Core на уровне, необходимом для написания автотестов.

Ученики приходили с совершенно разным опытом. Кто-то уже немного программировал, а кто-то впервые сталкивался с Java, средой разработки и даже простыми программами. Поэтому иногда приходилось начинать буквально с установки IDE и первого Hello, World, а затем постепенно переходить к более сложным темам.

Помимо помощи на основных занятиях, я проводил дополнительные уроки и разборы домашних заданий, придумывал собственные практические задачи и отвечал на вопросы студентов. Мне было важно не просто показать правильное решение, а объяснить материал так, чтобы человек действительно понял, что происходит в коде.

Для общения со студентами я создал Telegram-сообщество, где можно было задавать вопросы и получать помощь вне занятий. Со временем оно выросло до более чем тысячи участников из разных стран.

За время преподавания я успел поработать с несколькими потоками студентов. Позднее, когда основные проекты стали требовать больше времени, пришлось оставить преподавание и сосредоточиться на разработке.

Этот опыт оказался для меня полезен не только с точки зрения Java. Он научил объяснять технические вещи простым языком, находить подход к людям с разным уровнем подготовки и лучше понимать собственные знания через попытки передать их другим.

Технологический стек

Java и Spring

  • Java 7 / 8 / 11 / 17 / 25
  • Spring Boot
  • Spring MVC
  • Spring Security
  • Spring Data
  • Hibernate / JPA
  • MyBatis
  • Spring Cloud

Потоковая обработка и интеграции

  • Apache Kafka
  • Kafka Streams
  • RabbitMQ
  • REST API
  • SOAP / XML
  • XSD
  • XSLT

Базы данных и обработка данных

  • PostgreSQL
  • SQL
  • ANTLR4
  • Liquibase
  • Flyway

Пользовательские интерфейсы

  • Jmix
  • CSS

Доработка интерфейсов корпоративных приложений.

Инфраструктура, сборка и тестирование

  • Docker
  • Git
  • Maven
  • Gradle
  • JUnit
  • Mockito

PulseLog — история создания

PulseLog — от рабочих задач к собственному продукту

Идея PulseLog появилась не сразу. К ней я пришёл постепенно, сталкиваясь с одной и той же проблемой на разных проектах.

Впервые я серьёзно столкнулся с большими объёмами логов во время работы над государственными информационными системами. Мы занимались поддержкой действующих сервисов, разбирали инциденты и исправляли ошибки. Когда системой ежедневно пользуется большое количество людей, а сама она взаимодействует с множеством других сервисов, логов становится очень много.

Читать историю полностьюСвернуть историю

Тогда я воспринимал это как обычную часть работы. Есть ошибка, есть файлы с логами — открываешь, ищешь, сопоставляешь события и пытаешься разобраться, что произошло. Неудобно, долго, но особенно я об этом не задумывался.

Позже, уже работая над продуктами информационной безопасности, я снова столкнулся с той же историей. Приходит задача на исправление ошибки, к ней приложены логи нескольких сервисов, иногда за несколько дней. И прежде чем приступить к самой проблеме, приходится потратить немало времени, чтобы просто найти среди всего этого что-то полезное.

Однажды мне довелось увидеть, как подобные задачи решают в другой команде, где уже была организована централизованная работа с логами и трассировкой запросов. Мне понравилось, насколько проще становится расследование, когда можно проследить связанные события и быстро найти нужную информацию.

Тогда я ещё не собирался создавать собственный инструмент. Просто увидел, что с логами можно работать совершенно иначе.

Спустя некоторое время я начал подробнее разбираться в существующих решениях. И здесь обнаружилась другая сторона вопроса: удобная система сбора и анализа логов требует не только установки приложения. Нужно развернуть инфраструктуру, настроить сбор и хранение данных, подключить сервисы, а затем всё это поддерживать.

Для крупных проектов такие вложения вполне оправданны. Но что делать небольшой команде, которая только начинает разрабатывать продукт? Или проекту из нескольких микросервисов, для которого полноценная инфраструктура централизованного логирования пока избыточна?

Именно тогда я задумался: а почему работа с логами не может начинаться гораздо проще?

Представим, что у разработчика есть несколько файлов с логами разных сервисов. Почему бы не дать ему возможность просто запустить приложение, загрузить эти файлы и сразу начать с ними работать? Без сложного первоначального внедрения, настройки сбора данных и изменения существующих приложений.

Так постепенно появилась первоначальная идея PulseLog — инструмента, который помогает быстро перейти от набора сырых логов к информации, необходимой для расследования проблемы.

Но чем больше я обдумывал эту идею, тем яснее становилось, что обычный поиск по файлам решает только часть задачи.

В реальной разработке расследование инцидента часто начинается с задачи в баг-трекере. В описании есть шаги воспроизведения, скриншоты и приложенные файлы логов. Иногда это несколько файлов, иногда десятки, причём данные могут охватывать несколько дней работы разных сервисов.

И здесь возникает проблема: разработчик тратит время не столько на исправление ошибки, сколько на подготовку к её расследованию. Нужно найти нужные события, сопоставить их по времени, отделить полезную информацию от всего остального и понять, что действительно относится к конкретному случаю.

При этом далеко не каждая запись уровня ERROR указывает на причину инцидента. Некоторые ошибки могут повторяться постоянно, другие вообще не иметь отношения к исследуемой проблеме. Простой поиск по тексту помогает, но не всегда позволяет быстро разобраться в происходящем.

Мне захотелось изменить именно этот этап работы.

Вместо того чтобы вручную перебирать огромные файлы, разработчик должен иметь возможность загрузить логи, выбрать нужные источники, временной промежуток, уровни логирования и другие параметры, а затем сосредоточиться на небольшой части данных, которая действительно представляет интерес.

В идеале результатом такого анализа станет не очередной огромный файл, а компактный набор событий, связанных с конкретной проблемой. Его можно будет сохранить, приложить к задаче или передать коллеге вместе с выводами о том, что удалось обнаружить.

Причём подготовить эти данные сможет не только разработчик. Например, тестировщик, который обнаружил проблему, мог бы заранее выделить нужный временной промежуток и приложить к инциденту уже подготовленную информацию. А если ошибка затрагивает несколько сервисов, участникам расследования будет проще работать с общим контекстом.

Конечно, далеко не любую проблему можно понять за десять минут. Бывают сложные инциденты, в которых приходится разбираться часами, изучать код и исследовать взаимодействие множества компонентов.

Но достаточно часто существенная часть времени уходит именно на поиск и подготовку информации. И если этот этап удастся сократить с нескольких часов до нескольких минут, разработчик сможет быстрее заняться главным — поиском причины и устранением проблемы.

Именно поэтому я вижу PulseLog не просто как программу для просмотра логов, а как инструмент для расследования инцидентов.

Сейчас я развиваю его постепенно, начиная с базовых возможностей загрузки, обработки, поиска и фильтрации логов. В дальнейшем хочу сделать работу с источниками данных ещё проще и добавить возможности, которые помогут участникам команды совместно разбирать инциденты и обмениваться результатами анализа.

Я не ставлю перед собой задачу заменить существующие платформы мониторинга и наблюдаемости. У них есть свои преимущества и области применения. Мне интересна другая задача: сделать расследование инцидентов удобнее и доступнее для команд, которым не нужна сложная инфраструктура только ради того, чтобы разобраться в нескольких файлах с логами.

В конечном счёте я хочу, чтобы разработчик не воспринимал несколько огромных файлов в задаче как отдельную проблему. Он должен знать, что сможет быстро убрать лишнее, найти интересующие события и сосредоточиться на самой ошибке.

Ради этого я и начал создавать PulseLog.

Образование и языки

Образование

Профессиональный лицей №5 (бывшее училище связи)

2012 год.

Среднее специальное образование.

Направление: радиоэлектроника и связь.

Специальность: монтажник связи, кабельщик.

Дополнительное образование

Oxford — образовательный центр

2023 год.

Курсы английского языка.

Языки

  • Русский — родной.
  • Английский — A2.

Контакты