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
👩‍💻 Бинарный поиск на пальцах

В статье простыми словами объясняется, как устроены массивы и как работает бинарный поиск «под капотом» — с наглядными примерами и аналогиями.

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

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

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍7🔥4🤯1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣726👨‍💻6😁4
Что выведет код сверху?
Anonymous Quiz
15%
-2
32%
-1
21%
0
14%
1
4%
2
13%
Ошибка
🔥125👍1
👩‍💻 Основы работы с Spring Security

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

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

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

tags: #полезное

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥105👍5
Кто понял, тот понял

📱 Java Developer | #memes
Please open Telegram to view this post
VIEW IN TELEGRAM
😁45🤣17👨‍💻7🔥2🏆1
Вопрос с собеседования

Можно ли явно передать управление другому потоку?

Ответ:
В Java нельзя явно указать, какому потоку передать управление. Thread.sleep() гарантированно приостанавливает текущий поток как минимум на заданное время, но решение о том, какой поток выполнится следующим, остаётся за планировщиком. Thread.yield() вообще ничего не гарантирует — это лишь рекомендация планировщику временно приостановить текущий поток в пользу другого с тем же приоритетом.

Единственный способ заставить поток уступить процессор — это привести его в состояние блокировки: с помощью wait(), join(), LockSupport.park() или блокировок (synchronized, ReentrantLock и др.). Это приостанавливает выполнение до выполнения условий разблокировки, но даже в этом случае нельзя указать, какой именно поток будет следующим — планировщик сам решает порядок.


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

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍144🔥2
👩‍💻 Нельзя так просто взять и вычислить абсолютное значение

В статье разбираются неожиданные подводные камни при вычислении абсолютного значения double в Java, связанные с существованием +0.0 и -0.0.

Автор показывает, как корректно и эффективно реализовать метод abs(), чтобы избежать ошибок и снизить издержки, вплоть до безветвленного варианта на битовых операциях.

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

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥2
Мы не ищем легких путей

📱 Java Developer | #memes
Please open Telegram to view this post
VIEW IN TELEGRAM
37🤣16😁7💯2
Вопрос с собеседования

В каких состояниях может находиться поток?

Ответ: Поток в Java может находиться в одном из следующих состояний, определённых перечислением Thread.State:

▶️ NEW — поток создан, но ещё не запущен (метод start() не вызывался)

▶️ RUNNABLE — поток готов к выполнению и может быть выбран планировщиком для исполнения. Это объединяет как активные, так и ожидающие исполнения потоки

▶️ BLOCKED — поток ожидает монитора, чтобы войти в синхронизированный блок/метод, занятый другим потоком

▶️ WAITING — поток ожидает, пока другой поток не вызовет notify(), notifyAll() или join() на объекте. Примеры: Object.wait(), Thread.join()

▶️ TIMED_WAITING — как WAITING, но с таймаутом. Например, sleep(), join(timeout), wait(timeout), LockSupport.parkNanos()

▶️ TERMINATED — поток завершил выполнение либо нормально (метод run() завершён), либо из-за необработанного исключения.

Эти состояния отражают внутреннюю модель выполнения JVM и используются для анализа поведения многопоточных программ.


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

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍76
👩‍💻 Основы работы со 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