Java Portal | Программирование
12.4K subscribers
952 photos
70 videos
32 files
765 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
加入频道
Тема для освоения программирования на java

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
😁29👍52👀2
Дженерики в 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
👍75
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
🔥53
Хотите добавить динамическое поведение в ваши Java-классы?

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

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

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

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

Вот отличный кандидат: 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
6🔥4👍2😁1🤣1
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
👍5🔥2
Типы массивов в 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
5🔥1
Что такое SSO (Single Sign-On)?

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥1
Инструменты повышения продуктивности и качества кода в 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
15
Совет по Java : Не полагайтесь слепо на сборщик мусора — утечки памяти всё ещё возможны

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

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


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

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

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

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

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

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

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3
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
7👍6🔥2
Техники аутентификации

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

> Аутентификация без пароля: В этой технике пользователю не нужно вводить пароль; вместо этого он получает одноразовый пароль (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
5👍5🔥3
Введение в Springdoc OpenAPI в Spring Boot

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

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

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

> 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
7👍7🔥2
Решение задачи LeetCode #57 “Insert Interval” на Java

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

👉 Java Portal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥2
Флаги управления памятью JVM

-Xms
— устанавливает начальный размер кучи (heap). Пример использования: -Xms512m. Это предотвращает частое перераспределение памяти при прогреве приложения, что может ускорить старт и стабилизировать поведение.

-Xmx — задаёт максимальный размер кучи. Пример: -Xmx2g. Критически важно для ограничения потребления памяти и предотвращения ошибок OutOfMemoryError (OOM), особенно в долгоживущих или нагруженных приложениях.

-Xmn — определяет размер молодого поколения (Young Generation) в куче. Пример: -Xmn256m. Точная настройка этого параметра позволяет оптимизировать частоту малых сборок мусора (Minor GC), что напрямую влияет на производительность.

-XX:MaxMetaspaceSize — ограничивает максимальный размер области метаданных классов (Metaspace). Пример: -XX:MaxMetaspaceSize=512m. Помогает избежать чрезмерного потребления памяти при интенсивной загрузке классов, особенно в приложениях с большим количеством библиотек или плагинов.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84🔥2
Все типы Map, которые стоит знать в Java

HashMap
↳ Не сохраняет порядок элементов. Не потокобезопасен. Допускает один null ключ и несколько null значений. Основан на хеш-таблице. Используется как структура общего назначения с быстрым доступом к данным.

LinkedHashMap
↳ Сохраняет порядок вставки элементов. Не потокобезопасен. Допускает null ключи и значения. Построен на основе хеш-таблицы и связанного списка. Подходит, когда важен порядок добавления элементов.

TreeMap
↳ Хранит элементы в отсортированном порядке — по натуральному порядку или через Comparator. Не потокобезопасен. Не допускает null ключей, но допускает null значения. Реализован на базе красно-черного дерева. Используется, когда нужен доступ к отсортированным ключам.

Hashtable
↳ Не гарантирует порядок. Является потокобезопасной (устаревший подход). Не допускает ни null ключей, ни null значений. Построен на хеш-таблице. Используется в легаси-коде, где требуется синхронизация.

ConcurrentHashMap
↳ Не сохраняет порядок. Потокобезопасен (современная реализация). Не допускает null ключей и значений. Построен на сегментированной хеш-таблице (в Java 7) или использует блокировку бакетов (в Java 8+). Используется для высокопроизводительного конкурентного доступа.

WeakHashMap
↳ Не сохраняет порядок. Не потокобезопасен. Допускает null ключи и значения. Использует хеш-таблицу со слабыми ссылками на ключи. Применяется для кэшей, где ключи могут быть удалены сборщиком мусора, если больше нигде не используются.

IdentityHashMap
↳ Не сохраняет порядок. Не потокобезопасен. Допускает null ключи и значения. Реализован на основе хеш-таблицы. Отличается тем, что сравнивает ключи по ссылке (==), а не по значению (equals()), что может быть полезно в специфических случаях.

EnumMap
↳ Сохраняет порядок enum-констант. Не потокобезопасен. Не допускает null ключей, но допускает null значения. Реализован на основе массива. Эффективен для отображения enum-ключей на значения.


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
6🤣1
Профилирование с помощью Spring Boot Actuator

Spring Boot Actuator предоставляет эндпоинты, такие как /actuator/metrics, /actuator/health и /actuator/heapdump.

В связке с Micrometer, Prometheus и Grafana позволяет визуализировать производительность вашего приложения.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍4