Как реализовать коллекцию для хранения связи между customerId, accountNumber и статусом ареста счета без использования объектов?
Что проверяют
Как вы выбираете структуру данных под операции, а не под первую идею. «Без объектов» обычно значит без своего класса-модели, только стандартные коллекции. Для тестировщика важна и вторая половина: какие граничные случаи вы проверите. Следом спрашивают, как найти все счета клиента или все арестованные счета.
Как отвечать
Начните с уточнений: уникален ли номер счёта сам по себе, может ли счёт принадлежать нескольким клиентам, какие запросы нужны. От ответов зависит структура:
- вложенная map: в Java
Map<String, Map<String, Boolean>>, клиент → счёт → арест. Запись черезcomputeIfAbsent(customerId, k -> new HashMap<>()).put(accountNumber, true), все счета клиента достаются однимget; - составной ключ: в Python словарь с ключом-кортежем
{(customer_id, account_number): True}, кортеж хешируемый и не требует склейки строк. В Java аналог этоList.of(customerId, accountNumber)в роли ключа, у него корректныеequalsиhashCode; - ключ по счёту: если номер счёта уникален, хватит
Map<String, Boolean>по счёту и отдельного индекса клиент → множество счетов; - статус: не строка «Арестован», а
Booleanили перечисление. У счёта бывает частичный арест на сумму или несколько арестов сразу, и тогда одногоBooleanмало, это стоит спросить.
Номер счёта храните строкой: российский счёт состоит из 20 цифр и в long не помещается, а числовой тип ещё и срежет ведущие нули. Если коллекцию наполняют параллельные автотесты, берите ConcurrentHashMap.
Затем перечислите проверки: повторная запись того же счёта, один счёт у двух клиентов, отсутствующий ключ, пустые и null значения, смена статуса туда и обратно.
Где спотыкаются
Склеивают ключ через разделитель: "1:23" + ":" + "4" и "1" + ":" + "23:4" дают одну строку. Если идентификатор может содержать разделитель, записи тихо перезапишут друг друга.
Возвращают getOrDefault(key, "Не найдено"). Отсутствие записи смешивается со статусом, и тест не отличит «не арестован» от «такого счёта нет».
Не учитывают, что ConcurrentHashMap не принимает null ни в ключе, ни в значении и падает с NullPointerException, тогда как HashMap такое молча принимает.