java-interview

Собес в МТС Банк · AQA Java (Junior)

Вопросы, задачи и подготовка к live-coding и техническому интервью.

Темы: Java · Rest Assured · JUnit 5 · PostgreSQL · Kafka · WireMock · Allure

← Ко всем гайдам · Канал JavaJub в Telegram


1. Про МТС Банк и формат собеса

МТС Банк — цифровой банк экосистемы МТС. Более 7 млн клиентов, 300+ IT-специалистов. Фокус: мобильный банк, кредитование, платежи, интеграции с экосистемой МТС (связь, маркетплейс). AQA Java (Junior) — инженер автоматизации тестирования. Главный фокус: автотесты для REST API микросервисов, тестирование интеграций через Kafka/RabbitMQ, мок внешних систем через WireMock, SQL-проверки данных. UI-автоматизация (Selenium) НЕ указана в вакансии.

Структура собеседования (~1.5–2 часа)

Блок Время Что проверяют
Знакомство + опыт ~5–10 мин Пет-проекты, мотивация
Теория тестирования ~15 мин Виды, уровни, классы

эквивалентности

Java Core (Junior) ~15–20 мин ООП, коллекции, исключения, equals

SQL (Postgres + Oracle) ~15 мин JOIN + GROUP BY + HAVING
HTTP / REST / Postman ~15 мин Методы, статусы, JWT, цепочки
Rest Assured + WireMock ~15–20 мин given/when/then, стаб, verify
Kafka / RabbitMQ (базово) ~5–10 мин Зачем нужны, как тестировать
Security (специфика банка) ~5–10 мин OWASP Top 10, SQL-инъекции,

IDOR

ФИШКА. Специфика этой вакансии Rest Assured + CitrusFramework + WireMock — это API + интеграционное тестирование микросервисов с моками внешних систем + тестирование Kafka/RabbitMQ потоков. Selenium/Selenide НЕ упомянуты — это НЕ UI-автоматизация.

ВНИМАНИЕ · Для Junior В МТС Банке обязательна секция Security Testing — OWASP Top 10, SQL-инъекции, XSS, CSRF, IDOR. Также любят давать практические задачи в Postman с Pre-request Scripts — генерация JWT, цепочка запросов, подпись HMAC.

2. Стек по вакансии

Основной стек

3. Теория тестирования

Для Junior AQA — это ОБЯЗАТЕЛЬНЫЙ блок. Без теории тестирования не возьмут даже при идеальном Java.

4. Тест-дизайн

5. Java Core (Junior)

6. HTTP, REST API и Postman

REST API — главный блок для AQA. HTTP-методы, статусы, идемпотентность, JWT — спрашивают на каждом собесе.

cursor), но нельзя прыгнуть на страницу N. Для AQA: тестировать граничные кейсы (offset=0, offset>total, limit=0, limit=max).

7. Rest Assured и WireMock

Rest Assured — главный фреймворк автоматизации API-тестов. WireMock — для моков внешних сервисов. Оба указаны в вакансии явно.

Rest Assured: базовые вопросы

WireMock: базовые вопросы

Практика: тест на PetStore

@Test
void getPet_shouldReturnValidData() {
    Pet pet = given()
        .pathParam("petId", 1)
    .when()
        .get("https://petstore.swagger.io/v2/pet/{petId}")
    .then()
        .statusCode(200)
        .extract().as(Pet.class);

      assertThat(pet.getName()).isEqualTo("doggie");
}

Практика: POST + JSON Schema

@Test
void createUser_shouldReturn201_andMatchSchema() {

given() .contentType(ContentType.JSON) .body(new User(“Alice”, “alice@mts.ru”)) .when() .post(“/users”) .then() .statusCode(201) .header(“Location”, containsString(“/users/”))

        .body(matchesJsonSchemaInClasspath("schemas/user.json"));
}

Практика: WireMock stub + verify

// Stub: настроить ответ stubFor(get(urlEqualTo(“/rates/USD”))

.willReturn(okJson("{\"rate\": 95.50}")));

// Вызвать наш сервис, который ходит в /rates/USD

myService.calculatePayment(...);

// Verify: проверить, что наш сервис сделал запрос
verify(getRequestedFor(urlEqualTo("/rates/USD"))
    .withHeader("X-Api-Key", equalTo("secret")));

8. JUnit 5, Mockito и тестирование

9. SQL (PostgreSQL + Oracle)

SQL обязателен — проверяете данные в БД после API-запросов. В стеке обе БД: PostgreSQL и Oracle.

SQL-задачи

Клиенты с >5 транзакциями за месяц

SELECT c.name, COUNT(t.id) AS cnt
FROM clients c
JOIN accounts a ON a.client_id = c.id
JOIN transactions t ON t.account_id = a.id
WHERE t.created_at >= NOW() - INTERVAL '1 month'

GROUP BY c.id, c.name

HAVING COUNT(t.id) > 5;

Клиенты без транзакций (LEFT JOIN + IS NULL)

SELECT c.* FROM clients c
LEFT JOIN accounts a ON a.client_id = c.id
LEFT JOIN transactions t ON t.account_id = a.id
WHERE t.id IS NULL;

10. Kafka, RabbitMQ и тестирование очередей

11. Безопасность (OWASP)

В МТС Банке Security Testing обязателен даже для Junior AQA. OWASP Top 10, SQL-инъекции, XSS, CSRF, IDOR — знать на уровне «что это и как проверить».

12. Docker, Linux и ELK

13. Maven, Git и CI/CD

14. Практические задачи (live-coding)

В МТС Банке live-coding на 30–45 минут. Junior-уровень: палиндром, анаграмма, дубликаты, FizzBuzz. Готовиться — написать каждую без IDE за 5–10 минут.

Задача 1. Палиндром

public boolean isPalindrome(String s) {
    String clean = s.replaceAll("[^a-zA-Zа-яА-Я]", "").toLowerCase();
    return clean.equals(new StringBuilder(clean).reverse().toString());
}
// "А роза упала на лапу Азора" → true

Задача 2. Подсчёт символов

public Map<Character, Integer> charCount(String s) {
    Map<Character, Integer> map = new HashMap<>();
    for (char c : s.toCharArray()) {
        map.merge(c, 1, Integer::sum);
    }
    return map;
}
// "banana" → {b=1, a=3, n=2}

Задача 3. Найти дубликаты

public Set<Integer> findDuplicates(int[] arr) {
    Set<Integer> seen = new HashSet<>();
    Set<Integer> dups = new HashSet<>();
    for (int n : arr) {
        if (!seen.add(n)) dups.add(n);
    }
    return dups;
}

Задача 4. Парсинг строки в Map

public Map<String, String> parse(String s) {
    // "name=Иван;age=30;city=Москва"
    return Arrays.stream(s.split(";"))
        .map(pair -> pair.split("=", 2))
        .collect(Collectors.toMap(a -> a[0], a -> a[1]));
}

Задача 5. Тест-дизайн: форма перевода денег

15. Pet-проекты для AQA Junior

Pet-проект для AQA — это автотесты к публичному API. Покажите структуру проекта, чистоту кода, отчёты.

Проект 1. Автотесты для PetStore API

Проект 2. API-тесты + WireMock + Testcontainers

Проект 3. Тестирование Kafka через Citrus

СОВЕТ. Что оценивают в pet-проекте AQA Структура проекта (Maven-конвенция). Нет дубликатов (RequestSpecification). Нет хардкода URL (переменные окружения). Тесты независимы друг от друга. README с инструкциями. Покрытие: позитивные + негативные + граничные. Allure-отчёт.

16. План подготовки + чек-лист

За 2–3 недели

За неделю

В день собеса

ВНИМАНИЕ · AQA ≠ Backend Для AQA Junior главное: теория тестирования + тест-дизайн + Rest Assured + SQL + HTTP. Java Core — на Junior уровне (без многопоточности и JMM). Покажите системность мышления при тест-дизайне — это важнее, чем глубокое знание Java.

Финальный чек-лист

Блок Готов, если можешь…
Теория Верификация vs Валидация +

Smoke/Sanity/Regression + принципы

Тест-дизайн Классы эквивалентности + граничные + State Transition + баг-репорт

Java Core ООП 4 принципа + equals/hashCode + коллекции + Stream API

HTTP/REST Методы + идемпотентность + 401 vs 403 + JWT + CORS

Postman Цепочка запросов + Pre-request Script + переменные окружения

Rest Assured given/when/then + JSONPath + JSON Schema + RequestSpec

WireMock Stub + Verify + Scenarios (retry) + задержки
SQL JOIN 3 таблиц + GROUP BY + HAVING + NULL + PG vs

Oracle

Kafka/RabbitMQ Push vs Pull + ACK/NACK/DLQ + Awaitility + Testcontainers

Security SQL-инъекция + XSS + IDOR + маскирование PII + идемпотентность

Docker/Linux docker-compose + grep/find + tail -f + chmod
Pet-проект Автотесты PetStore + Allure + README + GitHub

Actions


Удачи на собесе!

// git push origin offer


Гайд из канала JavaJub — свежие разборы собесов выходят там первыми: @java_jub.

← Ко всем гайдам