Ищем Middle Java Developer для разработки backend на Java и Spring Boot. Предстоит самостоятельно реализовывать функции в принятой архитектуре, писать тесты и сопровождать код. Решения обсуждаем с архитектором и Senior-разработчиками. Рассматриваем также Senior-кандидатов с опытом из раздела «Будет преимуществом».
Особые условия (обратить внимание):
- Формат работы: только офис
- Тип занятости: проектная работа до 30.07.2027. После выполнения проекта рассматривается возможность оформления в штат на постоянной основе.
Чем предстоит заниматься
- Разрабатывать backend-компоненты, REST/gRPC API, WebSocket-взаимодействие, обработчики сообщений и операции с БД.
- Реализовывать транзакции, проверки данных и фоновые задачи; работать с XML/XSD и интеграцией с КриптоПро.
- Писать unit- и интеграционные тесты, исправлять ошибки, оптимизировать Java-код и SQL; участвовать в code review, обсуждении требований и документировании API.
Обязательные требования
От 3 лет коммерческой разработки на Java; опыт самостоятельной реализации и сопровождения функций в промышленной эксплуатации.
- Java 17+ и многопоточность. Generics, коллекции, Stream API, records, исключения, equals/hashCode и изменяемость объектов. Понимание race condition и deadlock; применение synchronized, concurrent collections, ExecutorService и CompletableFuture. Обработка ошибок, тайм-аутов и прерываний, закрытие ресурсов через try-with-resources, контроль числа задач и потребления ресурсов.
- Spring. Spring Boot, Framework и Data: DI, конфигурация, жизненный цикл и scope бинов, AOP-прокси. Применение @Transactional: границы транзакций, rollback и self-invocation. Работа с @Async и executors; понимание границ транзакции при переходе в другой поток и рисков ожидания внешнего ответа внутри транзакции.
- PostgreSQL. SQL: JOIN, группировки, подзапросы; PK/FK/UNIQUE/CHECK, индексы и чтение EXPLAIN. Понимание ACID и уровней изоляции; атомарные обновления, блокировки и обработка конфликтов записи по принятой схеме. Миграции Flyway/Liquibase с учётом существующих данных и совместимости с кодом.
- JPA и Hibernate. Маппинг сущностей и связей, persistence context, жизненный цикл entity, lazy/eager loading, границы сессии и транзакции, разделение entity/DTO. Устранение N+1 через fetch join, EntityGraph или DTO-проекции; контроль SQL-запросов, применение @Version и обработка конфликтов.
- Kafka или RabbitMQ. Практика с одним из брокеров: topics/partitions/consumer groups/offsets либо queues/exchanges/routing keys/ack/nack. Публикация и обработка сообщений, подтверждения, повторная доставка, дедупликация, ограниченные retry и DLQ. Применение существующего механизма согласования записи в БД и отправки сообщения.
- REST и HTTP. Реализация API по OpenAPI-контрактам: DTO, валидация, ошибки, пагинация и серверные проверки. HTTP-клиенты, тайм-ауты, обработка временных и постоянных ошибок; безопасные повторы, идемпотентность изменяющих запросов и обработка конкурентных обращений.
- gRPC. Работа с Protobuf-контрактами, генерация stubs и серверных интерфейсов, реализация unary RPC. Deadlines, коды ошибок, отмена вызовов и совместимость сообщений при изменении контрактов.
- WebSocket. Серверная реализация средствами Spring: обмен сообщениями, жизненный цикл соединений, обработка ошибок и разрывов, освобождение ресурсов. Валидация сообщений, проверка прав доступа, ограничения размера сообщений и буферов.
- XML и XSD. JAXB/Jakarta XML Binding, пространства имён, атрибуты и кодировки. Чтение и изменение XSD: типы, ограничения, include/import. Валидация через JAXP (SchemaFactory, Validator), разбор ошибок, защита от XXE и ограничение доступа к внешним сущностям и схемам.
- КриптоПро. Опыт JCP и/или JCSP, JCA/JCE: формирование и проверка подписи по ГОСТ, доработка существующей интеграции. X.509, KeyStore, ключевые контейнеры; обработка результатов проверки цепочки доверия, срока действия и отзыва сертификата. Диагностика ошибок подписи, сертификата и доступа к ключу.
- Состояния и фоновые задачи. Реализация переходов по заданной модели, проверок допустимости и атомарных изменений; учёт повторных и конкурентных команд. Работа с принятыми механизмами запуска, повторов и восстановления задач; расширение обработчиков с сохранением контрактов.
- Тестирование и инструменты. JUnit 5, Mockito; интеграционные тесты с PostgreSQL и брокером через Testcontainers или аналог. Проверка валидации, rollback, повторов и ошибок. WireMock для HTTP, Awaitility для асинхронных результатов. Отладчик, логи, stack trace и анализ SQL; Git, Maven/Gradle, разрешение конфликтов зависимостей.
Будет преимуществом
Дополнительные навыки для задач уровня Senior и профессионального роста. Для позиции Middle владение всем перечнем не требуется.
- Самостоятельное проектирование компонентов, интерфейсов и взаимодействий, обоснование решений. Разработка переиспользуемых библиотек, Spring Boot starters и валидаторов конфигураций; применение Strategy, State, Specification и версионирование конфигураций.
- Java Memory Model, happens-before, volatile, ReentrantLock, Atomic-классы. Настройка ThreadPoolExecutor, размеров пулов, очередей и политик перегрузки; диагностика deadlock и исчерпания пула. Практика Virtual Threads в Java 21+.
- Сложные транзакционные сценарии: REQUIRED/REQUIRES_NEW, выбор изоляции и rollback; анализ взаимодействия транзакций, блокировок и асинхронного выполнения.
- PostgreSQL: MVCC, CTE, оконные функции, SELECT FOR UPDATE, составные и частичные индексы; EXPLAIN (ANALYZE, BUFFERS), оптимизация JOIN, сортировок и пагинации, планирование совместимых миграций.
- Hibernate: dirty checking, flush, batch fetching, pessimistic locking и пакетные операции; управление persistence context, загрузкой коллекций и её влиянием на пагинацию.
- Надёжная обработка сообщений: порядок событий и rebalance в Kafka, prefetch и publisher confirms в RabbitMQ; Transactional Outbox, границы at-least-once/exactly-once для БД и внешних вызовов.
- Проектирование и версионирование REST API, совместимость контрактов; реализация идемпотентности через ключ операции, ограничения уникальности и сохранение результата при конкурентных запросах.
- DOM/SAX/StAX, потоковая обработка больших XML; проектирование XSD и совместимость версий схем.
- Самостоятельная интеграция с КриптоПро: CMS/CAdES, XMLDSig, каноникализация XML и кодирование подписываемых данных; диагностика сложных ошибок провайдера и сертификатов.
- Оркестрация многошаговых процессов на Camunda/Flowable или аналогах либо реализация машин состояний без готового движка. Состояния, переходы, условия, события и таймеры; сохранение состояния в БД, восстановление после перезапуска, повторные события и защита от конкурентных переходов и захвата задач несколькими экземплярами приложения. Опыт Spring Statemachine и Drools.
- Тестирование конкурентных обновлений, прерывания и восстановления обработки с latch/barrier и управляемой синхронизацией; контрактные и property-based тесты.
- Анализ thread dump/heap dump, утечек памяти, блокировок и GC; JFR/JMC, async-profiler или аналоги. Применение JMH, проверка результатов оптимизации измерениями.
Условия
- Только офис в Москве. Оформление по ТК РФ. Вознаграждение от 300 000 рублей на руки, итоговый уровень — по результатам собеседования.
- Проектная работа до 30.07.2027. После завершения проекта рассматривается возможность перехода в постоянный штат.
- Разработка нового продукта вместе с архитектором и опытными разработчиками, возможность развивать технические навыки и брать более сложные задачи.