Библиотека собеса по Java | вопросы с собеседований
6.43K subscribers
408 photos
9 videos
580 links
Вопросы с собеседований по Java и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Гарантирует ли ExecutorService корректное завершение всех задач, если вызвать shutdown()?

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

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

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

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥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
👍11🔥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
👍8🔥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
👍7🔥1👏1
✔️ Java-тест: что не так с этим сервисом?

Код компилируется, тесты зелёные, в проде всё ломается 👇

📦 Задание — code review


Сервис обрабатывает заявки на вывод средств. Требования простые: нельзя выводить больше, чем есть на балансе, и нельзя создавать две заявки одновременно.

@Service
@RequiredArgsConstructor
public class WithdrawalService {

private final AccountRepository accountRepository;
private final WithdrawalRepository withdrawalRepository;

public void requestWithdrawal(Long userId, BigDecimal amount) {
Account account = accountRepository.findByUserId(userId)
.orElseThrow();

if (account.getBalance().compareTo(amount) < 0) {
throw new InsufficientFundsException();
}

boolean hasPending = withdrawalRepository
.existsByUserIdAndStatus(userId, Status.PENDING);

if (hasPending) {
throw new WithdrawalAlreadyPendingException();
}

account.setBalance(account.getBalance().subtract(amount));
accountRepository.save(account);

withdrawalRepository.save(
new Withdrawal(userId, amount, Status.PENDING)
);
}
}


🔹 Задачи

Два запроса от одного пользователя прилетели одновременно. В итоге — баланс ушёл в минус и создались две заявки.

▪️ Объясни

— Точную последовательность событий при конкурентных запросах.
— Спасёт @Transactional над методом или нет? Почему?
— Как исправить это корректно.

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

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

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

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍21🤔1
Самый востребованный навык в ИТ в 2026-м — навык создания ИИ-агентов

Мы полностью переработали курс «Разработка AI-агентов» под реалии 2026 года. Никакой долгой теории — с самого начала пишем код. Обучать и делиться набитыми шишками будут эксперты-практики из Газпромбанка, Альфа-Банка и других бигтехов.

В программе:

— архитектура автономных систем с тестированием, ReAct-циклами и контролем токенов;
— практическая работа с актуальными фреймворками LangGraph, AutoGen, MCP и CrewAI;
— настройка продвинутого RAG для парсинга документов и точного поиска;
— внедрение решений с учётом действующего законодательства (152-ФЗ);
— дипломная работа, за основу которой можно взять свой рабочий проект или задачу, которую предложим мы.

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

Запись первого открытого вебинара, на котором мы вместе с руководителем AI-направления в Альфа-Банке Полиной Полуниной пилили агента в прямом эфире.


Ах да, чуть не забыли! Дарим промокод AGENTSWEB на скидку 10 000 рублей и два курса сверху при покупке до 15 марта 🎁

Стать AI-инженером
💬 Обратная связь

Как часто вы проходите собеседования?

🔥 — Сейчас активно ищу работу
👍🏼 — Раз в несколько месяцев
❤️ — Раз в полгода-год
😁 — Не прохожу, уже работаю/ещё учусь

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
😁24🔥178👍5
Какие уровни изоляции транзакций существуют?

Существует 4 основных уровня изоляции транзакций, каждый из которых определяет степень видимости данных, изменённых в одной транзакции, для других транзакций:

🔹 READ UNCOMMITTED

Наименьший уровень изоляции. Другие транзакции могут читать изменения, которые ещё не были зафиксированы (не коммитнуты). Это может привести к грязным чтениям.

🔹 READ COMMITTED

Транзакция видит только те изменения, которые были зафиксированы другими транзакциями. Это предотвращает грязные чтения, но допускает неповторяемые чтения.

🔹 REPEATABLE READ

Гарантирует, что данные, считанные в рамках одной транзакции, не изменятся до её завершения (не допускаются неповторяемые чтения). Однако, могут возникать фантомные чтения.

🔹 SERIALIZABLE

Все транзакции выполняются последовательно, как если бы они были выполнены по очереди.

Реализуется через блокировки (Lock-based): БД ставит range locks — блокирует не только существующие строки, но и диапазоны, куда могут вставиться новые. Это устраняет все виды аномалий, но может значительно снизить производительность.


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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🔥1
Что такое стабы (stubs) в контексте тестирования?

Стабы — это объекты, которые заранее задают фиксированное поведение для тестируемых зависимостей.

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

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

#tests
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1💯1
Кажется, мы окончательно перешли от игрушек к суровому AgentOps

Приглашаем на наш обновлённый курс по разработке ИИ-агентов. Никакой воды про «будущее нейросетей», только инженерный подход.

На курсе мы:

— пошагово строим готовые системы на LangGraph, CrewAI и MCP;
— настраиваем кэширование и роутинг, чтобы бот не сожрал токены;
— разбираемся со стейтом, учимся дебажить через time-travel и прикручиваем human-in-the-loop;
— выводим RAG в прод так, чтобы безопасники не завернули архитектуру из-за 152-ФЗ.

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

Кстати, на днях мы пилили агента в прямом эфире, если пропустили — есть запись вебинара.


Сегодня последний день, когда можно забрать курс по старым ценам. Базовый тариф сейчас стоит 49 000 ₽ (вместо 62 990 ₽), продвинутый трек — 99 000 ₽ (вместо 124 990 ₽). Если не хочется отдавать всю сумму сразу, есть рассрочка. Торопитесь — на потоке осталось всего 5 мест!

Зафиксировать цену и перейти к сборке своих агентов
😢1
Что такое String Pool?

String Pool — это специальная область памяти, предназначенная для хранения уникальных строковых литералов. Когда строка создается в программе, JVM сначала проверяет, существует ли уже такая строка в String Pool. Если существует, то возвращается ссылка на неё, иначе создается новый объект в пуле. Это позволяет экономить память, так как одинаковые строки используют один и тот же объект в памяти, а не создаются заново при каждом использовании.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥2
В чём разница между ExecutorService.submit() и execute()?

execute() принимает Runnable, ничего не возвращает, асинхронно выполняет задачу.

submit() принимает Runnable или Callable, возвращает Future для отслеживания результата или статуса. Также позволяет отменить задачу через future.cancel() и обрабатывать исключения.

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5🔥2
Расскажите про иерархию исключений

В Java иерархия исключений начинается от класса Throwable, который делится на две ветки:

🔹 Error — критические ошибки JVM, например OutOfMemoryError. Их не обрабатывают, так как это сбои среды выполнения.
🔹 Exception — обрабатываемые ошибки приложения.

Внутри Exception выделяют:

🔹 Checked exceptions — наследники Exception. Проверяются во время компиляции. Требуют try-catch или throws. Пример: IOException, SQLException.
🔹 Unchecked exceptions — наследники RuntimeException. Возникают из-за ошибок в логике программы, проверка компилятором не требуется. Пример: NullPointerException, IndexOutOfBoundsException.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1
✔️ Java-тест: кэш убивает прод под нагрузкой

Метрики норм, тесты зелёные, при пике трафика — БД ложится 👇

📦 Задание — code review

Сервис отдаёт профили пользователей. Для ускорения добавили кэш на 5 минут.

@Service
@RequiredArgsConstructor
public class UserProfileService {

private final UserRepository userRepository;
private final RedisTemplate<String, UserProfile> redisTemplate;

private static final Duration TTL = Duration.ofMinutes(5);

public UserProfile getProfile(Long userId) {
String key = "profile:" + userId;

UserProfile cached = redisTemplate.opsForValue().get(key);
if (cached != null) {
return cached;
}

UserProfile profile = userRepository.findById(userId)
.map(UserProfile::from)
.orElseThrow(UserNotFoundException::new);

redisTemplate.opsForValue().set(key, profile, TTL);
return profile;
}
}


▪️ Объясни

— Что именно происходит при истечении TTL под нагрузкой.
— Почему добавление @Cacheable над методом не спасёт ситуацию.

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

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

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

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍31
Начать рассказывать интервьюеру, как вы ловко дёргаете ручки API через базовый LangChain.

Звучит как отличный план, да? Нет, это мгновенный отказ.

В свежем отчёте по рынку GPU говорится, что 54% компаний стопают ИИ-внедрения тупо из-за конских затрат на инфраструктуру. На серверах более 70% стоимости — это видеокарты. Поэтому на собесах сейчас спрашивают не про красивые промпты, а про жёсткую экономику агентов.

По сути, от вас ждут понимания, как лимитировать ресурсы на лету, роутить запросы и дебажить отказы через механизм time-travel в LangGraph. Если вы до сих пор собираете ботов в ноутбуках, гляньте обновлённый курс «Разработка ИИ-агентов» — фокус там смещён с игрушечных концепций на суровый энтерпрайз.

Что требуют от мидлов и выше:

— интеграция мультиагентных систем по стандарту MCP;
— суровый AgentOps: метрики, трейсинг, защита от деградации пайплайнов;
— локальный деплой Open Source под 152-ФЗ (без этого в финтех можно даже не стучаться).

Прямо сейчас можно урвать курс с увесистой скидкой (49 000 ₽ 62 990 ₽ за базовый тариф и 99 000 ₽ 124 990 ₽ за продвинутый трек), но стоит поторопиться — на потоке осталось всего 5 мест.

👉 Подтянуть архитектуру до уровня прода
😁1
Что такое MVC?

MVC (Model-View-Controller) — это архитектурный шаблон, разделяющий приложение на три компонента:

▪️ Model (Модель) — содержит бизнес-логику
▪️ View (Представление) — отображает данные пользователю, получая их от модели
▪️ Controller (Контроллер) — обрабатывает входные данные (обычно от пользователя), вызывает нужные методы модели и обновляет представление

Этот подход упрощает сопровождение кода, позволяет разделить ответственность между слоями и облегчает тестирование.

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

#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71😁1
В чём разница между Statement и PreparedStatement?

— Statement используется для выполнения простых SQL-запросов без параметров. Он формирует запрос как строку и каждый раз компилирует его заново, что может быть медленно и небезопасно.

— PreparedStatement предварительно компилируется базой данных и позволяет задавать параметры через плейсхолдеры. Что повышает производительность при многократном выполнении одного запроса и защищает от SQL-инъекций (данные не конкатенируются со строкой запроса, а подставляются корректно).

Поэтому в реальных проектах почти всегда используют PreparedStatement.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102👏1
Что такое денормализация в базах данных?

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

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

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