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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что такое пропагация в транзакции?

Propagation определяет, как транзакция ведёт себя при вызове из другой транзакции.

Основные типы

— REQUIRED (default): использует текущую или создаёт новую
— REQUIRES_NEW: всегда создаёт новую, приостанавливая текущую
— MANDATORY: требует существующую, иначе исключение
— NEVER: требует отсутствие транзакции
— SUPPORTS: использует если есть, иначе работает без транзакции

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

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥1👏1
Равен ли Double.NaN сам себе?

Double.NaN == Double.NaN возвращает false в соответствии со спецификацией IEEE 754.

NaN (Not a Number) представляет недопустимый или неопределённый результат вычислений. По определению, NaN не равен ничему, включая себя.

Для корректной проверки используйте Double.isNaN(value).

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥3🤔1
Что такое Lambda выражение?

Lambda — это анонимная функция, реализующая функциональный интерфейс.

Синтаксис: (параметры) -> { тело }

Под капотом компилятор создаёт анонимный класс или использует invokedynamic для оптимизации.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15👏2🔥1
Что такое Selector в NIO?

Selector позволяет одному потоку обрабатывать множество каналов (network connections).

Selector selector = Selector.open();
channel.register(selector, SelectionKey.OP_READ);

while (true) {
selector.select(); // блокируется до события

Set<SelectionKey> keys = selector.selectedKeys();
for (SelectionKey key : keys) {
if (key.isReadable()) {
// обработка чтения
}
}
}


Один поток может обслуживать тысячи соединений. Это основа high-performance серверов (Netty, Tomcat NIO).

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3👏1
✔️ SQL-тест: Фильтрация активных рекламных кампаний

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

📦 Задание

Вы аналитик Google Ads. Нужно найти все объявления, которые:

— Имеют статус 'active'
— Показов больше 500,000
— Обновлены в 2024 году

Таблица google_ads на картинке. Напишите SQL-запрос для фильтрации.

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

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

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

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍2👏1
💬 Обратная связь

Какие вопросы публиковать больше?

👍🏼 — Классика с собесов, чтобы точно набить руку на ближайший
🤔 — Вопросы, которые не встречаются в каждой статье вида "N вопросов для собеса"
🔥 — Больше практики, а то одна теория

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍44🤔22🔥11
Зачем нужна аннотация @RestController?

@RestController — это специализированная версия @Controller для RESTful сервисов. Объединяет @Controller и @ResponseBody.

Без @RestController пришлось бы добавлять @ResponseBody к каждому методу. Результат методов автоматически конвертируется в JSON/XML через HttpMessageConverter.

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

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1👏1
Опишите поведение аннотации @Autowired

@Autowired — это аннотация Spring Framework для автоматического внедрения зависимостей. Она может применяться к конструкторам, сеттерам, полям и методам.

Spring ищет подходящий бин в контексте по типу. Если находит один бин нужного типа — внедряет его. Если бинов несколько — выбрасывает исключение, если не указан квалификатор через @Qualifier. Если бин не найден — тоже выбрасывает исключение, если только не установлен параметр required = false.

Начиная с Spring 4.3, если у класса один конструктор, @Autowired можно опустить — Spring автоматически использует его для внедрения. Это считается хорошей практикой, так как делает код менее зависимым от фреймворка.

Порядок разрешения зависимостей: сначала по типу, потом по имени бина, если имя поля совпадает с именем бина. Для явного указания используют @Qualifier.

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

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1👏1
Для чего аннотация @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