es
Feedback
Java Portal | Программирование

Java Portal | Программирование

Ir al canal en Telegram

Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Mostrar más

📈 Análisis del canal de Telegram Java Portal | Программирование

El canal Java Portal | Программирование (@java_iibrary) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 12 121 suscriptores, ocupando la posición 10 397 en la categoría Tecnologías y Aplicaciones y el puesto 54 492 en la región Rusia.

📊 Métricas de audiencia y dinámica

Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 12 121 suscriptores.

Según los últimos datos del 08 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -138, y en las últimas 24 horas de -5, conservando un alto alcance.

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 11.21%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 6.34% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 1 360 visualizaciones. En el primer día suele acumular 769 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 4.
  • Intereses temáticos: El contenido se centra en temas clave como boot, string, void, архитектура, resttemplate.

📝 Descripción y política de contenido

El autor describe el recurso como un espacio para expresar opiniones subjetivas:
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 09 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.

12 121
Suscriptores
-524 horas
-307 días
-13830 días
Archivo de publicaciones
Spring Boot с AOP: Spring Boot позволяет использовать аспектно-ориентированное программирование , чтобы вынести сквозную логи
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 Portal

7 шаблонов проектирования, которые должен знать каждый разработчик Осознаёте вы это или нет, но большинство этих шаблонов вы
7 шаблонов проектирования, которые должен знать каждый разработчик Осознаёте вы это или нет, но большинство этих шаблонов вы уже используете. Шаблоны проектирования — это переиспользуемые решения типовых задач в программировании. Они служат шаблонами, которые можно применять в разных языках и на разных платформах. В 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 по мск приходи онлайн на открытое собеседо
🔍 Завтра тестовое собеседование с 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 был создан, чтобы
Репозиторий kdn251/interviews на GitHub — это реально крутой ресурс, собранный Кевином Нонтоном interviews был создан, чтобы прокачать подготовку к техсобесам, собрав в одном месте алгоритмы, структуры данных, статьи и ссылки на полезные материалы Если давно хотел подтянуться в алгоритмах и кодинге для интервью, начни с этого репозитория Там найдёшь задачи, видео, объяснения, ссылки на LeetCode и много практики 😁 👉 Java Portal

🔥 3 канала — один билет в IT! 🔥 💡 Хочешь реально понять, что такое программирование? 🚀 Хватит просто читать — пора погружаться! 👉 Java: теория — объясним, чтобы понял даже кот. 👉 Java: практика — проверь свои знания. 👉 Python — твой быстрый старт в программирование без боли. 🎯 Успех любит быстрых. Жми и забирай три ключа к IT-двери!

Java Off-Heap Memory с DirectByteBuffer Большинство Java-разработчиков работают только с объектами в куче JVM, управляемой Ga
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
🤢🤢🤢Проводим самый БОЛЬШОЙ розыгрыш этого лета сразу на 🤢🤢🤢🤢🤢🤢🤢 рублей РАЗЫГРЫВАЕМ 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 Portal

8 лучших практик при проектировании 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 Надёжные внешние уведомления. Когда использовать — интеграции,
Паттерны проектирования систем - шпаргалка 🔸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