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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Можно ли изменить значение final переменной через рефлексию?

Технически можно, но это нарушает контракт final и приводит к непредсказуемому поведению.

▪️ Проблемы

JVM может заинлайнить final значение при компиляции.
Изменения могут не отразиться из-за оптимизаций.
Нарушается thread-safety гарантия final.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122🔥2
Что такое Type Erasure в Java?

Type Erasure — это механизм стирания информации о generic типах на этапе компиляции для обратной совместимости.

List<String> strings = new ArrayList<>();
List<Integer> integers = new ArrayList<>();

// В runtime оба имеют тип List
strings.getClass() == integers.getClass(); // true


🔹 Последствия:

нельзя создать массив параметризованного типа;
нельзя использовать instanceof с generics;
невозможно получить параметр типа в runtime.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4👏2
Что такое @Qualifier и когда его использовать?

@Qualifier используется для разрешения конфликтов при внедрении зависимостей, когда существует несколько бинов одного типа.

Без @Qualifier Spring не знает, какой бин внедрить, и выбросит NoUniqueBeanDefinitionException.

@Bean
@Qualifier("primary")
public DataSource primaryDB() { ... }

@Bean
@Qualifier("secondary")
public DataSource secondaryDB() { ... }

@Autowired
@Qualifier("primary")
private DataSource dataSource;


Альтернатива — использовать @Primary для бина по умолчанию.

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

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

Ваш текущий грейд:

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

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4334😁32🔥28🌚1
Что делает параметр readOnly = true у @Transactional?

readOnly = true — это подсказка для оптимизации, а не строгое ограничение.

Что происходит:

Hibernate может пропустить flush (не синхронизировать изменения с БД)
БД может оптимизировать запрос, не создавая блокировки
некоторые драйверы могут использовать read-only соединения

Важно: это не запрещает изменения программно. Можно вызвать save(), но изменения не гарантированно применятся. Это именно hint для оптимизации.

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

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥21👏1
Что такое WeakReference и когда её использовать?

WeakReference — это слабая ссылка на объект, которая не препятствует его удалению сборщиком мусора.

Если на объект есть только weak references, GC может удалить его при нехватке памяти.

WeakReference<Data> weak = new WeakReference<>(data);
data = null;
// GC может удалить объект
Data retrieved = weak.get(); // может вернуть null


Используется в кешах (WeakHashMap), где элементы могут быть удалены при нехватке памяти, или для предотвращения memory leaks в listeners.

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

#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👏21
Что такое пропагация в транзакции?

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