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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Для чего аннотация @Cacheable в Spring?

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

Требует @EnableCaching. По умолчанию использует ConcurrentHashMap, но можно подключить Redis, Ehcache, Caffeine.

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

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥2👏1
Что такое Autoboxing и Unboxing?

Autoboxing — автоматическое преобразование примитива в класс-обёртку (int → Integer).
Unboxing — обратное преобразование (Integer → int).

Удобно, но есть подводные камни

возможен NullPointerException при unboxing null
снижает производительность (создание объектов)
проблемы с == (сравнивает ссылки, а не значения)

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1👏1
Что такое Fail-Safe итератор?

Fail-Safe итератор работает с копией коллекции и не бросает ConcurrentModificationException при модификации.

Примеры: CopyOnWriteArrayList, ConcurrentHashMap.

Особенности:

не видят изменения, сделанные после создания итератора
потребляют больше памяти (копия данных)
подходят для сценариев с редкими изменениями

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🤔3🔥1
✔️ Spring-тест: @RateLimit аннотация для методов

Напишите production-ready Spring компонент 👇

📦 Задание

Реализуйте кастомную аннотацию @RateLimit, которая ограничивает количество вызовов метода с использованием Spring AOP.

🔹 Требования

— Использовать Spring AOP
— Потокобезопасность
— Кэш лимитов
— Учитывать имя метода + параметры
— Custom exception при превышении

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

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

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

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👏21👍1
Что такое Spring Boot Actuator?

Actuator предоставляет production-ready функции для мониторинга и управления приложением.

Эндпоинты:

/actuator/health — статус приложения
/actuator/metrics — метрики (память, потоки, HTTP запросы)
/actuator/env — переменные окружения
/actuator/loggers — управление уровнями логирования

Можно создавать кастомные эндпоинты. Важно: закрывайте чувствительные эндпоинты в production через Spring Security.

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

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👏21🔥1
Что такое Spring Data JPA?

Spring Data JPA — это абстракция над JPA, упрощающая работу с базами данных.

Вместо написания DAO вручную, создаёте интерфейс, и Spring генерирует реализацию.

Поддерживает:

автогенерацию методов по naming convention
@Query для кастомных запросов
Paging и Sorting из коробки
Specification для динамических запросов

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

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👏2❤‍🔥11🔥1
Чем unit-тесты отличаются от интеграционных?

Unit-тесты проверяют один изолированный компонент в отрыве от внешних зависимостей. Всё, что не тестируем, заменяем моками. Работают быстро, детерминировано, запускаются при каждом билде.

Интеграционные тесты проверяют взаимодействие нескольких компонентов, например, сервис + репозиторий + реальная БД. Здесь уже поднимается контекст, идут реальные вызовы. Работают медленнее, но ловят то, что unit-тесты пропустят: неправильный SQL, проблемы с транзакциями, несовместимость бинов.

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

#tests
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥1👏1
Где хранятся объекты?

Объекты хранятся в heap (куче). Ссылки на объекты при этом могут жить в стеке (локальные переменные), в heap (поля других объектов) или в регистрах CPU (оптимизация JIT).

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1👏1
Как устроена архитектура брокеров в Kafka?

Брокер — это отдельный сервер Kafka. Он принимает сообщения от продюсеров, хранит их на диске и отдаёт консьюмерам. В кластере может быть несколько брокеров. Они работают совместно и знают друг о друге.

Топик — это именованный канал, куда продюсеры пишут сообщения, а консьюмеры их читают.

Топик делится на партиции. Партиция — это упорядоченный, неизменяемый лог. Партиции распределяются по брокерам.

Репликация: у каждой партиции есть один Leader и несколько Follower-реплик. Все записи и чтения идут через Leader, Follower-ы синхронно подтягивают данные. Если Leader падает — один из Follower-ов становится новым Leader-ом.

ISR (In-Sync Replicas) — список реплик, которые не отстали от Leader-а. Запись считается подтверждённой только когда все реплики из ISR её получили (если acks=all).

Координация: раньше это делал ZooKeeper — хранил метаданные о брокерах, партициях, лидерах. Начиная с Kafka 3.x активно внедряется KRaft.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4👏2
Какие есть методы в классе 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥21👏1
✔️ SQL-тест: Топ категорий Google Search

Задача из реального интервью в Google 👇

📦 Задание

Google хочет проанализировать самые популярные категории поиска для оптимизации результатов.

Таблицы на картинке. Напишите запрос для подсчета общего количества поисков в каждой категории по месяцам за 2024 год.

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

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

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

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

Текущий уровень сложности вопросов?

🔥 — Слишком просто, хочу сложнее
👍🏼 — В самый раз
❤️ — Иногда сложновато
😁 — Часто не понимаю

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍115😁3👾1
Расскажите о паттерне 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥1
Что такое Garbage Collection Roots?

GC Roots — это отправные точки для поиска живых объектов сборщиком мусора.

К GC Roots относятся:

локальные переменные в стеке активных методов
статические переменные
активные потоки
JNI ссылки

GC начинает с roots и проходит граф объектов. Всё, что недостижимо из roots — мусор, подлежит удалению.

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

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91🔥1
В чём разница между throw и throws?

→ throws: указывается в сигнатуре метода, чтобы сообщить, какие исключения метод может выбросить. Например, если метод может генерировать FileNotFoundException, это указывается так:
public void readFile() throws FileNotFoundException { ... }


Здесь throws не выбрасывает исключение, а только предупреждает, что оно может возникнуть.

→ throw: используется непосредственно в теле метода, чтобы выбросить конкретное исключение. Пример:
if (file == null) {
throw new FileNotFoundException("Файл не найден");
}


Здесь throw запускает исключение, когда возникает определённое условие.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥1
Что такое Thread Pool?

Thread Pool (пул потоков) — это коллекция предварительно созданных потоков, которые могут быть использованы для выполнения задач.

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

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

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5🔥1
За год мы провели три потока курса по ИИ-агентам, а теперь запускаем масштабное обновление!

В новом, четвёртом потоке мы учли все пожелания студентов, добавили большой блок про AgentOps и сместили фокус с базовых концепций на суровый инжиниринг. Ответить на каверзные вопросы по JVM и многопоточности на собеседовании легко, а вот интегрировать ИИ-агента в Enterprise-контур без галлюцинаций — задача со звёздочкой.

В программе:

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

В честь старта продаж действует спецпредложение: 3 курса по цене 1 (два дополнительных курса в подарок).

Доступ к материалам для предварительной подготовки откроется сразу после оплаты.

По промокоду Agent забирайте скидку 10 000 ₽ (89 000 ₽ вместо 99 000 ₽). Успейте занять место до 28 февраля!

👉 Присоединиться к четвёртому потоку и внедрить агентов в Enterprise
В чем разница между параллелизмом и многопоточностью?

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

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

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1🤔1
✔️ 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍43🤔1🌚1
Последний шанс: 3 курса по цене 1 и запуск AI-агентов в продакшн

На собеседованиях в энтерпрайз всё чаще всплывают вопросы про интеграцию Java-приложений с ИИ. Как маршрутизировать мультиагентные системы, контролировать затраты и строго соблюдать 152-ФЗ?

Обновлённая программа делает упор на жёсткий инжиниринг и вывод в прод. Вы научитесь строить ReAct-циклы, работать с LangGraph и AutoGen, внедрять продвинутый RAG, протоколы MCP и AgentOps. Все ключевые навыки в одном месте: измеримость систем, time-travel дебаггинг, управление браузером, human-in-the-loop и развёртывание в закрытых контурах.

Почему нельзя откладывать:

— масштабная акция «3 курса по цене 1» сгорает уже сегодня;
— промокод Agent на скидку 10 000 рублей действует последние часы;
— сразу после оформления открываются материалы для подготовки — начать учиться можно прямо сейчас.

Забронировать место на курсе и забрать бонусы до конца дня
💬 Обратная связь

Проверяем динамику роста комьюнити :)
Ваш текущий грейд:

🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30😁17🔥1310🌚2