Java Ready | Программирование
8.91K subscribers
1.22K photos
60 videos
1 file
597 links
Авторский канал по разработке на Java.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

Реклама на бирже: https://telega.in/c/java_ready
Download Telegram
👩‍💻 Работаем с TAR-архивами!

TAR — популярный формат в Linux и серверной среде. В Java с ним удобно работать потоково, читать архив поэлементно, извлекать файлы и обрабатывать данные без загрузки всего архива в память.

В этом посте:
Подключаем Commons Compress;

Читаем TAR-архив через поток;

Извлекаем файлы.


Такой подход подходит для бэкапов и любых задач, где важна производительность и контроль памяти.

👉 Java Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥65👍4🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
✍️ Gitbook — учебник с примерами кода и подробными объяснениями!

Небольшой, но очень полезный материал по основам Java. Разбираются примитивные типы, ссылочные типы, строки, классы-оболочки и перечисления, всё с примерами кода и пояснениями.
Хороший вариант, если нужно быстро повторить базу или закрыть пробелы перед дальнейшим изучением языка.

📌 Оставляю ссылочку: gitbook.io

👉 Java Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍85🤝1
Сериализация настроек!

Чтобы настройки приложения не терялись после перезапуска их удобно сохранять в файл и загружать обратно при старте.

Создаём класс настроек:
class Settings implements Serializable {
String theme;
int fontSize;
}


Сохраняем настройки в файл:
ObjectOutputStream out =
new ObjectOutputStream(new FileOutputStream("settings.dat"));

out.writeObject(settings);
out.close();


Загружаем настройки при запуске:
ObjectInputStream in =
new ObjectInputStream(new FileInputStream("settings.dat"));

Settings loaded = (Settings) in.readObject();
in.close();


🔥 Теперь изменения сохраняются между перезапусками приложения.

👉 Java Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍5🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
FlowchartAI — это бесплатный AI-генератор блок-схем, который из текста или кода автоматически строит диаграмму. Он анализирует твой ввод (описание процесса/алгоритма или код) и превращает его в визуальную блок-схему, которую можно смотреть прямо в браузере без регистрации.

📌 Оставляю ссылочку: flowchartai.org

👉 Java Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥126👍5
Собственный HTTP-сервер на чистой Java!

Сделаем сервер, который отвечает JSON и принимает простой запрос.

Задаём порт и создаём HTTP-сервер:
int port = 8080;
var server = com.sun.net.httpserver.HttpServer.create(
new java.net.InetSocketAddress(port), 0
);


Добавляем эндпоинт /health, который отдаёт JSON:
server.createContext("/health", ex -> {
var json = "{\"status\":\"ok\"}";
ex.getResponseHeaders().add("Content-Type", "application/json; charset=utf-8");
ex.sendResponseHeaders(200, json.getBytes().length);
ex.getResponseBody().write(json.getBytes());
ex.close();
});


Добавляем эндпоинт /echo:
server.createContext("/echo", ex -> {
var q = ex.getRequestURI().getQuery(); // msg=hello
var msg = (q != null && q.startsWith("msg=")) ? q.substring(4) : "empty";
var json = "{\"msg\":\"" + msg + "\"}";
ex.getResponseHeaders().add("Content-Type", "application/json; charset=utf-8");
ex.sendResponseHeaders(200, json.getBytes().length);
ex.getResponseBody().write(json.getBytes());
ex.close();
});


Запускаем сервер и задаём пул потоков:
server.setExecutor(java.util.concurrent.Executors.newFixedThreadPool(4));
server.start();
System.out.println("Server started on http://localhost:" + port);


🔥 В итоге получаем работающий HTTP-сервер с JSON-эндпоинтами без фреймворков.

👉 Java Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍64
👩‍💻 Работаем с объектами!

Каждый объект имеет идентичность, состояние и поведение. Методы сравнения и представления определяют, как объекты ведут себя в коллекциях, логировании и бизнес-логике. Ошибки в equals или hashCode могут привести к трудноуловимым багам.

Разобравшись в различии между ссылкой и содержимым, а также в механизме строкового представления, разработчик начинает лучше понимать модель памяти и принципы объектно-ориентированного подхода. Это база, на которой строится корректный и предсказуемый код.

👉 Java Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🤝97👍3
Обработка больших файлов!

Когда файл весит сотни мегабайт, читать его целиком в память опасно. Правильный подход обрабатывать кусками.

Открываем файл через буфер:
BufferedInputStream in =
new BufferedInputStream(new FileInputStream("big.bin"));


Читаем кусками:
byte[] buffer = new byte[64 * 1024];
int read = in.read(buffer);


Крутим цикл, пока есть данные:
while ((read = in.read(buffer)) != -1) {
total += read;
}


Закрываем ресурс:
in.close();


🔥 Так можно считать размер, хеш, статистику, искать сигнатуры не загружая файл целиком.

👉 Java Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍65🔥4
📂 Напоминалка по Java Virtual Threads!

Виртуальные потоки позволяют запускать огромное количество задач параллельно с минимальными накладными расходами по сравнению с обычными потоками ОС.

На картинке — принцип работы: виртуальные потоки создаются в программе, JVM планирует их выполнение поверх нескольких platform-потоков (carrier threads), а уже они выполняются операционной системой.

Сохрани, чтобы не забыть!

👉 Java Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍7🔥6🤝2
Генерация API-документации из аннотаций!

Когда API растёт, документация быстро устаревает. Решение простое, хранить описание рядом с методами в аннотациях и генерировать доку автоматически.

Создаём аннотацию для эндпоинтов:
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD)
@interface ApiRoute {
String method();
String path();
String desc() default "";
}


Помечаем методы аннотацией:
@ApiRoute(method = "GET", path = "/health", desc = "Проверка статуса сервиса")
void health() {}

@ApiRoute(method = "POST", path = "/login", desc = "Логин по паролю")
void login() {}


Сканируем методы через reflection и собираем Markdown:
var sb = new StringBuilder("# API\n\n");
for (var m : MyApi.class.getDeclaredMethods()) {
var a = m.getAnnotation(ApiRoute.class);
if (a == null) continue;
sb.append("- **").append(a.method()).append(" ").append(a.path()).append("**\n")
.append(" ").append(a.desc()).append("\n\n");
}


Сохраняем документацию в файл:
java.nio.file.Files.writeString(
java.nio.file.Path.of("API.md"),
sb.toString()
);


В итоге API,md генерится из кода и всегда соответствует реальным эндпоинтам.

👉 Java Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍85🔥4
📂 Напоминалка: как работает Java!

Например, пишешь код в .java файле, компилятор превращает его в байткод .class, а затем JVM загружает классы, проверяет их и выполняет — интерпретируя или компилируя в нативный код через JIT.

На картинке упрощенная схема — путь Java-программы от исходников до запуска.

Сохрани, чтобы не забыть!

👉 Java Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍9🔥8
👩‍💻 Работа с датами — один из самых нужных вещей!

Создание, сравнение, форматирование и изменение дат выполняются ежедневно: отчёты, фильтрация данных, дедлайны, подписки и логирование. Современный API java.time делает эти операции читаемыми и избавляет от ошибок, связанных со старыми классами.

Понимание принципов неизменяемости и методов изменения дат позволяет писать предсказуемый код без неожиданных побочных эффектов.


👉 Java Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥6🤝65
This media is not supported in your browser
VIEW IN TELEGRAM
💅 Ultimate Java Resources — масштабная база знаний по Java в одном репозитории!

Здесь собраны сотни примеров и материалов по ключевым направлениям: структуры данных, алгоритмы, ООП, многопоточность, сетевое программирование, безопасность, Android-разработка и даже основы машинного обучения. Репозиторий охватывает путь от базового синтаксиса до прикладных проектов и задач уровня собеседований.

Оставляю ссылочку: GitHub 📱

👉 Java Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥117👍6
Планировщик задач!

Когда нужно запускать код по расписанию, не надо городить циклы и sleep. В Java для этого есть планировщик.

Создаём планировщик:
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();


Запуск задачи с задержкой:
scheduler.schedule(() -> System.out.println("Задача выполнена"),
5, TimeUnit.SECONDS);


Запуск задачи каждые N секунд:
scheduler.scheduleAtFixedRate(() -> System.out.println("Тик"),
0, 3, TimeUnit.SECONDS);


Остановка планировщика:
scheduler.shutdown();


🔥
Идеально для фоновых задач: автоочистка, пинги, бэкапы, обновления.

👉 Java Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥85