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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
⚡️ Бесплатный вебинар — ИИ-агенты: новая фаза развития 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
🔍Тестовое собеседование с Java-разработчиком из МТС уже завтра

1 октября (уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.

Как это будет:
📂 Илья Аров, старший разработчик в МТС, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Илья будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Илье

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Опишите работу 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
Для чего используется ключевое слово this?

this — это ссылка на текущий объект внутри его метода или конструктора. Оно нужно для:

Разрешения конфликта имён (например, между полем класса и параметром метода).
Вызова других конструкторов этого же класса.
Передачи текущего объекта в качестве аргумента в методы или конструкторы других классов.
Возврата ссылки на текущий объект (часто используется в паттерне Builder или для чейнинга методов).

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥1
Как работает ConcurrentHashMap?

ConcurrentHashMap использует сегментирование / распространённые блокировки (в новых версиях — на уровне бакета), что позволяет нескольким потокам читать и писать без полной блокировки карты. Операции get делаются без блокировки, put и remove используют ограниченную блокировку (или CAS) лишь на отдельных сегментах или узлах.

В отличие от Collections.synchronizedMap(...), который блокирует весь объект на каждую операцию, ConcurrentHashMap даёт более высокую конкурентность и масштабируемость.

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2👏1
✔️ Java-тест: Stream API и группировка

Попробуем новый формат, сами задачки будут разные. Представим задачу 👇

Есть список строк:
List<String> names = List.of("Alice", "Bob", "Anna", "Brian", "Alex");


📋 Задание:

Сгруппируйте имена по первой букве и выведите результат в формате:
A -> [Alice, Anna, Alex]
B -> [Bob, Brian]


Ставьте →🔥, если зашёл формат. Если нет, то → 🤔

💬 Пишите решение в комментариях, главное прячьте под спойлер.

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

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍2🤔2