ar
Feedback
Библиотека собеса по Java | вопросы с собеседований

Библиотека собеса по Java | вопросы с собеседований

الذهاب إلى القناة على Telegram

Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/08c603b6 Для обратной связи: @proglibrary_feeedback_bot

إظهار المزيد
6 487
المشتركون
+524 ساعات
+147 أيام
+1430 أيام
أرشيف المشاركات
✔️ SQL-тест: Фильтрация активных рекламных кампаний Задача из реального интервью в Google 👇 📦 Задание Вы аналитик Google Ad
✔️ 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-агентов». Мы ориентируемся на тех, кто пишет код. Просьба «просто зрителей» не беспокоить. Записаться на урок