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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Где хранятся объекты?

Объекты хранятся в 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
Что такое сервлет?

Сервлет — это Java-класс, который обрабатывает HTTP-запросы и формирует HTTP-ответы в веб-приложениях. Он работает на стороне сервера в контейнере сервлетов (например, Tomcat), реализуя интерфейс javax.servlet.Servlet (чаще — через абстрактный класс HttpServlet).

Основная задача сервлета — выступать в роли контроллера в архитектуре MVC: принимать запросы от клиента, обрабатывать данные (либо делегировать бизнес-логике), и передавать результат обратно клиенту (обычно через HTML или JSON).

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

#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1👏1
Что такое Transactional Outbox?

Это паттерн надёжной доставки событий в распределённых системах.

Проблема: при сохранении данных в БД и отправке события в Kafka/RabbitMQ — эти две операции не атомарны. Возможны ситуации, когда данные сохранятся, но событие не уйдёт, либо наоборот.

Решение: вместо прямой отправки в брокер — пишем событие в отдельную таблицу outbox в рамках одной транзакции с основными данными. Отдельный процесс читает эту таблицу и публикует события в брокер.

🔹 Ключевые свойства

Гарантия at-least-once доставки.
Атомарность через одну транзакцию БД.
Потребитель должен быть идемпотентен.

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

#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥1
Чем @Bean отличается от @Component в Spring?

▪️ @Component вешается над классомSpring сам создаёт его экземпляр через сканирование пакетов (@ComponentScan).

▪️ @Bean ставится над методом в @Configurationвы сами создаёте объект внутри метода и возвращаете его.

@Bean полезен, когда:

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

Оба способа регистрируют бин в ApplicationContext, разница только в том, кто и как создаёт объект.

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

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