Java Portal | Программирование
前往频道在 Telegram
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg
显示更多📈 Telegram 频道 Java Portal | Программирование 的分析概览
频道 Java Portal | Программирование (@java_iibrary) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 12 121 名订阅者,在 技术与应用 类别中位列第 10 397,并在 俄罗斯 地区排名第 54 492 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 12 121 名订阅者。
根据 08 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -138,过去 24 小时变化为 -5,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 11.21%。内容发布后 24 小时内通常能获得 6.34% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 1 360 次浏览,首日通常累积 769 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 4。
- 主题关注点: 内容集中在 boot, string, void, архитектура, resttemplate 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика
Связь: @devmangx
РКН: https://clck.ru/3H4WUg”
凭借高频更新(最新数据采集于 09 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
12 121
订阅者
-524 小时
-307 天
-13830 天
帖子存档
Spring Boot с AOP:
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() в каждый метод, всё вынесено в один аспект.
👉 Java Portal7 шаблонов проектирования, которые должен знать каждый разработчик
Осознаёте вы это или нет, но большинство этих шаблонов вы уже используете.
Шаблоны проектирования — это переиспользуемые решения типовых задач в программировании. Они служат шаблонами, которые можно применять в разных языках и на разных платформах.
В 1994 году четверо разработчиков, известные как Gang of Four (Банда четырёх), написали книгу, где описали 23 шаблона проектирования. Эта книга стала классикой, и описанные в ней подходы актуальны до сих пор.
Шаблоны делятся на три группы:
🟢Порождающие — управляют созданием объектов с гибкостью.
🟣Структурные — помогают организовать объекты в более крупные структуры.
🟡Поведенческие — определяют, как объекты взаимодействуют друг с другом.
Вот 7 ключевых шаблонов, которые стоит знать:
Singleton — гарантирует, что будет только один экземпляр класса. Builder — пошагово конструирует сложные объекты. Factory — создаёт объекты без указания точного класса. Facade — упрощает работу со сложной системой через единый интерфейс. Adapter — позволяет работать вместе несовместимым интерфейсам. Strategy — позволяет динамически подменять алгоритмы. Observer — поддерживает зависимость между объектами (реакция на события).Знание этих шаблонов помогает писать более поддерживаемый код и делает проекты понятнее для других разработчиков. Но важно помнить: не злоупотребляйте ими. Подходящий шаблон в нужной ситуации — это сила. Но если применять их там, где они не нужны, это только усложнит систему. 👉 Java Portal
Интеграция ChatGPT в Java
С ростом интереса к нейросетям всё больше приложений начинают использовать ИИ в своей бизнес-логике. Встраивание 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: собрать запрос, добавить ключ и обработать результат.
👉 Java PortalПервая статья из серии, где показывается как примеры AI-агентов из популярных Python-фреймворков можно переписать на Java и сделать гораздо лучше с помощью Embabel
Сегодняшняя цель CrewAI — читать
👉 Java Portal
🔍 Завтра тестовое собеседование с Java-разработчиком
20 июля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Сергею
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
Советы по работе с Spring Boot Scheduler
Пул потоков
По умолчанию все задачи выполняются в одном потоке, и длинный job может блокировать остальные.
Чтобы запускать задачи параллельно, увеличь пул:
spring.task.scheduling.pool.size=4
Теперь одновременно могут работать до 4 задач.
Быстрая проверка
Во время разработки ставь короткие интервалы и добавляй логи, чтобы видеть, когда реально запускается job:
log.info("Job ran at {}", Instant.now());
Частые ошибки
- забыли @EnableScheduling → задачи не запустятся
- неверный timezone в cron
- долгие задачи блокируют другие (решается увеличением пула или оптимизацией кода)
Выбираем стратегию
fixedRate → с фиксированными интервалами
fixedDelay → ждёт после выполнения
cron → точные даты и время
Совет: выноси настройки во внешние properties и используй пул потоков для стабильной работы.
👉 Java PortalРепозиторий kdn251/interviews на GitHub — это реально крутой ресурс, собранный Кевином Нонтоном
interviews был создан, чтобы прокачать подготовку к техсобесам, собрав в одном месте алгоритмы, структуры данных, статьи и ссылки на полезные материалы
Если давно хотел подтянуться в алгоритмах и кодинге для интервью, начни с этого репозитория
Там найдёшь задачи, видео, объяснения, ссылки на LeetCode и много практики 😁
👉 Java Portal
🔥 3 канала — один билет в IT! 🔥
💡 Хочешь реально понять, что такое программирование?
🚀 Хватит просто читать — пора погружаться!
👉 Java: теория — объясним, чтобы понял даже кот.
👉 Java: практика — проверь свои знания.
👉 Python — твой быстрый старт в программирование без боли.
🎯 Успех любит быстрых. Жми и забирай три ключа к IT-двери!
Java Off-Heap Memory с DirectByteBuffer
Большинство Java-разработчиков работают только с объектами в куче JVM, управляемой Garbage Collector.
Но в системах с высокими требованиями к производительности — базах данных, игровых движках или messaging-системах — Java может использовать off-heap memory (память вне кучи JVM) через
DirectByteBuffer
Преимущества
- снижение пауз GC
- ускорение I/O операций
- возможность работать с большими наборами данных без раздувания кучи
👉 Java PortalРесурс для разработчиков, чтобы создавать изометрические диаграммы своей инфраструктуры или софта.
Open-source: https://github.com/stan-smith/FossFLOW
👉 Java Portal
🤢🤢🤢Проводим самый БОЛЬШОЙ розыгрыш этого лета сразу на 🤢🤢🤢🤢🤢🤢🤢 рублей
РАЗЫГРЫВАЕМ iPhone 16 Pro Max, Macbook Air M4, AirPods Pro и кучу других призов — с вас всего лишь подписка.
Для участия нужно:
🤢Быть подписанным на Техночат и Сёрч
🤢Нажать «Участвую!» под этим постом
Итоги подведём 8 сентября в 18:00 случайным образом при помощи бота. Доставка для победителя бесплатная. Всем удачи!
Автоматический toString() в Record
record сравнительно новая фича в Java, которая позволяет описывать сущности без явного объявления полей и написания геттеров/сеттеров.
Пример:
record User(String name, int age, String city) { }
Если писать это же через класс, получится больше кода:
class User {
public String name;
public int age;
public String city;
public User(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
}
И в том и в другом случае мы получаем объект для хранения данных:
new User("Nick", 20, "New York");
Но есть отличие
У record метод toString() генерируется автоматически и выводит имена и значения всех полей в удобном формате.
В обычном классе дефолтный toString() возвращает имя класса и хэш объекта.
Пример:
record User(String name, int age, String city) { }
class SecondUser {
public String name;
public int age;
public String city;
public SecondUser(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
}
public static void main(String[] args) throws Exception {
User firstUser = new User("Nick", 20, "New York");
SecondUser secondUser = new SecondUser("Charley", 25, "New York");
System.out.println(firstUser);
System.out.println(secondUser);
}
Вывод:
User[name=Nick, age=20, city=New York]
org.example.SecondUser@68de145
То есть у record toString() сразу готов, а для обычного класса придётся переопределять вручную.
👉 Java PortalЧувак сделал несколько Live Templates для intellijidea, которыми часто пользуется
👉 https://github.com/sivaprasadreddy/intellij-live-templates
С каждой новой версией IntelliJ IDEA часть этих штук появляется прямо из коробки
Например, шаблоны для логов и создания Spring-компонентов уже доступны OOTB
На примере небольшой демо, как можно быстро создавать логгер и Spring-компоненты прямо в intellijidea
👉 Java Portal
Java Logging (SLF4J, Logback) — всё, что нужно знать
1. Логирование → запись событий приложения для отладки и мониторинга
Помогает находить проблемы без запуска отладчика
Пример: запись неудачной попытки входа для целей безопасности
2. SLF4J → простой фасад для логирования в Java
Вы пишете код против API SLF4J, а дальше подключаете любую реализацию логгера
Пример: один и тот же код будет работать с Logback, Log4j или java.util.logging
3. Logback → популярный backend для логирования
Высокая производительность, гибкость, поддержка фильтров и политик ротации
Пример: запись логов в файл с ежедневной ротацией
4. Зачем использовать SLF4J + Logback
- SLF4J → возможность менять backend без переписывания кода
- Logback → функционал продакшен-уровня и высокая производительность
5. Уровни логирования (общие для большинства фреймворков)
-
TRACE → подробная внутренняя информация (редко в продакшене)
- DEBUG → отладочная информация (например, значения переменных)
- INFO → общие события высокого уровня (например, «Пользователь успешно зарегистрирован»)
- WARN → неожиданные, но восстанавливаемые ситуации (например, повторный запрос)
- ERROR → критические ошибки, влияющие на функционал
6. Пример настройки
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyService {
private static final Logger logger = LoggerFactory.getLogger(MyService.class);
public void processOrder(String orderId) {
logger.info("Processing order {}", orderId);
try {
// бизнес-логика
} catch (Exception e) {
logger.error("Error processing order {}", orderId, e);
}
}
}
🔸Используйте параметризованное логирование
logger.debug("User {} logged in", userId) → избегайте конкатенации строк
🔸Выбирайте правильный уровень логов — не захламляйте прод debug-сообщениями
🔸Разделяйте логи приложения и фреймворков
🔸Применяйте политику ротации, чтобы не копились огромные файлы
🔸Добавляйте correlation ID для трейсинга запросов между сервисами
Не логируйте чувствительные данные (пароли, токены)
👉 Java Portal8 лучших практик при проектировании API
① Понятные названия → единообразные URL и коллекции
② Идемпотентность → безопасные повторы запросов с одинаковым результатом
③ Пагинация → ограничение количества результатов для снижения нагрузки
④ Сортировка и фильтры → возможность фильтровать результаты
⑤ Кросс-ссылки → не злоупотреблять query string
⑥ Ограничение частоты запросов → контроль количества запросов для стабильности
⑦ Версионирование → сохранение обратной совместимости
⑧ Безопасность → защита через API Keys, JWT, OAuth2
👉 Java Portal
27 августа встречаемся на DrinkUp от Авито для backend-разработчиков в Нижнем Новгороде. Уже предчувствуем горячие споры… ☄️
В планах в формате дискуссий обсудить:
➡️ как правильно структурировать проекты;
➡️ кому и как проще вкатиться в Go и почему он такой странный;
➡️ как LLM помогает разработчикам.
Остальные темы раскрывать не будем — можете посмотреть их по ссылке! Там же, кстати, и регистрация на ивент.
Освой планирование в Spring Boot с помощью Cron-задач и начальной задержки.
🔸Cron Job
Планировщик cron запускает задачи в определённое время, используя cron-выражение.
Это самый гибкий способ планировать задачи в Spring Boot — можно запускать их ежедневно, еженедельно, ежемесячно или по любому заданному шаблону.
Пример ниже выполняется каждый день в 9:00 утра по времени IST.
@Scheduled(cron = "0 0 9 * * ?", zone = "Asia/Kolkata")
public void runCron() {
System.out.println("Daily at 9:00 AM");
}
Формат cron: секунда минута час день месяц деньНедели
Примеры:
0 0 0 * * ? → каждый день в полночь
0 0/15 * * * ? → каждые 15 минут
Используйте cron, когда нужна точность, например для генерации отчётов в конце дня.
🔸Initial Delay
Параметр initialDelay говорит Spring Boot, сколько ждать после запуска приложения перед первым выполнением задачи.
После первого запуска задача будет работать с указанным fixedRate или fixedDelay.
Пример: код ниже ждёт 10 секунд после старта, затем выполняется каждые 5 секунд от начала предыдущего запуска.
@Scheduled(initialDelay = 10000, fixedRate = 5000)
public void runWithDelay() {
System.out.println("Starts after 10s, then every 5s");
}
Используйте initialDelay, если задача зависит от готовности других сервисов или данных — например, нужно загрузить конфигурацию из базы перед запуском фоновых задач.
👉 Java PortalКто до сих пор путается в деревьях, графах и сортировках, вот топчик:
https://visualgo.net/en
Визуалка чисто для мозга, всё анимировано: стек, очередь, DFS, BFS, сортировки, хэш-таблицы.
Как будто смотришь, как думает комп. Залипнуть можно. 😳
Сохрани
👉 Java Portal
Паттерны проектирования систем - шпаргалка
🔸Webhooks и Outbox
Надёжные внешние уведомления.
Когда использовать — интеграции, сторонние колбэки.
Типичные проблемы — статусы оплат, синхронизация CRM.
🔸Blob/Object Storage
Дешёвое хранение больших файлов.
Когда использовать — медиа, бэкапы, экспорты.
Типичные проблемы — загрузки пользователей, data lake.
🔸Оркестратор задач (Airflow/Temporal)
Долгоживущие процессы с состоянием.
Когда использовать — длинные задачи, SLA.
Типичные проблемы — генерация отчётов, обработка видео.
🔸Blue-Green / Canary деплой
Постепенное переключение трафика.
Когда использовать — безопасные релизы, быстрый откат.
Типичные проблемы — деплой API, смена конфигураций.
🔸Feature Flags
Включение/отключение фич на лету.
Когда использовать — эксперименты, переключатели.
Типичные проблемы — A/B тесты, скрытые релизы.
🔸Стратегия миграции схемы
Обратная/прямая совместимость.
Когда использовать — миграция без простоя БД.
Типичные проблемы — expand-migrate-contract.
🔸Распределённые блокировки / выбор лидера
Координация одного активного воркера.
Когда использовать — уникальность cron, шардовое владение.
Типичные проблемы — один консумер, лидер партиции.
🔸Наблюдаемость (логи/метрики/трейсы)
Понимание, что делает система.
Когда использовать — SLO, отладка, планирование.
Типичные проблемы — задержка p99, error budget.
🔸Безопасность: AuthN/AuthZ
Проверка личности и прав доступа.
Когда использовать — мультиарендные продукты, внешние API.
Типичные проблемы — OAuth2/OIDC, RBAC/ABAC.
🔸Мультиарендность (pool/bridge/isolated)
Уровни изоляции данных и ресурсов.
Когда использовать — SaaS с множеством клиентов.
Типичные проблемы — отдельные БД на арендатора vs общая схема.
🔸Edge Compute/функции
Запуск логики ближе к пользователю.
Когда использовать — низкая задержка, лёгкие задачи.
Типичные проблемы — персонализация на краю, A/B тесты.
🔸Rate-Aware DB Patterns
Пакетная, очередная, троттлинг у БД.
Когда использовать — горячие партиции, блокировки.
Типичные проблемы — массовый импорт, ID hotspot.
🔸Стратегии пагинации
Keyset > Offset для больших данных.
Когда использовать — бесконечный скролл, большие таблицы.
Типичные проблемы — пагинация фидов, списки в админке.
👉 Java Portal
Метод
limit в Java Stream API кратко
Иногда нужно вытащить только первые N элементов коллекции например для пагинации отладки или быстрого превью. В Stream API за это отвечает limit который делает это простым и аккуратным способом
limit(long maxSize) создает новый поток и берет не больше n элементов из исходного. Остальные элементы пропускаются и дальше не обрабатываются
Пример ниже
import java.util.List;
import java.util.stream.Collectors;
public class LimitExample {
public static void main(String[] args) {
List<String> items = List.of("A", "B", "C", "D", "E");
List<String> limited = items.stream()
.limit(3)
.collect(Collectors.toList());
System.out.println(limited); // [A, B, C]
}
}
Какой бы ни была длина исходной коллекции результат содержит максимум n элементов
👉 Java Portal
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
