ru
Feedback
Java | Вопросы собесов

Java | Вопросы собесов

Открыть в Telegram

📈 Аналитический обзор Telegram-канала Java | Вопросы собесов

Канал Java | Вопросы собесов (@easy_java_ru) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 11 447 подписчиков, занимая 10 899 место в категории Технологии и приложения и 57 490 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 11 447 подписчиков.

Согласно последним данным от 06 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило 9, а за последние 24 часа — -3, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 7.92%. В первые 24 часа после публикации контент обычно набирает 7.58% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 907 просмотров. В течение первых суток публикация набирает 868 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 0.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как ставь, void, string, строка, static.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+icUwivvbGOkwNWRi Задачи t.me/+8eqUTboisnkyZjQy Вакансии t.me/+4pspF5nDjgM4MjQy

Благодаря высокой частоте обновлений (последние данные получены 08 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

11 447
Подписчики
-324 часа
-117 дней
+930 день
Архив постов
🤔 Какие минусы REST в высоконагруженных системах? Избыточность (HTTP-заголовки), нет стандарта версионирования, нет поддержки двунаправленной связи, сложность в контроле схем. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чём различие между LeftJoin , RightJoin и InnerJoin? LEFT JOIN, RIGHT JOIN и INNER JOIN являются операциями соединения таблиц, каждая из которых используется для объединения строк из двух или более таблиц на основе связанных столбцов между ними. Различие между этими типами соединений заключается в том, какие строки выбираются для включения в результаты запроса. 🚩INNER JOIN Возвращает только те строки, которые имеют соответствующие значения в обеих таблицах. Если совпадение не найдено, строки не включаются в результаты. Это наиболее часто используемый тип соединения, так как он обеспечивает строгое соответствие между таблицами. 🚩LEFT JOIN (или LEFT OUTER JOIN) Возвращает все строки из левой таблицы (ТаблицаA), а также соответствующие строки из правой таблицы (ТаблицаB). Если совпадение в правой таблице не найдено, результат будет содержать NULL на месте столбцов правой таблицы. 🚩RIGHT JOIN (или RIGHT OUTER JOIN) Работает аналогично LEFT JOIN, но возвращает все строки из правой таблицы (ТаблицаB), а также соответствующие строки из левой таблицы (ТаблицаA). Если совпадение в левой таблице не найдено, результат будет содержать NULL на месте столбцов левой таблицы. INNER JOIN используется для получения строк с совпадениями в обеих таблицах. LEFT JOIN возвращает все строки из левой таблицы и соответствующие строки из правой таблицы; если соответствий нет, вместо столбцов правой таблицы будут NULL. RIGHT JOIN возвращает все строки из правой таблицы и соответствующие строки из левой таблицы; если соответствий нет, вместо столбцов левой таблицы будут NULL. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что известно про TargetMethod? Это понятие, связанное с рефлексией и аннотациями в Java. Оно относится к методу, к которому применяется аннотация или который вызывается через рефлексию (MethodHandle, Proxy). Используется в фреймворках (Spring, JPA) для динамического вызова методов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 После какого момента GC понимает, что нужно собирать мусор? Garbage Collector (GC) в Java начинает сборку мусора, когда объекты в памяти больше не используются и не имеют активных ссылок. 🟠Основное правило: объект считается мусором, если нет на него ссылок GC понимает, что объект можно удалить, если на него больше не ссылается ни одна переменная или он стал недостижимым.
class Demo {
    int value;
}

public class Main {
    public static void main(String[] args) {
        Demo obj = new Demo(); // Создан объект в памяти (Heap)
        obj = null; // Теперь на него нет ссылки → GC его удалит
    }
}
🚩Когда GC запускается? 🟠Недостаток памяти (Low Memory) Если в куче (Heap) осталось мало свободной памяти, JVM может запустить GC. 🟠Алгоритмы JVM (GC работает автоматически) GC в Java автоматический, и его запуск зависит от алгоритма сборщика мусора. Некоторые из них: Serial GC (для маленьких программ) Parallel GC (по умолчанию в Java 8) G1 GC (по умолчанию в Java 11+) ZGC, Shenandoah GC (для высоконагруженных систем) 🚩Способы обнаружения "мусора" 🟠Счётчик ссылок (Reference Counting) Устарело, потому что не умеет работать с циклическими ссылками. 🟠Алгоритм "Reachability" (Достижимость) Основной метод, который использует GC в Java. 🟠Алгоритм достижимости (Reachability Analysis) GC начинает с корневых объектов (GC Roots) и проверяет, какие объекты достижимы. Ставь 👍 и забирай 📚 Базу знаний

SIEM нового класса: строим SOC в условиях оптимизации Бюджеты урезают, кадров не хватает, а угрозы растут. 25 марта в 11:00 р
SIEM нового класса: строим SOC в условиях оптимизации Бюджеты урезают, кадров не хватает, а угрозы растут. 25 марта в 11:00 расскажем, как SIEM нового класса помогает снижать трудозатраты и автоматизировать 90% рутины. Обсудим: Почему детектирование без реагирования не работает и как современные SIEM решают эту задачу. Как выстроить полный и управляемый цикл работы с инцидентом в рамках единой платформы. Как Solar SIEM объединяет SIEM, SOAR и другие компоненты SOC-экосистемы, ускоряя поиск угроз в 3 раза. Для кого: Архитекторов и руководителей SOC — спланировать развитие ИБ-архитектуры Аналитиков и инженеров — сократить рутину Руководителей ИБ — оптимизировать бюджет без потери качества Зарегистрироваться #реклама 16+ rt-solar.ru О рекламодателе

🤔 Что такое branch в Git? Branch — это ветка разработки, представляющая собой указатель на цепочку коммитов. Позволяет изолировать работу над задачами, не затрагивая основную ветку. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие виды тестов знаешь? В программировании существует множество видов тестирования, которые можно разделить на категории по уровню тестирования, методам выполнения и целям. Вот основные виды: 🚩По уровню тестирования 🟠Модульное тестирование (Unit Testing) Тестирование отдельных методов или классов. Цель: Проверить работу минимальных компонентов программы. Инструменты: JUnit, TestNG.
  @Test
  public void testAddition() {
      assertEquals(5, Calculator.add(2, 3));
  }
  
🟠Интеграционное тестирование (Integration Testing) Тестирование взаимодействия между модулями. Цель: Убедиться, что модули правильно работают вместе. Пример: Проверка взаимодействия сервиса и базы данных. Инструменты: Spring Test, Apache Camel Test. 🟠Системное тестирование (System Testing) Проверка всей системы как единого целого. Цель: Убедиться, что все компоненты работают вместе и система соответствует требованиям. 🟠Приемочное тестирование (Acceptance Testing) Проводится с участием клиента или конечных пользователей. Цель: Убедиться, что система удовлетворяет бизнес-требованиям. 🚩По методам выполнения 🟠Ручное тестирование (Manual Testing) Тесты выполняются вручную. Цель: Найти ошибки, которые может не уловить автоматизация. Пример: Тестировщик вручную проверяет пользовательский интерфейс. 🟠Автоматизированное тестирование (Automated Testing) Тесты выполняются автоматически с использованием скриптов и инструментов. Цель: Снизить время и затраты на повторяющиеся тесты. Инструменты: Selenium, JUnit, Appium. 🚩По целям тестирования 🟠Функциональное тестирование Проверяет, что функции системы работают как ожидалось. Цель: Убедиться в соответствии требованиям. Инструменты: Selenium, Postman. 🟠Нефункциональное тестирование Тестирование производительности (Performance Testing): Проверяет скорость, отклик и стабильность. Инструменты: JMeter, Gatling. Тестирование безопасности (Security Testing): Проверяет защиту системы. Инструменты: OWASP ZAP, Burp Suite. Тестирование удобства использования (Usability Testing): Проверяет интерфейс на удобство для пользователя. 🚩По типам тестирования 🟠Smoke Testing Быстрая проверка работоспособности ключевых функций. Цель: Убедиться, что основные функции работают, прежде чем углубляться в тесты. 🟠Регрессионное тестирование Проверяет, что новые изменения не сломали старую функциональность. Цель: Убедиться, что баги, исправленные ранее, не повторились. 🟠Тестирование черного ящика (Black Box Testing) Проверяет систему без знаний о внутреннем устройстве. Цель: Оценить функциональность с точки зрения пользователя. 🟠Тестирование белого ящика (White Box Testing) Проверяет систему с учетом внутренней структуры кода. Цель: Оценить корректность логики программы. 🚩Специальные виды тестирования 🟠A/B тестирование Проверяет, какая версия системы лучше (например, два варианта интерфейса). Цель: Повысить пользовательский опыт. 🟠Тестирование нагрузки (Load Testing) Проверяет, как система работает под большой нагрузкой. Инструменты: Apache JMeter. 🟠Тестирование на отказоустойчивость (Stress Testing) Проверяет, как система работает в условиях сверхвысокой нагрузки. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как коммитить код? - Используй понятные и осмысленные сообщения (feat: добавлен компонент, fix: починена валидация); - Следуй conventional commits при командной работе (например, feat, fix, refactor, docs); - Разделяй коммиты по смыслу — один коммит = одна логическая единица; - Проверяй код перед коммитом (git diff, git status); - Используй git commit -m "сообщение" или через git commit, чтобы открыть редактор и дать более развёрнутое описание. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Бесплатный онлайн-марафон для руководителей Два дня практических онлайн-встреч с топ-экспертами в области управления — на них
Бесплатный онлайн-марафон для руководителей Два дня практических онлайн-встреч с топ-экспертами в области управления — на них расскажем, как выстроить слаженную работу сотрудников и забыть о хаосе с помощью автоматизации. Спикеры Битрикс24, SETTERS EDUCATION, «ВкусВилл» и Максим Батырев расскажут: — как обеспечить рост команды без регламентов и ручного управления — как мотивировать сотрудников и давать обратную связь — как управлять большим потоком задач и контролировать их выполнение — как выстраивать эффективную коммуникацию с командой Бонусы для всех участников: — чек-лист: «Как обезопасить команду от кибермошенников?» — бесплатная консультация по автоматизации командной работы Бесплатно. 17–18 марта. Подробная программа мероприятия и регистрация — на сайте. Узнать больше #реклама 16+ marathon.bitrix24.works О рекламодателе

🤔 Слышал ли что то про метод intern? Метод intern() в классе String используется для оптимизации памяти. Он добавляет строку в String Pool и возвращает её ссылку, если строка уже там есть. 🚩Как работает `intern()`? Без intern() – строки создаются в Heap (куче)
String s1 = new String("Hello"); // В куче (Heap)
String s2 = new String("Hello");

System.out.println(s1 == s2); // false (разные объекты)
С intern() – строки хранятся в String Pool
String s1 = new String("Hello").intern();
String s2 = new String("Hello").intern();

System.out.println(s1 == s2); // true (одна строка в String Pool)
🚩Что такое `String Pool`? Это специальная область памяти, где хранятся уникальные строковые литералы. Все строковые литералы ("Hello") по умолчанию хранятся в String Pool.
String s1 = "Hello"; // В String Pool
String s2 = "Hello"; // Ссылается на тот же объект

System.out.println(s1 == s2); // true
🚩Когда использовать `intern()`? Когда у вас много одинаковых строк в памяти (например, имена, идентификаторы). Для экономии памяти, если строки часто дублируются. В парсинге JSON, XML – одни и те же строки могут повторяться тысячи раз.
List<String> names = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
    names.add(("User" + (i % 100)).intern()); // Используем String Pool
}
Ставь 👍 и забирай 📚 Базу знаний

Бесплатный курс: веб-дизайн, графика, интерфейсы Научись создавать дизайн сайтов и приложений, инфографику для карточек на ма
Бесплатный курс: веб-дизайн, графика, интерфейсы Научись создавать дизайн сайтов и приложений, инфографику для карточек на маркетплейсах и работать в Figma! Студенты курса в среднем зарабатывают от 68 000 ₽ уже во время обучения💰 Этот курс для тебя, если ты: ✅ мечтаешь о новой профессии, но не знаешь, с чего начать; ✅ чувствуешь, что хочешь большего — свободы, самореализации, творчества; ✅ полный новичок и хочешь систему, а не хаос; ✅ хочешь начать зарабатывать удалённо. Зарегистрироваться #реклама 16+ ydaev.ru О рекламодателе

🤔 Чем отличается волатильность от атомарности? - Волатильность (volatile) — это гарантия того, что переменная будет читаться напрямую из памяти, а не из кеша потока. Она обеспечивает видимость изменений между потоками, но не гарантирует целостность операций. - Атомарность — это свойство, при котором операция выполняется целиком и неделимо, не может быть прервана. Например, инкремент — не атомарен без дополнительной синхронизации. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Нужны 12 человек для работы с искусственным интеллектом Требования: 18-45 лет Работа из дома. График свободный. Пришло задани
Нужны 12 человек для работы с искусственным интеллектом Требования: 18-45 лет Работа из дома. График свободный. Пришло задание — изучили — выполнили — получили свои деньги. Деньги вы получаете в зависимости от сложности задания. Например: За задание могут платить 500-10.000 рублей. 500 рублей — это около 5-30 минут. 10 000 руб. это 5-6 часов. Работа может быть разной: Оживить фото, создать видео, реставрировать старое фото и т.д. 💰 В среднем новичок получает до 150.000 руб в месяц. А опытный может и 300-500т. Мы обучим вас сами: ✅ 3 дня уроков по 30 минут ✅ Домашки с проверкой и оплатой бонусами ✅ Платим 10 тыс за каждую выполненную домашку ⚡ Набор заканчивается завтра. Для регистрации жмите кнопку "Зарегистрироваться": Зарегистрироваться #реклама 16+ neuromachina.ru О рекламодателе

🤔 Что такое «пространство имен» в XML? Пространство имен (namespace) в XML используется для различения одинаковых элементов с разными значениями в одном документе, чтобы избежать конфликтов между элементами разных схем. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Используешь в работе Lambda-выражения? Да, лямбда-выражения являются важной частью современной разработки на Java, и я активно их использую в своей работе. Лямбда-выражения помогают писать более лаконичный и выразительный код, особенно при работе с коллекциями и потоками данных. Вот несколько распространенных случаев использования лямбда-выражений в Java: 🟠Итерация по коллекциям Использование лямбда-выражений с методом forEach позволяет компактно и удобно итерировать по элементам коллекций.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));
🟠Фильтрация и преобразование коллекций С использованием Stream API и лямбда-выражений можно легко фильтровать, сортировать и преобразовывать коллекции.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream()
    .filter(name -> name.startsWith("A"))
    .collect(Collectors.toList());

filteredNames.forEach(System.out::println); // Вывод: Alice
🟠Сортировка коллекций Лямбда-выражения упрощают сортировку коллекций с использованием метода sort.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.sort((name1, name2) -> name1.compareTo(name2));
names.forEach(System.out::println);
🟠Использование функциональных интерфейсов Лямбда-выражения широко используются с функциональными интерфейсами, такими как Predicate, Function, Consumer и Supplier.
// Predicate
Predicate<String> startsWithA = s -> s.startsWith("A");
boolean result = startsWithA.test("Alice"); // true

// Function
Function<String, Integer> lengthFunction = s -> s.length();
int length = lengthFunction.apply("Hello"); // 5

// Consumer
Consumer<String> printConsumer = s -> System.out.println(s);
printConsumer.accept("Hello, World!"); // Вывод: Hello, World!

// Supplier
Supplier<String> stringSupplier = () -> "Hello, Supplier!";
String suppliedString = stringSupplier.get();
System.out.println(suppliedString); // Вывод: Hello, Supplier!
🟠Параллельные вычисления Лямбда-выражения с использованием параллельных потоков позволяют легко выполнять параллельные вычисления.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.parallelStream()
    .mapToInt(Integer::intValue)
    .sum();

System.out.println("Sum: " + sum); // Вывод: Sum: 15
🚩Пример использования в реальном проекте Предположим, у нас есть список сотрудников, и мы хотим отфильтровать и отсортировать их по имени.
import java.util.*;
import java.util.stream.Collectors;

class Employee {
    private String name;
    private int age;

    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Employee{name='" + name + "', age=" + age + '}';
    }
}

public class LambdaExample {
    public static void main(String[] args) {
        List<Employee> employees = Arrays.asList(
            new Employee("Alice", 30),
            new Employee("Bob", 25),
            new Employee("Charlie", 35),
            new Employee("David", 28)
        );

        // Фильтрация и сортировка сотрудников по имени
        List<Employee> filteredAndSorted = employees.stream()
            .filter(e -> e.getAge() > 27)
            .sorted(Comparator.comparing(Employee::getName))
            .collect(Collectors.toList());

        filteredAndSorted.forEach(System.out::println);
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 К каким конструкциям Java применим модификатор static? static может применяться к: - Полям (общим для всех экземпляров) - Методам (не привязанным к объекту) - Блокам инициализации (выполняемым при загрузке класса) - Вложенным классам (не требующим экземпляра внешнего класса) - Импортам (для упрощения обращения к статическим членам других классов) Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

OUTBOX pattern Недостаток коробочного решения от Spring для согласования двух разных транзакций понятен - нет 100% гарантии с
OUTBOX pattern Недостаток коробочного решения от Spring для согласования двух разных транзакций понятен - нет 100% гарантии согласованности транзакций (В этом посте детально) Как OUBOX решает проблему согласованности транзакций в разные системы? 1) Создаем табличку outbox 2) Оставляем @ Transactional на методе как и раньше, НО ВМЕСТО ТОГО ЧТОБЫ ПИСАТЬ В КАФКУ СОЗДАЕМ ЗАПИСЬ В ТАБЛИЦЕ OUTBOX ‼️Здесь вся магия OUTBOX - теперь и первое действие и второе находятся под управлением JPA transaction manager выполняются в рамках одной транзакции. Мы заменили отправку в кафку записью в БД, сказав, что в кафку надо что-то отправить 3) Вешаем @ Scheduled на метод который будет читать табличку outbox Здесь в аннотации можем настроить периодичность чтения, по сути задержку отправки в кафку сообщения ‼️Если транзакция прошла и сообщение попало в табличку outbox мы уже гарантируем, что рано или поздно обработаем эту строку и в кафку сообщение пойдет Шедулер может выглядеть так:

@RequiredArgsConstructor
@Component
public class OutboxScheduler {
    
    private final OutboxService outboxService;

    @Scheduled(fixedDelay = 10_000)
    public void run() {
        outboxService.processAll();
    }
}
Сервис:
 @Transactional
    public void processAll() {
        outboxRepository
                .selectForProcessing()
                .forEach(this::process);
    }

    private void process(OutboxRecord outboxRecord) {
        try {
            recordProcessor.process(outboxRecord);
            outboxRepository.delete(outboxRecord);
            log.info("Processed data: {}", outboxRecord.getPayload());
        } catch (Exception e) {
            log.warn("Failed to process data", e);
        }
    }
Минусы такого подхода: 1) От задержки в обработке никуда не деться 2) Самописное решение - усложнение поддержки проекта 3) Нагрузка на базу 4) Трудности, которые надо решать разруливая доступ к outbox табличке когда есть несколько реплик микра Но и с этими недостатками можно поработать и с большего убрать! Как? Kafka Connect, Debezium, Kafka Streams Здесь ВИДЕО разбор OUTBOX на youtube и rutube А здесь SAGA Как освоить микросервисную архитекруру на практике! https://javaguru.by❤️ Core -> Enterprise -> Bootcamp -> Микросервисы | Трудоустройство | РЕАКТИВНЫЙ СТЕК | ИТ-СТАРТАП-РЕТРИТ | СВОЕ ДЕЛО

🤔 Назови основные свойства транзакции В базах данных и многопоточных системах транзакция — это атомарная последовательность операций, которая должна выполняться корректно и полностью. 🚩Атомарность (Atomicity) — "всё или ничего" Транзакция выполняется полностью или не выполняется вовсе. Перевод 1000 рублей с одного счёта на другой: - Списать 1000 рублей с А - Зачислить 1000 рублей на B Если вторая операция не удалась, первая должна быть отменена.
try {
    connection.setAutoCommit(false); // Отключаем автокоммит
    withdraw(accountA, 1000);
    deposit(accountB, 1000);
    connection.commit(); // Подтверждаем транзакцию
} catch (Exception e) {
    connection.rollback(); // Откат в случае ошибки
}
🚩Согласованность (Consistency) — "данные остаются корректными" После транзакции данные должны оставаться в логически правильном состоянии. 🚩Изолированность (Isolation) — "отдельно от других транзакций" Одна транзакция не должна мешать выполнению другой. Два клиента одновременно бронируют одно и то же место в самолёте. Система должна обработать их по очереди, а не одновременно. В Java изолированность регулируется уровнями транзакций (TRANSACTION_READ_COMMITTED, TRANSACTION_REPEATABLE_READ и т. д.), чтобы избежать проблем, таких как "грязное чтение" или "фантомные записи".
connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
🚩Долговечность (Durability) — "данные не теряются" После успешного завершения транзакции данные не должны теряться даже при сбоях (например, отключении электричества). Ставь 👍 и забирай 📚 Базу знаний

🤔 Как называется функциональный интерфейс, который принимает в себя фильтр? Функциональный интерфейс, который используется для фильтрации, называется Predicate. Он принимает объект и возвращает true или false, в зависимости от условия. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какая коллекция реализует дисциплину обслуживания FIFO? FIFO (First-In, First-Out) – это принцип обработки данных: "первым вошёл – первым вышел". 🟠Коллекции, реализующие FIFO Пример работы FIFO с Queue
import java.util.*;

public class FifoExample {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>(); // Можно заменить на ArrayDeque

        queue.add("Первый");
        queue.add("Второй");
        queue.add("Третий");

        System.out.println(queue.poll()); // Первый
        System.out.println(queue.poll()); // Второй
        System.out.println(queue.poll()); // Третий
    }
}
🟠Разница `poll()`, `remove()` и `peek()`
Queue<Integer> queue = new LinkedList<>();
queue.add(10);
System.out.println(queue.peek());  // 10 (но не удаляет)
System.out.println(queue.poll());  // 10 (удаляет)
System.out.println(queue.poll());  // null (очередь пуста)
Ставь 👍 и забирай 📚 Базу знаний