Библиотека собеса по Java | вопросы с собеседований
6.3K subscribers
391 photos
8 videos
417 links
Вопросы с собеседований по Java и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/08c603b6

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
✔️ Java-тест: Stream API и группировка

Попробуем новый формат, сами задачки будут разные. Представим задачу 👇

Есть список строк:
List<String> names = List.of("Alice", "Bob", "Anna", "Brian", "Alex");


📋 Задание:

Сгруппируйте имена по первой букве и выведите результат в формате:
A -> [Alice, Anna, Alex]
B -> [Bob, Brian]


Ставьте →🔥, если зашёл формат. Если нет, то → 🤔

💬 Пишите решение в комментариях, главное прячьте под спойлер.

🐸 Библиотека собеса по Java

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27🤔3👍2
Что такое escape analysis в JVM, и как она может повлиять на производительность?

Escape analysis — это оптимизация, применяемая JIT-компилятором, цель которой — выяснить, «убегает» ли объект за пределы метода или потока. Если анализ показывает, что объект используется только внутри метода (не передается наружу), JVM может:

аллоцировать его на стеке вместо кучи (stack allocation)

убрать синхронизацию (lock elision)

оптимизировать сборку мусора

Таким образом уменьшается нагрузка на GC и накладные расходы на синхронизацию.

🐸 Библиотека собеса по Java

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2👏1
Объясните happens-before отношение в Java Memory Model?

happens-before — это гарантированный порядок между операциями, который определяет, что эффект одной операции виден другой. Если операция A happens-before операции B, то все изменения, сделанные в A, будут видны к моменту B.

Примеры гарантий happens-before: запись в volatile поле и последующее чтение того же поля; блокировки synchronized; Thread.start() и Thread.join().

Без гарантии happens-before два потока могут видеть неверные или устаревшие значения: один поток записал в поле, другой не увидит это изменение.

🐸 Библиотека собеса по Java

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112🔥1👏1
Что такое soft reference, weak reference, phantom reference?

Это разные виды ссылок на объекты из java.lang.ref:

🔹 SoftReference — объекты могут быть удалены GC при нехватке памяти, но склонны дожидаться недостатка памяти. Часто используют для кешей.

🔹 WeakReference — объекты удаляются при следующей сборке, если нет сильных ссылок. Используется, например, для слабых ссылок в картах (WeakHashMap).

🔹 PhantomReference — всегда считается недостижимым, даже если есть phantom-ссылка. Используется, чтобы узнать, что объект уже завершил финализацию, и подготовиться к освобождению ресурсов.

🐸 Библиотека собеса по Java

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3👏1
Как в Spring работает proxy-based AOP, и какие ограничения у такого подхода?

Spring AOP обычно работает через создание прокси-объекта (JDK dynamic proxy или CGLIB). Методы вызываются на прокси, который вокруг них вставляет advice (before, after и т.д.).

Ограничения:

Только публичные методы интерфейсов (для JDK proxy) или методы класса (для CGLIB).

Внутренние вызовы (this.method()) не проходят через прокси, advice не сработает.

Прокси не могут перехватывать конструкторы.

Работа с final классами/методами ограничена (не могут быть проксированы).

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2🎉1
Время прокачать алгоритмы с 40-процентной скидкой до конца октября

На собеседовании не просят бездумно написать шаблонное решение. Важно понимать, как работают алгоритмы под капотом.

🔹 В курсе ты научишься:

— искать ошибки с помощью редакционного расстояния;
— работать с балансированными деревьями и графами;
— решать задачи с динамическим программированием;
— и многое другое, что пригодится на собеседованиях.

🤔 Решаешь задачи только в тг каналах? Пройди курс и отправляйся на реальные собеседования!

🔗 Подробнее о курсе
Что такое идемпотентность в REST API и как её реализовать?

Идемпотентность означает, что повторный вызов одного и того же запроса не изменяет состояние сервера более одного раза.

Способы реализации:

Использовать контроль состояния (если запись уже существует, не создавать её второй раз).

Использовать HTTP методы по стандарту: GET, PUT, DELETE. Уже идемпотентны по спецификации.

Использовать уникальный ключ (идемпотентный токен) с клиентской стороны; сервер хранит, что уже получал этот токен, и при повторе не выполняет операцию заново.

В Spring → фильтры или interceptors проверяют заголовок Idempotency-Key и используют хранилище (БД, кеш) для управления повторными запросами.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2👏1🌚1
✔️ Java-тест: Docker edition

Продолжаем тестить новый формат. Представим задачу 👇

У вас есть Spring Boot-приложение. Нужно собрать Docker-образ, который:
1. Основан на официальном JDK 21
2. Поддерживает порт 8080
3. Настраивает часовой пояс контейнера на Москву (Europe/Moscow)


📦 Задание:

Составьте Dockerfile, который корректно запускает приложение в контейнере по условиям выше.

Ставьте →🔥, если зашёл формат. Если нет, то → 🤔

💬 Скидывайте Dockerfile в комментарии, главное прячьте под спойлер.

🐸 Библиотека собеса по Java

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍3👏1🤔1
Что такое transaction propagation в Spring и какие виды существуют?

Propagation (передача транзакции) — политика того, как метод с аннотацией @Transactional будет взаимодействовать с существующей транзакцией.

Виды:

▪️ REQUIRED (по умолчанию): использует существующую транзакцию или создаёт новую, если её нет

▪️ REQUIRES_NEW: всегда создаёт новую транзакцию, при этом приостанавливая текущую

▪️ SUPPORTS: действует в рамках текущей транзакции, если есть, иначе без транзакции

▪️ MANDATORY: бросает исключение, если нет текущей транзакции

▪️ NEVER: запрещает наличие транзакции, если уже есть, бросает исключение

▪️ NESTED: создаёт «вложенную» транзакцию (savepoint внутри основной)

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112🔥1👏1
DispatcherServlet в Spring Framework?

DispatcherServlet — это центральный компонент Spring MVC, который выступает в роли Front Controller.
Он принимает все входящие HTTP-запросы, перенаправляет их нужным контроллерам и формирует HTTP-ответ.

🔹 При получении запроса он:

— Определяет нужный Handler (контроллер) через HandlerMapping.

— Передаёт выполнение HandlerAdapter, который вызывает метод контроллера.

— Обрабатывает результат с помощью ViewResolver, чтобы вернуть клиенту нужное представление (например, HTML или JSON).

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101🔥1
💡 Задача с собесеседования

Недавно в одном известном всем банке кандидату была предложена задача:

Есть клиент, который за месяц делает 1000 транзакций.
Нужно посчитать вероятность того, что среди них окажется хотя бы одна дублирующаяся сумма, если каждая сумма округляется до 2 знаков после запятой.


Вероятности, распределения, матожидание, градиенты — всё это может всплыть на интервью, и даже в продовых задачах.

🎓 Proglib запускает экспресс-курс «Математика для Data Science» — для тех, кто хочет закрыть эти пробелы и понять математику быстро, качественно и без боли.

🔍 На курсе вас ждет:

— линейная алгебра, анализ, теория вероятности и статистика;
— градиенты, матрицы и экстремумы функций;
— математики и алгоритмы машинного обучения;
— много практики.

📅 Старт: 6 ноября
Формат: 10 вебинаров и 3 практических проекта
💬 Поддержка: менторы + Telegram-чат
💰 Стоимость: 37 000 ₽ (есть рассрочка)

🔗 Узнать больше и записаться
😁42🔥1
Что такое Lazy Initialization?

Lazy Initialization — это подход, при котором объект создаётся только в момент первого обращения к нему, а не заранее при инициализации класса или приложения.

Такой подход экономит ресурсы (память, CPU) и ускоряет старт программы, особенно если объект может так и не понадобиться.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91🔥1
😵‍💫 Устал от бесконечной подготовки к собесам?

Тогда залетай к нам, есть задачка попроще.

Пройди в нашем боте мини-тест по математике и узнай, готов ли ты к Data Science или стоит что-то подтянуть.

📱 Перейти в бота
😁21
Что такое маркерный интерфейс?

Маркерный интерфейс — это интерфейс, который не содержит методов, но служит для маркировки классов с определённой целью. Его использование позволяет указывать, что объект принадлежит к определённому типу или должен иметь особое поведение, не реализуя дополнительные методы.

🐸 Библиотека собеса по Java

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥1
🔥 Новый курс «Математика для Data Science»

Записывайтесь до 19.10 и получите бонус-курс «Школьная математика» для быстрого освежения знаний! 🚀

🧠 Эксперты-спикеры на курсе:

▫️ Диана Миронидис — преподаватель ВШЭ, автор Яндекс Практикума;

▫️ Ксения Кондаурова — преподаватель Центрального Университета (Т-Банк);

▫️ Маргарита Бурова — академический руководитель программ Wildberries & Russ.

👉🏻 Не упустите шанс улучшить свои навыки
😁3👾1
В чем разница между == и .equals() в Java?

== сравнивает ссылки на объекты (т.е. проверяет, указывают ли две переменные на один и тот же объект в памяти).

.equals() — это метод, предназначенный для сравнения содержимого объектов. По умолчанию в классе Object он работает как ==, но многие классы (например, String, Integer, List) переопределяют его, чтобы сравнивать значения. Также можно самостоятельно переопределить его.

🐸 Библиотека собеса по Java

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍105🔥1
В чём разница между Lambdas и Anonymous Classes?

И лямбды, и анонимные классы позволяют создавать "одноразовые" реализации, но лямбды — это более короткий и функциональный способ записать код, реализующий функциональный интерфейс (т.е. интерфейс с одним абстрактным методом).

Ключевые отличия:

🧩 Синтаксис: лямбда короче и читабельнее.

⚡️ Производительность: лямбды компилируются как invoke-dynamic и не создают новый класс → меньше накладных расходов.

🧠 this: внутри лямбды this указывает на внешний объект, а в анонимном классе — на экземпляр самого анонимного класса.

🎯 Назначение: анонимные классы подходят, если нужно переопределить несколько методов или иметь состояние. Лямбды — только для одного метода.

🐸 Библиотека собеса по Java

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2👏1
✔️ Java-тест: Concurrency edition

Проверим, как вы дружите с многопоточностью 👇

У вас есть метод doWork(), который выполняет тяжёлую операцию (например, чтение и обработку файла).

📦 Задание:

Нужно запустить ровно 5 потоков, каждый из которых вызывает doWork(), и дождаться завершения всех перед продолжением выполнение основного потока.

Разрешено использовать любые инструменты.

Ставьте → 🔥, если нравится формат. Если нет → 🤔

💬 Решения под спойлер. Сравним, какое будет лучше.

🐸 Библиотека собеса по Java

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍1👏1
🧠 Математика — движок всего, что мы пишем

Без неё не было бы сортировок, шифрования, графов и даже того самого if с вероятностью успеха в A/B-тесте.

Но главное, математика понятна, если объяснить её на языке разработки.

📘 Курс «Математика для Data Science»:

— от основ до реальных задач из собесов;
— линейная алгебра, статистика, теория вероятностей;
— визуализации, практика и живые уроки;
— поддержка менторов и комьюнити в чате.

🎓 За 2 месяца вы перестанете просто использовать библиотеки и начнёте понимать, как они работают.

🗓 Старт → 6 ноября

👉 Записаться на курс
😁3🌚1
Что такое Fork/Join Pool?

ForkJoinPool — это специальный пул потоков, оптимизированный для выполнения множества мелких параллельных задач, которые можно рекурсивно делить (fork) и объединять (join).

▪️ Как работает:

Задача делится на подзадачи (метод fork()), каждая выполняется в отдельном потоке.

Когда подзадачи завершаются, результаты объединяются (join()).

— В отличие от обычного ThreadPoolExecutor, каждый поток имеет собственную двустороннюю очередь задач и использует механизм work stealing: если поток простаивает, он "ворует" задачи из очередей других потоков.

▪️ Когда применять:


— Для задач, которые можно разбить на независимые части (например, обработка массивов, вычисления, рекурсивные алгоритмы).
— При необходимости максимально загрузить CPU (по числу ядер).

🐸 Библиотека собеса по Java

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2👏1