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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что такое effective final в Java?

Effective final — это локальная переменная или параметр метода, значение которой после инициализации больше не изменяется. Ключевое слово final явно не указывается, но переменная фактически ведёт себя как final.

Компилятор Java рассматривает такие переменные как final и разрешает их использовать во вложенных классах и лямбда-выражениях. Если попытаться изменить значение такой переменной — она перестаёт быть effective final, и компилятор выдаст ошибку.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👏1🤔1
Опишите работу ThreadLocal и его применения.

ThreadLocal — это механизм, который хранит значение отдельно для каждого потока. У каждого потока создаётся собственная копия переменной, изолированная от других потоков. Это удобно, когда данные должны быть доступны в рамках одного потока, но не должны шариться между потоками.

Применения:

Хранение контекста запроса в веб-приложениях (например, userId, transactionId).
Использование в SimpleDateFormat или других неконкурентных объектах без синхронизации.
Реализация thread-scope зависимостей в DI-фреймворках.

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥2
Что такое микросервисы?

Микросервисы — это архитектурный стиль, при котором приложение делится на набор небольших, изолированных сервисов. Каждый сервис отвечает за конкретную бизнес-функцию, имеет собственную базу данных (или схему), независимый цикл разработки и может масштабироваться отдельно от других.

Они взаимодействуют между собой через лёгкие протоколы (обычно HTTP/gRPC, обмен сообщениями).
Главные плюсы — гибкость в разработке, масштабирование отдельных компонентов, независимый деплой. Минусы — усложнение инфраструктуры, необходимость в оркестрации и мониторинге, появление распределённых транзакций.

Такой подход противопоставляется монолиту, где всё приложение собрано в один блок.

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

#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1👏1
Для чего используется ключевое слово this?

this — это ссылка на текущий объект внутри его метода или конструктора. Оно нужно для:

Разрешения конфликта имён (например, между полем класса и параметром метода).
Вызова других конструкторов этого же класса.
Передачи текущего объекта в качестве аргумента в методы или конструкторы других классов.
Возврата ссылки на текущий объект (часто используется в паттерне Builder или для чейнинга методов).

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍93🔥1
Как работает ConcurrentHashMap?

ConcurrentHashMap использует сегментирование / распространённые блокировки (в новых версиях — на уровне бакета), что позволяет нескольким потокам читать и писать без полной блокировки карты. Операции get делаются без блокировки, put и remove используют ограниченную блокировку (или CAS) лишь на отдельных сегментах или узлах.

В отличие от Collections.synchronizedMap(...), который блокирует весь объект на каждую операцию, ConcurrentHashMap даёт более высокую конкурентность и масштабируемость.

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👏1
✔️ 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
🔥25🤔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
👍8🔥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
👍72🔥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
👍4🔥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
👍4🔥2🎉1
Время прокачать алгоритмы с 40-процентной скидкой до конца октября

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

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

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

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

🔗 Подробнее о курсе