Найти в Дзене
15 важнейших вопросов по SQL для Java-разработчика
-- Пример: пользователи и заказы SELECT u.name, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id; -- Покажет всех пользователей, даже без заказов Практика в Java: Используйте LEFT JOIN FETCH в JPQL, чтобы избежать N+1 при загрузке связей. Индекс — это структура данных (обычно B-дерево), которая ускоряет поиск по столбцу(ам), подобно оглавлению в книге. Создавайте индекс, если: ⚠️ Не создавайте индексы на маленьких таблицах — полный скан быстрее. EXPLAIN показывает план выполнения запроса — какие индексы используются, сколько строк просканировано, есть ли Seq Scan (полный перебор)...
11 часов назад
100 самых важных вопросов на собеседовании Java-разработчика
💡 С Java 11: javac и java поставляются вместе. Нет отдельного JRE — используйте jlink для сборки runtime. ✅ В Java 11 G1 — стандарт. Используйте -XX:+UseG1GC. String a = new String("test"); String b = new String("test"); System.out.println(a == b); // false System.out.println(a.equals(b)); // true ⚠️ Переопределяя equals(), всегда переопределяйте hashCode()! ✅ Используйте StringBuilder в 99% случаев. Проблема: Integer a = 128; Integer b = 128; System.out.println(a == b); // false! (кэш только до 127) 💡 Избегайте == для объектных типов...
11 часов назад
План изучения Spring Cloud для ava-разработчика (на базе Java 11)
Цель: не просто «знать Spring Cloud», а уметь проектировать, разворачивать и поддерживать отказоустойчивую, наблюдаемую и безопасную микросервисную архитектуру в облаке. ✅ Уверенное владение: Если это есть — можно начинать. Научиться динамически находить сервисы и распределять нагрузку между их экземплярами. Service Registry -> Eureka Server/Client Запустите 2 экземпляра order-service, зарегистрируйте в Eureka, вызывайте из api-gateway Клиентская балансировка -> Spring Cloud LoadBalancer Используйте @LoadBalanced RestTemplate и WebClient Статическая регистрация -> spring...
1 день назад
CountDownLatch в Java: 2 практичных примера для собеседования
CountDownLatch — это один из самых полезных классов в пакете java.util.concurrent. Он позволяет одному или нескольким потокам ждать, пока другие потоки не завершат определённую работу. На собеседованиях его часто спрашивают, потому что он демонстрирует понимание координации потоков без блокировок. Давайте разберём два реалистичных сценария, которые вы легко сможете объяснить на интервью. CountDownLatch latch = new CountDownLatch(3); // счётчик = 3 ⚠️ Счётчик не может быть увеличен — только уменьшен...
2 дня назад
Кэш первого уровня в Hibernate: как Identity Map спасает вас от дубликатов и лишних запросов
«Кэш первого уровня — это механизм, который помогает Hibernate реализовывать паттерн Identity Map» — звучит как мантра из документации. Но что это значит на практике? Почему это важно? И как это влияет на ваш код? Давайте разберёмся — от теории до байткода. Кэш первого уровня — это встроенный кэш в рамках одного Session (или EntityManager) в Hibernate. Он: Пример: // Один и тот же EntityManager (Session) User user1 = entityManager.find(User.class, 1L); User user2 = entityManager.find(User.class, 1L); System...
2 дня назад
Когда Hibernate автоматически сохраняет изменения в Entity?
Краткий ответ: Да, если вы работаете в рамках транзакции, и ваша сущность находится в состоянии managed (persistent), то изменения будут автоматически записаны в БД при коммите транзакции — без вызова flush(). Но есть нюансы: не все операции триггерят flush, и вне транзакции изменения могут быть проигнорированы. Давайте разберёмся по шагам. В JPA/Hibernate каждая сущность (@Entity) может находиться в одном из трёх состояний: Transient Новый объект, не связан с EntityManager (ещё не сохранён). Managed (Persistent) Объект загружен через EntityManager или сохранён в нём...
3 дня назад
Реализация микросервиса продажи билетов в кинотеатр на Java (заготовка)
Цель: Создать простой, но надёжный микросервис для онлайн-бронирования мест в кинотеатре, устойчивый к одновременным запросам от множества пользователей. Название Жанр Длительность Интерстеллар Sci-Fi 169 мин Паразиты Драма 132 мин Матрица Экшен 136 мин Остров собак Анимация 101 мин Дюна Sci-Fi 155 мин Фильмы идут ежедневно весь месяц. Для простоты и обучения — единый Spring Boot микросервис (не распределённая система), но спроектированный так, чтобы его можно было легко разделить позже...
4 дня назад
Реализация системы талонов в банке: очередь по категориям на Java
Задача: смоделировать систему выдачи талонов в банке, где клиенты получают талоны четырёх типов:Вклады Кредитные карты / Продукты Кредиты Другие вопросы Каждый тип талона направляется в соответствующее «окошко» (обработчик). Нужно реализовать гибкую, расширяемую систему без жёсткой привязки к конкретным классам. Разберём решение шаг за шагом — от модели до логики обработки. Создадим базовый класс Ticket, который будет содержать: 💡 Мы используем AtomicLong для потокобезопасной генерации ID — важно, если система будет многопользовательской...
5 дней назад
Почему нужно писать List list = new ArrayList<>();, а не ArrayList list = new ArrayList<>();
Краткий ответ: потому что вы программируете против абстракции, а не против конкретной реализации. Это делает ваш код гибким, тестируемым и устойчивым к изменениям. И да — это напрямую связано с принципами SOLID, особенно с Принципом подстановки Барбары Лисков (LSP) и Принципом инверсии зависимостей (DIP). Давайте разберёмся подробно — с примерами, теорией и практическими последствиями. В Java интерфейс (List, Map, Set) — это контракт: он описывает, что объект может делать, но не как он это делает...
5 дней назад
Задача на многопоточность: «Обедающие философы» — подробный разбор с примерами на Java 11
Целевая аудитория: Java-разработчики, изучающие многопоточность и синхронизацию. Версия Java: 11 Цель статьи: понять классическую проблему параллелизма, её причины, последствия и способы решения с использованием средств Java. Задача «обедающие философы» (Dining Philosophers Problem) была предложена Эдсгером Дейкстрой в 1965 году как учебный пример для демонстрации сложностей, возникающих при совместном использовании ресурсов в многопоточных системах. Она идеально подходит для изучения: Разберём задачу шаг за шагом — от постановки до рабочего решения на Java 11...
2 недели назад
Как устроена Spring Data в Java: глубокое погружение с примерами и пояснениями
Целевая аудитория: Java-разработчики, использующие Spring Boot и работающие с реляционными или NoSQL базами данных. Версия Java: 11 Цель статьи: понять архитектуру Spring Data, принципы её работы, механизмы генерации реализаций и интеграции с JPA/Hibernate. Если вы когда-либо писали код вроде: — и удивлялись, как это работает без реализации, то эта статья для вас. Spring Data — это часть экосистемы Spring, которая автоматизирует доступ к данным, будь то реляционные (PostgreSQL, MySQL), документные (MongoDB), ключ-значение (Redis) или другие хранилища...
2 недели назад
Транзакции в MongoDB: архитектура, реализация и пример на Spring Boot
Целевая аудитория: Java-разработчики, использующие Spring Boot и MongoDB. Версия Java: 11 Цель статьи: разобраться, как устроены транзакции в MongoDB, когда их использовать, и как реализовать в Spring Boot с тестами и Docker. MongoDB — документно-ориентированная NoSQL-база данных. Изначально она не поддерживала транзакции, полагаясь на атомарность операций над одним документом. Однако с версии 4.0 (2018) появилась поддержка многооператорных транзакций, а с 4.2 — транзакции между коллекциями и базами данных...
2 недели назад