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

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

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

Реклама на бирже: https://telega.in/c/java_tg
Download Telegram
👩‍💻 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%
Ошибка
🤣124🔥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
31👍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
👍17🔥64
👩‍💻 MapStruct

MapStruct — генератор кода для маппинга между Java-классами (например, DTO и Entity).

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

Зависимость Maven:
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.5.Final</version>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.5.Final</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>


Ускоряет разработку, избавляя от шаблонного и часто ошибочного кода при преобразовании объектов.

📱 Ссылка на GitHub
📁 Документация

tags: #полезное

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍6🔥5
Please open Telegram to view this post
VIEW IN TELEGRAM
😁31🤣12👀4