uz
Feedback

Firibgarlarga uchmang! Telemetrio bunday kanallarni topadi va belgilaydi 👉 Belgini ko‘rmoqchi bo‘lsangiz, obuna bo‘ling

Библиотека собеса по Java | вопросы с собеседований

Библиотека собеса по Java | вопросы с собеседований

Kanalga Telegram’da o‘tish

Вопросы с собеседований по Java и ответы на них. По рекламе: @tproger_sales_bot Учиться у нас: clc.to/3wECtA Для обратной связи: @proglibrary_feeedback_bot

Ko'proq ko'rsatish
6 381
Obunachilar
-624 soatlar
-197 kun
-5130 kun
Postlar arxiv
🔥 Прожарка резюме Java-разработчиков Откликаешься, а в ответ тишина? Или зовут, но предлагают меньше, чем рассчитываешь? Воз
🔥 Прожарка резюме Java-разработчиков Откликаешься, а в ответ тишина? Или зовут, но предлагают меньше, чем рассчитываешь? Возможно, дело не в навыках, а в резюме. 27 октября рекрутер из Skyeng и Java-разработчик из Wildberries разберут резюме участников в прямом эфире! Что разберём:
✦ почему рекрутер закрывает резюме, не дочитав до конца; ✦ как показать свой вклад и результаты, а не просто перечислить технологии; ✦ какие формулировки могут занизить твой грейд.
🗓 27 октября в 19:00 МСК Участие бесплатное 👥 Спикеры: — Анастасия Дегтярь, Senior TA в Skyeng, 6+ лет в найме; — Виктор Анохин, Java/Kotlin-разработчик в Wildberries, ex-Билайн. Эфир проводит ШОРТКАТ – менторская программа для разработчиков, которые хотят сменить работу или вырасти в грейде и зарплате. Переходи в бота, чтобы зарегистрироваться на эфир: @shortcut_sh_bot Реклама. О рекламодателе.

❓ Почему orElse может вызвать функцию, даже если Optional не пуст? Ответ: Потому что аргументы метода вычисляются до его вызова. В выражении optional.orElse(loadDefault()) функция loadDefault() выполнится даже тогда, когда Optional уже содержит значение. Её результат будет вычислен, а затем окажется не нужен. Это важно, если функция обращается к базе, пишет в журнал, меняет состояние или может выбросить исключение. Наличие значения в Optional не отменяет эти действия. Для отложенного вычисления используют optional.orElseGet(() -> loadDefault()). Переданная функция будет вызвана только при пустом Optional. При этом лень относится именно к вызову Supplier.get(). Само выражение, создающее поставщика, всё равно вычисляется заранее. Например, в orElseGet(createSupplier()) вызов createSupplier() произойдёт до входа в orElseGet. Если значение по умолчанию уже готово и его получение не требует работы, orElse остаётся подходящим вариантом. Документация Java 🐸 Библиотека собеса по Java

📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше. В Proglib Academy действует акция: покупаешь один кур
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше. В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок. Например, можно совместить два направления по работе с ИИ:
💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.
📍 Разница в цене — почти 50 тысяч рублей. Можно освоить больше, не выходя за рамки запланированного бюджета. А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога. Акция действует до 31 октября включительно ⏳ ⏮️ Пора прокачать свой стек

❓ Чем List.copyOf отличается от Collections.unmodifiableList? Ответ: Collections.unmodifiableList(source) создаёт представление исходного списка, запрещающее изменения через это представление. Если исходный список изменить напрямую, изменения будут видны и через обёртку. List.copyOf(source) возвращает список, который нельзя изменить и чьё содержимое не зависит от последующих изменений исходной коллекции. При этом метод не обязан физически создавать новый объект: подходящий неизменяемый список может быть переиспользован. Например, после добавления элемента в source обёртка unmodifiableList увидит новый элемент, а результат copyOf — нет. Есть ещё два нюанса. List.copyOf не допускает null-элементы. И ни один из этих способов не делает глубокую копию объектов внутри списка: если элемент изменяемый, его состояние всё ещё можно изменить. List.copyOf доступен с Java 10. Документация Java · Дополнение 1 🐸 Библиотека собеса по Java

❓ Чем операции Stream API с состоянием отличаются от операций без состояния? Ответ: Операции без состояния обрабатывают очередной элемент независимо от ранее обработанных. Типичные примеры — filter и map, если переданные им функции сами не зависят от изменяемого внешнего состояния. Операциям с состоянием нужна информация о других элементах. Например, distinct должен учитывать уже встреченные значения, а sorted — порядок элементов всей конечной последовательности, прежде чем выдавать отсортированный результат. Это влияет на память и выполнение конвейера. После filter подходящий элемент часто можно сразу передать дальше. sorted обычно требует накопить данные; distinct может выдавать новые уникальные элементы постепенно. Не путайте состояние операции Stream API с изменением общей переменной внутри лямбды. Счётчик, который вы увеличиваете из map, не превращает его в корректную замену встроенной операции с состоянием и особенно опасен при параллельном выполнении. Документация Java 🐸 Библиотека собеса по Java

❓ Чем ClassNotFoundException отличается от NoClassDefFoundError? Ответ: ClassNotFoundException — проверяемое исключение, возникающее, когда приложение загружает класс по имени, например через Class.forName(), а загрузчик не находит его определение. NoClassDefFoundError относится к LinkageError. Он может возникнуть, когда JVM требуется определение класса при обычном выполнении программы, но оно недоступно. Например, приложение скомпилировали с зависимостью, а при запуске нужный JAR отсутствует. Но объяснение «NoClassDefFoundError всегда означает отсутствующий JAR» неполное. Он также возникает при повторной попытке инициализировать класс, чья предыдущая инициализация завершилась ошибкой. Например, статический инициализатор выбросил исключение: первое обращение может завершиться ExceptionInInitializerError, а последующие — NoClassDefFoundError. Поэтому при диагностике важно смотреть не только имя ошибки, но и её причину, а также самый первый сбой инициализации. Документация Java · Дополнение 1 · Дополнение 2 🐸 Библиотека собеса по Java

😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция! До 31 октября в Proglib Academy можно выбрать два курса
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция! До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один. Например, можно совместить:
💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.
Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽ 🔥 Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога. Акция действует до 31 октября включительно ⏳ ⏬ Собрать свой учебный билд

❓ Можно ли объявить интерфейс sealed и что это ограничивает? Ответ: Да. sealed можно применять и к классам, и к интерфейсам. Для интерфейса он ограничивает круг непосредственных подтипов: кто может его реализовать или расширить. Например, sealed interface Payment permits CardPayment, CashPayment разрешает только перечисленные непосредственные подтипы. При этом permits можно опустить, если компилятор может вывести список из объявлений в той же единице компиляции. Обычный класс, напрямую реализующий такой интерфейс, должен быть final, sealed или non-sealed. Подынтерфейс — sealed или non-sealed. У record и enum есть собственные правила неявных модификаторов. Важно: non-sealed снова открывает соответствующую ветку для дальнейшего наследования. Поэтому sealed у корневого интерфейса не означает, что во всей иерархии может существовать только несколько конкретных классов. Возможность окончательно появилась в Java 17. Документация Java 🐸 Библиотека собеса по Java

Два равных объекта — две записи. В какой map это возможно? Создали два разных объекта String со значением key. Они равны по equals, но ссылки различаются. Оба использовали как ключи. Какой размер получится у IdentityHashMap и у обычной HashMap? Ответ: 2 и 1. IdentityHashMap сравнивает ключи по тождеству ссылок, обычная HashMap — по equals. Она нужна в редких задачах вроде обхода графа объектов или глубокой копии, где два равных по содержимому узла нельзя слить в один. Это специальная семантика, а не универсальная замена HashMap. В примере явно создаются два разных объекта, одинаковые строковые литералы для проверки не подходят. IdentityHashMap в Java SE 25 #core

Почему get может изменить порядок LinkedHashMap? В map последовательно добавили ключи A, B и C. Конструктор вызван с accessOrder=true. Затем прочитали A через get. В каком порядке пойдут ключи при обходе? Ответ: B, C, A. В режиме access-order чтение существующего элемента считается обращением и переносит его в конец порядка обхода. Это пригодно для основы LRU-кеша. У обычного LinkedHashMap порядок задаётся вставкой, поэтому тот же get оставит A, B, C. Наличие связного порядка ещё не означает, что чтение всегда нейтрально к структуре. Контракт LinkedHashMap #core

👀 Как вы смотрите видео? Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране? Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить. 🕰️ Опрос займёт около 3 минут. В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео. 🔗 Поделиться опытом 🐸 Библиотека программиста

❓ Расскажите о паттерне Facade Facade — это структурный паттерн, который предоставляет простой интерфейс к сложной подсистеме, скрывая внутреннюю сложность. Простыми словами: один метод вместо десяти вызовов в разные сервисы. Пульт от телевизора — это фасад к электронике внутри. ▪️ Пример: Оформление заказа: нужно проверить наличие, списать деньги, создать доставку, отправить уведомление. Клиент не должен знать эти детали.

// Сложная подсистема
class InventoryService {
    boolean checkStock(String productId) {
        return true; // проверка на складе
    }
}

class PaymentService {
    boolean charge(String userId, BigDecimal amount) {
        return true; // списание средств
    }
}

class ShippingService {
    String createShipment(String orderId, String address) {
        return "TRACK-" + orderId; // создание доставки
    }
}

class NotificationService {
    void sendOrderConfirmation(String userId, String trackingId) {
        System.out.println("Уведомление отправлено: " + trackingId);
    }
}

// Фасад — один метод вместо четырёх
class OrderFacade {
    private final InventoryService inventory = new InventoryService();
    private final PaymentService payment = new PaymentService();
    private final ShippingService shipping = new ShippingService();
    private final NotificationService notification = new NotificationService();

    public String placeOrder(String userId, String productId,
                             BigDecimal amount, String address) {
        if (!inventory.checkStock(productId)) {
            throw new IllegalStateException("Нет на складе");
        }
        if (!payment.charge(userId, amount)) {
            throw new IllegalStateException("Оплата не прошла");
        }
        String trackingId = shipping.createShipment(productId, address);
        notification.sendOrderConfirmation(userId, trackingId);
        return trackingId;
    }
}

// Клиент вызывает один метод
OrderFacade facade = new OrderFacade();
String tracking = facade.placeOrder("user1", "SKU-100",
    new BigDecimal("2999.00"), "Москва, ул. Пушкина");
▪️ Когда использовать — Подсистема сложная, а клиенту нужен простой вход — Хотите уменьшить связанность между слоями — Типичный пример: сервисный слой в Spring-приложении ▪️ Минус Фасад может стать God Object, если взять на себя слишком много логики. 🐸 Библиотека собеса по Java #patterns

😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода. 🔘 Поговорим о том: — когда дорогая модель действительно нужна, а когда хватит дешёвой; — сколько стоит один прогон и куда уходят токены; — какие задачи можно отдавать субагентам; — как настроить маршрутизацию моделей; — что проверять в AI-коде перед merge. ✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после. ⬇️ 18 сентября, 19:00 МСК ⬇️ 1,5 часа · бесплатно ⬇️ Арсений Харланов и Олег Лайок 💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре. 🔗 Зарегистрироваться на вебинар⁠

❓ Что такое "diamond problem" и как его решает Java? «Diamond problem» возникает при множественном наследовании, когда класс может унаследовать одну и ту же реализацию от разных родителей. В Java классы не поддерживают множественное наследование, а только интерфейсы позволяют такое. Если два интерфейса имеют одинаковый default-метод, то компилятор потребует явного переопределения в классе. Это и есть решение проблемы. 🐸 Библиотека собеса по Java #tests

👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах. Через пару недель появляется зада
👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах. Через пару недель появляется задача, где нужны алгоритмы. Потом понимаешь, что неплохо бы освежить Python или математику для Data Science. 🔜 Именно поэтому подписка на обучение многим оказывается удобнее отдельных курсов. Можно спокойно переключаться между темами, когда меняются задачи, а не покупать новую программу каждый раз.
В подписку Proglib Academy входят все основные направления — AI, ML, Python, алгоритмы, математика для DS и другие курсы, а ещё закрытый видеохаб с вебинарами практиков.
Начать можно с пробного месяца. Если решите остаться, его стоимость зачтётся при оформлении подписки 😎 🔗 Узнать подробнее 🏃‍♀️ Proglib Academy

Один доступ вместо вечного выбора между «нужно для работы» и «давно хотелось изучить» 👇

❓ Как работает ConcurrentHashMap? ConcurrentHashMap использует сегментирование / распространённые блокировки (в новых версиях — на уровне бакета), что позволяет нескольким потокам читать и писать без полной блокировки карты. Операции get делаются без блокировки, put и remove используют ограниченную блокировку (или CAS) лишь на отдельных сегментах или узлах. В отличие от Collections.synchronizedMap(...), который блокирует весь объект на каждую операцию, ConcurrentHashMap даёт более высокую конкурентность и масштабируемость. 🐸 Библиотека собеса по Java #concurrency

❓ Что такое нагрузочное тестирование? Нагрузочное тестирование — это проверка поведения системы под различными уровнями нагрузки. Цель — понять, как приложение работает при большом количестве одновременных пользователей или запросов. Обычно проверяем: — время отклика при росте нагрузки — максимальное количество пользователей, которое система выдерживает — точку деградации производительности — стабильность при длительной работе Используем инструменты типа JMeter, Gatling или K6. 🐸 Библиотека собеса по Java #tests

🎯 У разработчика, DevOps-инженера и техлида разные причины задуматься о системной работе с AI-агентами Но цель одна: перейти
🎯 У разработчика, DevOps-инженера и техлида разные причины задуматься о системной работе с AI-агентами Но цель одна: перейти от случайных удачных запусков к управляемому процессу на реальном проекте — с понятными правилами, ревью, контролем расходов и безопасности ✔️ На курсе «ИИ для разработчиков» участники выстраивают такой процесс на практике: подключают инструменты, задают границы для агента и учатся понимать, где ему можно доверять работу, а где требуется проверка. ⚡️ Предзапись на осенний поток уже открыта 🏃‍♀️ Proglib Academy

Разработчику нужен стабильный результат, DevOps — контроль инфраструктуры, техлиду — правила для всей команды. Собрали это в одном посте 👇