Библиотека собеса по Java | вопросы с собеседований
Відкрити в Telegram
Вопросы с собеседований по Java и ответы на них. По рекламе: @tproger_sales_bot Учиться у нас: clc.to/3wECtA Для обратной связи: @proglibrary_feeedback_bot
Показати більше6 378
Підписники
-324 години
-237 днів
-5530 днів
Архів дописів
❓ Что такое Spring Bean Scope?
Spring Bean Scope определяет жизненный цикл и видимость бина в контейнере.
Основные виды:
▪️ singleton (по умолчанию) — один экземпляр на весь контейнер.
▪️ prototype — новый экземпляр при каждом запросе.
▪️ request — бин живёт в рамках HTTP-запроса.
▪️ session — бин живёт в рамках HTTP-сессии.
▪️ application — бин живёт в рамках веб-приложения.
▪️ websocket — бин на время WebSocket-сессии.
🐸 Библиотека собеса по Java
#spring
❓ Чем @Bean отличается от @Component в Spring?
▪️ @Component вешается над классом — Spring сам создаёт его экземпляр через сканирование пакетов (@ComponentScan).
▪️ @Bean ставится над методом в @Configuration — вы сами создаёте объект внутри метода и возвращаете его.
@Bean полезен, когда:
— класс не ваш (нет доступа, чтобы добавить аннотацию)
— нужен кастомный способ создания бина (например, с параметрами конструктора или фабричным методом)
Оба способа регистрируют бин в ApplicationContext, разница только в том, кто и как создаёт объект.
🐸 Библиотека собеса по Java
#spring
❓ Что такое Transactional Outbox?
Это паттерн надёжной доставки событий в распределённых системах.
Проблема: при сохранении данных в БД и отправке события в Kafka/RabbitMQ — эти две операции не атомарны. Возможны ситуации, когда данные сохранятся, но событие не уйдёт, либо наоборот.
Решение: вместо прямой отправки в брокер — пишем событие в отдельную таблицу outbox в рамках одной транзакции с основными данными. Отдельный процесс читает эту таблицу и публикует события в брокер.
🔹 Ключевые свойства
— Гарантия at-least-once доставки.
— Атомарность через одну транзакцию БД.
— Потребитель должен быть идемпотентен.
🐸 Библиотека собеса по Java
#patterns
❓ Что такое сервлет?
Сервлет — это Java-класс, который обрабатывает HTTP-запросы и формирует HTTP-ответы в веб-приложениях. Он работает на стороне сервера в контейнере сервлетов (например, Tomcat), реализуя интерфейс javax.servlet.Servlet (чаще — через абстрактный класс HttpServlet).
Основная задача сервлета — выступать в роли контроллера в архитектуре MVC: принимать запросы от клиента, обрабатывать данные (либо делегировать бизнес-логике), и передавать результат обратно клиенту (обычно через HTML или JSON).
🐸 Библиотека собеса по Java
#core
💬 Обратная связь
Проверяем динамику роста комьюнити :)
Ваш текущий грейд:
🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь
🐸 Библиотека собеса по Java
Последний шанс: 3 курса по цене 1 и запуск AI-агентов в продакшн
На собеседованиях в энтерпрайз всё чаще всплывают вопросы про интеграцию
Java-приложений с ИИ. Как маршрутизировать мультиагентные системы, контролировать затраты и строго соблюдать 152-ФЗ?
Обновлённая программа делает упор на жёсткий инжиниринг и вывод в прод. Вы научитесь строить ReAct-циклы, работать с LangGraph и AutoGen, внедрять продвинутый RAG, протоколы MCP и AgentOps. Все ключевые навыки в одном месте: измеримость систем, time-travel дебаггинг, управление браузером, human-in-the-loop и развёртывание в закрытых контурах.
Почему нельзя откладывать:
— масштабная акция «3 курса по цене 1» сгорает уже сегодня;
— промокод Agent на скидку 10 000 рублей действует последние часы;
— сразу после оформления открываются материалы для подготовки — начать учиться можно прямо сейчас.
Забронировать место на курсе и забрать бонусы до конца дня✔️ Java-тест: Transactional + EventListener
Ревью и рефактор логики для production-кода 👇
📦 Задание
Команда написала логику для отправки письма после регистрации пользователя. На проде иногда возникает ситуация, что письма приходят, а юзера в БД нет. Найдите проблему и исправьте:
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
private final ApplicationEventPublisher eventPublisher;
@Transactional
public void register(UserDto dto) {
User user = new User(dto.email());
userRepository.save(user);
eventPublisher.publishEvent(new UserRegisteredEvent(user));
}
}
@Component
@RequiredArgsConstructor
public class EmailListener {
private final EmailSender emailSender;
private final SomeOtherService someOtherService;
@EventListener
public void onUserRegistered(UserRegisteredEvent event) {
emailSender.sendWelcome(event.user().getEmail());
someOtherService.doSomething();
}
}
🔹 Задачи
— Объяснить, при каком сценарии письмо уйдёт, а пользователь не сохранится
— Исправить код, чтобы событие обрабатывалось только после сохранения юзера
Ставьте → 🔥, если нравится формат. Если нет → 🤔
💬 Решения под спойлер. Сравним, какое будет лучше.
🐸 Библиотека собеса по Java
#practise❓ В чем разница между параллелизмом и многопоточностью?
Многопоточность — это способность программы выполнять несколько потоков , где каждый поток может выполняться независимо, но не обязательно одновременно. Потоки могут переключаться между собой, создавая иллюзию одновременности, однако они могут работать на одном ядре процессора.
Параллелизм, с другой стороны, — это выполнение нескольких задач одновременно, обычно на разных процессорах или ядрах. В контексте параллелизма, задачи действительно выполняются одновременно.
🐸 Библиотека собеса по Java
#concurrency
За год мы провели три потока курса по ИИ-агентам, а теперь запускаем масштабное обновление!
В новом, четвёртом потоке мы учли все пожелания студентов, добавили большой блок про
AgentOps и сместили фокус с базовых концепций на суровый инжиниринг. Ответить на каверзные вопросы по JVM и многопоточности на собеседовании легко, а вот интегрировать ИИ-агента в Enterprise-контур без галлюцинаций — задача со звёздочкой.
В программе:
— практика с первого занятия: Jupyter-ноутбуки с автопроверкой;
— оркестрация в LangGraph: human-in-the-loop и механизм time-travel;
— продвинутый RAG для продакшена и парсинг сложных документов;
— контроль экономики агентов: маршрутизация и кеширование запросов;
— развёртывание локальных опенсорс-моделей с соблюдением 152-ФЗ.
В честь старта продаж действует спецпредложение: 3 курса по цене 1 (два дополнительных курса в подарок).
Доступ к материалам для предварительной подготовки откроется сразу после оплаты.
По промокоду Agent забирайте скидку 10 000 ₽ (89 000 ₽ вместо 99 000 ₽). Успейте занять место до 28 февраля!
👉 Присоединиться к четвёртому потоку и внедрить агентов в Enterprise❓ Что такое Thread Pool?
Thread Pool (пул потоков) — это коллекция предварительно созданных потоков, которые могут быть использованы для выполнения задач.
Основная цель — минимизация накладных расходов на создание и уничтожение потоков. Вместо того чтобы создавать новый поток для каждой задачи, задачи передаются уже существующим потокам в пуле.
Это улучшает производительность и позволяет более эффективно управлять ресурсами, особенно при высокой нагрузке.
🐸 Библиотека собеса по Java
#concurrency
❓ В чём разница между throw и throws?
→ throws: указывается в сигнатуре метода, чтобы сообщить, какие исключения метод может выбросить. Например, если метод может генерировать FileNotFoundException, это указывается так:
public void readFile() throws FileNotFoundException { ... }
Здесь throws не выбрасывает исключение, а только предупреждает, что оно может возникнуть.
→ throw: используется непосредственно в теле метода, чтобы выбросить конкретное исключение. Пример:
if (file == null) {
throw new FileNotFoundException("Файл не найден");
}
Здесь throw запускает исключение, когда возникает определённое условие.
#coreОфер за 2 дня в Яндекс через Weekend Offer Multitrack
Это формат быстрого найма для бэкенд-разработчиков с опытом работы от 5 лет на C++, Python, Java/Kotlin или Go. Приглашаем тех, кто умеет принимать архитектурные решения, проектировать сервисы и хорошо понимает многопоточность и низкоуровневые механизмы.
Все этапы отбора проходят в течение двух дней:
🟢 14 марта — технические секции.
🟢 15 марта — финальная секция и офер.
Далее в рамках программы Multitrack участники выбирают три команды Яндекса, в которых последовательно работают по несколько недель, знакомясь с задачами, внутренними процессами и коллегами. После этого можно выбрать команду, которая понравится больше.
Этот подход позволяет сравнить разные проекты внутри Яндекса, оценить задачи изнутри и принять взвешенное решение.
Регистрация на участие в программе открыта до 6 марта. Подробности — по ссылке.
Реклама. ООО "Яндекс". ИНН 7736207543
❓ Что такое Garbage Collection Roots?
GC Roots — это отправные точки для поиска живых объектов сборщиком мусора.
К GC Roots относятся:
— локальные переменные в стеке активных методов
— статические переменные
— активные потоки
— JNI ссылки
GC начинает с roots и проходит граф объектов. Всё, что недостижимо из roots — мусор, подлежит удалению.
🐸 Библиотека собеса по Java
#jvm
❓ Что такое Singleton и где он используется?
Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к нему.
public class DatabaseConnection {
private static volatile DatabaseConnection instance;
private DatabaseConnection() {}
public static DatabaseConnection getInstance() {
if (instance == null) {
synchronized (DatabaseConnection.class) {
if (instance == null) {
instance = new DatabaseConnection();
}
}
}
return instance;
}
}
Реальные кейсы
— Пул соединений с БД (HikariCP держит один менеджер пула)
— Логгер (LoggerFactory в SLF4J)
— Конфигурация приложения (Spring ApplicationContext — де-факто синглтон)
— Кэш в памяти
Подводные камни: проблемы с многопоточностью (решается через volatile + double-checked locking или enum), сложность тестирования, скрытые зависимости.
🐸 Библиотека собеса по Java
#patterns💬 Обратная связь
Текущий уровень сложности вопросов?
🔥 — Слишком просто, хочу сложнее
👍🏼 — В самый раз
❤️ — Иногда сложновато
😁 — Часто не понимаю
🐸 Библиотека собеса по Java
✔️ SQL-тест: Топ категорий Google Search
Задача из реального интервью в Google 👇
📦 Задание
Google хочет проанализировать самые популярные категории поиска для оптимизации результатов.
Таблицы на картинке. Напишите запрос для подсчета общего количества поисков в каждой категории по месяцам за 2024 год.
Ставьте → 🔥, если нравится формат. Если нет → 🤔
💬 Решения под спойлер. Сравним, какое будет лучше.
🐸 Библиотека собеса по Java
#practise
❓ Какие есть методы в классе Object?
Класс Object — это базовый класс для всех классов в Java. Он содержит следующие методы:
🔹 public final Class<?> getClass() – возвращает объект Class для текущего объекта.
🔹 public int hashCode() – возвращает хэш-код объекта.
🔹 public boolean equals(Object obj) – сравнивает объекты на равенство.
🔹 protected Object clone() – создает копию объекта (глубокое/поверхностное копирование зависит от реализации).
🔹 public String toString() – строковое представление объекта.
🔹 public final void notify() – пробуждает один поток, ожидающий монитор объекта.
🔹 public final void notifyAll() – пробуждает все потоки, ожидающие монитор объекта.
🔹 public final void wait() – заставляет поток ждать, пока его не разбудят через notify/notifyAll.
🔹 public final void wait(long timeout) – ждет указанное время или до уведомления.
🔹 public final void wait(long timeout, int nanos) – более точная версия ожидания.
🔹 protected void finalize() – вызывается перед удалением объекта сборщиком мусора (deprecated с Java 9).
🐸 Библиотека собеса по Java
#core
❓ Как устроена архитектура брокеров в Kafka?
Брокер — это отдельный сервер Kafka. Он принимает сообщения от продюсеров, хранит их на диске и отдаёт консьюмерам. В кластере может быть несколько брокеров. Они работают совместно и знают друг о друге.
Топик — это именованный канал, куда продюсеры пишут сообщения, а консьюмеры их читают.
Топик делится на партиции. Партиция — это упорядоченный, неизменяемый лог. Партиции распределяются по брокерам.
Репликация: у каждой партиции есть один Leader и несколько Follower-реплик. Все записи и чтения идут через Leader, Follower-ы синхронно подтягивают данные. Если Leader падает — один из Follower-ов становится новым Leader-ом.
ISR (In-Sync Replicas) — список реплик, которые не отстали от Leader-а. Запись считается подтверждённой только когда все реплики из ISR её получили (если acks=all).
Координация: раньше это делал ZooKeeper — хранил метаданные о брокерах, партициях, лидерах. Начиная с Kafka 3.x активно внедряется KRaft.
🐸 Библиотека собеса по Java
#core
❓ Как устроена архитектура брокеров в Kafka?
Брокер — это отдельный сервер Kafka. Он принимает сообщения от продюсеров, хранит их на диске и отдаёт консьюмерам. В кластере может быть несколько брокеров. Они работают совместно и знают друг о друге.
Топик — это именованный канал, куда продюсеры пишут сообщения, а консьюмеры их читают.
Топик делится на партиции. Партиция — это упорядоченный, неизменяемый лог. Партиции распределяются по брокерам.
Репликация: у каждой партиции есть один Leader и несколько Follower-реплик. Все записи и чтения идут через Leader, Follower-ы синхронно подтягивают данные. Если Leader падает — один из Follower-ов становится новым Leader-ом.
ISR (In-Sync Replicas) — список реплик, которые не отстали от Leader-а. Запись считается подтверждённой только когда все реплики из ISR её получили (если acks=all).
Координация: раньше это делал ZooKeeper — хранил метаданные о брокерах, партициях, лидерах. Начиная с Kafka 3.x активно внедряется KRaft.
🐸 Библиотека собеса по Java
#core
