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

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
加入频道
10 однострочников на Java, с которыми ты выглядишь более опытным

🔸Поменять две переменные местами > a = a + b - (b = a);

🔸Создать список > List.of("Apple", "Banana", "Cherry");

🔸Найти максимум из двух чисел > Math.max(a, b);

🔸Прочитать все строки из файла > Files.readAllLines(Path.of("file.txt"));

🔸Объединить список в строку > String.join(", ", fruits);

🔸Удалить null-значения > list.removeIf(Objects::isNull);

🔸Получить случайный элемент > list.get(new Random().nextInt(list.size()));

🔸Посчитать совпадения > list.stream().filter(x -> x > 10).count();

🔸Отсортировать по убыванию > list.sort(Comparator.reverseOrder());

🔸Проверить палиндром str.equals(new StringBuilder(str).reverse().toString());

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Нашёл годную визуализацию для тех, кто хочет на пальцах понять, как устроены LLM. Тут можно не просто почитать про слои моделей, а буквально пощупать их, покрутить со всех сторон в 3D

Есть GPT-2, nanoGPT, GPT-2 XL и GPT-3

Лучше запускать с компа, на мобиле не так красиво

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставить @Transactional везде подряд плохая практика — сначала разберись, когда он действительно нужен:

🔸Использовать @Transactional только в сервисном слое — Отделяет бизнес-логику от веб-логики

🔸Использовать транзакции на уровне методов — Даёт точный контроль и ясность

🔸Использовать @Transactional(readOnly = true) — Оптимизирует операции только для чтения

🔸Избегать @Transactional в репозиториях — Репозитории не должны управлять транзакциями

🔸Оставлять транзакционные методы public — Необходимо для работы Spring-прокси

🔸Логировать или отслеживать поведение транзакций — Помогает выявлять неожиданные проблемы

👉 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
Это просто огонь. В одном из следующих релизов jetbrains / intellijidea появится фича, которая позволяет в пару кликов сгенерировать JPA-энтити из существующей схемы БД

И ещё, мне сказали, что SpringData JDBC тоже скоро завезут 💪

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Java Generics — всё, что нужно знать

1. Box<T> → Обобщённый класс
• Используй, когда класс работает с любым типом (например, обёртка вокруг любого объекта, как Box<User>, Box<Integer>).

2. <T> void print(T val) → Обобщённый метод
• Используй, когда метод должен принимать любой тип (например, для печати любого объекта, логирования, сравнения и т.п.).

3. <T extends Number> → Ограниченный тип
• Называется верхней границей.
• Используй, когда тип должен быть подклассом чего-то (например, утилита для работы с int, double, float).

4. <T extends A & B> → Несколько ограничений
• Заставляет T реализовывать и A, и B.
• Используй, когда нужны обе особенности (например, сортировка объекта, который также требует валидации).

5. <?> → Неограниченный подстановочный тип
• Это означает неизвестный тип.
• Используй, когда не важен тип, нужно только читать (например, печать элементов из любого списка).

6. <? extends T> → Верхняя граница подстановочного типа
• Означает некоторый подкласс T.
• Используй при чтении из коллекции (например, чтение чисел из List<? extends Number> без модификации).

7. <? super T> → Нижняя граница подстановочного типа
• Означает некоторый суперкласс T.
• Используй при записи в коллекцию (например, добавление Integer в List<? super Integer>).

8. Правило PECS
• Producer Extends, Consumer Super.
• Используй extends для чтения, super для записи (например, API-вход против обработки ответа).

9. List list = new ArrayList(); → Сырой тип
• Это сырой тип.
• Избегай — тк теряется типовая безопасность (например, компилятор не поймает, если добавишь неверные типы).

10. Стирание типов
• Java удаляет всю информацию об обобщениях во время выполнения.
• Поэтому нельзя использовать T.class, new T(), или instanceof T (например, нельзя делать проверки или создавать объекты на основе T).

11. Обобщённый конструктор
<T> MyClass(T val) { }

• Используй, когда конструктору нужен обобщённый параметр, даже если сам класс не обобщённый (например, инициализация с динамическими типами).

12. Обобщённый интерфейс
interface Mapper<F, T> { T map(F input); }

• Используй при преобразовании одного типа в другой (например, DTO → сущность).

13. Нельзя использовать примитивы
• Нельзя List<int> — только List<Integer>.
• Используй обёртки (коллекции могут хранить только объекты, не примитивы).

14. Нельзя создавать массивы с обобщением
new T[] не работает.
• Используй List<T> вместо (например, динамические коллекции).

15. Нельзя использовать подстановочные типы для вставки
• Нельзя вставлять в List<? extends Number>.
• Используй <? super Number>, если нужна вставка (например, для пакетной обработки или модификации коллекции).

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
HTTP-концепции, которые должен знать каждый разработчик

> HTTP-методы — Определяют действие: GET (получить), POST (создать), PUT (заменить), PATCH (обновить), DELETE (удалить).

> Коды статуса — Сообщают, что произошло: 2xx (успех), 4xx (ошибка клиента), 5xx (ошибка сервера).

> Заголовки — Пары ключ-значение, которые передают метаинформацию (например, Content-Type, Authorization, Cache-Control).

> Тело запроса — Фактические данные, отправляемые в POST/PUT/PATCH-запросах (часто в формате JSON или form-data).

> Параметры запроса — Пары ключ-значение в URL после ?, используются для фильтрации, сортировки, поиска.

> Параметры пути — Динамические части URL (например, /user/:id), используются для идентификации ресурсов.

> Идемпотентность — Повтор одного и того же запроса (например, PUT или DELETE) приводит к одному и тому же результату.

> Безопасные методы — Методы, такие как GET и HEAD, которые не должны изменять состояние сервера.

> HTTP/1.1 vs HTTP/2 vs HTTP/3 — Новые версии ускоряют работу за счёт мультиплексирования, бинарных фреймов и протокола QUIC.

> Keep-Alive — Повторное использование TCP-соединений для нескольких запросов для снижения задержек.

> Content-Type — Указывает серверу/клиенту, в каком формате тело запроса (например, application/json).

> Accept — Указывает серверу, какие форматы ответа клиент может обрабатывать.

> Authorization — Несёт учетные данные (токены, basic auth) для аутентификации запросов.

> Кэширование — Использует заголовки вроде Cache-Control, ETag, Last-Modified для снижения нагрузки и задержек.

> ETag — Уникальный хеш для версии ресурса; помогает в условных запросах и кэшировании.

> Редиректы (3xx) — Инструктируют клиент попробовать другой URL (например, 301, 302, 307).

> CORS — Управляет тем, какие источники могут обращаться к вашему API из браузера.

> Preflight-запросы — Запросы типа OPTIONS, которые браузер отправляет перед некоторыми CORS-запросами для проверки разрешений.

> Туннелирование HTTP-методов — Некоторые прокси пропускают только GET/POST, поэтому PUT/DELETE инкапсулируются через POST + _method.

> User-Agent — Заголовок, который браузеры отправляют для идентификации (часто подделывается или изменяется).

> Referer — Заголовок, указывающий URL предыдущей страницы (используется в аналитике и безопасности).

> Host Header — Указывает домен, на который направлен запрос (важен при виртуальном хостинге).

> Connection Header — Управляет поведением соединения (например, close, keep-alive).

> HEAD-метод — Как GET, но возвращает только заголовки (без тела); полезен для проверки ресурсов.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
SQL Basics.pdf
102.8 KB
Держите годноту: подборка полезных шпаргалок по SQL

— Основы языка SQL
— SQL Joins
— Оконные функции
— SQL для анализа данных

Сохраняем и используем

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

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

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

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

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Техночат
Разыгрываем лучшие гаджеты года: iPhone 16 Pro Max на 256 ГБ, 15-дюймовый MacBook Air 16/256 ГБ и PlayStation 5 Pro!

Чтобы их получить, достаточно подписаться на:
• наш канал «Техночат»
• И на канал «Больше, чем экономика»

Нажимаете после этого на кнопку «Участвовать» и ждёте 2 июля — в этот день в 20:00 по московскому времени рандомайзер выберет трёх победителей. Первый получит айфон, второй — макбук, а третий — PlayStation.

Призы бесплатно вышлем в ближайший к вам пункт выдачи СДЭК, поэтому уточните, есть ли он в вашей стране.
Тема для освоения программирования на 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