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

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

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

Реклама на бирже: https://telega.in/c/java_tg
Download Telegram
👩‍💻 Основы работы со Stream API

В видео разбирается, как упростить работу с коллекциями с помощью Stream API: фильтрация, сортировка, группировка и проверка условий.

Автор показывает, как заменить громоздкие императивные конструкции на лаконичный и читаемый код в функциональном стиле.

📱 Смотреть на YouTube

tags: #полезное

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣32😁20💯4
👩‍💻 Stateless и Stateful — как сервер обрабатывает запросы

Архитектура взаимодействия между клиентом и сервером может быть двух типов: без сохранения состояния (stateless) и с сохранением (stateful).

От этого зависит, как сервер ведёт себя между запросами и что он обязан помнить о клиенте.

Stateless:
▶️ Сервер не хранит никакую информацию о предыдущих действиях клиента.
▶️ Каждый запрос полностью самодостаточен и содержит всё необходимое: токен, параметры, контекст.
▶️ Легко масштабируется — можно добавлять сервера без учёта состояний.
▶️ Пример — REST API с авторизацией по токену в каждом запросе.


Stateful:
▶️ Сервер сохраняет данные о клиенте между запросами — например, сессию после логина.
▶️ Клиенту не нужно повторно отправлять данные аутентификации.
▶️ Сложнее масштабировать: требуется синхронизация состояния между серверами.
▶️ Пример — веб-приложение с авторизацией через серверные сессии.


Понимание этой разницы — основа проектирования стабильных и масштабируемых систем.

tags: #обучение

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻9👍53
Что выведет код сверху?
Anonymous Quiz
3%
null
30%
Null
31%
NullPointerException
31%
Ошибка
5%
Ничего
6🤯4👻4👍1
👩‍💻 Пишем 3D-игру весом в 600Кб

В статье показано, как с нуля создать простую 3D-игру на Java с графикой и физикой без использования готовых движков и шейдеров.

Автор реализует собственный движок с рендером через OpenGL ES 1.0, палитровыми текстурами, кастомным загрузчиком ресурсов и поддержкой старых устройств.

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

tags: #статья

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

Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?

Ответ: Метод clone() определён в классе Object, потому что он реализует базовый механизм побитового копирования объекта средствами JVM (через native-реализацию). Он объявлен как protected, чтобы не допустить прямого вызова вне класса, если метод не переопределён.

Интерфейс Cloneable при этом — маркерный, без методов. Он служит лишь индикатором того, что объект допускает клонирование. Если объект не реализует Cloneable, а метод clone() всё же вызывается, будет выброшено исключение CloneNotSupportedException. Это позволяет обеспечить контроль над тем, какие классы разрешают копирование, и избежать некорректного поведения при клонировании по умолчанию.


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

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍5🔥3👨‍💻2
👩‍💻 Основы gRPC на практике

В видео разбирается, как работает gRPC и в чем он выигрывает у REST при построении микросервисов с высокой нагрузкой и стримингом данных.

Автор показывает полноценную реализацию серверной и клиентской части на Java и Python, от описания proto-файлов до двунаправленной передачи сообщений.

📱 Смотреть на YouTube

tags: #полезное

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

В чём различие между стеком и кучей в контексте многопоточности?

Ответ: Стек — это область памяти, выделяемая индивидуально для каждого потока. Он используется для хранения примитивов, локальных переменных и адресов возврата. Поскольку стек не разделяется между потоками, доступ к нему изолирован и не требует синхронизации.

Куча — это общая область памяти для всех потоков, где размещаются объекты, созданные с помощью new. Из-за совместного доступа к куче возможны гонки данных и проблемы видимости между потоками. Чтобы гарантировать корректность при многопоточном доступе, применяются механизмы синхронизации (synchronized, ReentrantLock, volatile, атомарные классы и др.).


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

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍6🔥3
👩‍💻 Как обобрать дерево в несколько потоков?

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

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

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

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥84👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣60😁17👨‍💻4
Что выведет код сверху?
Anonymous Quiz
40%
0
52%
1
8%
Ошибка
🤣114🔥2
👩‍💻 Shutdown Hooks

Вы знали, что в Java можно задать поведение, которое сработает перед завершением работы приложения?

Для этого существует механизм shutdown hooks — потоки, которые JVM запускает при штатном завершении, например при вызове System.exit() или закрытии окна.

Thread hook = new Thread(() -> System.out.println("Shutting down, bye!"));
Runtime.getRuntime().addShutdownHook(hook);

Все зарегистрированные потоки запускаются параллельно, и JVM дожидается, пока они завершат выполнение.


Важно: при аварийном завершении — через kill -9, Runtime.halt() или при отключении питания — shutdown hooks не сработают.

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

tags: #обучение

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
30👍4🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁40🤣16
Вопрос с собеседования

Почему @Transactional не работает при вызове метода внутри того же класса?

Ответ: Spring активирует @Transactional через прокси, оборачивающие бины и перехватывающие внешние вызовы. Но если метод вызывается изнутри того же класса, прокси не используется — происходит прямой вызов, и аннотация не срабатывает.

Чтобы транзакция была активна, метод должен вызываться через прокси, например, путём внедрения собственного бина или получения его из ApplicationContext. Если требуется перехват внутренних вызовов, стоит использовать AspectJ — он работает на уровне байткода и не зависит от прокси-механизма.


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

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143🔥1
👩‍💻 Spring Data JPA и Hibernate: ориентируемся на производительность. Часть 2

В статье показано, как сократить число SQL-запросов при работе с Spring Data JPA и Hibernate: от устранения лишних SELECT до борьбы с N+1.

Автор на примерах разбирает, когда использовать getReferenceById, @Version, fetch join и @DynamicUpdate, чтобы ускорить взаимодействие с базой и избежать скрытых тормозов.

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

🔖 Предыдущая часть — КЛИК


tags: #статья

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

Для чего используются статические блоки инициализации?

Ответ: Статические блоки инициализации однократно выполняются при инициализации класса — при первом обращении к классу. Они предназначены для выполнения кода, который должен выполниться до создания любых объектов этого класса и до вызова его конструкторов. Эти блоки принадлежат самому классу, а не его экземплярам, и обычно используются для сложной инициализации static-полей.

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

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥64