Библиотека собеса по Java | вопросы с собеседований
前往频道在 Telegram
Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/08c603b6 Для обратной связи: @proglibrary_feeedback_bot
显示更多6 487
订阅者
+524 小时
+147 天
+1430 天
帖子存档
✔️ SQL-тест: Фильтрация активных рекламных кампаний
Задача из реального интервью в Google 👇
📦 Задание
Вы аналитик Google Ads. Нужно найти все объявления, которые:
— Имеют статус 'active'
— Показов больше 500,000
— Обновлены в 2024 году
Таблица google_ads на картинке. Напишите SQL-запрос для фильтрации.
Ставьте → 🔥, если нравится формат. Если нет → 🤔
💬 Решения под спойлер. Сравним, какое будет лучше.
🐸 Библиотека собеса по Java
#practise
❓ Что такое 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❓ Что такое Lambda выражение?
Lambda — это анонимная функция, реализующая функциональный интерфейс.
Синтаксис: (параметры) -> { тело }
Под капотом компилятор создаёт анонимный класс или использует invokedynamic для оптимизации.
🐸 Библиотека собеса по Java
#core
❓ Равен ли Double.NaN сам себе?
Double.NaN == Double.NaN возвращает false в соответствии со спецификацией IEEE 754.
NaN (Not a Number) представляет недопустимый или неопределённый результат вычислений. По определению, NaN не равен ничему, включая себя.
Для корректной проверки используйте Double.isNaN(value).
🐸 Библиотека собеса по Java
#core
❓ Что такое пропагация в транзакции?
Propagation определяет, как транзакция ведёт себя при вызове из другой транзакции.
Основные типы
— REQUIRED (default): использует текущую или создаёт новую
— REQUIRES_NEW: всегда создаёт новую, приостанавливая текущую
— MANDATORY: требует существующую, иначе исключение
— NEVER: требует отсутствие транзакции
— SUPPORTS: использует если есть, иначе работает без транзакции
🐸 Библиотека собеса по Java
#spring
❓ Что такое 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❓ Что делает параметр readOnly = true у @Transactional?
readOnly = true — это подсказка для оптимизации, а не строгое ограничение.
Что происходит:
— Hibernate может пропустить flush (не синхронизировать изменения с БД)
— БД может оптимизировать запрос, не создавая блокировки
— некоторые драйверы могут использовать read-only соединения
Важно: это не запрещает изменения программно. Можно вызвать save(), но изменения не гарантированно применятся. Это именно hint для оптимизации.
🐸 Библиотека собеса по Java
#spring
💬 Обратная связь
Ваш текущий грейд:
🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь
🐸 Библиотека собеса по Java
❓ Что такое @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-агентов». Мы ориентируемся на тех, кто пишет код. Просьба «просто зрителей» не беспокоить.
Записаться на урок
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
