ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

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

Библиотека собеса по 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 энтер
«Этот манёвр будет стоить нам 51 год...» — или проваленный тех-скрининг из-за незнания паттернов проектирования. В Java энтерпрайзе архитектура — это всё. Не ждите, пока гравитация рынка прижмёт вас к зарплатному потолку, вкачивайте базу. С понедельника цены в Proglib Academy станут выше. Забирайте профессиональное обучение сейчас: — Разработка ИИ-агентов — Математика для разработки AI-моделей — ML для старта в Data Science — Математика для Data Science — Специалист по ИИ — Алгоритмы и структуры данных — Программирование на Python — Основы IT для непрограммистов — Архитектуры и шаблоны проектирования Стать сильнее на интервью ⚠️ Цены вырастут 19 января