go-разработчик backend-сервисов

в пределах рынка
вакансия ~ 300 000 ₽
в среднем 307 546 ₽
Загрузи резюме, чтобы видеть мэтчи с вакансиейЗагрузи резюме, чтобы видеть мэтч с вакой

подготовься к отклику

ai-инструменты

Чтобы адаптировать резюме под вакансию или составить сопроводительное письмо, загрузи резюме

Рекламный баннер: ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "ЦЕНТР НАЦИОНАЛЬНЫХ ИНТЕЛЛЕКТУАЛЬНЫХ СИСТЕМ"
О рекламодателе
ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "ЦЕНТР НАЦИОНАЛЬНЫХ ИНТЕЛЛЕКТУАЛЬНЫХ СИСТЕМ"
ИНН: 9704271170

описание

Ищем Middle Go Developer для разработки backend-сервисов. Предстоит самостоятельно реализовывать функции в принятой архитектуре, писать тесты и сопровождать код. Решения обсуждаем с архитектором и Senior-разработчиками. Рассматриваем также Senior-кандидатов с опытом из раздела «Будет преимуществом».

задачи

  • Разрабатывать сервисы на Go, REST API, gRPC-взаимодействие, обработчики сообщений и операции с БД.
  • Реализовывать транзакции, конкурентную обработку и фоновые задачи; работать с XML/XSD.
  • Писать unit- и интеграционные тесты, проводить нагрузочное тестирование; исправлять ошибки и оптимизировать Go-код и SQL.
  • Участвовать в code review, обсуждать решения с командой, поддерживать документацию API и компонентов.

требования

  • От 3 лет коммерческой разработки на Go; опыт самостоятельной реализации и сопровождения функций в промышленной эксплуатации.
  • Go.
  • Структуры, указатели, slices, maps и interfaces; передача значений, общий backing array у slices и nil в интерфейсах. Небольшие интерфейсы, композиция, разделение обработчиков, прикладной логики и доступа к данным. Go modules и зависимости.
  • Сохранение причины ошибки, errors.Is/As, defer, panic/recover. Работа с io.Reader/io.Writer, частичными чтениями; закрытие файлов и тел HTTP-ответов.
  • Goroutines, channels, select, sync.WaitGroup/Mutex; понимание data race и deadlock, защита общих данных, корректное закрытие channels и завершение задач. Применение ограничений параллелизма и очередей, контроль фоновых задач при остановке сервиса.
  • Передача context.Context в SQL и межсервисные вызовы, тайм-ауты и отмена, вызов cancel и освобождение ресурсов. Понимание, что отмена context не завершает goroutine автоматически.
  • JOIN, группировки, подзапросы; PK/FK/UNIQUE/CHECK, индексы и чтение EXPLAIN. pgx/pgxpool или database/sql: параметризованные запросы, пул соединений, тайм-ауты, закрытие Rows, проверка ошибок итерации и обработка NULL. Контроль числа запросов и устранение N+1.
  • ACID и конфликты конкурентных изменений; выполнение связанных запросов через один Tx, обработка Commit/Rollback и конфликтов записи. Отсутствие длительных сетевых вызовов внутри транзакции. Миграции goose/golang-migrate или аналогом с проверкой данных и совместимости схемы с кодом.
  • Обработчики на net/http или фреймворке поверх него; OpenAPI, DTO, JSON, валидация, ошибки и пагинация. Переиспользование Client/Transport, тайм-ауты, ограничения размера запросов, обработка ошибок и ограниченные повторы с учётом идемпотентности.
  • Реализация методов по Protocol Buffers-контрактам, работа со сгенерированными клиентами, status codes, deadlines и cancellation. Сохранение совместимости сообщений.
  • Применение принятой аутентификации и авторизации, проверка прав на объект. Валидация JWT через библиотеку: подпись, допустимый алгоритм, issuer, audience и срок действия.
  • Чтение и запись, TTL, правила ключей и инвалидации. Обработка отсутствующих и устаревших значений, тайм-аутов и отказа кэша с сохранением корректности приложения. Понимание отличий pipeline от атомарной операции.
  • Практика с одним брокером: topics/partitions/consumer groups/offsets либо queues/exchanges/routing keys/ack/nack. Публикация, обработка и подтверждения, повторная доставка, идемпотентность, дедупликация, ограниченные retry и DLQ. Применение существующего механизма согласования записи в БД и отправки сообщений.
  • Переходы по заданной модели, проверки допустимости, атомарные изменения, защита от повторных и конфликтующих операций. Работа с принятыми механизмами запуска, повторов и восстановления задач; расширение пакетов и обработчиков с сохранением контрактов.
  • encoding/xml, теги структур, пространства имён, атрибуты, кодировки и ограничения размера данных. Чтение и изменение XSD: типы, ограничения, include/import. Работа с подключённым валидатором или сервисом: ошибки проверки и контроль доступа к внешним ресурсам.
  • testing, table-driven tests, subtests, подмена зависимостей через интерфейсы. Проверка граничных случаев, ошибок и отмены; go test -race и разбор гонок. Интеграционные тесты с PostgreSQL, Redis и брокером через Testcontainers for Go или аналог: rollback, повторы и доставка сообщений. httptest, проверка ошибок gRPC.
  • Структурированные логи, stack trace, данные запросов и отладчик. Git, gofmt, go vet, статический анализ и code review.
  • Будет плюсом: Самостоятельное проектирование сервисов, границ компонентов, владения данными и контрактов; выбор синхронной или событийной модели. Переиспользуемые Go-пакеты и обоснованное применение generics; Go Memory Model, happens-before, sync.RWMutex, sync/atomic, errgroup. Диагностика сложных data race, deadlock и утечек goroutines; Проектирование worker pool, ограниченных очередей, backpressure и graceful shutdown. Потоковая обработка, частичные чтения и записи, контроль объёма данных в памяти; PostgreSQL: MVCC, уровни изоляции, CTE, оконные функции, SELECT FOR UPDATE, оптимистическая блокировка. Обработка deadlock и ошибок сериализации; EXPLAIN (ANALYZE, BUFFERS), составные и частичные индексы; Оптимизация пула соединений, пакетных операций и COPY. Миграции схем и данных с учётом блокировок и одновременно работающих версий приложения; Проектирование REST/gRPC-контрактов, совместимая эволюция Protobuf, interceptors. OAuth 2.0/OpenID Connect, ротация ключей проверки токенов, retry с backoff и jitter; Стратегии кэширования и инвалидации, singleflight и защита от массового обновления значения; транзакции Redis, Lua-скрипты и ограничения блокировок на основе TTL; Надёжная обработка сообщений: порядок и rebalance в Kafka, prefetch и publisher confirms в RabbitMQ; Transactional Outbox, границы at-least-once/exactly-once для брокера, БД и внешних вызовов; Идемпотентность через ключ операции, ограничения уникальности и сохранение результата; обработка частичного выполнения и неопределённого результата удалённого вызова; Проектирование фоновых задач с сохранением состояния, восстановлением после перезапуска и защитой от захвата несколькими экземплярами сервиса. Temporal или аналоги, компенсации многошаговых операций; Потоковая обработка больших XML через Decoder; проектирование и версионирование XSD, выбор и интеграция валидатора; Самостоятельная интеграция с КриптоПро: CMS/CAdES, XMLDSig, присоединённая и отсоединённая подпись, каноникализация XML, кодирование подписываемых данных. cgo: передача указателей, память Go/C, освобождение нативных ресурсов; Тестирование переполнения очередей, остановки и восстановления сервиса с управляемой синхронизацией; fuzzing парсеров и преобразований, benchmarks и benchmem; pprof, go tool trace: CPU-, heap-, goroutine-, mutex- и block-профили. Аллокации, escape analysis, GC, удержание backing arrays, лишние копирования; применение sync.Pool после измерений; Инструментирование кода через OpenTelemetry: метрики, трассировка, перенос контекста через HTTP/gRPC и сообщения; диагностика задержек во взаимодействующих сервисах; Практика NATS JetStream, OpenSearch/Elasticsearch, ClickHouse или S3-совместимого хранилища; проектирование схем данных и API

условия

  • Формат работы: только офис
  • Тип занятости: проектная работа до 30.07.2027. После выполнения проекта рассматривается возможность оформления в штат на постоянной основе.
  • Разработка нового продукта вместе с архитектором и опытными разработчиками; возможность развивать технические навыки и брать более сложные задачи.
  • Оформление по ТК РФ. Уровень вознаграждения обсуждается по результатам собеседования.

Если просят выйти из iCloud, прислать код из SMS, запустить или установить что-то, перевести деньги — не соглашайся: это мошенничество.

Если просят выйти из iCloud, прислать код из SMS, запустить или установить что-то, перевести деньги — не соглашайся: это мошенничество.