This media is not supported in your browser
VIEW IN TELEGRAM
Ресурс для разработчиков, чтобы создавать изометрические диаграммы своей инфраструктуры или софта.
Open-source: https://github.com/stan-smith/FossFLOW
👉 Java Portal
Open-source: https://github.com/stan-smith/FossFLOW
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3
Java Off-Heap Memory с DirectByteBuffer
Большинство Java-разработчиков работают только с объектами в куче JVM, управляемой Garbage Collector.
Но в системах с высокими требованиями к производительности — базах данных, игровых движках или messaging-системах — Java может использовать off-heap memory (память вне кучи JVM) через
Преимущества
- снижение пауз GC
- ускорение I/O операций
- возможность работать с большими наборами данных без раздувания кучи
👉 Java Portal
Большинство Java-разработчиков работают только с объектами в куче JVM, управляемой Garbage Collector.
Но в системах с высокими требованиями к производительности — базах данных, игровых движках или messaging-системах — Java может использовать off-heap memory (память вне кучи JVM) через
DirectByteBuffer
Преимущества
- снижение пауз GC
- ускорение I/O операций
- возможность работать с большими наборами данных без раздувания кучи
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Репозиторий kdn251/interviews на GitHub — это реально крутой ресурс, собранный Кевином Нонтоном
interviews был создан, чтобы прокачать подготовку к техсобесам, собрав в одном месте алгоритмы, структуры данных, статьи и ссылки на полезные материалы
Если давно хотел подтянуться в алгоритмах и кодинге для интервью, начни с этого репозитория
Там найдёшь задачи, видео, объяснения, ссылки на LeetCode и много практики😁
👉 Java Portal
interviews был создан, чтобы прокачать подготовку к техсобесам, собрав в одном месте алгоритмы, структуры данных, статьи и ссылки на полезные материалы
Если давно хотел подтянуться в алгоритмах и кодинге для интервью, начни с этого репозитория
Там найдёшь задачи, видео, объяснения, ссылки на LeetCode и много практики
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2❤1
Советы по работе с Spring Boot Scheduler
Пул потоков
По умолчанию все задачи выполняются в одном потоке, и длинный job может блокировать остальные.
Чтобы запускать задачи параллельно, увеличь пул:
Теперь одновременно могут работать до 4 задач.
Быстрая проверка
Во время разработки ставь короткие интервалы и добавляй логи, чтобы видеть, когда реально запускается job:
Частые ошибки
- забыли
- неверный
- долгие задачи блокируют другие (решается увеличением пула или оптимизацией кода)
Выбираем стратегию
Совет: выноси настройки во внешние properties и используй пул потоков для стабильной работы.
👉 Java Portal
Пул потоков
По умолчанию все задачи выполняются в одном потоке, и длинный job может блокировать остальные.
Чтобы запускать задачи параллельно, увеличь пул:
spring.task.scheduling.pool.size=4
Теперь одновременно могут работать до 4 задач.
Быстрая проверка
Во время разработки ставь короткие интервалы и добавляй логи, чтобы видеть, когда реально запускается job:
log.info("Job ran at {}", Instant.now());
Частые ошибки
- забыли
@EnableScheduling
→ задачи не запустятся- неверный
timezone
в cron
- долгие задачи блокируют другие (решается увеличением пула или оптимизацией кода)
Выбираем стратегию
fixedRate
→ с фиксированными интерваламиfixedDelay
→ ждёт после выполненияcron
→ точные даты и времяСовет: выноси настройки во внешние properties и используй пул потоков для стабильной работы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
Первая статья из серии, где показывается как примеры AI-агентов из популярных Python-фреймворков можно переписать на Java и сделать гораздо лучше с помощью Embabel
Сегодняшняя цель CrewAI — читать
👉 Java Portal
Сегодняшняя цель CrewAI — читать
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🌭3🤣3😁1🤯1
Интеграция ChatGPT в Java
С ростом интереса к нейросетям всё больше приложений начинают использовать ИИ в своей бизнес-логике. Встраивание ChatGPT может быть реализовано по-разному
1. Пользователь вводит текст, приложение отправляет его в ChatGPT и возвращает ответ
2. Ввод отправляется в ChatGPT для дополнения или расширения и сохраняется в базу
3. ChatGPT используется как помощник для следующих действий пользователя
Механика всегда одна и та же: отправляется HTTP-запрос к API, на который приходит HTTP-ответ. Браузер делает это напрямую, Java-код делает то же самое с любым HTTP-клиентом —
Отличие в том, что запросы из приложения должны содержать ваш API-ключ. Его передают в заголовке
Как подготовить проект
1. Зарегистрироваться на platform.openai.com, сгенерировать API Key в разделе API Keys
2. Подключить зависимости. Например, OkHttp для запросов и org.json для разбора ответа
Пример простого клиента
Что тут происходит
> создаём HTTP-клиент
> формируем JSON с сообщением
> добавляем заголовки и ключ
> отправляем POST-запрос на API
> парсим JSON-ответ и выводим текст
Таким образом, интеграция ChatGPT в Java-приложение сводится к обычной работе с HTTP API: собрать запрос, добавить ключ и обработать результат.
👉 Java Portal
С ростом интереса к нейросетям всё больше приложений начинают использовать ИИ в своей бизнес-логике. Встраивание ChatGPT может быть реализовано по-разному
1. Пользователь вводит текст, приложение отправляет его в ChatGPT и возвращает ответ
2. Ввод отправляется в ChatGPT для дополнения или расширения и сохраняется в базу
3. ChatGPT используется как помощник для следующих действий пользователя
Механика всегда одна и та же: отправляется HTTP-запрос к API, на который приходит HTTP-ответ. Браузер делает это напрямую, Java-код делает то же самое с любым HTTP-клиентом —
RestTemplate, WebClient, HttpClient, OkHttp
и т дОтличие в том, что запросы из приложения должны содержать ваш API-ключ. Его передают в заголовке
Authorization
Как подготовить проект
1. Зарегистрироваться на platform.openai.com, сгенерировать API Key в разделе API Keys
2. Подключить зависимости. Например, OkHttp для запросов и org.json для разбора ответа
<dependencies>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20240303</version>
</dependency>
</dependencies>
Пример простого клиента
import okhttp3.*;
import org.json.JSONObject;
public class ChatGPTClient {
private static final String API_KEY = "your-api-key-here";
private static final String API_URL = "https://api.openai.com/v1/chat/completions";
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient();
JSONObject message = new JSONObject()
.put("role", "user")
.put("content", "Привет! Объясни, как работает JVM");
JSONObject body = new JSONObject()
.put("model", "gpt-3.5-turbo")
.put("messages", new org.json.JSONArray().put(message));
Request request = new Request.Builder()
.url(API_URL)
.header("Authorization", "Bearer " + API_KEY)
.header("Content-Type", "application/json")
.post(RequestBody.create(body.toString(), MediaType.get("application/json")))
.build();
try (Response response = client.newCall(request).execute()) {
JSONObject json = new JSONObject(response.body().string());
String reply = json.getJSONArray("choices")
.getJSONObject(0)
.getJSONObject("message")
.getString("content");
System.out.println("ChatGPT ответ: " + reply);
}
}
}
Что тут происходит
> создаём HTTP-клиент
> формируем JSON с сообщением
> добавляем заголовки и ключ
> отправляем POST-запрос на API
> парсим JSON-ответ и выводим текст
Таким образом, интеграция ChatGPT в Java-приложение сводится к обычной работе с HTTP API: собрать запрос, добавить ключ и обработать результат.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🤯2
7 шаблонов проектирования, которые должен знать каждый разработчик
Осознаёте вы это или нет, но большинство этих шаблонов вы уже используете.
Шаблоны проектирования — это переиспользуемые решения типовых задач в программировании. Они служат шаблонами, которые можно применять в разных языках и на разных платформах.
В 1994 году четверо разработчиков, известные как Gang of Four (Банда четырёх), написали книгу, где описали 23 шаблона проектирования. Эта книга стала классикой, и описанные в ней подходы актуальны до сих пор.
Шаблоны делятся на три группы:
🟢 Порождающие — управляют созданием объектов с гибкостью.
🟣 Структурные — помогают организовать объекты в более крупные структуры.
🟡 Поведенческие — определяют, как объекты взаимодействуют друг с другом.
Вот 7 ключевых шаблонов, которые стоит знать:
Знание этих шаблонов помогает писать более поддерживаемый код и делает проекты понятнее для других разработчиков.
Но важно помнить: не злоупотребляйте ими. Подходящий шаблон в нужной ситуации — это сила. Но если применять их там, где они не нужны, это только усложнит систему.
👉 Java Portal
Осознаёте вы это или нет, но большинство этих шаблонов вы уже используете.
Шаблоны проектирования — это переиспользуемые решения типовых задач в программировании. Они служат шаблонами, которые можно применять в разных языках и на разных платформах.
В 1994 году четверо разработчиков, известные как Gang of Four (Банда четырёх), написали книгу, где описали 23 шаблона проектирования. Эта книга стала классикой, и описанные в ней подходы актуальны до сих пор.
Шаблоны делятся на три группы:
Вот 7 ключевых шаблонов, которые стоит знать:
Singleton — гарантирует, что будет только один экземпляр класса.
Builder — пошагово конструирует сложные объекты.
Factory — создаёт объекты без указания точного класса.
Facade — упрощает работу со сложной системой через единый интерфейс.
Adapter — позволяет работать вместе несовместимым интерфейсам.
Strategy — позволяет динамически подменять алгоритмы.
Observer — поддерживает зависимость между объектами (реакция на события).
Знание этих шаблонов помогает писать более поддерживаемый код и делает проекты понятнее для других разработчиков.
Но важно помнить: не злоупотребляйте ими. Подходящий шаблон в нужной ситуации — это сила. Но если применять их там, где они не нужны, это только усложнит систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
Spring Boot с AOP:
Spring Boot позволяет использовать аспектно-ориентированное программирование , чтобы вынести сквозную логику (например, логирование, безопасность или кеширование) отдельно от бизнес-логики.
Можно даже создавать свои аннотации, которые автоматически навешивают нужное поведение, сохраняя код чистым и декларативным
1. Создаётся аннотация
Её можно навесить на любой метод, чтобы включить замер времени выполнения.
2. Аспект
- Перехватывает вызов методов с аннотацией
- Сохраняет время старта → выполняет метод → считает разницу → выводит результат в лог.
3. Контроллер
- Метод hello() помечен
- При каждом запросе на /hello метод будет логироваться с замером времени.
AOP здесь убирает дублирование логики измерения времени.
Вместо того чтобы вставлять
👉 Java Portal
Spring Boot позволяет использовать аспектно-ориентированное программирование , чтобы вынести сквозную логику (например, логирование, безопасность или кеширование) отдельно от бизнес-логики.
Можно даже создавать свои аннотации, которые автоматически навешивают нужное поведение, сохраняя код чистым и декларативным
1. Создаётся аннотация
@LogExecutionTime
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {}
Её можно навесить на любой метод, чтобы включить замер времени выполнения.
2. Аспект
LoggingAspect
@Aspect
@Component
public class LoggingAspect {
@Around("@annotation(LogExecutionTime)")
public Object logExecution(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = joinPoint.proceed(); // выполнить метод
long timeTaken = System.currentTimeMillis() - start;
System.out.println(joinPoint.getSignature() + " executed in " + timeTaken + " ms");
return result;
}
}
- Перехватывает вызов методов с аннотацией
@LogExecutionTime
- Сохраняет время старта → выполняет метод → считает разницу → выводит результат в лог.
3. Контроллер
TestController
@RestController
public class TestController {
@GetMapping("/hello")
@LogExecutionTime
public String hello() throws InterruptedException {
Thread.sleep(500); // имитация работы
return "Hello, World!";
}
}
- Метод hello() помечен
@LogExecutionTime
- При каждом запросе на /hello метод будет логироваться с замером времени.
AOP здесь убирает дублирование логики измерения времени.
Вместо того чтобы вставлять
System.currentTimeMillis()
в каждый метод, всё вынесено в один аспект.Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
ИТ-специалисты Петербурга, общий сбор
6 и 7 сентября пройдет ИТ-фестиваль «Сезон кода» для опытных разработчиков, ML-инженеров, архитекторов, специалистов по информационной безопасности и других ИТ-специалистов.
Спикеры из Т-Банка и других компаний зовут слушать доклады, обмениваться опытом и знакомиться с единомышленниками. Развлечения и музыка тоже будут.
В первый день:
— Разберетесь в архитектуре систем, надежности и работе с данными.
— Узнаете, как технологии помогают решать задачи клиентов и бизнеса.
— Поймете, как идеи становятся инструментами и продуктами.
Во второй день:
— Услышите про актуальные подходы к обеспечению информационной безопасности в разработке.
— Узнаете про backend-принципы, которые помогают работать эффективнее.
— Увидите, как работают LLM и куда все это движется.
Выбирайте один из дней или посетите оба. Встреча пройдет в новом ИТ-хабе Т-Технологий в Санкт-Петербурге.
Успейте зарегистрироваться до 5 сентября
6 и 7 сентября пройдет ИТ-фестиваль «Сезон кода» для опытных разработчиков, ML-инженеров, архитекторов, специалистов по информационной безопасности и других ИТ-специалистов.
Спикеры из Т-Банка и других компаний зовут слушать доклады, обмениваться опытом и знакомиться с единомышленниками. Развлечения и музыка тоже будут.
В первый день:
— Разберетесь в архитектуре систем, надежности и работе с данными.
— Узнаете, как технологии помогают решать задачи клиентов и бизнеса.
— Поймете, как идеи становятся инструментами и продуктами.
Во второй день:
— Услышите про актуальные подходы к обеспечению информационной безопасности в разработке.
— Узнаете про backend-принципы, которые помогают работать эффективнее.
— Увидите, как работают LLM и куда все это движется.
Выбирайте один из дней или посетите оба. Встреча пройдет в новом ИТ-хабе Т-Технологий в Санкт-Петербурге.
Успейте зарегистрироваться до 5 сентября
JavaCV
Это Java-обёртка к OpenCV, FFmpeg и другим нативным библиотекам через JavaCPP Presets. Позволяет делать компьютерное зрение и обработку видео и аудио на JVM.
Умеет делать захват с камеры и из файлов, декодирование и кодирование, обработка изображений, интеграция с библиотеками вроде OpenCV, FFmpeg, Tesseract, librealsense и др. Работает на Windows, macOS, Linux и Android.
Пакет есть в Maven Central. Готовые бинари подтянутся автоматически.
Примеры кода есть в репозитории с демо
Домашняя страница проекта с деталями про JavaCPP и пресеты
👉 Java Portal
Это Java-обёртка к OpenCV, FFmpeg и другим нативным библиотекам через JavaCPP Presets. Позволяет делать компьютерное зрение и обработку видео и аудио на JVM.
Умеет делать захват с камеры и из файлов, декодирование и кодирование, обработка изображений, интеграция с библиотеками вроде OpenCV, FFmpeg, Tesseract, librealsense и др. Работает на Windows, macOS, Linux и Android.
Пакет есть в Maven Central. Готовые бинари подтянутся автоматически.
Примеры кода есть в репозитории с демо
Домашняя страница проекта с деталями про JavaCPP и пресеты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Boolean-функции в Java Stream API
При работе со Stream API часто нужно проверить, подходят ли элементы под какое-то условие. Для этого есть методы, которые возвращают true или false.
Основные такие методы:
1.
Возвращает true, если в потоке есть хотя бы один элемент, который проходит проверку.
2.
Возвращает true, если все элементы удовлетворяют условию.
3.
Даёт true, если в потоке нет ни одного элемента, соответствующего условию.
👉 Java Portal
При работе со Stream API часто нужно проверить, подходят ли элементы под какое-то условие. Для этого есть методы, которые возвращают true или false.
Основные такие методы:
1.
anyMatch(Predicate)
Возвращает true, если в потоке есть хотя бы один элемент, который проходит проверку.
List<String> names = List.of("Alice", "Bob", "Anna");
boolean hasShortName = names.stream()
.anyMatch(name -> name.length() < 4);
// → true (подходит "Bob")
2.
allMatch(Predicate)
Возвращает true, если все элементы удовлетворяют условию.
List<String> names = List.of("Alice", "Bob", "Anna");
boolean allStartWithA = names.stream()
.allMatch(name -> name.startsWith("A"));
// → false
3.
noneMatch(Predicate)
Даёт true, если в потоке нет ни одного элемента, соответствующего условию.
List<String> names = List.of("Alice", "Bob", "Anna");
boolean noneEmpty = names.stream()
.noneMatch(String::isEmpty);
// → true
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2🔥2
Java Portal | Программирование
Первая статья из серии, где показывается как примеры AI-агентов из популярных Python-фреймворков можно переписать на Java и сделать гораздо лучше с помощью Embabel Сегодняшняя цель CrewAI — читать 👉 Java Portal
Второй пост в блоге показывает, как примеры AI-агентов из популярных Python-фреймворков можно переписать на Java и сделать лучше с помощью Embabel.
Сегодня в фокусе: Pydantic AI — читать
👉 Java Portal
Сегодня в фокусе: Pydantic AI — читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2
image_2025-08-22_08-09-28.png
587.6 KB
Наткнулся на такой пост от сеньора, про предварительные условия для System Design:
👉 Java Portal
1. Понимание цели
Разберись, что именно ты строишь, кто будет пользоваться и для чего это нужно.
2. Профиль трафика (read-heavy vs write-heavy)
Если система в основном читает (много пользователей просматривают данные), делай упор на кэширование, индексацию, реплики для чтения. Пример: каталог Netflix, карточки товаров Amazon.
Если в основном пишут (много аплоадов, входящих данных), подойдут очереди, пакетная запись, eventual consistency. Пример: сообщения WhatsApp, данные IoT-датчиков.
3. Консистентность vs доступность
Строгая консистентность нужна там, где ошибка недопустима (банки, бронирование).
Eventual consistency подходит там, где можно жить с устаревшими данными (Instagram, аналитика).
4. Требования к задержке
Реалтайм — оптимизация под низкую задержку через кэш или предвычисления. Примеры: гейминг, Zoom, подтверждение платежей.
Асинхронно — очередь и фоновые воркеры. Примеры: e-mail рассылка, генерация отчётов.
5. Масштабируемость
Закладывай рост ×10. Пример: Google Docs начинался маленьким, но сейчас обрабатывает миллионы правок одновременно. Uber — тысячи поездок в минуту. Используй stateless-сервисы и горизонтальное масштабирование.
6. Паттерны доступа
Оптимизируй под то, какие данные и как часто читаются: поиск по гео/локации (geo-hash + ElasticSearch), быстрый доступ к часто используемым ID (Redis/Memcached).
7. Рост данных и партиционирование
Продумывай шардинг заранее (по пользователю, времени, гео). Пример: комментарии YouTube шардуются по ID видео.
Холодные данные сжимай или архивируй (Gmail, Google Drive).
8. Обработка отказов
Используй ретраи, фоллбэки, circuit breakers.
Если API падает по таймауту → повтор + настройка таймаута (пример: Amazon payment retry).
Если кэш недоступен → фоллбэк в БД (пример: Reddit загружает комментарии из БД).
9. Безопасность и авторизация
Авторизация: OAuth / JWT (пример: логин через Google или Spotify).
Защита от абузов и ботов: rate limiting, CAPTCHA (пример: Gmail signup, формы).
10. Нужно ли писать всё самому?
Некритичные фичи лучше вынести в SaaS или сторонние API:
Платежи — Stripe, PayPal.
Хранение медиа — Cloudinary, S3.
Уведомления — Firebase, SendGrid.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12😁1