Собес в Сбер · Senior Java+Go разработчик («Переводы»)
Материал Эйч · Опубликовано 27 октября 2026
Обзор
Микросервисы переводов в Сбербанк Онлайн: Java 17, Go, Kafka, PostgreSQL, Spring Boot 3 и контрактное API-First развитие.
Фишка: Сильный акцент на банковский домен (переводы, расчёты), API-First/SDD, надёжность интеграций (идемпотентность, retry, DLQ) и культуру расследования production-инцидентов.
| Этап | Длительность | Что проверяют |
|---|---|---|
| Скрининг / HR | 30–45 мин | Мотивация, формат работы (офис/гибрид, 10:00–19:00), английский B2, интерес к финтеху и домену переводов, отсутствие конфликтов по графику. |
| Техническое интервью | 60–90 мин | Java (коллекции, generics, исключения), Spring (@Transactional, интеграции), SQL, задачи на код и разбор сниппетов; вопросы по Kafka и надёжности интеграций. |
| Углубление / команда | 60–120 мин | Опыт микросервисов, REST/Kafka-контракты, тестирование (JUnit, Testcontainers), production-инциденты, взаимодействие с аналитиками и SDD; возможна секция на Go. |
| Финал | 30–60 мин | Согласование ожиданий, софт-скиллы, безопасность и процессы Сбера при необходимости. |
Стек и темы
Обязательный минимум
- Java 17: ООП, коллекции, equals/hashCode, generics, исключения при override
- Spring Boot 3.x / Spring Cloud: REST, Feign, конфигурация, @Transactional
- Kafka: consumer groups, гарантии доставки, Spring Kafka, идемпотентность, DLQ
- PostgreSQL: транзакции, уровни изоляции, блокировки, оптимизация запросов
- SQL: GROUP BY, HAVING, оконные функции, топ-N по группам
- REST API и контрактное проектирование (OpenAPI, генерация кода)
- Автотесты: JUnit, моки, Testcontainers, контрактные тесты
- Go: коммерческий опыт, микросервисы, HTTP и работа с сообщениями
- Английский B2: устное обсуждение технических тем
Плюсом будет
- gRPC / Protobuf
- Информационная безопасность: mTLS, сертификаты, шифрование
- Опыт платежей и биллинга
- Maven: многомодульные сборки, профили, OpenAPI Generator
Java Core
Почему HashSet может не находить уже добавленный объект через contains()?
Контракт Set опирается на equals/hashCode; без согласованных переопределений или при изменении полей после add бакет и сравнение расходятся.
Какие варианты переопределения метода с checked-исключениями допустимы?
Сигнатуру сохранить; checked — только сужать (подтипы) или убирать; unchecked можно добавлять; расширять checked в override нельзя.
В чём ошибка в addAll с wildcards List<? super T> и List<? extends T>?
Направление копирования и PECS: в extends-список нельзя безопасно писать; типичная ошибка — second.addAll(first) вместо first.addAll(second).
Ловушка: Задачи на сниппеты часто содержат синтаксические ловушки — сначала проговори контракт API, потом ищи баг.
Совет: Для коллекций всегда проговаривай equals/hashCode и мутабельность ключей.
Spring и транзакции
Что зафиксируется в БД при вложенных @Transactional и пустом catch вокруг исключения из внутреннего сервиса?
По умолчанию propagation REQUIRED — одна транзакция; поглощённое исключение может помешать rollback; уточни rollbackFor и self-invocation через proxy.
Как выглядит идеальный unit-тест для маппинга DTO с ~60 полями?
Табличные/параметризованные кейсы: null/отсутствие поля, граничные значения, регресс на бизнес-правила; не 60 assert в одном тесте без структуры.
Как проверять код, сгенерированный ИИ?
Ревью, статический анализ, тесты на поведение и границы; не доверять без прогона CI и сценариев из контракта.
Фишка: В команде «Переводы» важны идемпотентность, retry и DLQ — связывай ответы про транзакции с гарантиями между БД и Kafka.
Kafka и интеграции
Что такое высоконагруженная система и как понять, что она справляется с нагрузкой?
Нет универсального RPS — смотри SLO (latency, error rate, availability), нагрузочные тесты и метрики в prod (lag, saturation).
Как обеспечить идемпотентность обработчика сообщений о переводе?
Ключ идемпотентности, уникальные ограничения в БД, dedup store, outbox/inbox, аккуратный retry и DLQ для poison messages.
Consumer groups и гарантии доставки — что важно для разработчика?
Партиции и порядок внутри партиции, commit offset, at-least-once vs exactly-once, дубли при rebalance и retry.
Совет: Упомяни опыт Spring Kafka / caldera-kafka-lib, если есть — это прямо из стека вакансии.
SQL и PostgreSQL
Топ-10 номеров с наибольшим числом SMS (только с count > 1)?
GROUP BY phone_number HAVING COUNT(*) > 1 ORDER BY COUNT(*) DESC LIMIT 10.
Сотрудники с максимальной зарплатой в каждом отделе?
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) = 1 или коррелированный подзапрос с MAX.
Самый свежий договор на клиента?
DISTINCT ON (client) … ORDER BY client, date DESC или ROW_NUMBER по client.
Ловушка: В банке часто спрашивают блокировки и изоляцию — свяжи SQL-задачу с конкурентными обновлениями баланса/статуса перевода.
Архитектура и требования
Где считать данные, видимые клиенту (например годовые проценты): backend или frontend?
Финансовые расчёты и единая бизнес-логика — на backend; фронт — отображение; важны округление, регуляторика и защита от подмены.
Какие признаки хороших системных требований?
Проверяемость, однозначность, границы, нефункциональные требования, критерии приёмки, трассировка к контракту API.
На что смотришь в системных требованиях и как работаешь с аналитиком?
Happy path + ошибки, идемпотентность, совместимость версий API, вопросы до оценки сроков.
Фишка: SDD/API-First: изменения начинаются с контракта OpenAPI, затем генерация и контрактные тесты.
Go (для dual-stack роли)
Как бы спроектировал HTTP-хендлер перевода с валидацией и таймаутами?
context с deadline, middleware, structured logging, метрики, graceful shutdown, разделение transport и domain.
Отличия error handling в Go от Java в микросервисе?
Явные ошибки, wrapping, не смешивать бизнес-ошибки и инфра; маппинг в HTTP-коды на границе.
Совет: Покажи, что Go не «второй язык для галочки» — пример сервиса с Kafka или REST из продакшена.
Задачи
Устранение повторяющихся символов в строке
Удалить эффект «залипания клавиши»: подряд идущие одинаковые символы (без учёта регистра для латиницы/кириллицы по условию задачи) схлопнуть до одного. Пример: «Ззддррррррааавствввууй, Сссссбееееррр!» → «Здравствуй, Сбер!».
Один проход: char[] или StringBuilder; если текущий символ равен предыдущему (с нормализацией регистра при необходимости) — пропуск, иначе append. O(n) по длине строки, O(n) память для результата.
Сложность: O(n)
Разбор влияния вложенных вызовов на транзакцию
doA() @Transactional вызывает doB() @Transactional, doB бросает IllegalStateException, исключение ловится пустым catch в doA. Что в БД?
При REQUIRED одна транзакция: unchecked из doB помечает rollback-only, но если исключение поглощено и не rethrow — commit может пройти без отката (зависит от rollback-only и настроек). Корректный ответ: риск частичной фиксации; нужен rethrow, rollbackFor или отдельная propagation REQUIRES_NEW осознанно.
Сложность: концептуально
Почему HashSet не распознаёт объект
Person в HashSet, contains(person) возвращает false после add.
Нет согласованных equals/hashCode (Lombok не подключён/не сгенерировал), либо поля изменились после add. Решение: неизменяемый ключ или стабильные equals/hashCode по бизнес-идентификатору.
Сложность: O(1) ожидание для contains
Переопределение методов с исключениями
Допустимы ли сохранение сигнатуры, добавление/удаление исключений?
Сигнатура (имя, аргументы, return) та же. Checked: можно не объявлять или объявлять подтипы; нельзя добавлять новые checked. Unchecked и Error — гибче. Совместимость с контрактом родителя обязательна.
Сложность: —
Дефект в addAll с wildcards
addAll(List<? super T> first, List<? extends T> second) { second.addAll(first); }
Неверное направление и нарушение PECS: в second (extends) нельзя добавлять элементы произвольно. Должно быть first.addAll(second).
Сложность: O(n+m)
Топ‑10 номеров по числу SMS
Номера с более чем одной SMS, сортировка по убыванию count, limit 10.
SELECT phone_number, COUNT(*) AS cnt FROM sms GROUP BY phone_number HAVING COUNT(*) > 1 ORDER BY cnt DESC LIMIT 10;
Сложность: O(rows) с индексом на phone_number
System Design
- Спроектировать сервис внутреннего перевода: REST + Kafka, идемпотентность, статусы операции
- Как связать запись в PostgreSQL и публикацию события в Kafka без рассинхрона (outbox)
- Масштабирование обработчиков переводов при росте lag consumer group
- Версионирование OpenAPI при изменении полей ответа для мобильного клиента СБОЛ
Каркас ответа
- Уточни функциональные сценарии и SLO (latency, доступность)
- Выдели сервисы, контракты REST/Kafka, модель данных
- Проговори идемпотентность, retry, DLQ, saga или компенсации для денег
- Наблюдаемость: метрики, трейсы, алерты на lag и error rate
- Риски: двойное списание, порядок сообщений, миграции схемы
Поведенческое
- Сталкивались ли с production-инцидентами: как проходило расследование?
- Как относитесь к работе с существующей системой и mix бизнес-фич с инфраструктурой?
- Был ли жёсткий срок от бизнеса — уложились ли?
- Как относитесь к требованиям «сделай как тут, но с изменением» при сжатых сроках?
- Как используете ИИ в работе и как проверяете сгенерированный код?
- Интересует ли банковская и инвестиционная предметная область?
- Что важно в новой роли кроме дохода?
- По каким признакам через полгода поймёте, что попали на своё место?
- Комфортен ли график 10:00–19:00?
План подготовки
3 дня
- Повторить equals/hashCode, generics PECS, override exceptions
- Разобрать 2 SQL-задачи (топ-N, max per group) вслух
- Прогнать сценарий Spring @Transactional с поглощённым исключением
- Подготовить 2 STAR-истории: инцидент и жёсткий дедлайн
7 дней
- Kafka: delivery semantics, idempotency, DLQ — шпаргалка на одну страницу
- PostgreSQL: isolation levels, deadlocks, индексы под GROUP BY
- OpenAPI-first: как бы изменил контракт перевода
- Mock-интервью на английском 20 мин: описать последний микросервис
14 дней
- Системный дизайн: перевод + outbox + статусы
- Go: освежить handlers, context, тесты table-driven
- Testcontainers: пример интеграционного теста с Postgres/Kafka
- Изучить продукт «Переводы» в СБОЛ как пользователь
| Блок | Готов, если... |
|---|---|
| Java Core | можешь объяснить баг HashSet и исправить addAll с wildcards |
| Spring | можешь нарисовать цепочку транзакции и сказать, когда будет rollback |
| Kafka | можешь описать идемпотентный consumer и роль DLQ |
| SQL | пишешь топ-10 и max-salary-per-dept без подсказок |
| Домен | можешь связать требования переводов с backend-расчётами и API |
| Soft | есть честные ответы про инциденты, ИИ и ожидания от роли |
В день собеседования
- Повторить финальный чеклист
- Подготовить вопросы команде про SDD, on-call и качество контрактов
- Проверить связь и тихое место для английской части