Библиотека собеса по Java | вопросы с собеседований
6.29K subscribers
386 photos
8 videos
399 links
Вопросы с собеседований по Java и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/08c603b6

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что делает аннотация @Transactional в Spring?

@Transactional управляет транзакцией на уровне метода или класса. При вызове метода Spring открывает транзакцию, выполняет код, а затем:

если метод завершился успешно — транзакция коммитится
если возникло непроверяемое (runtime) исключение — транзакция откатывается

Также можно тонко настроить поведение (какие исключения приводят к rollback, изоляцию транзакции, propagation и т. д.). В итоге эта аннотация упрощает работу с транзакциями: разработчик пишет бизнес-логику, а управление транзакциями берет на себя Spring.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3👏1
Что такое optimistic и pessimistic locking?

Optimistic locking — подход, при котором предполагается, что конфликты редки. Обновление данных проверяется через версионное поле (например, @Version в JPA). Если два потока изменяют одну запись, тот, кто сохраняет изменения вторым, получит ошибку OptimisticLockException. Это дешево по ресурсам, но требует обработки ошибок при конфликте.

Pessimistic locking — «жесткая блокировка»: при чтении или изменении данных сразу ставится блокировка на строку или таблицу (SELECT ... FOR UPDATE). Другие транзакции ждут, пока блокировка не освободится. Это надежнее в сценариях с высокой конкуренцией, но дороже по производительности и может приводить к дедлокам.

👉 На практике выбор зависит от нагрузки: при редких конфликтах лучше optimistic, при частых — pessimistic.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
📅 24 сентября в 19:00 МСК — бесплатный вебинар с Максимом Шаланкиным.

Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».

🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.

Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏

👉 Регистрируйтесь через форму на лендинге
Что такое deadlock?

Deadlock (взаимная блокировка) возникает, когда несколько потоков удерживают разные ресурсы и при этом ждут освобождения ресурса, который заблокирован другим потоком. В итоге ни один поток не может продолжить работу.

Например: поток А захватил ресурс 1 и ждёт ресурс 2, а поток B — наоборот. JVM их не прерывает автоматически, и система может «замёрзнуть». Чтобы избегать deadlock, используют единый порядок захвата ресурсов, таймауты блокировок или более высокоуровневые примитивы (java.util.concurrent).

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4❤‍🔥1
⚡️ Бесплатный вебинар — ИИ-агенты: новая фаза развития AI

24 сентября в 19:00 МСК состоится бесплатный вебинар с Максимом Шаланкиным — Data Science Team Lead в финтех-команде MWS, а познакомиться с ним ближе можно в его тг-канале.

Тема:
«ИИ-агенты: новая фаза развития искусственного интеллекта».


На вебинаре разберёмся, почему агенты — это следующий шаг после ChatGPT, чем они отличаются от обычных моделей и как уже приносят бизнесу ROI до 80%. А дальше я покажу, как эта тема ложится в наш курс по ИИ-агентам, который разработан под руководством Никиты Зелинского.

Подробности рассказываем в гс выше — включай, чтобы не пропустить.
Что такое livelock?

Livelock (живая блокировка) — ситуация, когда потоки не «зависают» в жёсткой блокировке, но бесконечно меняют своё состояние, мешая друг другу завершить работу.

Классическая аналогия: два человека встречаются в узком коридоре, оба вежливо делают шаг в сторону, но одновременно — и так продолжается бесконечно. В коде это проявляется, когда потоки постоянно реагируют на изменения друг друга, но никто не достигает цели.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥41
💬 Обратная связь

Хотели бы видеть в канале теги для навигации? Если большинство будет За, попробуем в тестовом формате.

🔥 — Да, введите теги по уровню вопроса
👍🏼 — Да, введите теги по теме вопроса
❤️ — Да, предложу в комменты идею для тегов
😁 — Всё равно, особых плюсов не вижу

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥8😁31
Что такое starvation?

Starvation (голодание) возникает, когда поток долго не получает доступ к ресурсу, потому что планировщик постоянно выбирает другие потоки.

Например, если один поток работает с высоким приоритетом, а другой — с низким, второй может почти не выполняться. В Java это чаще всего связано с неправильным использованием синхронизации или очередей, где один поток постоянно перехватывает ресурсы. Решение — справедливые блокировки (ReentrantLock(true)), балансировка нагрузки, корректные политики планировщика.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥1👏1
🔥 Не пропустите событие осени для AI-комьюнити

24 сентября, 19:00 Мск — бесплатный вебинар с Максимом Шаланкиным «ИИ-агенты: новая фаза развития искусственного интеллекта»

😤 Пока все спорят, «боты это или нет», мы покажем, как работают настоящие агенты: с планированием, инструментами и памятью. За час Максим разберёт:
— почему ИИ-агенты сейчас на пике инвестиций
— чем они отличаются от ChatGPT и обычных моделей
— цикл агента: восприятие → планирование → действие → обучение
— живое демо простого агента
— как бизнес уже получает ROI до 80%

⚡️ Хотите спросить у Максима всё, что обычно остаётся «за кадром»? Ловите шанс — только в прямом эфире.

Мест мало, регистрация закроется, как только забьём комнату
В чём разница между дизайном и архитектурой ПО?

Архитектура — это высокоуровневое видение системы: какие модули есть, как они взаимодействуют, какие протоколы и технологии выбраны. Это про стратегические решения, которые трудно менять.

Дизайн — это более детальный уровень. Он описывает внутреннее устройство модулей, паттерны, классы, интерфейсы, алгоритмы. Дизайн можно адаптировать чаще, он ближе к реализации.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101🔥1
Сегодня премьера

В 19:00 МСК стартует бесплатный вебинар с Максимом Шаланкиным«ИИ-агенты: новая фаза развития искусственного интеллекта».

В программе:
— почему агенты ≠ чат-боты;
— живое демо простого агента;
— и как эта тема встроена в курс, который разработан под руководством Никиты Зелинского.

Это прямой эфир: подключиться можно через лендинг курса.
😁1
Что делает аннотация @Test в JUnit5?

Аннотация @Test помечает метод как тестовый. Такой метод будет автоматически выполнен фреймворком JUnit при запуске тестов.
В JUnit 5 можно также использовать дополнительные аннотации (@BeforeEach, @AfterEach и др.) для настройки окружения, но @Testбазовый маркер, что это именно тест.

🐸 Библиотека собеса по Java

#tests
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2👏1
Что такое Java Memory Model и зачем он нужен?

Java Memory Model (JMM) описывает, как потоки взаимодействуют через память и какие гарантии по видимости и упорядоченности операций даёт JVM.

Без JMM многопоточные программы работали бы непредсказуемо: один поток мог бы не увидеть изменения другого. JMM определяет правила: когда изменения в кэше процессора становятся «видимыми» другим потокам, и как работает синхронизация.

🐸 Библиотека собеса по Java

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥1
Что такое "diamond problem" и как его решает Java?

«Diamond problem» возникает при множественном наследовании, когда класс может унаследовать одну и ту же реализацию от разных родителей.
В Java классы не поддерживают множественное наследование, а только интерфейсы позволяют такое. Если два интерфейса имеют одинаковый default-метод, то компилятор потребует явного переопределения в классе. Это и есть решение проблемы.

🐸 Библиотека собеса по Java

#tests
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133🔥1
👀 Задача с собеса: «Single-flight» объединение запросов к внешнему API (middle+)

Компания ловит шторма трафика: десятки потоков одновременно дергают один и тот же медленный эндпоинт (например, профили клиентов). Хотят убрать дубликаты запросов и снизить нагрузку на апстрим. Задача:

Реализуйте in-memory «single-flight» слой, который:

— Для одного и того же ключа выполняет ровно ОДНУ загрузку, остальные ожидают тот же результат.
— Имеет короткоживущий кэш (TTL) для защиты от штамповки (cache stampede).
— Потокобезопасен и работает за O(1) на обращение (без полных проходов).
— Прозрачно пробрасывает исключение всем конкурентным ожидателям, если загрузчик упал.


▪️ Условия


— API: CompletableFuture<V> getOrLoad(K key, Supplier<V> loader) (или Supplier<CompletableFuture<V>>, если загрузка уже async).

— Если в кэше есть не сгоревший ключ, вернуть немедленно. Если нет — запустить единственную загрузку на ключ и раздать один и тот же Future всем конкурентным вызовам.

— По завершении загрузки положить результат в кэш с expireAt.

— Удаление сгоревших записей ленивое (на чтении/записи), без фоновых сканеров.

— Критические секции минимальные; без глобальных блокировок.

💡 Ключевые моменты

— Объединение запросов: ConcurrentHashMap<K, CompletableFuture<V>> inFlight + computeIfAbsent исключит дубликаты.

— Кэш: ConcurrentHashMap<K, Entry<V>> cache, где Entry хранит value и expireAt.

— TTL: проверка сроков строго точечная; протухшее удаляем перед использованием.

— Ошибки: один промах/ошибка должны одинаково прилететь всем конкурентным ожидающим.

— Производительность: никакой синхронизации на весь объект; один ключ — одна «тонкая» операция.

💬 Возможная реализация в комментариях. Пишите также ваши реализация и способы оптимизации.

🐸 Библиотека собеса по Java

#practice
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥2
💬 Обратная связь

Как вы и просили: добавили тестово теги по темам. Что скажете?

🔥 — Супер, удобно
😁 — Неудобно, верните как было

Если есть какие-то комментарии/мысли на этот счёт → велком в комменты.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16😁52🤔1
Что такое lazy и eager загрузка в Hibernate?

Lazy loading — данные загружаются только при первом обращении к ним (через прокси). Экономит ресурсы, но может вызвать LazyInitializationException, если сессия закрыта.

Eager loading — связанные данные загружаются сразу вместе с объектом. Удобно, если данные точно нужны, но может быть избыточно.

Выбор стратегии зависит от сценария и баланса между производительностью и простотой.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1👏1
Что такое effective final в Java?

Effective final — это локальная переменная или параметр метода, значение которой после инициализации больше не изменяется. Ключевое слово final явно не указывается, но переменная фактически ведёт себя как final.

Компилятор Java рассматривает такие переменные как final и разрешает их использовать во вложенных классах и лямбда-выражениях. Если попытаться изменить значение такой переменной — она перестаёт быть effective final, и компилятор выдаст ошибку.

🐸 Библиотека собеса по Java

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👏1🤔1
Опишите работу ThreadLocal и его применения.

ThreadLocal — это механизм, который хранит значение отдельно для каждого потока. У каждого потока создаётся собственная копия переменной, изолированная от других потоков. Это удобно, когда данные должны быть доступны в рамках одного потока, но не должны шариться между потоками.

Применения:

Хранение контекста запроса в веб-приложениях (например, userId, transactionId).
Использование в SimpleDateFormat или других неконкурентных объектах без синхронизации.
Реализация thread-scope зависимостей в DI-фреймворках.

🐸 Библиотека собеса по Java

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥2
Что такое микросервисы?

Микросервисы — это архитектурный стиль, при котором приложение делится на набор небольших, изолированных сервисов. Каждый сервис отвечает за конкретную бизнес-функцию, имеет собственную базу данных (или схему), независимый цикл разработки и может масштабироваться отдельно от других.

Они взаимодействуют между собой через лёгкие протоколы (обычно HTTP/gRPC, обмен сообщениями).
Главные плюсы — гибкость в разработке, масштабирование отдельных компонентов, независимый деплой. Минусы — усложнение инфраструктуры, необходимость в оркестрации и мониторинге, появление распределённых транзакций.

Такой подход противопоставляется монолиту, где всё приложение собрано в один блок.

🐸 Библиотека собеса по Java

#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1👏1