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
👩‍💻 Архитектурные принципы Spring Security. Часть третья

В статье объясняется, как работает AuthenticationProvider — ключевая абстракция, отвечающая за проверку учетных данных и создание аутентифицированных объектов в Spring Security.

Автор на примере показывает, как реализовать собственный провайдер, зарегистрировать его в конфигурации и обрабатывать особые кейсы (например, “впускать Даниэля без пароля”) без нарушения встроенной логики безопасности.

Что вы узнаете из статьи:

▶️ Как устроено взаимодействие AuthenticationProvider и AuthenticationManager

▶️ Чем отличается Authentication до и после успешной проверки

▶️ Как обрабатывать логин под разные сценарии без переписывания фильтров

▶️ Как правильно возвращать null из authenticate()

▶️ Как подключать свои провайдеры в HttpSecurity и управлять порядком

▶️ Как логировать успешную аутентификацию через AuthenticationSuccessEvent


Это заключительная часть цикла, где архитектура Spring Security раскрывается через реализацию собственного AuthenticationProvider.

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

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


tags: #статья

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

Какова структура у JWT-токена?

Ответ: JWT (JSON Web Token) состоит из трёх частей, разделённых точками:

▶️ Заголовок (Header) — содержит тип токена (JWT) и алгоритм подписи, например HMAC SHA256 или RSA

▶️ Полезная нагрузка (Payload) — включает так называемые “утверждения” (claims): данные вроде ID пользователя, срока действия токена, ролей и другой метаинформации

▶️ Подпись (Signature) — создаётся из заголовка и payload с использованием секретного ключа. Она гарантирует, что содержимое токена не было подделано.

Эти части кодируются в base64 и объединяются через точки: header.payload.signature.


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

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
20👍7🔥5
👩‍💻 Неблокирующий вызов внешнего сервиса в процессе

В статье показано, как реализовать неблокирующие вызовы внешних API в бизнес-процессах с использованием BPMN-движков Camunda и Flowable.

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

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

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍32
This media is not supported in your browser
VIEW IN TELEGRAM
Такая валидация должна быть в каждом проекте 😆

📱 Java Developer | #memes
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣386😁5
Что выведет код сверху?
Anonymous Quiz
20%
true, false
18%
false, true
24%
true, true
25%
false, false
12%
Ошибка
🔥86
maven-cheat-sheet.pdf
147.3 KB
👩‍💻 Шпаргалка по основным командам Maven

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

Всё нужное на одном листе: базовые команды, рабочие флаги, создание архетипов, часто используемые плагины и даже специфичные штуки вроде mvn help:effective-pom или dependency:analyze.

tags: #полезное #шпаргалка

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍105🔥3
Требования на вакансию джуна, 2025 год, фото в цвете:

📱 Java Developer | #memes
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣72😁133🤯1
Вопрос с собеседования

Что такое множество в Java и какие существуют его стандартные реализации?

Ответ: Множество (Set) в Java — это коллекция без повторяющихся элементов. Оно реализуется через интерфейс java.util.Set. Стандартные реализации в JDK:

HashSet — основан на хеш-таблице, не сохраняет порядок элементов, допускает null.

LinkedHashSet — расширяет HashSet, сохраняет порядок добавления.

TreeSet — реализует NavigableSet, хранит элементы в отсортированном порядке по Comparable или Comparator.

EnumSet — оптимизирован для хранения элементов одного перечисления (enum), очень быстрый и компактный.

CopyOnWriteArraySet — потокобезопасная реализация на базе CopyOnWriteArrayList, используется, если читающих потоков больше, чем записывающих.

Эти классы покрывают разные сценарии: от высокой производительности до потокобезопасности и сортировки.


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

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥10👍3💯1
👩‍💻 От конфигурации к динамике. Новый API по созданию бинов в Spring

В статье разбирается новый API BeanRegistrar из Spring Framework 7 — он упрощает динамическую регистрацию бинов и заменяет устаревшие способы вроде BeanDefinitionRegistryPostProcessor.

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

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

tags: #статья

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

Как работает volatile? Гарантирует ли он атомарность операций?

Ответ: Ключевое слово volatile в Java используется, чтобы обеспечить видимость изменений переменной между потоками. Оно гарантирует, что при изменении значения одним потоком другие потоки увидят актуальное значение сразу, а не из кэша. Также volatile предотвращает переупорядочивание инструкций, что важно для корректной синхронизации.

Однако volatile не обеспечивает атомарность операций. Это значит, что составные действия вроде инкремента (++) или проверки и установки значения всё равно требуют дополнительных механизмов синхронизации — например, synchronized или Atomic* классов.


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

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍5
👩‍💻 JNI (Java Native Interface)

JNI — это встроенный интерфейс, который позволяет Java-коду вызывать функции из C или C++ и работать с нативными библиотеками операционной системы.

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

Пример Java-класса:
public class HelloJNI {
public native void sayHello();
static {
System.loadLibrary("hello");
}
}


Соответствующая C-реализация:
#include <jni.h>
#include <stdio.h>
#include "HelloJNI.h"

JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject obj) {
printf("Hello from C!\n");
}

Функция Java_HelloJNI_sayHello должна строго соответствовать полному имени Java-класса и метода: Java_<ClassName>_<MethodName>.


Компиляция (Linux/macOS):
gcc -shared -fpic -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" -o libhello.so HelloJNI.c


Использовать JNI следует с осторожностью: ошибки в нативном коде могут привести к утечкам памяти, нарушению безопасности и краху JVM.

📌 JNI особенно полезен при работе с CUDA, OpenCV, аудиобиблиотеками, нативными API и при переносе существующего C/C++-кода в Java-приложение.


Ссылка на документацию

tags: #обучение

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍116
This media is not supported in your browser
VIEW IN TELEGRAM
Разница между новичком и опытным разрабом 😆

📱 Java Developer | #memes
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣45🔥5😁3
Вопрос с собеседования

Как устроен Message в Kafka?

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

Ключ (key) — используется для распределения сообщений по партициям. Сообщения с одинаковым ключом попадают в одну партицию.

Значение (value) — основное содержимое сообщения, например строка, JSON, байты и т.п.

Метаданные — включают смещение (offset), временную метку, имя топика и номер партиции.

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


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

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

В статье объясняется, почему Spring Data JPA может тормозить: рассматриваются причины вроде open-in-view, ленивой инициализации, неправильной настройки DataSource и медленных JOIN-ов.

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

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

tags: #статья

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

Docker — что это и для чего используется?

Ответ: Docker — это инструмент, который позволяет упаковывать приложение вместе со всеми его зависимостями в изолированный контейнер.

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

Docker активно используется для автоматизации сборки, тестирования и доставки программ, особенно в микросервисной архитектуре и CI/CD-процессах.


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

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍73
👩‍💻 Как я реализовал взаимодействие микросервисов — Kafka и gRpc

В предыдущей части автор построил REST API для сервиса инцидентов на Java и Spring.

В этой статье он реализует микросервис изображений с использованием S3-хранилища и показывает два способа взаимодействия между сервисами — асинхронный через Kafka и синхронный с помощью gRPC.

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

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


tags: #статья

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