Вольф Александр


36 лет

Краснодар,
не готов к переезду,
готов к редким командировкам

Желаемая должность: разработчик.

Информационные технологии, интернет, телеком

Занятость: полная занятость

График работы: полный день, удаленная работа

Отладка и поиск источника проблем.

Написание подробного ТЗ.

Управление разработкой, коммуникация с заказчиком задачи.

Март 2021 — по настоящее время

Sportmaster Lab

Старший разработчик

Kotlin, Spring boot, maven.

КОМПАС (март 2021)

Разработка платформы рассылки коммуникаций.
Текущие задачи: погружение в проект, подключение мониторинга.
Используемые технологии: Kotlin, Java, Spring boot 1.5-2.3, Maven, Oracle, (новое для меня:) RabbitMQ, Apache Camel.

Перед переходом в новую команду прошел крус Cousera "Kotlin for Java Developers", прочитал основную часть книги Kotlin in action (до 11 главы), почитал документацию по корутинам.

Июнь 2019 — по март 2021

Sportmaster Lab

Старший разработчик

Spring boot, maven.

Портал поставщика (июнь 2019 - март 2019)

Разработка нового функционала портала второй версии, поддержка портала первой версии.
Используемые технологии backend: Java 8, Spring boot 1.5, Hazelcast, Maven, Apache cxf, Hibernate validation, Jackson, Jasper reports, JUnit 5, AOP (AspectJ), logback, Swagger, Apache freemarker, Weblogic 12.
Используемые технологии: Oracle, Angular 5.
Достижения помимо успешной реализации бизнес-задач:
1. Включение тестов в пайплайн CI/CD и поднятие покрытия проектов тестами до 30%.
2. Реализация inhouse мониторинга api/сервисов нескольких нод, а также управления уровнем логирования slf4j (всё это с применением hazelcast).
3. Решение проблем с использованием oracle jdbc драйвера (применялось кэширование объектов, которое приводило к deadlock внутри пула weblogic).
4. Успешное становление зрелой командой в работе по методике канбан.
5. Проведение технического захода совместно с куратором из core-team в феврале 2020, результатом которого было существенное снижение технического долга и внедрение таких практик как мониторинг кода в sonarqube, подготовка к переходу с hg на git и целевая картина на применение pull request.
6. Перевод проектов с hg на git с сохранением истории и перенос их на bitbucket.
7. Внедрение практик pull request и формирование правил работы, описание первоначальных правил работы с техническим долгом, формирование правил применения практик мониторинга сервисов, описание code style в проекте, правил ведения репозитория.
8. Перенос публикации артефактов с ручного способа на автоматический в bamboo нескольких проектов.
9. Участие в улучшении процессов в команде (сформировали правила проведения релизов, тем самым сократив работу со стандартных 1,5 часов до 30-40 минут в штатной ситуации).
10. Помогал разработчикам E2E тестов сформировать api для прямого взаимодействия с процедурами БД (POST with JSON -> REST API -> DAO -> response in JSON) с помощью генератора кода.
11. Дорабатывал генератор кода DAO слоя - проводил рефакторинг, небольшие оптимизации и подключение мониторинга.
12. В самом начале актуализировал все библиотеки до максимально возможных с учетом совместимости с weblogic 12 и вычистке потенциальных мест с NPE.
13. Переработал и унифицировал обработку ошибок REST API (каждая ошибка 500 и часть из 4ХХ падала на поддержку письмом), включил в 500 ошибки файлы, которые прикладывают пользователи.
14. Оптимизировал объем классов загружаемых проектом в jvm, чтобы можно было делать несколько деплоев на weblogic без перезагрузки managed ноды (например, убрал groovy используемый лишь для конфигурации logback, убрал зависимость на spring data из которой использовался только класс Pair).


В это время прошел курсы Cleverics:
1. "DevOps: современный подход к организации работы в ИТ"
2. "Проект Феникс - DevOps на практике"
3. "Канбан-метод: практика построения быстрого потока"
4. "Метрики продуктовых команд"
А также:
1. Прошел внутреннее обучение по maven.
2. Небольшой внутренний курс по профилированию java приложений с использованием mission control по индивидуальному плану развития.
3. Продуктовая команда работала с методологом по внедрению канбан.


Интересное:
1. Наступили на ошибку в стандартной реализации JDK 8 HashMap.computeIfAbsent при которой происходило формирование неконсистентной карты (https://github.com/FireWolf2007/JavaTest).


Разработка приложения Портал поставщика (https://portalvendor.com/vendor/).
Технологии: UI Angular/Backend Java (Spring Boot 1.5)/Oracle (логика на хранимых процедурах).
Под проект выделена продуктовая команда 3 разработчика Oracle, 2 разработчика java, 1 разработчик frontend, 2 тестировщика, 4 аналитика, PL, 4 переводчика.

Разработка ведется по канбан.
Вся команда прошла обучение DevOps, Канбан.
В течение года у нас был методолог (канбан и DevOps), на текущий момент команда предоставлена сама себе и постоянно работает над совершенствованием сервиса поставки ценности.

На техдолг в рамках реинжиниринга выделено 10%.
Для задач применяется jira, для документации и ТЗ - confluence.

Java стек: java 8, Spring boot 1.5, apache cxf (генератор интерфейса клиента, клиентская часть, так и публикация веб-сервиса), dozer mapper (legacy), Hibernate validation, jackson, jasper reports, JUnit 5, AOP (AspectJ), logback, Hazelcast, swagger, freemarker.
Всё крутится под Weblogic, но от него используется только connection pool опубликованный через jndi.
В проде запущено 2 ноды.

На проектах UI/REST настроен CI/CD на тестовое окружение, на прод раскатывается по кнопке из bamboo.
На проекте используется git/bitbucket, система ветвления похожа на git-flow, применяется обязательное code review (я выполняю code review как java, так и angular).

SonarQube отслеживает покрытие кода тестами и качество кода, jacoco собирает информацию в момент выполнения тестов и отправляет её в SonarQube.
Текущее покрытие тестами 23%, целевое 80%, по факту 10% было покрыто за счет реализации новых бизнес задач за последние пол года.

Применяется ELK для сбора логов, передаем их через logback.

Hazelcast применяется для хранения сессий на 2-х нодах, а также для формирования распределенного кэша очереди (с таймаутом) обрабатываемых данных.

Swagger для генерации текущего REST API. Относительно недавно начали применять документирование REST через аннотации Swagger (с момента интеграции P2P через REST с смежной системой).

Freemarker применяется для генерации этикеток промышленным принтером этикеток Zebra.

Для генерации слоя DAO используется самописный maven-plugin, который на с использованием шаблонов freemaker генерирует DAO слой из xml (а также формирует этот же xml).
Общение с БД происходит через jdbc driver с использование SimpleJdbcCall.
Для генерации xml в БД написана специальная процедура, которая по имени процедуры выдает её мета-описание из которого формируется дескриптор в xml.

Есть легаси без тестов: старый портал, с которого происхдит реинжениринг портала поставщика.
Технологии: java 8, GWT, hibernate, liquibase, freemarker, jasper reports, maven, mercurial, weblogic, в проде 2 ноды.

Для разработки используется IDE IDEA Ultimate.

Достижения:
1. В начале 2020г проведен технический заход вместе с core-team: подключен анализатор SonarQube, выполнен рефакторинг кодовой базы (на 50% уменьшилось количество "нехорошего" кода по данным SonarQube), "оживил" не используемые тесты, разграничил их на ручные и автоматические, сформировал пул задач в техдолг на дальнейшее улучшение кодовой базы (50% из них уже закрыты).
2. Проект переведен с mercurial на git (с сохранением всей истории коммитов), а модель ветвления на вариант git-flow (раньше master -> n*feature branch -> release -> master). Сформирован план по переходу на git для репозитория БД, а также план по переходу на моно-репозиторий для всего проекта (сейчас 5 основных сильно связанных репозиториев).
3. Помог тестировщикам по созданию генератора REST контроллеров, представляющих прямой доступ к DAO слою, для покрытия проекта функциональными тестами.
4. Принимал непосредственное участие в составлении и защите (в момент приемки) тактики тестирования, а также плана по движению в направлении CI/CD.
5. Запросил обучение по maven для java-разработчиков (прошло внутреннее обучение от core-team).
6. Настоял и помогал формировать план обновления фреймворка на UI (сейчас Angular 5, практически полностью готово к миграции на следующую версию).
7. Обновил Spring boot, hazelcast, apache cxf и связанные библиотеки до последних, которые смогли запуститься на Weblogic 12.
8. Убрал ненужные зависимости из проекта, которые использовали 1-2 класса из библиотек (например, Pair из spring-data). Задал направление по постепенному устранению проблемных частей (пример: тяжелые аннотации в параметрах REST контроллеров @JsonArgument).

Июль 2018 — по июнь 2019

Integrated Information Solutions

Ведущий разработчик Java

Spring: core, hibernate, postgresql, docker, liquibase, vaadin, gradle.
Обновление кодовой базы 3-4 летней давности (spring framework, spring security, hibernate, extjs, apache cxf).
Продолжил миграцию с maven на gradle.
Обновил весь стек на свежие зависимости (spring fw/sec 4.3/4.2).

Разработка модуля на внутреннем фреймворке базирующемся на spring framework (spring framework, hibernate, vaadin).

Провел исследования фреймворков для frontend: angular, react (js/ts), react on kotlin-js. Сделал примеры приложений с использование graphql client.

С марта 2019 разрабатывал frontend на React (typescript) с нуля:
- динамические списки и редактор форм базирующийся на дескрипторе данных (json);
- клиент graphql;
- интеграция особого списка с динамической формой редактирования.

Использовал tomcat с помощью gradle gretty plugin и war на отдельном tomcat сервере.

Настроил spa приложение и java backend (graphql servlet) на одном порту через nginx.

Март 2017 — Июль 2018

Inquarta/КАЯН - Краснодар

Ведущий разработчик Java

Работал с JHipster, docker, Spring: core/boot/data/cloud stream (Kafka), liquibase, Elasticsearch, AngularJS, Angular 5, JAXB.

Разрабатывал систему телемаркетинга и управления виртуальной АТС (Мегафон megapbx.ru) для анализа качества работы менеджеров в области продажи недвижимости.

Достижения:
Написал API для загрузки и прослушивания звонков с cian.ru.
Написал API для полноценного управления ВАТС (megapbx.ru): полная настройка телефонов, переадресаций, управление отделами, прослушивание звонков; доработал callback для корректного улавливания и загрузки информации о поступивших звонках.
Запустил кластер Kafka для распределенной обработки сигналов от ВАТС.
За 3 месяца спроектировал, реализовал и запустил в работу систему лидогенерации.

Сентябрь 2011 — Март 2017

более 5 лет

Quickpay - Барнаул / Quickpay Inc. - США, Маями

ведущий программист, затем технический директор

Поддержка и развитие существующей системы.
Набор новой команды, организация работы.
Организация формирования документации по системе.
Создание правил разработки программного обеспечения.
5 лет управление командой разработчиков от 4 до 10 человек, участие в разработке и управлении задачами.
2,5 года удаленное управление комадной вне офиса (skype/redmine/email).

Май 2009 — Сентябрь 2011

2 года 5 месяцев

Quickpay - Барнаул

java/php программист

Поддержка и развитие существующей системы.

Февраль 2007 — Август 2008

1 год 7 месяцев

Quickpay - Барнаул

java/php разработчик

Поддержка и развитие существующей системы.

Октябрь 2004 — Октябрь 2006

2 года 1 месяц

программист

Написание сервера на базе icq-клиента micq (язык Си) для поиска контактов, отправки сообщений и регистрации новых uin-ов.
Проект успешно завершен.

Написание клиент-серверной системы для обработки СМС сообщений на java по протоколу SMPP.
Проект успешно завершен.

Java Spring Framework Hibernate

Git Typescript PostgreSQL Kotlin

Java: J2SE, J2ME.
J2ME: построение базовых приложений для отправки данных по SMS/GPRS, интерактивного общения с пользователем.
J2SE: приложения AWT, Swing, SWT, сетевые, серверные, с использованием БД, шифрование, обфускация приложений с шифрованием строк (с использованием BCEL), использование BlueCove/DBUS (уведомление о сообщениях черезbluetooth).
Java-библиотеки: Hibernate, JSP, Spring.
Java-контейнеры: Tomcat, jetty.
Базы данных: Postgresql, MySQL, Oracle (базовые знания).
Postgresql: знаком с PL/pgSQL/партиционированием/standby репликацией.

Навыки работы с системами контроля версий: GIT, SVN, CVS.
Опты работы с GIT более 5-и лет.

Знания по архитектурным решениям Java:

Pet-проекты:


За последнее время прочитал следующие книги:


Управление задачами: Redmine, Jira.
Документирование: XWiki, MediaWiki, Confluence.

Виртуализация: FreeBSD/jail, VirtualBox, QEMU, LXC, Docker.

FreeBSD: использование в качестве десктоп системы (в т.ч. и домашнего сервера) в течение 10 лет (с 1999г., с версии FreeBSD 3.4), перекомпилирование ядра, обновление системы, установка портов, написание/исправление портов, настройка PF, серверных приложений и т.д. На текущий момент приоритетная система для использования на процессинговых серверах из-за простоты конфигурирования и гибкости в настройке.
Linux: использование в качестве десктоп/серверной системы c 2009г для обеспечения совместимости между рабочими местами (Ubuntu).

5 лет управление командой разработчиков от 4 до 10 человек, участие в разработке и управлении задачами.
2,5 года удаленное управление комадной вне офиса (skype/redmine/email).

Другое:
PHP: разработка web и standalone приложений с 2001г. как без фреймворков, так и с использованием Zend fw с интеграцией к существующей системе доступа к компонентам форм.
С/С++: сетевые приложения, шифрование Tumar (для казахской системы, 2011г.), STL.
Прочие языки/навыки: Arduino, GWT, JavaScript, TypeScript, Assembler (DOS, Win32, BSD/Linux).
IDE: PhpStorm, IDEA, Eclipse, Arduino IDE.


Встречи и конференции:

4Д проект (Quickpay), ООО - Ахмеров Рамиль (директор) 

4Д проект (Quickpay), ООО - Сохорев Сергей (PHP программист) 

МПС (MPS Quickpay), ООО - Безручкин Евгений (директор) 

МПС (MPS Quickpay), ООО - Абрамов Антон (PHP программист) 

МПС (MPS Quickpay), ООО - Радюк Сергей (C/C++ программист) 

Inquarta, Лемешко Антон (директор) 

Высшее образование

2009, инженер-программист

Барнаул, АлтГТУ, ФИПИ, ПОВТ, диплом

Среднее образование

2002, лицей, специализация программирование

Барнаул, Инженерно-технический лицей №124

Русский — родной

Английский — читаю профессиональную литературу

Гражданство: Россия

Разрешение на работу: Россия

Желательное время в пути до работы: Не более часа