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

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

Ir al canal en Telegram

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

Mostrar más
6 485
Suscriptores
+124 horas
+87 días
+1330 días
Archivo de publicaciones
Объясните happens-before отношение в Java Memory Model? happens-before — это гарантированный порядок между операциями, который определяет, что эффект одной операции виден другой. Если операция A happens-before операции B, то все изменения, сделанные в A, будут видны к моменту B. Примеры гарантий happens-before: запись в volatile поле и последующее чтение того же поля; блокировки synchronized; Thread.start() и Thread.join(). Без гарантии happens-before два потока могут видеть неверные или устаревшие значения: один поток записал в поле, другой не увидит это изменение. 🐸 Библиотека собеса по Java #concurrency

Часовая готовность: создаём ИИ-агента в прямом эфире В 19:00 МСК в рамках нашего курса «Разработка AI-агентов» стартует вебинар «ИИ-агенты в продакшене: от хайпа к деньгам». Спикер — Полина Полунина, руководитель AI-направления в Альфа-Банке. Будет live-демо работающего агента, реальные метрики из корпоративной среды и честный разбор архитектурных граблей — без воды и «успешного успеха». Всем зрителям эфира дадим эксклюзивный промокод AGENTS на скидку 10 000 ₽ на любой тариф курса. 👉 Занять место на вебинаре

☝️ Уже сегодня: ИИ-агенты в продакшене — инженерный подход к интеграции LLM Индустрия активно обсуждает потенциал нейросетей, способных автоматизировать бизнес-процессы и заменить целые отделы. Однако реальное внедрение агентов в production вскрывает серьёзные проблемы: разработчикам приходится бороться с непредсказуемыми галлюцинациями моделей, нестабильными API и сложной интеграцией в существующую архитектуру. Сегодня в 19:00 МСК в рамках нашего курса «Разработка AI-агентов» мы проведём открытый вебинар «ИИ-агенты в продакшене: от хайпа к деньгам». Спикер — Полина Полунина, руководитель AI-направления в Альфа-Банке. Будем говорить о нейросетях с позиции жёсткой инженерии. Разберём три реальных кейса из сурового банковского энтерпрайза, напишем и запустим агента прямо в эфире, честно обсудим грабли, на которые наступает бизнес при интеграции LLM. Тем, кто придёт на эфир, дадим промокод AGENTS на скидку 10 000 ₽ на любой тариф курса. 👉 Занять место на вебинаре

Гарантирует ли ExecutorService корректное завершение всех задач, если вызвать shutdown()? Нет, shutdown() не гарантирует корректное завершение всех задач. 🔹 shutdown() делает следующее:запрещает принимать новые задачи;позволяет завершиться уже запущенным и ожидающим задачам;возвращает управление сразу же, не дожидаясь завершения. 🐸 Библиотека собеса по Java #concurrency

В чём основное отличие Docker от виртуальной машины? Основное отличие в уровне виртуализации. Виртуальная машина виртуализирует железо целиком: у неё есть собственная ОС со всеми компонентами, гипервизор, ядро. Это тяжеловесно — VM может весить гигабайты и стартовать минутами. Docker виртуализирует только уровень приложения. Контейнеры используют ядро хостовой ОС, изолируясь через namespaces и cgroups. Они легковесны — образ может весить десятки мегабайт, запускается за секунды. 🔹 На практике это означает — Docker быстрее и экономнее по ресурсам. — VM даёт полную изоляцию и может запускать разные ОС на одном хосте. — Для микросервисов обычно выбирают Docker, для полной изоляции окружений — VM. 🐸 Библиотека собеса по Java #core

💬 Обратная связь Какие вопросы публиковать больше? 👍🏼 — Классика с собесов, чтобы точно набить руку на ближайший 🤔 — Вопросы, которые не встречаются в каждой статье вида "N вопросов для собеса" 🔥 — Больше практики, а то одна теория 🐸 Библиотека собеса по Java

✔️ Java-тест: CompletableFuture + ThreadLocal Классическая ловушка в многопоточке👇 📦 Задание Написали сервис для аудит-логирования действий пользователей. В проде периодически в лог пишется чужой userId — данные одного юзера попадают в запись другого. Найдите баг и исправьте:
@Component
public class UserContext {
    private static final ThreadLocal<String> currentUserId = new ThreadLocal<>();

    public static void set(String userId) { currentUserId.set(userId); }
    public static String get() { return currentUserId.get(); }
    public static void clear() { currentUserId.remove(); }
}

@Service
@RequiredArgsConstructor
public class OrderService {
    private final AuditLogger auditLogger;

    public CompletableFuture<Order> createOrder(String userId, OrderDto dto) {
        UserContext.set(userId);

        return CompletableFuture.supplyAsync(() -> {
            Order order = buildOrder(dto);
            auditLogger.log("Order created by: " + UserContext.get());
            return order;
        });
    }
}
🔹 Задачи — Объяснить, почему UserContext.get() внутри supplyAsync может вернуть чужой userId или null — Исправить так, чтобы контекст корректно передавался в асинхронный поток — Бонус: объяснить, почему ThreadLocal вообще опасен с пулами потоков типа ForkJoinPool Ставьте → 🔥, если нравится формат. Если нет → 🌚 💬 Решения под спойлер. Сравним, какое будет лучше. 🐸 Библиотека собеса по Java #practise

Что такое Spring Bean Scope? Spring Bean Scope определяет жизненный цикл и видимость бина в контейнере. Основные виды: ▪️ singleton (по умолчанию) — один экземпляр на весь контейнер. ▪️ prototype — новый экземпляр при каждом запросе. ▪️ request — бин живёт в рамках HTTP-запроса. ▪️ session — бин живёт в рамках HTTP-сессии. ▪️ application — бин живёт в рамках веб-приложения. ▪️ websocket — бин на время WebSocket-сессии. 🐸 Библиотека собеса по Java #spring

Чем @Bean отличается от @Component в Spring? ▪️ @Component вешается над классомSpring сам создаёт его экземпляр через сканирование пакетов (@ComponentScan). ▪️ @Bean ставится над методом в @Configurationвы сами создаёте объект внутри метода и возвращаете его. @Bean полезен, когда: — класс не ваш (нет доступа, чтобы добавить аннотацию)нужен кастомный способ создания бина (например, с параметрами конструктора или фабричным методом) Оба способа регистрируют бин в ApplicationContext, разница только в том, кто и как создаёт объект. 🐸 Библиотека собеса по Java #spring

Что такое Transactional Outbox? Это паттерн надёжной доставки событий в распределённых системах. Проблема: при сохранении данных в БД и отправке события в Kafka/RabbitMQ — эти две операции не атомарны. Возможны ситуации, когда данные сохранятся, но событие не уйдёт, либо наоборот. Решение: вместо прямой отправки в брокер — пишем событие в отдельную таблицу outbox в рамках одной транзакции с основными данными. Отдельный процесс читает эту таблицу и публикует события в брокер. 🔹 Ключевые свойстваГарантия at-least-once доставки.Атомарность через одну транзакцию БД.Потребитель должен быть идемпотентен. 🐸 Библиотека собеса по Java #patterns

Что такое сервлет? Сервлет — это Java-класс, который обрабатывает HTTP-запросы и формирует HTTP-ответы в веб-приложениях. Он работает на стороне сервера в контейнере сервлетов (например, Tomcat), реализуя интерфейс javax.servlet.Servlet (чаще — через абстрактный класс HttpServlet). Основная задача сервлета — выступать в роли контроллера в архитектуре MVC: принимать запросы от клиента, обрабатывать данные (либо делегировать бизнес-логике), и передавать результат обратно клиенту (обычно через HTML или JSON). 🐸 Библиотека собеса по Java #core

💬 Обратная связь Проверяем динамику роста комьюнити :) Ваш текущий грейд: 🔥 — Senior 👍🏼 — Middle ❤️ — Junior 😁 — Ещё учусь 🐸 Библиотека собеса по Java

Последний шанс: 3 курса по цене 1 и запуск AI-агентов в продакшн На собеседованиях в энтерпрайз всё чаще всплывают вопросы про интеграцию Java-приложений с ИИ. Как маршрутизировать мультиагентные системы, контролировать затраты и строго соблюдать 152-ФЗ? Обновлённая программа делает упор на жёсткий инжиниринг и вывод в прод. Вы научитесь строить ReAct-циклы, работать с LangGraph и AutoGen, внедрять продвинутый RAG, протоколы MCP и AgentOps. Все ключевые навыки в одном месте: измеримость систем, time-travel дебаггинг, управление браузером, human-in-the-loop и развёртывание в закрытых контурах. Почему нельзя откладывать: — масштабная акция «3 курса по цене 1» сгорает уже сегодня; — промокод Agent на скидку 10 000 рублей действует последние часы; — сразу после оформления открываются материалы для подготовки — начать учиться можно прямо сейчас. Забронировать место на курсе и забрать бонусы до конца дня

✔️ Java-тест: Transactional + EventListener Ревью и рефактор логики для production-кода 👇 📦 Задание Команда написала логику для отправки письма после регистрации пользователя. На проде иногда возникает ситуация, что письма приходят, а юзера в БД нет. Найдите проблему и исправьте:
@Service
@RequiredArgsConstructor
public class UserService {

    private final UserRepository userRepository;
    private final ApplicationEventPublisher eventPublisher;

    @Transactional
    public void register(UserDto dto) {
        User user = new User(dto.email());
        userRepository.save(user);

        eventPublisher.publishEvent(new UserRegisteredEvent(user));
    }
}

@Component
@RequiredArgsConstructor
public class EmailListener {

    private final EmailSender emailSender;
    private final SomeOtherService someOtherService;

    @EventListener 
    public void onUserRegistered(UserRegisteredEvent event) {
        emailSender.sendWelcome(event.user().getEmail());
        someOtherService.doSomething();
    }
}
🔹 Задачи — Объяснить, при каком сценарии письмо уйдёт, а пользователь не сохранится — Исправить код, чтобы событие обрабатывалось только после сохранения юзера Ставьте → 🔥, если нравится формат. Если нет → 🤔 💬 Решения под спойлер. Сравним, какое будет лучше. 🐸 Библиотека собеса по Java #practise

В чем разница между параллелизмом и многопоточностью? Многопоточность — это способность программы выполнять несколько потоков , где каждый поток может выполняться независимо, но не обязательно одновременно. Потоки могут переключаться между собой, создавая иллюзию одновременности, однако они могут работать на одном ядре процессора. Параллелизм, с другой стороны, — это выполнение нескольких задач одновременно, обычно на разных процессорах или ядрах. В контексте параллелизма, задачи действительно выполняются одновременно. 🐸 Библиотека собеса по Java #concurrency

За год мы провели три потока курса по ИИ-агентам, а теперь запускаем масштабное обновление! В новом, четвёртом потоке мы учли все пожелания студентов, добавили большой блок про AgentOps и сместили фокус с базовых концепций на суровый инжиниринг. Ответить на каверзные вопросы по JVM и многопоточности на собеседовании легко, а вот интегрировать ИИ-агента в Enterprise-контур без галлюцинаций — задача со звёздочкой. В программе: — практика с первого занятия: Jupyter-ноутбуки с автопроверкой; — оркестрация в LangGraph: human-in-the-loop и механизм time-travel; — продвинутый RAG для продакшена и парсинг сложных документов; — контроль экономики агентов: маршрутизация и кеширование запросов; — развёртывание локальных опенсорс-моделей с соблюдением 152-ФЗ. В честь старта продаж действует спецпредложение: 3 курса по цене 1 (два дополнительных курса в подарок). Доступ к материалам для предварительной подготовки откроется сразу после оплаты. По промокоду Agent забирайте скидку 10 000 ₽ (89 000 ₽ вместо 99 000 ₽). Успейте занять место до 28 февраля! 👉 Присоединиться к четвёртому потоку и внедрить агентов в Enterprise

Что такое Thread Pool? Thread Pool (пул потоков) — это коллекция предварительно созданных потоков, которые могут быть использованы для выполнения задач. Основная цель — минимизация накладных расходов на создание и уничтожение потоков. Вместо того чтобы создавать новый поток для каждой задачи, задачи передаются уже существующим потокам в пуле. Это улучшает производительность и позволяет более эффективно управлять ресурсами, особенно при высокой нагрузке. 🐸 Библиотека собеса по Java #concurrency

В чём разница между throw и throws? → throws: указывается в сигнатуре метода, чтобы сообщить, какие исключения метод может выбросить. Например, если метод может генерировать FileNotFoundException, это указывается так:
public void readFile() throws FileNotFoundException { ... }
Здесь throws не выбрасывает исключение, а только предупреждает, что оно может возникнуть. → throw: используется непосредственно в теле метода, чтобы выбросить конкретное исключение. Пример:
if (file == null) {
    throw new FileNotFoundException("Файл не найден");
}
Здесь throw запускает исключение, когда возникает определённое условие. #core