Библиотека собеса по Java | вопросы с собеседований – Telegram
Библиотека собеса по Java | вопросы с собеседований
6.42K subscribers
407 photos
9 videos
557 links
Вопросы с собеседований по Java и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что такое Spring Bean Scope?

Spring Bean Scope определяет жизненный цикл и видимость бина в контейнере.

Основные виды:

▪️ singleton (по умолчанию) — один экземпляр на весь контейнер.
▪️ prototype — новый экземпляр при каждом запросе.
▪️ request — бин живёт в рамках HTTP-запроса.
▪️ session — бин живёт в рамках HTTP-сессии.
▪️ application — бин живёт в рамках веб-приложения.
▪️ websocket — бин на время WebSocket-сессии.

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

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍121🔥1
✔️ Java-тест: CompletableFuture + ThreadLocal

Классическая ловушка в многопоточке👇

📦 Задание


Написали сервис для аудит-логирования действий пользователей. В проде периодически в лог пишется чужой userId — данные одного юзера попадают в запись другого. Найдите баг и исправьте:

@Component
public class UserContext {
private static final ThreadLocal<String> currentUserId = new ThreadLocal<>();

public static void set(String userId) { currentUserId.set(userId); }
public static String get() { return currentUserId.get(); }
public static void clear() { currentUserId.remove(); }
}

@Service
@RequiredArgsConstructor
public class OrderService {
private final AuditLogger auditLogger;

public CompletableFuture<Order> createOrder(String userId, OrderDto dto) {
UserContext.set(userId);

return CompletableFuture.supplyAsync(() -> {
Order order = buildOrder(dto);
auditLogger.log("Order created by: " + UserContext.get());
return order;
});
}
}


🔹 Задачи

— Объяснить, почему UserContext.get() внутри supplyAsync может вернуть чужой userId или null
— Исправить так, чтобы контекст корректно передавался в асинхронный поток
— Бонус: объяснить, почему ThreadLocal вообще опасен с пулами потоков типа ForkJoinPool

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

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

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

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍41🤔1
💬 Обратная связь

Какие вопросы публиковать больше?

👍🏼 — Классика с собесов, чтобы точно набить руку на ближайший
🤔 — Вопросы, которые не встречаются в каждой статье вида "N вопросов для собеса"
🔥 — Больше практики, а то одна теория

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🤔15🔥7
В чём основное отличие Docker от виртуальной машины?

Основное отличие в уровне виртуализации.

Виртуальная машина виртуализирует железо целиком: у неё есть собственная ОС со всеми компонентами, гипервизор, ядро. Это тяжеловесно — VM может весить гигабайты и стартовать минутами.

Docker виртуализирует только уровень приложения. Контейнеры используют ядро хостовой ОС, изолируясь через namespaces и cgroups. Они легковесны — образ может весить десятки мегабайт, запускается за секунды.

🔹 На практике это означает

— Docker быстрее и экономнее по ресурсам.
— VM даёт полную изоляцию и может запускать разные ОС на одном хосте.
— Для микросервисов обычно выбирают Docker, для полной изоляции окружений — VM.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👏7👍4🔥21
Гарантирует ли ExecutorService корректное завершение всех задач, если вызвать shutdown()?

Нет, shutdown() не гарантирует корректное завершение всех задач.

🔹 shutdown() делает следующее:

запрещает принимать новые задачи;
позволяет завершиться уже запущенным и ожидающим задачам;
возвращает управление сразу же, не дожидаясь завершения.

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥31
☝️ Уже сегодня: ИИ-агенты в продакшене — инженерный подход к интеграции LLM

Индустрия активно обсуждает потенциал нейросетей, способных автоматизировать бизнес-процессы и заменить целые отделы. Однако реальное внедрение агентов в production вскрывает серьёзные проблемы: разработчикам приходится бороться с непредсказуемыми галлюцинациями моделей, нестабильными API и сложной интеграцией в существующую архитектуру.

Сегодня в 19:00 МСК в рамках нашего курса «Разработка AI-агентов» мы проведём открытый вебинар «ИИ-агенты в продакшене: от хайпа к деньгам». Спикер — Полина Полунина, руководитель AI-направления в Альфа-Банке. Будем говорить о нейросетях с позиции жёсткой инженерии.

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

Тем, кто придёт на эфир, дадим промокод AGENTS на скидку 10 000 ₽ на любой тариф курса.

👉 Занять место на вебинаре
2
Часовая готовность: создаём ИИ-агента в прямом эфире

В 19:00 МСК в рамках нашего курса «Разработка AI-агентов» стартует вебинар «ИИ-агенты в продакшене: от хайпа к деньгам». Спикер — Полина Полунина, руководитель AI-направления в Альфа-Банке.

Будет live-демо работающего агента, реальные метрики из корпоративной среды и честный разбор архитектурных граблей — без воды и «успешного успеха».

Всем зрителям эфира дадим эксклюзивный промокод AGENTS на скидку 10 000 ₽ на любой тариф курса.

👉 Занять место на вебинаре
Объясните 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
👍8🔥1
Что такое Virtual Threads, какие подводные камни при их включении?

Virtual Threads (Project Loom) — это легковесные потоки JVM, которые не привязаны 1-к-1 к OS-потокам.

Spring Boot 3.2+ поддерживает их из коробки — достаточно одной строчки:
propertiesspring.threads.virtual.enabled=true


Это переключает Tomcat, @Async, @Scheduled и TaskExecutor на виртуальные потоки.

Что даёт: при blocking I/O (JDBC, HTTP-клиенты, файлы) виртуальные потоки освобождают carrier thread во время ожидания. Пропускная способность растёт без реактивного кода.

🔹 Подводные камни

▪️ Pinning — до Java 24 вход в synchronized блок или нативный код, и поток "пиннится" к carrier thread и блокирует его.

▪️ ThreadLocal — если у каждого виртуального потока свой ThreadLocal с тяжёлым объектом — heap быстро кончается.

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

▪️ CPU-bound задачи — Virtual Threads тут не помогут и могут даже навредить. Для счёта — обычный ForkJoinPool.

Вывод: включается легко, но нужно понимать, где узкое место. Не серебряная пуля — это инструмент для I/O-bound нагрузки.

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1👏1
В чем разница между JRE, JVM и JDK?

▪️ JVM (Java Virtual Machine) — это виртуальная машина, которая выполняет байт-код. Она абстрагирует операционную систему и аппаратное обеспечение, предоставляя платформонезависимую среду для выполнения программ.

▪️ JRE (Java Runtime Environment) — это комплект программного обеспечения, включающий JVM и стандартные библиотеки Java, которые нужны для запуска Java-программ.

▪️ JDK (Java Development Kit) — это полный набор инструментов для разработки Java-программ. Он включает в себя JRE и дополнительные инструменты, такие как компилятор javac, отладчик, и другие утилиты для разработки.

Таким образом, JDK включает в себя JRE, а JRE включает в себя JVM.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM