При работе с файлами из разных систем и источников важно корректно определить их кодировку перед чтением.
В этой задаче:
• Анализируем содержимое;
• Используем детектор кодировки;
• Получаем кодировку.
Такой подход особенно полезен при импорте файлов,
CSV и данных из внешних систем.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤4👍4
В Java есть 8 примитивных типов от
byte до boolean. Каждый из них имеет фиксированный размер, диапазон значений и предназначение.На картинке собраны все типы с примерами и размерами.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍7🔥5
Работаем с конфигами!
Хранить настройки прямо в коде это плохая идея. Гораздо удобнее выносить их в конфиг и менять без перекомпиляции.
Создаём конфиг:
Загружаем конфиг в приложении:
Используем значения в коде:
🔥 Таким образом можно легко управлять работай кода не перезапуская программу.
👉 Java Ready | #совет
Хранить настройки прямо в коде это плохая идея. Гораздо удобнее выносить их в конфиг и менять без перекомпиляции.
Создаём конфиг:
app.name=JavaReady
app.port=8080
debug=true
Загружаем конфиг в приложении:
Properties props = new Properties();
props.load(new FileInputStream("app.properties"));
Используем значения в коде:
String name = props.getProperty("app.name");
int port = Integer.parseInt(props.getProperty("app.port"));Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
Если тебе сложно представить, как работает бинарный поиск, быстрая сортировка или структура «куча» — этот сайт сделан для тебя.
Visualgo позволяет буквально увидеть каждую операцию: шаг за шагом, с пояснениями и анимацией.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍7❤4
Создание меню с выбором действий!
Консольное меню помогает быстро управлять программой без
Создаём сканер и флаг, чтобы меню работало в цикле:
Печатаем меню и читаем выбор пользователя:
Обрабатываем команды через
Закрываем Scanner после выхода из меню:
🔥 Так можно собрать полноценную CLI-утилиту которой сможет управлять пользователь.
👉 Java Ready | #практика
Консольное меню помогает быстро управлять программой без
GUI и сложного кода.Создаём сканер и флаг, чтобы меню работало в цикле:
var sc = new java.util.Scanner(System.in);
boolean run = true;
Печатаем меню и читаем выбор пользователя:
while (run) {
System.out.println("1) Время 2) Сумма 0) Выход");
System.out.print("Выбор: ");
var cmd = sc.nextLine().trim();Обрабатываем команды через
switch: switch (cmd) {
case "1" -> System.out.println(java.time.LocalTime.now());
case "2" -> System.out.println(10 + 20);
case "0" -> run = false;
default -> System.out.println("Неизвестная команда");
}
System.out.println();
}Закрываем Scanner после выхода из меню:
sc.close();
🔥 Так можно собрать полноценную CLI-утилиту которой сможет управлять пользователь.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍5🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь подробно разбираются ключевые вещи, с которыми сталкиваешься в Linux каждый день: как работают процессы и сигналы, что происходит с памятью, как устроена файловая система, как читать права доступа и управлять ими. Каждая тема идёт с примерами команд и пояснениями.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤6👍4😁1
Покажись, IP!
Определяем местоположение любого IP прямо из терминала с помощью
Юзаем бесплатный API от
Запрос предельно прост:
В ответ получаем JSON с информацией о стране, городе, провайдере и других параметрах.
Подключаем
Результат будет отображён построчно: страна, регион, город и провайдер.
Для удобства можно оформить это в виде функции:
И вызвать:
🔥 Отличный способ быстро проверять подозрительные IP во время пентеста или анализа логов.
👉 Java Ready | #практика
Определяем местоположение любого IP прямо из терминала с помощью
curl и jq — без сторонних библиотек, всё в консоли.Юзаем бесплатный API от
ip-api.com.Запрос предельно прост:
curl -s http://ip-api.com/json/1.1.1.1
В ответ получаем JSON с информацией о стране, городе, провайдере и других параметрах.
Подключаем
jq, чтобы аккуратно вывести нужные поля из ответа:curl -s http://ip-api.com/json/1.1.1.1 | jq '.country, .regionName, .city, .isp'
Результат будет отображён построчно: страна, регион, город и провайдер.
Для удобства можно оформить это в виде функции:
geoip() {
curl -s "http://ip-api.com/json/$1" | jq '.query, .country, .city, .isp'
}И вызвать:
geoip 8.8.8.8
🔥 Отличный способ быстро проверять подозрительные IP во время пентеста или анализа логов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4🔥4
Большие файлы нельзя читать целиком в оперативной памяти, ведь она может закончиться. Вместо этого лучше читать файл чанками.
В этом посте:
• Создаём MessageDigest;
• Читаем файл;
• Получаем результат.
Такой подход используют для проверки целостности загрузок, поиска дубликатов и контроля файловых операций.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤6👍6🤝1
ArrayList это удобная коллекция для работы с динамическими списками в Java. На картинке собраны основные методы: от инициализации списка до сортировки, удаления и итерации элементов.Сохрани, чтобы всегда быть в курсе!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥6👍4
Система плагинов!
Когда хочешь расширить функционал приложения без перекомпиляции, хорошо использовать плагины. В Java можно динамически загружать классы, используя ClassLoader.
Создаём интерфейс плагина:
Создаём класс плагина:
Реализуем кастомный ClassLoader для загрузки плагинов:
Загружаем плагин динамически:
Таким образом, можно добавлять новые плагины без перезапуска приложения и динамически загружать новые классы.
👉 Java Ready | #совет
Когда хочешь расширить функционал приложения без перекомпиляции, хорошо использовать плагины. В Java можно динамически загружать классы, используя ClassLoader.
Создаём интерфейс плагина:
public interface Plugin {
void execute();
}Создаём класс плагина:
public class MyPlugin implements Plugin {
@Override
public void execute() {
System.out.println("Плагин загружен!");
}
}Реализуем кастомный ClassLoader для загрузки плагинов:
public class PluginClassLoader extends ClassLoader {
private final Path dir;
public PluginClassLoader(Path dir) {
this.dir = dir;
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
try {
Path file = dir.resolve(name.replace('.', '/') + ".class");
byte[] bytes = Files.readAllBytes(file);
return defineClass(name, bytes, 0, bytes.length);
} catch (IOException e) {
throw new ClassNotFoundException(name, e);
}
}
}Загружаем плагин динамически:
Path pluginDir = Path.of("plugins");
PluginClassLoader loader = new PluginClassLoader(pluginDir);
Class<?> pluginClass = loader.loadClass("MyPlugin");
Plugin plugin = (Plugin) pluginClass.getDeclaredConstructor().newInstance();
plugin.execute();Таким образом, можно добавлять новые плагины без перезапуска приложения и динамически загружать новые классы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5🔥4
Статья включает:
• Объяснения поэтапной миграция с монолита на микросервисы
Централизованное управление API запросами;
• Управление микросервисами с помощью сетевой инфраструктуры.
🔊 Читать статью на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍5🔥4
Реализация простого калькулятора!
Калькулятор это классическая задача для консольных приложений.
Создаём сканер для ввода данных и основные переменные:
Печатаем меню и принимаем ввод от пользователя:
Обрабатываем операцию через
Выводим результат и предлагаем продолжить или выйти:
🔥 Мы создали простой калькулятор с выбором операции и обработкой ошибок.
👉 Java Ready | #практика
Калькулятор это классическая задача для консольных приложений.
Создаём сканер для ввода данных и основные переменные:
var sc = new java.util.Scanner(System.in);
boolean run = true;
Печатаем меню и принимаем ввод от пользователя:
while (run) {
System.out.println("Введите первое число:");
double num1 = sc.nextDouble();
System.out.println("Выберите операцию (+, -, *, /):");
String operator = sc.next();
System.out.println("Введите второе число:");
double num2 = sc.nextDouble();Обрабатываем операцию через
switch:double result = 0;
switch (operator) {
case "+" -> result = num1 + num2;
case "-" -> result = num1 - num2;
case "*" -> result = num1 * num2;
case "/" -> {
if (num2 != 0) {
result = num1 / num2;
} else {
System.out.println("Ошибка: деление на ноль");
continue;
}
}
default -> System.out.println("Неверная операция");
}
Выводим результат и предлагаем продолжить или выйти:
System.out.println("Результат: " + result);
System.out.println("Хотите продолжить? (да/нет)");
String answer = sc.next();
if (answer.equalsIgnoreCase("нет")) {
run = false;
}
}
sc.close();
🔥 Мы создали простой калькулятор с выбором операции и обработкой ошибок.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥6👍5
Многопоточная загрузка!
Когда нужно быстро скачать много файлов один поток превращает всё в очередь. Решение простое, грузить параллельно через пул потоков.
Создаём пул потоков:
Кидаем задачи на скачивание:
Дожидаемся завершения и закрываем пул:
Итог такой, что несколько загрузок идут одновременно.
👉 Java Ready | #совет
Когда нужно быстро скачать много файлов один поток превращает всё в очередь. Решение простое, грузить параллельно через пул потоков.
Создаём пул потоков:
ExecutorService pool = Executors.newFixedThreadPool(4);
Кидаем задачи на скачивание:
pool.submit(() -> download(url1));
pool.submit(() -> download(url2));
pool.submit(() -> download(url3));
Дожидаемся завершения и закрываем пул:
pool.shutdown();
pool.awaitTermination(1, TimeUnit.MINUTES);
Итог такой, что несколько загрузок идут одновременно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤6🔥5
Делаем игру “Угадай число”
Компьютер загадывает число, а игрок пытается угадать, получая подсказки “больше/меньше”.
Задаём случайное число и готовим ввод с консоли:
Запускаем цикл попыток и читаем ответ игрока:
Сравниваем и даём подсказку “выше/ниже”:
Выводим победу и число попыток:
Получилась полноценная мини-игра, у нас выбирается случайное число и выводятся подсказки.
👉 Java Ready | #практика
Компьютер загадывает число, а игрок пытается угадать, получая подсказки “больше/меньше”.
Задаём случайное число и готовим ввод с консоли:
var rnd = new java.util.Random();
int secret = rnd.nextInt(100) + 1; // 1..100
var sc = new java.util.Scanner(System.in);
int tries = 0;
Запускаем цикл попыток и читаем ответ игрока:
while (true) {
System.out.print("Введите число 1..100: ");
int guess = sc.nextInt();
tries++;Сравниваем и даём подсказку “выше/ниже”:
if (guess < secret) System.out.println("Больше!");
else if (guess > secret) System.out.println("Меньше!");
else break;
}Выводим победу и число попыток:
System.out.println("Угадал! Число: " + secret);
System.out.println("Попыток: " + tries);
sc.close();Получилась полноценная мини-игра, у нас выбирается случайное число и выводятся подсказки.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍7🔥4🤝2