Библиотека собеса по Java | вопросы с собеседований
Відкрити в Telegram
Вопросы с собеседований по Java и ответы на них. По рекламе: @tproger_sales_bot Учиться у нас: clc.to/3wECtA Для обратной связи: @proglibrary_feeedback_bot
Показати більше6 378
Підписники
-324 години
-237 днів
-5530 днів
Архів дописів
❓ Что такое @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❓ Что такое 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❓ Можно ли изменить значение final переменной через рефлексию?
Технически можно, но это нарушает контракт final и приводит к непредсказуемому поведению.
▪️ Проблемы
— JVM может заинлайнить final значение при компиляции.
— Изменения могут не отразиться из-за оптимизаций.
— Нарушается thread-safety гарантия final.
🐸 Библиотека собеса по Java
#core
❓ Что такое Record?
Record (с Java 14) — это специальный класс для неизменяемых данных-носителей.
record Person(String name, int age) { }
// Автоматически генерируется:
// - конструктор
// - геттеры (name(), age())
// - equals(), hashCode(), toString()
✔️ Преимущества:
— минимум boilerplate;
— иммутабельность из коробки;
— компактный синтаксис.
❌ Ограничения:
— нельзя наследоваться (final);
— все поля final;
— нельзя объявлять instance поля вне компонентов.
Хорошо подходит для DTO, value objects.
⚠️ Почему в реальных проектах используют нечасто
— Проблемы с неймингом: геттеры без префикса get нарушают JavaBeans-конвенции (name() вместо getName()), что ломает совместимость со многими фреймворками.
— Проблемы совместимости с библиотеками: многие фреймворки (Jackson, Hibernate/JPA, Spring Data) требуют дополнительной настройки или вовсе не поддерживают records.
🐸 Библиотека собеса по Java
#core❓ Что делает @Conditional в Spring?
@Conditional позволяет регистрировать бин только при выполнении определённого условия.
@Bean
@Conditional(WindowsCondition.class)
public Service windowsService() {
return new WindowsService();
}
class WindowsCondition implements Condition {
public boolean matches(ConditionContext context,
AnnotatedTypeMetadata metadata) {
return System.getProperty("os.name")
.contains("Windows");
}
}
Spring Boot предоставляет готовые: @ConditionalOnProperty, @ConditionalOnClass, @ConditionalOnMissingBean.
Мощный инструмент для гибкой конфигурации под разные окружения.
🐸 Библиотека собеса по Java
#springЗавтра стартуем: курс по разработке ИИ-агентов ☕
Будьте готовы к вопросам по архитектуре ИИ в энтерпрайзе. Мы научим проектировать мультиагентные связки на
CrewAI, управлять сложными состояниями в LangGraph и внедрять ИИ в реальные корпоративные решения.
👉 Успейте занять место до начала занятий❓ Что такое Race Condition?
Race Condition — это ситуация, когда результат работы программы зависит от порядка выполнения потоков.
Классический пример — инкремент:
// Два потока выполняют:
counter++; // read-modify-write
// Без синхронизации:
// Поток 1: читает 0
// Поток 2: читает 0
// Поток 1: пишет 1
// Поток 2: пишет 1
// Итого: 1 вместо 2
Решения: synchronized, AtomicInteger, Lock, volatile (только для простых операций).
🐸 Библиотека собеса по Java
#concurrency💬 Обратная связь
Как часто вы проходите собеседования?
🔥 — Сейчас активно ищу работу
👍🏼 — Раз в несколько месяцев
❤️ — Раз в полгода-год
😁 — Не прохожу, уже работаю/ещё учусь
🐸 Библиотека собеса по Java
Архитектурные вопросы стали сложнее, а ты всё ещё вручную «жаришь» микросервисы?
Настоящий Шеф стоит систему.
В понедельник, 26 января, стартует интенсив по разработке ИИ-агентов. Узнай, как внедрить автономные решения в энтерпрайз-стек. ☕
В программе:
— мультиагентные системы в
CrewAI: контроль исполнения задач;
— сложная логика в LangGraph: управление состоянием в графах;
— tool use интеграция: связь агентов с внешними сервисами. 🏗️
Записаться на курс✔️ Java-тест: Debouncer для частых событий
Напишите метод для production-кода 👇
📦 Задание
Реализуйте debouncer, который откладывает выполнение действия пока события продолжают поступать:
public class Debouncer {
public Debouncer(long delayMs) {
// Ваш код здесь
}
public void call(Runnable action) {
// Ваш код здесь
// Если вызов повторяется до истечения delayMs
// - отменить предыдущий и запланировать новый
// Выполнить только когда delayMs прошло без новых вызовов
}
}
🔹 Требования
— Выполнять action только если delayMs прошло без новых вызовов
— Каждый новый call() отменяет предыдущий таймер
— Использовать ScheduledExecutorService
— Потокобезопасность
🔹 Пример:
Debouncer debouncer = new Debouncer(300); // 300ms
debouncer.call(() -> search(query)); // откладываем
debouncer.call(() -> search(query)); // отменяем предыдущий
debouncer.call(() -> search(query)); // отменяем предыдущий
// Через 300ms выполнится только последний
Ставьте → 🔥, если нравится формат. Если нет → 🤔
💬 Решения под спойлер. Сравним, какое будет лучше.
🐸 Библиотека собеса по Java
#practise❓ Что такое Phantom Reference и зачем она нужна?
PhantomReference — самая слабая ссылка в Java. Отличается от WeakReference тем, что get() всегда возвращает null.
Используется для отслеживания момента, когда объект удалён из памяти. После удаления объекта PhantomReference помещается в ReferenceQueue.
В отличие от finalize(), это надёжный способ отследить удаление объекта. Используется редко, в основном во внутренних механизмах или для управления off-heap памятью.
🐸 Библиотека собеса по Java
#jvm
Пятница, 19:00. Худшее время для деплоя, но идеальное, чтобы выучить концепцию RAG и уверенно обсуждать её на следующем архитектурном интервью.
Как отвечать на вопросы про ИИ-архитектуру на собеседовании Java-разработчика? Разберём теорию и практику на открытом уроке.
Темы занятия:
— интеграция LLM в Enterprise (`RAG vs Fine-tuning`);
— хранение эмбеддингов в векторных БД;
— демонстрация работы с PDF-контекстом.
Один из спикеров — Алексей Яндутов, ML-инженер в поиске Яндекса.
Урок открывает курс «Разработка AI-агентов». Мы ориентируемся на тех, кто пишет код. Просьба «просто зрителей» не беспокоить.
Записаться на урок
❓ Что делает метод flatMap() в Stream API?
flatMap() преобразует каждый элемент в Stream и объединяет все Stream'ы в один плоский Stream. В отличие от map() возвращает Stream<T>.
Полезен для работы с вложенными коллекциями или когда операция возвращает Optional/Stream.
🐸 Библиотека собеса по Java
#core
❓ В чём разница между @Component, @Service и @Repository?
Технически — никакой. Все три создают Spring bean и работают одинаково.
Разница семантическая:
→ @Component — общий стереотип для любого компонента.
→ @Service — для бизнес-логики (service layer).
→ @Repository — для работы с данными (DAO layer).
@Repository имеет дополнительную функцию: перехватывает специфичные для persistence исключения и переводит их в DataAccessException.
Использование правильной аннотации улучшает читаемость и показывает роль класса в архитектуре.
🐸 Библиотека собеса по Java
#spring
❓ Что такое паттерн Flyweight и где он используется в Java?
Flyweight — это паттерн для экономии памяти путём переиспользования объектов с одинаковым состоянием.
Объект разделяется на intrinsic state (неизменяемое, общее) и extrinsic state (изменяемое, уникальное). Общее состояние хранится в одном экземпляре.
🔹 Примеры:
— String Pool (все одинаковые строки ссылаются на один объект)
— Integer.valueOf() кеширует числа от -128 до 127
— Boolean.TRUE и Boolean.FALSE
Паттерн эффективен, когда создаётся много объектов с повторяющимися данными.
🐸 Библиотека собеса по Java
#patterns
❓ Чем отличается invokeAll() от submit() в ExecutorService?
→ submit() отправляет одну задачу и сразу возвращает Future. Задача выполняется асинхронно.
→ invokeAll() принимает коллекцию задач и блокирует поток до завершения всех задач. Возвращает список Future только когда все задачи выполнены или вышел таймаут.
🐸 Библиотека собеса по Java
#concurrency
❓ В чём разница между CopyOnWriteArrayList и Collections.synchronizedList()?
CopyOnWriteArrayList создаёт копию массива при каждой модификации. Чтение не блокируется вообще, подходит для случаев, когда чтений много, а записей мало.
Collections.synchronizedList() оборачивает обычный List и синхронизирует каждый метод через монитор. Все операции (и чтение, и запись) блокируются.
🐸 Библиотека собеса по Java
#concurrency
❓ Можно ли переопределить статический метод?
Нет, статические методы не переопределяются (override), они скрываются (hide).
При вызове статического метода решение о том, какой метод выполнить, принимается на этапе компиляции по типу ссылки, а не по типу объекта.
class Parent {
static void test() { System.out.println("Parent"); }
}
class Child extends Parent {
static void test() { System.out.println("Child"); }
}
Parent obj = new Child();
obj.test(); // Выведет "Parent"
Статические методы принадлежат классу, а не объекту, поэтому полиморфизм на них не работает.
🐸 Библиотека собеса по Java
#core«Этот манёвр будет стоить нам 51 год...»
— или проваленный тех-скрининг из-за незнания паттернов проектирования. В
Java энтерпрайзе архитектура — это всё. Не ждите, пока гравитация рынка прижмёт вас к зарплатному потолку, вкачивайте базу.
С понедельника цены в Proglib Academy станут выше. Забирайте профессиональное обучение сейчас:
— Разработка ИИ-агентов
— Математика для разработки AI-моделей
— ML для старта в Data Science
— Математика для Data Science
— Специалист по ИИ
— Алгоритмы и структуры данных
— Программирование на Python
— Основы IT для непрограммистов
— Архитектуры и шаблоны проектирования
Стать сильнее на интервью
⚠️ Цены вырастут 19 января