Например, HTTP/1.1 использует постоянные соединения, HTTP/2 умеет мультиплексировать запросы в одном TCP-канале, а HTTP/3 работает поверх QUIC и UDP.
На картинке — наглядная эволюция HTTP от первых версий до современных стандартов.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🤝7❤6
Определение языка текста!
Иногда нужно понять язык сообщения. В Java можно использовать библиотеку определения языка без сложной логики.
Добавляем зависимость в Gradle:
Создаём детектор языка:
Передаём текст на определение языка:
Пробуем несколько примеров:
Подходит для чатов, анализа текста и мультиязычных приложений.
👉 Java Ready | #практика
Иногда нужно понять язык сообщения. В Java можно использовать библиотеку определения языка без сложной логики.
Добавляем зависимость в Gradle:
implementation "org.apache.tika:tika-core:2.9.2"
Создаём детектор языка:
var detector = new org.apache.tika.language.detect.LanguageDetector();
detector.loadModels();
Передаём текст на определение языка:
var result = detector.detect("Bonjour tout le monde");
System.out.println("Язык: " + result.getLanguage());Пробуем несколько примеров:
System.out.println(detector.detect("Hello world").getLanguage());
System.out.println(detector.detect("Привет мир").getLanguage());
System.out.println(detector.detect("Hola amigo").getLanguage());
В итоге получаем автоматическое определение языка строки.Подходит для чатов, анализа текста и мультиязычных приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍8🔥4
Нужно быстро упаковать папку в один файл? Пишем архиватор, рекурсивно обходим директорию, создаём ZipEntry для каждого файла и сохраняем структуру.
В этой задаче:
• Открываем ZipOutputStream;
• Обходим папку;
• Добавляем файлы в ZIP.
Потоковая запись снижает потребление памяти и позволяет упаковывать даже очень крупные наборы файлов.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤5👍4🤝1
Кеширование данных в памяти
Если одни и те же данные запрашиваются часто, каждый раз обращаться к БД, API или делать тяжёлые вычисления это потеря времени.
Создаём простое хранилище кеша:
Метод получения данных с кешированием:
Имитация тяжёлой операции:
Первый вызов медленный, второй быстрый:
Такой подход используют для: результатов запросов к БД, API-ответов, вычислений, конфигов.
👉 Java Ready | #совет
Если одни и те же данные запрашиваются часто, каждый раз обращаться к БД, API или делать тяжёлые вычисления это потеря времени.
Создаём простое хранилище кеша:
Map<String, String> cache = new HashMap<>();
Метод получения данных с кешированием:
String getData(String key) {
if (cache.containsKey(key)) {
System.out.println("Найдено в кеше");
return cache.get(key);
}
System.out.println("Данных нет — выполняю долгую операцию...");
String value = slowOperation(key);
cache.put(key, value);
return value;
}Имитация тяжёлой операции:
String slowOperation(String key) {
try { Thread.sleep(2000); } catch (InterruptedException ignored) {}
return "Data for " + key;
}Первый вызов медленный, второй быстрый:
System.out.println(getData("user:42"));
System.out.println(getData("user:42"));Такой подход используют для: результатов запросов к БД, API-ответов, вычислений, конфигов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍4🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Репозиторий представляет собой структурированную шпаргалку по фундаментальным темам языка: ООП, полиморфизм, коллекции, исключения, сериализация, ключевые слова, типы данных и распространённые особенности поведения Java. Материал ориентирован на быстрое повторение теории.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥8🤝7❤2
Например,
GET используется для получения данных, POST — для создания новых записей, а DELETE — для удаления.На картинке — 9 самых популярных методов HTTP-запросов, которые стоит держать под рукой каждому разработчику.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥8❤5
Защита от повторных запросов!
В API часто бывает повторы задач, что бы защититься от этого можно использовать Idempotency-key.
Создаём хранилище ключей с временем истечения:
Функция для проверки/выполнения операции по ключу:
Если ключ новый выполняем действие и сохраняем ответ:
Пример: один и тот же ключ возвращает один и тот же ответ:
Теперь повторные запросы с тем же ключом не выполняют операцию повторно.
👉 Java Ready | #практика
В API часто бывает повторы задач, что бы защититься от этого можно использовать Idempotency-key.
Создаём хранилище ключей с временем истечения:
record Entry(String response, long expireAt) {}
var store = new java.util.concurrent.ConcurrentHashMap<String, Entry>();Функция для проверки/выполнения операции по ключу:
String handle(String key, java.util.function.Supplier<String> action, long ttlMs) {
long now = System.currentTimeMillis();
var saved = store.get(key);
if (saved != null && saved.expireAt() > now) return saved.response();Если ключ новый выполняем действие и сохраняем ответ:
var result = action.get();
store.put(key, new Entry(result, now + ttlMs));
return result;
}
Пример: один и тот же ключ возвращает один и тот же ответ:
var key = "pay:order-42";
var r1 = handle(key, () -> "OK#" + java.util.UUID.randomUUID(), 60000);
var r2 = handle(key, () -> "OK#" + java.util.UUID.randomUUID(), 60000);
System.out.println(r1);
System.out.println(r2);
Теперь повторные запросы с тем же ключом не выполняют операцию повторно.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥4👎2
Например, HTTP передаёт данные в открытом виде, без шифрования. HTTPS работает поверх TLS и защищает соединение: выполняется проверка сертификата, обмен ключами и дальнейшая передача данных в зашифрованном виде.
На картинке — ключевые этапы установления соединения.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍6🔥4
Змейка в консоли
Классический способ прокачать логику, циклы и работу с вводом это написать простую игру прямо в терминале.
Поле и стартовые координаты:
Еда:
Чтение управления (WASD):
Двигаем голову змейки:
Проверка стен:
Если съели еду спавним новую и добавляем очки:
Отрисовка кадра:
Код очень простой, но подойдёт для новичков.
👉 Java Ready | #совет
Классический способ прокачать логику, циклы и работу с вводом это написать простую игру прямо в терминале.
Поле и стартовые координаты:
int width = 20, height = 10;
int x = width / 2, y = height / 2;
Еда:
int foodX = (int) (Math.random() * width);
int foodY = (int) (Math.random() * height);
Чтение управления (WASD):
char key = sc.nextLine().toLowerCase().charAt(0);
Двигаем голову змейки:
if (key == 'w') y--;
if (key == 's') y++;
if (key == 'a') x--;
if (key == 'd') x++;
Проверка стен:
if (x < 0 || x >= width || y < 0 || y >= height) {
System.out.println("Game Over");
break;
}Если съели еду спавним новую и добавляем очки:
if (x == foodX && y == foodY) {
score++;
foodX = (int) (Math.random() * width);
foodY = (int) (Math.random() * height);
}Отрисовка кадра:
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (i == y && j == x) System.out.print("O");
else if (i == foodY && j == foodX) System.out.print("*");
else System.out.print(".");
}
System.out.println();
}
System.out.println("Score: " + score);Код очень простой, но подойдёт для новичков.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍7🔥5👎2
This media is not supported in your browser
VIEW IN TELEGRAM
Репозиторий представляет собой структурированный список качественных материалов для Java-разработчиков: инструменты сборки (Maven, Gradle), статьи, руководства, видео-лекции и практические разборы. Удобно для обучения, повторения и поиска источников.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤6🔥6
Вместо скрытых проверок и неожиданных NullPointerException код становится явным: значение либо есть, либо его нет. Это упрощает чтение логики и уменьшает количество защитных условий.
Правильное использование Optional делает API понятнее и безопаснее. Метод сразу показывает, что результат может отсутствовать, а цепочка вызовов позволяет обрабатывать этот случай аккуратно.Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥7👍6🤝3
This media is not supported in your browser
VIEW IN TELEGRAM
Это обучающий портал, где подробно разобраны синтаксис, ООП, коллекции, исключения, потоки ввода-вывода, многопоточность и другое. Материал подаётся структурированно, от основ языка до продвинутых тем и API. Почти в каждом разделе есть примеры кода, объяснение концепций и ссылки на официальную документацию.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍10🔥7
Timeout wrapper для операций!
Иногда операция может зависнуть, чтобы программа не ждала бесконечно, можно задать таймаут выполнения.
Если задача не успела она прерывается и возвращается ошибка.
Создаём пул потоков для выполнения задач:
Оборачиваем операцию в Future:
Пытаемся получить результат с таймаутом:
Если время вышло прерываем задачу:
Не забываем завершить пул потоков:
Теперь любая операция может выполняться с ограничением по времени.
👉 Java Ready | #практика
Иногда операция может зависнуть, чтобы программа не ждала бесконечно, можно задать таймаут выполнения.
Если задача не успела она прерывается и возвращается ошибка.
Создаём пул потоков для выполнения задач:
var pool = java.util.concurrent.Executors.newSingleThreadExecutor();
Оборачиваем операцию в Future:
var future = pool.submit(() -> {
Thread.sleep(2000); // имитация долгой операции
return "Готово";
});Пытаемся получить результат с таймаутом:
try {
var result = future.get(1, java.util.concurrent.TimeUnit.SECONDS);
System.out.println(result);
}Если время вышло прерываем задачу:
catch (java.util.concurrent.TimeoutException e) {
future.cancel(true);
System.out.println("Операция превысила лимит времени");
}Не забываем завершить пул потоков:
pool.shutdown();
Теперь любая операция может выполняться с ограничением по времени.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍4🔥4