Как анализировать дедлоки в многопоточном приложении и как их избегать?
Опишите рабочий процесс с использованием AI-инструментов от получения задачи до деплоя.
Как организована идемпотентность у вас?
Какой вывод вы сделали из ситуации с дублями начислений?
Перечисли уровни изоляции транзакций и в общих чертах объясни, для чего они нужны
Расскажите о ситуации, когда вы предложили улучшение процесса или внедрили что-то новое.
Расскажи по архитектуре сервиса коротко.
Расскажи про виды гарантии доставки в Kafka, чем они отличаются, в каком случае лучше использовать какие
Что ты понимаешь под высоконагруженной платформой? Сколько RPS?
таблица employee | name | lang | | Nick | C# | | Nick | SQL | | Eva | Rust | | Vika | SQL | | Ivan | Java | | Ivan | SQL | Нужно составить запрос, который найдет имена сотрудников, знающих SQL и как минимум еще один другой язык select name from employee group by name having COUNT(DISTINCT lang) >= 2;
Расскажите принцип работы HashMap
Что такое классы Atomic и для чего они нужны?
Знаете ли вы хак в Java для игнорирования checked исключений?
Если исключение выпало и в try, и при закрытии ресурса (try-with-resources), что поймаем в catch?
Почему решил искать новое место работы?
Где именно может возникнуть ошибка без volatile в Double-Checked Locking?
/** * Интерфейс для взаимодействия с аппаратной частью банкомата. */ interface Hardware { /** * Возвращает массив с количеством купюр по номиналам 50, 100, 500, 1000, 5000. * Метод работает медленно и создает шум. * * @return массив, где каждый элемент соответствует количеству купюр определенного номинала. * Например, [10, 20, 30, 40, 50] означает: * - 10 купюр номиналом 50 рублей * - 20 купюр номиналом 100 рублей * - 30 купюр номиналом 500 рублей * - 40 купюр номиналом 1000 рублей * - 50 купюр номиналом 5000 рублей */ int[] getBillsCounts(); /** * Загружает в бокс выдачи указанные купюры. * * @param billsCounts массив с количеством купюр по номиналам [50, 100, 500, 1000, 5000]. * Например, [0, 1, 0, 2, 0] означает: * - 0 купюр номиналом 50 рублей * - 1 купюру номиналом 100 рублей * - 0 купюр номиналом 500 рублей * - 2 купюры номиналом 1000 рублей * - 0 купюр номиналом 5000 рублей */ void giveBills(int[] billsCounts); } /** * Класс для реализации логики работы банкомата. * Тут нужно писать код */ class MyATM { /** * Аппаратная часть банкомата. */ Hardware hardware; public boolean withdraw(int amount) { int[] counts = hardware.getBillsCounts(); int[] nom = {50, 100, 500, 1000, 5000}; int[] toGive = new int[5]; for (int i = 4; i >= 0; i--) { int needed = amount / nom[i]; int use = Math.min(needed, counts[i]); toGive[i] = use; amount -= use * nom[i]; } if (amount != 0) { return false; } hardware.giveBills(toGive); return true; } }
Чем Kafka лучше прямой point-to-point отправки при обновлении данных?
Как исправить нарушение принципа инверсии зависимостей — предложите рефакторинг с выделением отдельного хранилища?
Что такое абстракция в ООП? Как вы её понимаете?