Библиотека собеса по Java | вопросы с собеседований
Відкрити в Telegram
Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/08c603b6 Для обратной связи: @proglibrary_feeedback_bot
Показати більше6 487
Підписники
+524 години
+147 днів
+1430 день
Архів дописів
Офер за 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
❓ Где хранятся объекты?
Объекты хранятся в heap (куче). Ссылки на объекты при этом могут жить в стеке (локальные переменные), в heap (поля других объектов) или в регистрах CPU (оптимизация JIT).
🐸 Библиотека собеса по Java
#core
❓ Чем unit-тесты отличаются от интеграционных?
Unit-тесты проверяют один изолированный компонент в отрыве от внешних зависимостей. Всё, что не тестируем, заменяем моками. Работают быстро, детерминировано, запускаются при каждом билде.
Интеграционные тесты проверяют взаимодействие нескольких компонентов, например, сервис + репозиторий + реальная БД. Здесь уже поднимается контекст, идут реальные вызовы. Работают медленнее, но ловят то, что unit-тесты пропустят: неправильный SQL, проблемы с транзакциями, несовместимость бинов.
🐸 Библиотека собеса по Java
#tests
❓ Что такое Spring Data JPA?
Spring Data JPA — это абстракция над JPA, упрощающая работу с базами данных.
Вместо написания DAO вручную, создаёте интерфейс, и Spring генерирует реализацию.
Поддерживает:
— автогенерацию методов по naming convention
— @Query для кастомных запросов
— Paging и Sorting из коробки
— Specification для динамических запросов
🐸 Библиотека собеса по Java
#spring
❓ Что такое Spring Boot Actuator?
Actuator предоставляет production-ready функции для мониторинга и управления приложением.
Эндпоинты:
→ /actuator/health — статус приложения
→ /actuator/metrics — метрики (память, потоки, HTTP запросы)
→ /actuator/env — переменные окружения
→ /actuator/loggers — управление уровнями логирования
Можно создавать кастомные эндпоинты. Важно: закрывайте чувствительные эндпоинты в production через Spring Security.
🐸 Библиотека собеса по Java
#spring
✔️ Spring-тест: @RateLimit аннотация для методов
Напишите production-ready Spring компонент 👇
📦 Задание
Реализуйте кастомную аннотацию @RateLimit, которая ограничивает количество вызовов метода с использованием Spring AOP.
🔹 Требования
— Использовать Spring AOP
— Потокобезопасность
— Кэш лимитов
— Учитывать имя метода + параметры
— Custom exception при превышении
Ставьте → 🔥, если нравится формат. Если нет → 🤔
💬 Решения под спойлер. Сравним, какое будет лучше.
🐸 Библиотека собеса по Java
#practise
❓ Что такое Fail-Safe итератор?
Fail-Safe итератор работает с копией коллекции и не бросает ConcurrentModificationException при модификации.
Примеры: CopyOnWriteArrayList, ConcurrentHashMap.
Особенности:
— не видят изменения, сделанные после создания итератора
— потребляют больше памяти (копия данных)
— подходят для сценариев с редкими изменениями
🐸 Библиотека собеса по Java
#core
❓ Что такое Autoboxing и Unboxing?
Autoboxing — автоматическое преобразование примитива в класс-обёртку (int → Integer).
Unboxing — обратное преобразование (Integer → int).
Удобно, но есть подводные камни
— возможен NullPointerException при unboxing null
— снижает производительность (создание объектов)
— проблемы с == (сравнивает ссылки, а не значения)
🐸 Библиотека собеса по Java
#core
❓ Для чего аннотация @Cacheable в Spring?
@Cacheable кеширует результат метода. При повторном вызове с теми же параметрами метод не выполняется, возвращается закешированное значение.
Требует @EnableCaching. По умолчанию использует ConcurrentHashMap, но можно подключить Redis, Ehcache, Caffeine.
🐸 Библиотека собеса по Java
#spring
🔴 Завтра тестовое собеседование с Java-разработчиком
11 февраля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Сергею
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
❓ Опишите поведение аннотации @Autowired
@Autowired — это аннотация Spring Framework для автоматического внедрения зависимостей. Она может применяться к конструкторам, сеттерам, полям и методам.
Spring ищет подходящий бин в контексте по типу. Если находит один бин нужного типа — внедряет его. Если бинов несколько — выбрасывает исключение, если не указан квалификатор через @Qualifier. Если бин не найден — тоже выбрасывает исключение, если только не установлен параметр required = false.
Начиная с Spring 4.3, если у класса один конструктор, @Autowired можно опустить — Spring автоматически использует его для внедрения. Это считается хорошей практикой, так как делает код менее зависимым от фреймворка.
Порядок разрешения зависимостей: сначала по типу, потом по имени бина, если имя поля совпадает с именем бина. Для явного указания используют @Qualifier.
🐸 Библиотека собеса по Java
#spring
❓ Зачем нужна аннотация @RestController?
@RestController — это специализированная версия @Controller для RESTful сервисов. Объединяет @Controller и @ResponseBody.
Без @RestController пришлось бы добавлять @ResponseBody к каждому методу. Результат методов автоматически конвертируется в JSON/XML через HttpMessageConverter.
🐸 Библиотека собеса по Java
#spring
💬 Обратная связь
Какие вопросы публиковать больше?
👍🏼 — Классика с собесов, чтобы точно набить руку на ближайший
🤔 — Вопросы, которые не встречаются в каждой статье вида "N вопросов для собеса"
🔥 — Больше практики, а то одна теория
🐸 Библиотека собеса по Java
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
