Java Developer
16K subscribers
1.6K photos
122 videos
2 files
1.75K links
Авторский канал действующего разработчика — интересные заметки, новые технологии, библиотеки и фреймворки

Сотрудничество: @bape_ads
Прайс: @bape_media

РКН: https://clck.ru/3GHfTK

Реклама на бирже: https://telega.in/c/java_tg
Download Telegram
Что выведет код сверху?
Anonymous Quiz
17%
Yes
40%
No
30%
Yes No
12%
Ошибка
👍126🔥1
👩‍💻 Что нового в Hibernate 7.0?

В новой версии Hibernate перешёл на Apache License 2.0 и обновил базовые зависимости — теперь по умолчанию используются Java 17 и Jakarta Persistence 3.2.

Также была проведена очистка от устаревших модулей: вместо HCANN теперь применяется Hibernate Models, а модули hibernate-ucp и TeradataDialect удалены.

Среди ключевых изменений:
▶️ @SoftDelete теперь поддерживает стратегию с временной меткой — фиксируется точное время удаления записи

▶️ @EmbeddedColumnNaming позволяет настраивать префиксы колонок для embedded-полей с помощью шаблона

▶️ @NamedEntityGraph даёт возможность описывать графы загрузки в виде строки, без лишней аннотационной обвязки

▶️ Методы Session.findMultiple() и StatelessSession.getMultiple() позволяют загружать несколько сущностей по ID одной командой с учётом BatchSize

▶️ Вместо старых hints теперь используются типобезопасные FindOption, LockOption и RefreshOption

▶️ Добавлено новое API для построения запросов через SelectionSpecification и MutationSpecification

▶️ Метод Session.getManagedEntities() предоставляет доступ ко всем сущностям в кэше первого уровня

▶️ Расширена поддержка enum: теперь CHECK-ограничения создаются и для перечислений с AttributeConverter

▶️ Поддерживаются SQL-функции для работы с JSON и XML, включая json_agg(), json_value(), xmlquery() и другие

▶️ Появилась поддержка set-returning functions — таких как unnest(), generate_series() и json_table()


Кроме того, Hibernate окончательно отказывается от схемы маппинга hbm.xml — ей на смену пришёл формат mapping.xml, а преобразование старых файлов возможно автоматически.

Подробный разбор
📖 Руководство по миграции с 6.6

tags: #статья #полезное

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍166👨‍💻4
Please open Telegram to view this post
VIEW IN TELEGRAM
😁37🤣219👍1
Вопрос с собеседования

Чем отличается JDBC от Hibernate?

Ответ: JDBC — это низкоуровневый API для прямой работы с базой данных через SQL-запросы, тогда как Hibernate — это ORM-фреймворк, который позволяет работать с базой через объектную модель.

При использовании JDBC разработчик сам управляет соединениями, пишет SQL, обрабатывает ResultSet, а в Hibernate всё это абстрагируется: объекты автоматически мапятся на таблицы, запросы могут писаться через HQL или Criteria API, а управление транзакциями и кэшированием встроено.


tags: #собеседование

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍5👨‍💻2
👩‍💻 Управление транзакциями в Spring: подробно о @Transactional

В статье рассказывается, как устроена аннотация @Transactional в Spring и почему иногда транзакции ведут себя не так, как вы ожидаете.

Автор подробно объясняет, как работают прокси, откаты, вложенные транзакции и связь с JPA — с примерами кода, подводными камнями и разбором типичных ошибок.

Читать статью

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥125
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣70😁1210👍3👨‍💻1
Вопрос с собеседования

Что такое интерфейс Executor и зачем он нужен?

Ответ: Executor — это интерфейс из стандартной библиотеки Java, который позволяет запускать задачи в отдельных потоках без явного создания или управления ими. Он упрощает работу с многопоточностью, позволяя делегировать выполнение задач пулам потоков. Вместо ручного запуска каждого потока, задача передаётся исполнителю, который сам решает, когда и как её запустить. В связке с Callable и Future он используется для асинхронного выполнения с возможностью получить результат.

📱 Java Developer | #собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥6
👩‍💻 Функциональные интерфейсы

Функциональный интерфейс — это интерфейс, который определяет только один абстрактный метод. Это позволяет передавать поведение как значение — например, в виде лямбды или ссылки на метод.

Рассмотрим простейший пример:
@FunctionalInterface
interface Greeting {
void say(String message);
}

Greeting g = msg -> System.out.println("Привет, " + msg);
g.say("мир!");

Аннотация @FunctionalInterface не обязательна, но рекомендуема — она защищает от случайного добавления лишнего абстрактного метода.


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

В Java предусмотрен набор стандартных функциональных интерфейсов — в пакете java.util.function. Вот наиболее часто используемые:
▶️ Predicate<T> — проверяет условие, возвращает true или false
▶️ Function<T, R> — преобразует один тип в другой
▶️ Consumer<T> — принимает значение, ничего не возвращает
▶️ Supplier<T> — возвращает значение, ничего не принимает
▶️ UnaryOperator<T> и BinaryOperator<T> — частные случаи Function, когда вход и выход одного типа


Пример использования Predicate:
Predicate<String> isLong = s -> s.length() > 5;
System.out.println(isLong.test("Java")); // false


Функциональные интерфейсы активно используются в Stream API, Optional, Comparator, CompletableFuture и других частях стандартной библиотеки. Это удобный способ описать поведение без лишнего кода.

— если было полезно

📱 Java Developer | #обучение
Please open Telegram to view this post
VIEW IN TELEGRAM
24👍6🔥4👨‍💻2
Вопрос с собеседования

Что такое Redis и зачем он используется?

Ответ: Redis — это хранилище данных в оперативной памяти, предназначенное для быстрого доступа к информации. Он поддерживает разные структуры данных — строки, списки, множества, словари — и применяется там, где важна скорость: кэширование, хранение сессий, подсчёт событий, временные блокировки и очереди. Благодаря работе в памяти, Redis обеспечивает отклик за миллисекунды и часто используется в высоконагруженных системах и микросервисной архитектуре.

tags: #собеседование

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥73
👩‍💻 Делаем свою простейшую систему сборки для Java

Многие новички в программировании привыкают к тому, что для запуска Java-приложения достаточно создать Gradle/Maven-проект, нажать кнопку в IDE — и все работает.

Но стоит выйти за рамки стандартных сценариев, как процесс сборки превращается в “черный ящик”, а разобраться, что происходит под капотом, становится непросто.

В статье автор объясняет, как работает компиляция в Java, показывает, как вручную собрать и запустить программу, а затем шаг за шагом подводит к созданию собственной системы сборки.

Читать статью

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥156👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁28🤣22🔥2🤯1
Вопрос с собеседования

Какими основными способами можно конфигурировать бины в Spring?

Ответ: В Spring бины можно конфигурировать следующими способами:

▶️ XML-конфигурация

▶️ Аннотации (например, @Component, @Service, @Repository)

▶️ Java-классы с аннотацией @Configuration и методами, помеченными @Bean

tags: #собеседование

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17👨‍💻32🤔1
💻 Вопросы по SQL, которые часто задают на собеседовании

В этом цикле статей автор делится вопросами по SQL, с которыми вы можете столкнуться на собеседовании.

В первой части — базовые темы: первичный и внешний ключ, виды соединений, подзапросы, GROUP BY, CTE и другие часто спрашиваемые концепции.

Первая часть

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

Вторая часть

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43
Вопрос с собеседования

Чем CompletableFuture отличается от Future и в чём его преимущества?

Ответ: CompletableFuture расширяет возможности обычного Future, предоставляя полноценную поддержку асинхронного и неблокирующего программирования.

В отличие от Future, где результат приходится ждать вручную через get(), CompletableFuture позволяет задать цепочку действий, которые автоматически выполнятся после завершения задачи — без блокировки потока.

Он поддерживает композицию (например, через thenCompose, thenCombine), удобную обработку ошибок (exceptionally, handle), и может выполнять задачи в отдельных потоках (supplyAsync).

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


tags: #собеседование

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥115
👩‍💻 Как ускорить Maven сборку без переезда на Gradle?

В статье обсуждаются методы ускорения сборки проектов на Maven без необходимости перехода на другие системы.

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

Читать статью

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥2
1
Что выведет код сверху?
Anonymous Quiz
2%
0
34%
1
40%
2
3%
null
21%
Ошибка компиляции
👍138😁2