Java Portal | Программирование
11.6K subscribers
870 photos
67 videos
29 files
698 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Java API Tip

Безопасное приведение long к int

Используй Math.toIntExact() — этот метод возвращает значение long, но выбрасывает ArithmeticException, если оно не помещается в int

Без него преобразование произойдёт молча — и ты можешь получить некорректный результат без всяких ошибок.

Используй toIntExact, когда важно контролировать переполнение

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Тема для освоения программирования на java

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👀👀👀

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Дженерики в Java (2004) изменили всё.

Типобезопасность + гибкость.

Сначала вызывали сомнения, теперь — основа коллекций и API.

import java.util.*;

public class GenericsEvolutionDemo {


// До дженериков: отсутствие типобезопасности

    static void withoutGenerics() {
System.out.println("=== Без дженериков ===");
List list = new ArrayList(); // необобщённый тип (raw type)
list.add("Ayush");
list.add(42); // Ошибка не возникает на этапе компиляции

for (Object obj : list) {
try {
String name = (String) obj; // Исключение ClassCastException во время выполнения
System.out.println(name);
} catch (ClassCastException e) {
System.out.println("Поймана ошибка: " + e);
}
}
}


// С дженериками: типобезопасно и понятно

    static void withGenerics() {
System.out.println("\n=== С дженериками ===");
List<String> list = new ArrayList<>();
list.add("Ayush");
// list.add(42); // Раскомментировать эту строку вызовет ошибку компиляции

for (String name : list) {
System.out.println(name.toUpperCase());
}
}


// Пример из реального API: Optional<T>

    static void optionalExample() {
System.out.println("\n=== Пример Optional<T> ===");
Optional<String> maybeName = Optional.of("Ayush");
maybeName.ifPresent(name -> System.out.println("Hello, " + name));
}

public static void main(String[] args) {
withoutGenerics();
withGenerics();
optionalExample();
}
}


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Указание типа после ключевого слова new — это действительно допустимая конструкция в Java.

Об этом и многом другом — в видео

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Хотите добавить динамическое поведение в ваши Java-классы?

Используйте библиотеку Java Class Extension Library для добавления динамических операций к существующим классам или для предоставления реализаций интерфейсов "на лету"

Кстати, теперь эта библиотека включает новый механизм circuit breaker (автоматическое прерывание цепочки вызовов)

Это позволяет легко добавить функциональность circuit breaker к любой из ваших операций — без изменений в исходном коде 😨

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Хочешь разобраться в геймдеве — разберись в чужом проекте с открытым кодом

Вот отличный кандидат: Gloomy Dungeons II — классический 3D-шутер на Android, вдохновлённый Doom и Wolfenstein.

Открытый MIT-проект на Java, с кастомным движком, освещением, текстурами и даже ракетницей.

➡️ Cсылка на GitHub

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Если хотите прокачаться в системном дизайне, разберитесь с этими концептами:

> API Gateway vs Load Balancer — ссылка
> Reverse Proxy vs Forward Proxy — ссылка
> Горизонтальное и вертикальное масштабирование — ссылка
> Микросервисы и монолитная архитектура — ссылка

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Типы массивов в Java

В Java существует два основных типа массивов:

Регулярные массивы — фиксированное число строк и столбцов

Регулярные массивы делятся на:

> 1-мерные массивы
> 2-мерные массивы
> 3-мерные и более

Во всех случаях каждая строка содержит одинаковое количество элементов.

> Зубчатые массивы

Это массив массивов, в котором вложенные массивы могут иметь разную длину.

Можно создавать 2D или 3D массивы с переменным числом столбцов в каждой строке.

Одномерный массив (1D array) — это список элементов, хранящихся в одной строке. Он используется для хранения нескольких значений одного типа в линейной форме

Синтаксис:

dataType[] arrayName = new dataType[size];


или

dataType[] arrayName = {value1, value2, value3, ...};


Пример: Список студентов в одном классе.

class MasterBackend {
public static void main(String[] args) {
// 1D Array: Students in a single class
String[] students = {"Ayush", "Rahul", "Neha", "Priya"};

System.out.println("Students in a class:");
for (String student : students) {
System.out.println(student);
}
}
}


Вывод:

Students in a class:
Ayush
Rahul
Neha
Priya


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое SSO (Single Sign-On)?

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Инструменты повышения продуктивности и качества кода в Java

1. Lombok — устраняет шаблонный код, автоматически генерируя геттеры, сеттеры, конструкторы и т.д.

2. MapStruct — генерирует типобезопасные мапперы между DTO и сущностями на этапе компиляции.

3. JRebel — позволяет горячую перезагрузку классов Java без перезапуска приложения (экономит массу времени).

4. SonarLint — линтер в IDE в реальном времени для обнаружения багов и "запахов кода" по мере написания.

5. SonarQube — платформа статического анализа кода с дашбордами и quality gates.

6. Checkstyle — обеспечивает соблюдение стандартов кодирования и правил оформления.

7. SpotBugs — сканирует байткод для выявления потенциальных ошибок и проблем с производительностью.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Совет по Java : Не полагайтесь слепо на сборщик мусора — утечки памяти всё ещё возможны

Например, если где-то в коде определить статический список:

private static final List<byte[]> byteList = new ArrayList<>();


Некоторые участки программы могут продолжать добавлять элементы в этот список, не удаляя их, что в итоге приведёт к исчерпанию памяти

Помимо анализа кода на наличие возможных утечек, можно использовать слабые ссылки вместо сильных.

Примером может служить класс WeakHashMap<K, V>

Он позволяет сборщику мусора удалять объекты, на которые больше нет сильных ссылок, даже если они всё ещё находятся в карте.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
В программировании шаблоны проектирования предлагают проверенные решения типичных задач.

Существуют три основных типа шаблонов: порождающие (creational), структурные (structural) и поведенческие (behavioral).

В этой статье Анджан объясняет порождающие шаблоны проектирования на примерах кода на Java.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
image_2025-06-11_07-57-10.png
646.4 KB
Вот ещё необходимые инструменты для современной разработки на Java

Database & Migrations Tools


> Liquibase – Отслеживает, управляет и автоматизирует изменения базы данных через changelogs.
> Flyway – Лёгкий инструмент миграции базы данных на основе версий, поддерживает SQL и Java.
> H2 Database – Встроенная in-memory БД, идеальна для локальной разработки и автотестов.
> JOOQ – Type-safe SQL builder, генерирует Java-код из схемы БД; хорош для SQL-нагруженных приложений.
> DBVisualizer / DBeaver – GUI-инструменты для просмотра и визуализации БД (упомянуты как достойные упоминания).

Debugging & Monitoring Tools

> Spring Boot Actuator – Предоставляет метрики, health-check'и и прочее для мониторинга.
> VisualVM – GUI для мониторинга JVM (потоки, память, GC, CPU).
> Java Flight Recorder (JFR) – Встроенный профайлер с низкой нагрузкой от JDK.
> JConsole – Лёгкий инструмент мониторинга на основе JMX, входит в JDK.
> Logback – Мощный логгер, преемник Log4j, с гибкой конфигурацией.
> Log4j2 – Асинхронный логгер с высокой производительностью.
> ELK Stack (Elasticsearch + Logstash + Kibana) – Централизованное логирование и анализ логов.
> Prometheus + Grafana – Сбор и визуализация метрик, часто используются для JVM.

Testing & Mocking Tools

> JUnit 5 – Стандарт для юнит- и интеграционных тестов в Java.
> Mockito – Мощный фреймворк для мокирования зависимостей.
> MockK – Kotlin-ориентированная библиотека моков (можно использовать с Java).
> Testcontainers – Тестирование с использованием Docker-контейнеров (БД, Kafka и т. д.).
> AssertJ – Упрощённые и читаемые assert'ы.
> Arquillian – Интеграционное тестирование Java EE и Jakarta EE (используется реже).
> REST Assured – DSL для тестирования REST API в Java.
> WireMock – HTTP мок-сервер для имитации внешних API.

Dependency & Build Management Tools

> Maven – XML-базированный билд и dependency-менеджмент (широко используется).
> Gradle – Гибкий билд-инструмент с Groovy/Kotlin DSL; быстрее Maven с кэшированием.
> JitPack – Позволяет использовать GitHub-репо как зависимости.
> Versions Maven Plugin – Автоматически проверяет устаревшие зависимости и плагины Maven.
> Dependabot – GitHub-инструмент для автообновления зависимостей через PR.
> Build Scan (by Gradle) – Анализ сборок с веб-дашбордом.
> Bazel – Масштабируемая система сборки от Google, подходит для больших кодовых баз.
> Nexus/Artifactory – Хостинг для внутренних/приватных Java-библиотек (артефактов)

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Техники аутентификации

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

> Аутентификация без пароля: В этой технике пользователю не нужно вводить пароль; вместо этого он получает одноразовый пароль (OTP) или ссылку на зарегистрированный номер телефона. Также называется OTP-аутентификацией.

> 2FA/MFA: Двухфакторная (2FA) или многофакторная (MFA) аутентификация — это более высокий уровень защиты. Требует дополнительный PIN-код или ответы на контрольные вопросы для подтверждения личности пользователя.

> Единый вход (SSO): SSO (Single Sign-On) позволяет получить доступ к нескольким приложениям, используя один набор учетных данных. Пользователь входит один раз, и автоматически получает доступ ко всем другим веб-приложениям из той же централизованной директории.

Техники авторизации

> Контроль доступа на основе ролей (RBAC): Техника RBAC предоставляет доступ пользователям в зависимости от их роли или профиля в организации. Может использоваться как для взаимодействия между системами, так и между пользователем и системой.

> JSON Web Token (JWT): JWT — это открытый стандарт, предназначенный для безопасной передачи данных между сторонами в виде JSON-объекта. Пользователи проверяются и авторизуются с использованием пары закрытого и открытого ключей.

> SAML: SAML (Security Assertion Markup Language) — это открытый стандарт, обеспечивающий передачу авторизационных данных поставщикам сервисов. Эти данные передаются в виде подписанных XML-документов.

> Авторизация через OpenID: Позволяет клиентам проверять личность конечных пользователей на основе аутентификации.

> OAuth: OAuth — это протокол авторизации, который позволяет API аутентифицировать пользователя и предоставлять доступ к запрашиваемым ресурсам.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Введение в Springdoc OpenAPI в Spring Boot

Хотите автоматически документировать свои REST API на Spring Boot?

Используйте Springdoc OpenAPI для генерации интерактивного Swagger UI с минимальной конфигурацией. ✌️

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Базовые понятия метрик производительности

> Latency (Задержка) – Время, необходимое для выполнения одного запроса или операции.

> Throughput (Пропускная способность) – Количество операций в секунду (например, запросов/сек, транзакций/сек).

> P95 / P99 – Перцентильные метрики, показывающие задержку в худших 5% или 1% случаев.

> Tail Latency – Задержка самых медленных запросов (например, 99-й перцентиль); критично для UX.

> Cold Start – Начальная задержка при запуске системы "с нуля" (например, AWS Lambda).

> Warm Start – Повторное использование уже инициализированного сервиса для снижения задержки старта.

> TTFB– Время между отправкой запроса и получением первого байта ответа.

> RPS – Часто используемая метрика пропускной способности API/сервера.

> QPS – Аналог RPS, но чаще применяется к базам данных и поисковым системам.

> Error Rate – Процент запросов, завершившихся ошибкой (например, 5xx или 4xx).

> Apdex Score – Метрика удовлетворённости пользователей: сколько запросов были быстрыми, терпимыми или медленными.

> SLA – Обещанный провайдером уровень доступности или производительности.

> SLO – Внутренняя целевая метрика производительности.

> SLI – Фактически измеренное значение (например, «99.95% запросов быстрее 500 мс»).

> Resource Utilization – Нагрузка на CPU, память, диск и сеть.

> GC Pause Time – Время, в течение которого приложение приостанавливается для сборки мусора.

> Throughput vs Latency Tradeoff – Увеличение числа запросов может снизить задержку... до определённого момента.

> Jank – Подвисания/дёргания при отрисовке на фронтенде (часто вызвано долгими задачами или перерасчётами стилей).

> CPU Throttling – Ограничения по CPU, например, в контейнерах или облачных окружениях.

> I/O Wait Time – Время, которое CPU тратит в ожидании операций ввода/вывода.

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

> CLS – Измеряет, насколько элементы смещаются при загрузке.

> FPS – Ключевая метрика визуальной производительности (особенно в играх и анимациях).

> Memory Footprint – Объём памяти, используемый системой/процессом при обычной нагрузке.

> Throttling & Backpressure – Механизмы замедления клиентов/систем при высокой нагрузке для стабилизации.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Инженеры из QA.GURU придержали пару мест на свой вебинар для продвинутых автоматизаторов!

Зарегистрироваться для бесплатного участия можно до конца недели.

Тема встречи: «Разработка автотеста с JUnit Extension: первый шаг за пределы рутинного тестирования».

Ждут тех, кто уже пишет на Java и хочет прокачаться в архитектуре автотестов.

Спикер — Дмитрий Тучс, Head of QA в Dodo Engineering, инженер с опытом с 2009 года. Член программных комитетов CodeFest, CodeTalks, EpicHey!, E-CODE. Бэкграунд в QA, Java, аналитике и проектном менеджменте с 2009 года.

Что будет на вебинаре:

— Учебный проект Niffler: микросервисная архитектура и ключевые технические решения.

— Разница между black box и white box тестами.

— Напишете JUnit Extension для генерации тестовых данных через API и демонстрационный тест.

— Соберёте каркас E2E-проекта: конфиги, page objects, API-клиенты, DTO и другие ключевые компоненты.

🎁 Участников встречи ждет полезный подарок, карьерный гайд.

Занимайте последние места!

Реклама. Рекламодатель: ИП Васенков Станислав Олегович, ИНН 774335827403, erid: 2Vtzqws57GJ
Решение задачи LeetCode #57 “Insert Interval” на Java

Читать подробнее

👉 Java Portal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM