Библиотека собеса по Java | вопросы с собеседований
رفتن به کانال در Telegram
Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/08c603b6 Для обратной связи: @proglibrary_feeedback_bot
نمایش بیشتر6 487
مشترکین
+524 ساعت
+147 روز
+1430 روز
آرشیو پست ها
🤔 Как ускорить браузер
Закрой все вкладки со словами «MacBook», «купить ноутбук», «ноут в рассрочку». Потому что у нас есть решение лучше.
🔥 Proglib разыгрывает MacBook Pro 14. Формула простая: покупаешь любой курс до 15 ноября → учишься 2 недели → пишешь куратору #розыгрыш
Пока у тебя открыто 147 вкладок с ценами, кто-то уже прокачивает скилы и может забрать приз.
👉🏻 Выбрать курс для участия
💬 Обратная связь
Моё отношение к постам за прошлый месяц:
🔥 — Интересно, полезно
🤔 — Нейтрально
😁 — Не понравилось, напишу что
🐸 Библиотека собеса по Java
✔️ Java-тест: Retry с exponential backoff
Напишите метод для production-кода 👇
📦 Задание
Реализуйте метод, который выполняет операцию с повторными попытками:
public <T> T retry(Supplier<T> operation,
int maxAttempts,
long initialDelayMs) {
// Ваш код здесь
// При неудаче - повторить с задержкой
// Задержка удваивается: 100ms -> 200ms -> 400ms
// После maxAttempts выбросить исключение
}
Требования
— Первая попытка без задержки
— Каждая следующая: задержка *= 2
— После maxAttempts пробросить последнее исключение
— Если успех - вернуть результат
Ставьте → 🔥, если нравится формат. Если нет → 🤔
💬 Решения под спойлер. Сравним, какое будет лучше.
🐸 Библиотека собеса по Java
#practise❓ Расскажите о проблеме N+1?
Проблема N+1 возникает при работе с ORM, когда для получения N сущностей с их связанными данными выполняется 1 запрос для основной коллекции и затем N дополнительных запросов для каждой связи.
Если у нас 100 пользователей, выполнится 101 запрос вместо одного.
Решения:
🔹 JOIN FETCH в JPQL:
@Query("SELECT u FROM User u JOIN FETCH u.orders")
List<User> findAllWithOrders();
🔹 EntityGraph:
@EntityGraph(attributePaths = {"orders"})
List<User> findAll();
🔹 Batch Size (не решает проблему, но группирует запросы):
@BatchSize(size = 10)
private List<Order> orders;
Выбор решения зависит от конкретной ситуации: для единичных запросов подходит JOIN FETCH, для повторяющихся паттернов - EntityGraph или Batch Size.
🐸 Библиотека собеса по Java
#spring🎲 Знаешь, что хуже всего на собесе?
Когда задают простой вопрос, а ты не можешь ответить.
🤔 Это ощущение, когда понимаешь:
«Блин, я это знаю... вроде... сейчас...»От «я знаю...» до «сейчас объясню!» всего один курс. ✅ Алгоритмы и структуры данных — от Big O до задач криптографии. ✅ Python для разработчиков — пиши чистый и эффективный код. ✅ Архитектуры и шаблоны — строй системы, которые масштабируются. ✅ Основы IT — всё необходимое для входа в профессию. Выбирай любой и забирай со скидкой 40% только до конца октября. 🔗 Выбрать курс
❓ Как работают лямбды?
Лямбда — это краткая форма записи анонимного класса, реализующего функциональный интерфейс (т.е. интерфейс с единственным абстрактным методом, например Runnable или Function).
При компиляции лямбда не создает отдельный класс, как раньше анонимные классы. Вместо этого компилятор использует механизм invokedynamic, добавленный в Java 8, чтобы создать ссылку на реализацию метода — функциональный объект формируется динамически во время выполнения.
Кратко:
Лямбды — это ссылки на поведение, а не объекты. Они компилируются через invokedynamic и создают реализацию функционального интерфейса во время выполнения.
🐸 Библиотека собеса по Java
#core
💬 Обратная связь
Ежемесячный опрос по грейдам. Растём вместе 💪🏻
Ваш грейд:
🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь
🐸 Библиотека собеса по Java
💻 В эпоху LLM код пишется легче, но…
Чтобы получать крутые офферы и построить устойчивую карьеру, нужно иметь развитое архитектурное мышление и инженерную культуру.
— Как перейти от поверхностного знания языка к экспертному уровню?
— Как развивать инженерную культуру: от базовых принципов к senior-практикам?
— Как использовать ИИ-инструменты для роста, а не деградации?
— Как разобраться в агентских системах и освоить современные подходы к архитектуре?
… Ответы на все эти вопросы узнаешь в бесплатном прямом эфире.
🗣 Спикер — Дмитрий Березницкий
Сhief Technical Officer с 20+ лет опыта в IT. — Занимался разработкой решений в сферах безопасности, блокчейна, финтеха и электронной коммерции, сфокусированных на американском рынке. — В роли архитектора и руководителя обеспечивал стратегическое направление команд и успешное внедрение международных проектов. — Провел более 1 000 собеседований.⏰ Встречаемся сегодня в 19:00 мск. Ссылка на вебинар открывается сразу после регистрации 👉 https://kata.pw/g7wWOk
❓ Что такое "Thread Pool"?
Thread Pool (пул потоков) — это коллекция предварительно созданных потоков, которые могут быть использованы для выполнения задач. Основная цель — минимизация накладных расходов на создание и уничтожение потоков. Вместо того чтобы создавать новый поток для каждой задачи, задачи передаются уже существующим потокам в пуле. Это улучшает производительность и позволяет более эффективно управлять ресурсами, особенно при высокой нагрузке.
🐸 Библиотека собеса по Java
#concurrency
❓ Расскажите о паттерне Фасад?
Паттерн Фасад относится к структурным шаблонам проектирования. Его цель — скрыть сложность подсистемы за простым интерфейсом. Он предоставляет единую точку доступа к набору классов, упрощая взаимодействие клиента с системой.
Проще говоря, Фасад — это «фронт-дверь» сложной системы. Вместо того чтобы вызывать десятки методов из разных классов, клиент обращается к одному объекту, который внутри вызывает всё нужное.
Плюсы:
✔️ Упрощает использование сложной системы.
✔️ Изолирует клиента от изменений в подсистемах.
✔️ Повышает читаемость и поддержку кода.
Минусы:
⚠️ Может стать God объектом, если разрастается слишком сильно.
🐸 Библиотека собеса по Java
#patterns
❓ Что такое Fork/Join Pool?
ForkJoinPool — это специальный пул потоков, оптимизированный для выполнения множества мелких параллельных задач, которые можно рекурсивно делить (fork) и объединять (join).
▪️ Как работает:
— Задача делится на подзадачи (метод fork()), каждая выполняется в отдельном потоке.
— Когда подзадачи завершаются, результаты объединяются (join()).
— В отличие от обычного ThreadPoolExecutor, каждый поток имеет собственную двустороннюю очередь задач и использует механизм work stealing: если поток простаивает, он "ворует" задачи из очередей других потоков.
▪️ Когда применять:
— Для задач, которые можно разбить на независимые части (например, обработка массивов, вычисления, рекурсивные алгоритмы).
— При необходимости максимально загрузить CPU (по числу ядер).
🐸 Библиотека собеса по Java
#concurrency
🧠 Математика — движок всего, что мы пишем
Без неё не было бы сортировок, шифрования, графов и даже того самого if с вероятностью успеха в A/B-тесте.
Но главное, математика понятна, если объяснить её на языке разработки.
📘 Курс «Математика для Data Science»:
— от основ до реальных задач из собесов;
— линейная алгебра, статистика, теория вероятностей;
— визуализации, практика и живые уроки;
— поддержка менторов и комьюнити в чате.
🎓 За 2 месяца вы перестанете просто использовать библиотеки и начнёте понимать, как они работают.
🗓️ Старт → 6 ноября
👉 Записаться на курс
✔️ Java-тест: Concurrency edition
Проверим, как вы дружите с многопоточностью 👇
У вас есть метод
doWork(), который выполняет тяжёлую операцию (например, чтение и обработку файла).
📦 Задание:
Нужно запустить ровно 5 потоков, каждый из которых вызывает doWork(), и дождаться завершения всех перед продолжением выполнение основного потока.
Разрешено использовать любые инструменты.
Ставьте → 🔥, если нравится формат. Если нет → 🤔
💬 Решения под спойлер. Сравним, какое будет лучше.
🐸 Библиотека собеса по Java
#practise❓ В чём разница между Lambdas и Anonymous Classes?
И лямбды, и анонимные классы позволяют создавать "одноразовые" реализации, но лямбды — это более короткий и функциональный способ записать код, реализующий функциональный интерфейс (т.е. интерфейс с одним абстрактным методом).
Ключевые отличия:
🧩 Синтаксис: лямбда короче и читабельнее.
⚡️ Производительность: лямбды компилируются как invoke-dynamic и не создают новый класс → меньше накладных расходов.
🧠 this: внутри лямбды this указывает на внешний объект, а в анонимном классе — на экземпляр самого анонимного класса.
🎯 Назначение: анонимные классы подходят, если нужно переопределить несколько методов или иметь состояние. Лямбды — только для одного метода.
🐸 Библиотека собеса по Java
#core
❓ В чем разница между == и .equals() в Java?
== сравнивает ссылки на объекты (т.е. проверяет, указывают ли две переменные на один и тот же объект в памяти).
.equals() — это метод, предназначенный для сравнения содержимого объектов. По умолчанию в классе Object он работает как ==, но многие классы (например, String, Integer, List) переопределяют его, чтобы сравнивать значения. Также можно самостоятельно переопределить его.
🐸 Библиотека собеса по Java
#core
🔥 Новый курс «Математика для Data Science»
Записывайтесь до 19.10 и получите бонус-курс «Школьная математика» для быстрого освежения знаний! 🚀
🧠 Эксперты-спикеры на курсе:
▫️ Диана Миронидис — преподаватель ВШЭ, автор Яндекс Практикума;
▫️ Ксения Кондаурова — преподаватель Центрального Университета (Т-Банк);
▫️ Маргарита Бурова — академический руководитель программ Wildberries & Russ.
👉🏻 Не упустите шанс улучшить свои навыки
❓ Что такое маркерный интерфейс?
Маркерный интерфейс — это интерфейс, который не содержит методов, но служит для маркировки классов с определённой целью. Его использование позволяет указывать, что объект принадлежит к определённому типу или должен иметь особое поведение, не реализуя дополнительные методы.
🐸 Библиотека собеса по Java
#core
😵💫 Устал от бесконечной подготовки к собесам?
Тогда залетай к нам, есть задачка попроще.
Пройди в нашем боте мини-тест по математике и узнай, готов ли ты к Data Science или стоит что-то подтянуть.
📱 Перейти в бота
❓ Что такое Lazy Initialization?
Lazy Initialization — это подход, при котором объект создаётся только в момент первого обращения к нему, а не заранее при инициализации класса или приложения.
Такой подход экономит ресурсы (память, CPU) и ускоряет старт программы, особенно если объект может так и не понадобиться.
🐸 Библиотека собеса по Java
#spring
💡 Задача с собесеседования
Недавно в одном известном всем банке кандидату была предложена задача:
Есть клиент, который за месяц делает 1000 транзакций. Нужно посчитать вероятность того, что среди них окажется хотя бы одна дублирующаяся сумма, если каждая сумма округляется до 2 знаков после запятой.Вероятности, распределения, матожидание, градиенты — всё это может всплыть на интервью, и даже в продовых задачах. 🎓 Proglib запускает экспресс-курс «Математика для Data Science» — для тех, кто хочет закрыть эти пробелы и понять математику быстро, качественно и без боли. 🔍 На курсе вас ждет: — линейная алгебра, анализ, теория вероятности и статистика; — градиенты, матрицы и экстремумы функций; — математики и алгоритмы машинного обучения; — много практики. 📅 Старт: 6 ноября ⏰ Формат: 10 вебинаров и 3 практических проекта 💬 Поддержка: менторы + Telegram-чат 💰 Стоимость: 37 000 ₽ (есть рассрочка) 🔗 Узнать больше и записаться
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
