Библиотека собеса по Java | вопросы с собеседований
6.48K subscribers
430 photos
11 videos
705 links
Вопросы с собеседований по Java и ответы на них.

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

Учиться у нас: clc.to/3wECtA

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

Нормализация — устранение избыточности через декомпозицию таблиц и связи между ними (нормальные формы 1NF–3NF/BCNF). Цель — целостность: данные хранятся в одном месте, нет аномалий вставки, обновления и удаления. Минус — много JOIN'ов при чтении.

Денормализация — намеренное дублирование данных ради скорости чтения, чтобы избежать дорогих соединений и агрегаций. Типична в аналитике, отчётах и read-heavy системах.

Это компромисс: денормализация ускоряет чтение, но усложняет поддержание согласованности при записи (одни и те же данные надо обновлять в нескольких местах). Выбор зависит от профиля нагрузки — что преобладает, чтение или запись.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1🎉1
🚀 Освойте разработку AI-агентов и получите доступ ещё к двум курсам Академии бесплатно!

В 2026 году просто писать код мало. Компании ищут инженеров, умеющих проектировать автономные системы и закрывать задачи бизнеса в разы быстрее.

Чтобы вы вышли на рынок с максимальным преимуществом, мы подготовили специальное предложение: покупаете курс по AI-агентам и ещё 2 курса Академии получаете бесплатно!

Соберите свой стек под оффер:

🔹 AI-агенты + AgentOps + Архитектура — комбо для бэкендеров и техлидов, чтобы внедрять ИИ без боли для прода.
🔹 AI-агенты + Математика + ML — для тех, кто хочет войти в Data Science.
🔹 AI-агенты + Алгоритмы — чтобы уверенно проходить хардкорные технические собесы.

Как это работает: вы оставляете заявку на курс по разработке AI-агентов и указываете еще два курса, которые хотите открыть в подарок.

Старт обучения — уже в июле. Количество мест ограничено, выбирайте зрелый подход к карьере.

👉 Забрать предложение и освоить ИИ-агентов
В чём разница между связанностью (coupling) и сцепленностью (cohesion)?

Cohesion (сцепленность)насколько элементы внутри одного модуля подчинены общей цели. Высокая сцепленность — это хорошо: модуль делает одну вещь и делает её хорошо.

Coupling (связанность)насколько модули зависят друг от друга. Низкая связанность — это хорошо: изменение в одном модуле не вынуждает переписывать другие.

Цель проектирования — high cohesion, low coupling. Такой код легче читать, тестировать, переиспользовать, а изменения в нём локализованы. Инструменты достижения — разделение ответственности, программирование на интерфейсах, внедрение зависимостей и принципы SOLID.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥1
✔️ Spring-тест: рассылка ушла клиентам трижды

Подняли 3 реплики в k8s, и клиенты получили одно и то же письмо три раза 👇

📦 Задание — code review

Ежедневная рассылка счетов через @Scheduled.
@Component
@RequiredArgsConstructor
public class BillingScheduler {

private final InvoiceService invoiceService;

@Scheduled(cron = "0 0 9 * * *")
public void sendDailyInvoices() {
List<Invoice> due = invoiceService.findDueToday();
due.forEach(invoiceService::sendAndMarkSent);
}
}


▪️ Объясни

— Почему @Scheduled выполняется на каждой реплике и приводит к дублирующим отправкам.
— Почему «сначала проверим флаг isSent, потом отправим» не спасает от гонки между подами.
— Какие есть решения и их трейд-оффы.

Ставьте → 🔥, если нравится формат. Если нет → 🌚

💬 Решения под спойлер. Сравним, какое будет лучше.

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

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍3🤔1
🎬 Где ломаются архитектуры ИИ-агентов и как этого избежать: запись урока от Proglib.Academy и cloud․ru

Proglib.аcademy вместе с cloud․ru провели вебинар, где разобрали реальные боли проектирования автономных систем. Вы просили запись встречи — она уже в открытом доступе!

Что внутри:

— критерии выбора между одним агентом и мультиагентной системой;
— разбор популярных архитектурных ошибок;
— реальные ограничения современных ИИ-агентов;
— практические рекомендации по проектированию агентных систем.

👉 Посмотреть запись можно тут:
VK
YouTube
Что такое идемпотентность и почему она важна?

Идемпотентная операция при многократном выполнении даёт тот же результат, что и при однократном. В HTTP идемпотентны GET, PUT, DELETE, а POST — нет.

Почему это критично: в распределённых системах сетевые сбои и таймауты приводят к автоматическим повторам (retry). Если операция не идемпотентна — например, «снять 100 рублей» — повтор спишет деньги дважды.

Подходы к идемпотентности:

идемпотентные ключи (idempotency key) для дедупликации повторных запросов;
проектирование операций как «установить состояние X», а не «изменить на дельту»;
отслеживание уже обработанных id запросов.

Особенно важно для платежей и очередей сообщений с гарантией at-least-once.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🔥1👏1
⭐️ Dream Team 5-го потока: научитесь строить ИИ-агентов у практиков из BigTech

14 июля стартует новый поток курса по разработке ИИ-агентов, и в этот раз мы собрали по-настоящему звездный состав менторов. Это эксперты, которые прямо сейчас определяют развитие AI в России: Yandex Cloud, Avito AI Lab, cloud․ru и НИУ ВШЭ.

Чтобы ваш вход в ИИ-инженерию был максимально мощным, мы подготовили специальное предложение: до 30 июня при покупке курса по ИИ-агентам вы получаете еще 2 любых курса Академии в подарок! 🔥

Как это работает: вы оставляете заявку на курс по разработке ИИ-агентов и указываете менеджеру ещё два курса, которые хотите забрать бесплатно.

👉Заберите 3 курса по цене 1 на звездном потоке по ИИ-агентам
1
💬 Обратная связь

Текущий уровень сложности вопросов?

🔥 — Слишком просто, хочу сложнее
👍🏼 — В самый раз
❤️ — Иногда сложновато
😁 — Часто не понимаю

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍105😁4🔥2
Чем композиция отличается от наследования?

Наследование — это отношение «is-a», поведение родителя достаётся подклассу статически на этапе компиляции. Композиция — отношение «has-a», объект делегирует работу вложенным объектам.

Проблемы наследования: сильная связанность с деталями реализации родителя (fragile base class), нарушение инкапсуляции, негибкость (только один родитель), лёгкость нарушить принцип Лисков.

Композиция более гибкая: поведение можно менять в рантайме (паттерн «Стратегия»), зависимости легко подменять в тестах, нет хрупкой иерархии. Отсюда принцип «предпочитай композицию наследованию». Наследование оправдано при настоящем «is-a» и стабильной иерархии.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1👏1
Чем List.of() отличается от Collections.unmodifiableList()?

Оба не позволяют менять список через свой интерфейс, но гарантии разные.

List.of() (Java 9) создаёт по-настоящему неизменяемую коллекцию: компактное представление, запрет на null, любая попытка модификации — UnsupportedOperationException. Менять нечего и неоткуда.

Collections.unmodifiableList() создаёт лишь обёртку-представление над существующим списком. Сама обёртка менять не даёт, но если изменить оригинальный список, изменения будут видны через обёртку. То есть это «view только для чтения», а не неизменяемая копия.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍4👏1
⚠️ Уже завтра стартует курс AgentOps!

Мы собрали на потоке сборную из мастеров IT-рынка. Практики из BigTech научат вас контролировать и отлаживать ИИ-агентов, чтобы они работали предсказуемо и не сливали бюджет на API.

🔥 Заберите 3 курса по цене 1:
● При покупке VIP-тарифа (осталось 4 места) нового потока «Разработка ИИ-агентов» получаете в подарок курс «AgentOps» + ещё один любой курс Академии (например, «Математика для разработки AI», чтобы глубже освоить направление).

● Три курса обойдутся вам всего в 134.000 ₽ вместо 263.000 ₽.

● Доступна удобная беспроцентная рассрочка, платеж можно разбить на несколько комфортных частей.


Хотите прокачать свое портфолио продакшн-кейсом, но пока сомневаетесь? Пройдите наш бесплатный демо-урок, чтобы протестировать формат перед покупкой.

👉 Забрать 3 курса по цене 1 и получить демо-урок
ОПРОС: Ответьте на пару вопросов и получите промокод на все наши курсы! 🎁

Команда Prоglib.аcаdemy готовит к запуску новые продукты, и нам нужна ваша помощь. Мы хотим создавать обучение, которое будет решать ваши реальные карьерные задачи и бить точно в цель.

Поделитесь своим опытом и ожиданиями, чтобы мы сделали наши курсы еще полезнее именно для вас! Заполнение анкеты займет буквально 2–3 минуты, а с нас — скидка на любой наш курс!

👉 Пройти опрос в Яндекс Формах и забрать промокод
Чем отличаются HashSet, LinkedHashSet и TreeSet?

HashSet поверх HashMap, без гарантий порядка, операции в среднем O(1). Требует корректных hashCode/equals.
LinkedHashSet сохраняет порядок вставки за счёт двусвязного списка поверх хеш-таблицы, операции O(1), но чуть больше памяти.
TreeSet основан на красно-чёрном дереве, элементы хранятся отсортированными (по Comparable или Comparator), операции O(log n). Поддерживает навигацию: first, ceiling, headSet, диапазоны.

Выбор: нужен порядок добавления — LinkedHashSet, нужна сортировка или диапазонные запросы — TreeSet, в остальных случаях — HashSet.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2
Как Spring реализует AOP и какие у проксей ограничения?

AOP выносит сквозную логику (транзакции, логирование, безопасность) в аспекты, не загрязняя бизнес-код. Spring применяет advice через прокси: JDK dynamic proxy, если бин реализует интерфейс, или CGLIB (наследование класса), если интерфейса нет.

Advice срабатывает только при вызове через прокси. Отсюда ограничения:
self-invocation не перехватывается;
CGLIB не может проксировать final-классы и методы, а также private-методы;
работает только на бинах, управляемых Spring.

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

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1👏1
🎮 Планы на выходные: соберите ИИ-агента в нашей новой игре!

Запустили интерактивную аркаду, где вы на практике поймете, как устроены агентные системы.

Юзеры бомбят в чате, тикеты горят, вам нужно спасать прод 🤓. Выстраивайте граф агента, подключайте узлы (RAG, CRM, Guardrails) и принимайте решения на развилках, чтобы бот не сливал данные.


Какие навыки проверите:

- Архитектура: сборка графов на LangGraph;
- Компоненты: интеграция LLM, RAG и памяти;
- Безопасность: настройка Guardrails и отладка ошибок;
- Стейт: логика на сложных развилках.

Бонус: Больше баллов — выше скидка на обучение!

Наш новый поток стартует 14 июля. При покупке курса вы забираете еще 2 любых курса Академии в подарок!

Протестируйте свою инженерную логику и заберите максимальную скидку на обучение.

👉 Сыграть в аркаду и выбить скидку
3
🎬 Как ИИ ускоряет разработку и где ломаются архитектуры

Мы провели открытый вебинар, где разобрали реальные боли проектирования автономных систем. Ольга Лукьянова на практическом кейсе показала, как использовать ИИ-ассистентов для реальных задач. Вы просили запись встречи — она уже в открытом доступе!

Что внутри:

— Как с помощью ИИ быстрее разбираться в незнакомом коде и готовить пулл-реквесты;
— Критерии выбора между одним агентом и мультиагентной системой;
— Разбор популярных архитектурных ошибок и ограничений современных ИИ;
— Практические рекомендации по проектированию и внедрению облачных агентов.

👉 Посмотреть полную запись можно тут:
VK
YouTube

🚀 Хотите пойти дальше открытого вебинара? Если вы готовы перейти от простых промптов к проектированию надежных, отказоустойчивых ИИ-систем, которые не сливают бюджет компании на API, приходите на курс AgentOps. Поток уже стартовал, но двери еще приоткрыты!

👉 Успеть на курс AgentOps
✔️ Java-тест: индексация списка в Map

Напишите метод для production-кода 👇

📦 Задание


Реализуйте метод, который строит индекс «email → пользователь»:
public Map<String, User> indexByEmail(List<User> users) {
// Ваша реализация
}


📋 Требования

— На вход может прийти null или пустой список → вернуть пустую Map.
— В списке встречаются пользователи с одинаковым email → при дубле оставить последнего (и обоснуйте политику).
— email может быть null → такие записи пропускать.
— Порядок итерации сохранять.

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

💬 Решения под спойлер. Сравним, какое будет лучше.

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

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍1
🔥 Открытое занятие по AgentOps — курс стартовал!

Сегодня в 19:00 по МСК пройдет первое занятие нового потока, на которое может прийти каждый. Оцените пользу нашего подхода на ретрансляции урока в VK!

👨‍💻 Спикер: Андрей Носов

Тема: Архитектура управления: state machine для AI-агентов

Будем разбираться, как использовать State machine в качестве главного оружия против стохастики (непредсказуемости) LLM.

Что в программе:

● State machine: инварианты и терминальные состояния;
● Паттерны маршрутизации: Supervisor, ReAct, Plan-and-Solve;
● Детекция циклов и настройка аварийных выходов;
● Абстракция от модели: как сделать каркас, который переживет смену LLM/провайдера;
● Адаптация графов под ограничения локальных моделей;
● Версионирование графов и миграции стейта.

Результат занятия: Вы поймете, как спроектировать надежный каркас агента с жестким контролем исполнения и переходов.

👉 Подписывайтесь на нашу группу ВКонтакте, чтобы не пропустить старт трансляции!
Что такое проблема N+1 и как её решить?

N+1 возникает при ленивой загрузке связанных сущностей в ORM. Чтобы получить список из N объектов, выполняется 1 запрос на сам список плюс по 1 запросу на подгрузку связи у каждого объекта — итого N+1 запросов.

Например, 100 заказов с ленивым клиентом → 1 запрос на заказы + 100 запросов на клиентов = 101 запрос вместо одного-двух. На больших объёмах это убивает производительность.

Решения:

JOIN FETCH или @EntityGraph, чтобы подтянуть связь одним запросом;
batch fetching, для загрузки связей пачками;
DTO-проекция одним запросом, без загрузки целых сущностей.

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

#sql
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🔥1👏1
Что такое DTO и чем он отличается от Entity?

DTO (Data Transfer Object) — простой объект-контейнер для переноса данных между слоями или по сети, без бизнес-логики.

Он делает структуру данных явной и типизированной вместо ассоциативных массивов, удобен для входных и выходных контрактов API.

Отличие от Entity: у DTO нет идентичности и поведения, только данные.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1👏1
💰 Почему одним Data Scientist платят больше, чем другим?

Дело не только в знании Python и ML-библиотек. Во многих компаниях уровень специалиста оценивают по математической подготовке: теории вероятностей, статистике, линейной алгебре и математическому анализу.

Именно эти знания помогают понимать модели, решать более сложные задачи и претендовать на позиции с более высокой оплатой.

На курсе «Математика для Data Science» вы изучите разделы, которые используются в работе Data Scientist и ML Engineer.

Что вас ждёт:

🔹 40+ видеолекций и 150+ практических заданий на Python
🔹 Проверка домашних работ и обратная связь от преподавателей
🔹 Подготовка к техническим собеседованиям
🔹 Программа от преподавателей ВМК МГУ, НИУ ВШЭ и экспертов индустрии

👉 Записаться на бесплатный демо-урок