Java for Beginner
675 subscribers
546 photos
155 videos
12 files
838 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
А он просто покурить вышел... 😂

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩‍💻

Какой блок используется для обработки исключений?
Anonymous Quiz
89%
try-catch
11%
if-else
0%
for
0%
while
Запуск внешних процессов и чтение вывода. Подробности о классе ProcessBuilder

1. Подробное описание класса ProcessBuilder

Класс ProcessBuilder предоставляет мощный инструмент для создания и управления внешними процессами. Он позволяет настраивать команды, аргументы, рабочий каталог, переменные окружения и перенаправление вывода.

Основные методы ProcessBuilder

command(String... command)
Назначение: Устанавливает команду и аргументы для выполнения.
Параметры: Команда и аргументы (например, "ls", "-l").

Пример:
ProcessBuilder processBuilder = new ProcessBuilder("ls", "-l");


start()
Назначение: Запускает процесс и возвращает объект Process.
Возвращаемое значение: Объект Process, который представляет запущенный процесс.


Пример:
Process process = processBuilder.start();


directory(File directory)
Назначение: Устанавливает рабочий каталог для процесса.
Параметры: Объект File, представляющий каталог.


Пример:
processBuilder.directory(new File("/path/to/directory"));


redirectOutput(ProcessBuilder.Redirect destination)
Назначение: Перенаправляет стандартный вывод процесса.
Параметры: Объект ProcessBuilder.Redirect, который может быть файлом или потоком.


Пример:
processBuilder.redirectOutput(ProcessBuilder.Redirect.to(new File("output.txt")));


redirectError(ProcessBuilder.Redirect destination)
Назначение: Перенаправляет вывод ошибок процесса.
Параметры: Объект ProcessBuilder.Redirect.


Пример:
processBuilder.redirectError(ProcessBuilder.Redirect.to(new File("error.txt")));


redirectInput(ProcessBuilder.Redirect source)
Назначение: Перенаправляет стандартный ввод процесса.
Параметры: Объект ProcessBuilder.Redirect.


Пример:
processBuilder.redirectInput(ProcessBuilder.Redirect.from(new File("input.txt")));


environment()
Назначение: Возвращает объект Map, представляющий переменные окружения процесса.
Возвращаемое значение: Map<String, String>, где ключ — имя переменной, значение — ее значение.


Пример:
Map<String, String> env = processBuilder.environment();
env.put("VAR_NAME", "value");


inheritIO()
Назначение: Наследует стандартный ввод, вывод и ошибки от текущего процесса.

Пример:
processBuilder.inheritIO();


2. Пример использования ProcessBuilder с перенаправлением вывода

import java.io.File;
import java.io.IOException;

public class ProcessBuilderRedirectExample {
public static void main(String[] args) {
try {
ProcessBuilder processBuilder = new ProcessBuilder("ls", "-l");

// Устанавливаем рабочий каталог
processBuilder.directory(new File("/path/to/directory"));

// Перенаправляем вывод в файл
processBuilder.redirectOutput(new File("output.txt"));

// Перенаправляем ошибки в файл
processBuilder.redirectError(new File("error.txt"));

// Запускаем процесс
Process process = processBuilder.start();

// Ждем завершения процесса
int exitCode = process.waitFor();
System.out.println("Процесс завершен с кодом: " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}


Объяснение:
Мы перенаправляем стандартный вывод и ошибки в файлы output.txt и error.txt.
Рабочий каталог процесса установлен на /path/to/directory.


#Java #Training #Medium #Process_API #ProcessBuilder
3. Пример использования переменных окружения

import java.io.IOException;
import java.util.Map;

public class ProcessBuilderEnvironmentExample {
public static void main(String[] args) {
try {
ProcessBuilder processBuilder = new ProcessBuilder("echo", "$VAR_NAME");

// Получаем переменные окружения
Map<String, String> env = processBuilder.environment();
env.put("VAR_NAME", "Hello, World!");

// Запускаем процесс
Process process = processBuilder.start();

// Чтение вывода
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println("Вывод: " + line);
}

int exitCode = process.waitFor();
System.out.println("Процесс завершен с кодом: " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}


Объяснение:
Мы добавляем переменную окружения VAR_NAME и используем ее в команде echo.

4. Пример наследования ввода-вывода

import java.io.IOException;

public class ProcessBuilderInheritIOExample {
public static void main(String[] args) {
try {
ProcessBuilder processBuilder = new ProcessBuilder("ls", "-l");

// Наследуем ввод, вывод и ошибки
processBuilder.inheritIO();

// Запускаем процесс
Process process = processBuilder.start();

// Ждем завершения процесса
int exitCode = process.waitFor();
System.out.println("Процесс завершен с кодом: " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}


Объяснение:
Мы используем inheritIO(), чтобы вывод и ошибки процесса отображались в консоли текущего процесса.

5. Пример обработки ошибок и вывода

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProcessBuilderErrorHandling {
public static void main(String[] args) {
try {
ProcessBuilder processBuilder = new ProcessBuilder("invalid_command");

// Запускаем процесс
Process process = processBuilder.start();

// Чтение вывода ошибок
BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line;
while ((line = errorReader.readLine()) != null) {
System.out.println("Ошибка: " + line);
}

// Чтение стандартного вывода
BufferedReader outputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = outputReader.readLine()) != null) {
System.out.println("Вывод: " + line);
}

int exitCode = process.waitFor();
System.out.println("Процесс завершен с кодом: " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}


Объяснение:

Мы читаем как стандартный вывод, так и вывод ошибок, чтобы обработать все возможные сценарии.

#Java #Training #Medium #Process_API #ProcessBuilder
This media is not supported in your browser
VIEW IN TELEGRAM
Всем доброго субботнего утра! ☀️

Как ваше настроение?

А я сижу над недописанным сервисом доставки, и понимаю что не хочу его дописывать... 😏

Скорее потому, что его проще переписать сначала
🤓

Да и готовиться надо, чтобы радовать Вас контентом, а не своими размышлениями и поисками правильного решения
🫢

Поэтому я принял решение убрать этот недописанный сервис из видео. Когда-нибудь мы обязательно к нему вернемся и напишем полностью за один присест
😎

Ну и чтобы нам было для чего встречаться по воскресениям, я решил разбить создание подобных сервисов на максимально глубокое, пошаговое изучение:
Аннотаций в контроллере
Работу JPA-аннотаций
Мапперы и все то с ними связано
Спецификаций и пагинации для вывода данных

Ну и еще что-нибудь)) Пока накидал так, что сразу в голову пришло 😉

Как Вам план? 🤨

А в остальном всем прекрасных выходных! ✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Тот момент когда надо показать сложный проект заказчику

https://t.me/Java_for_beginner_dev

#Mems
Всем привет!

Предлагаю сегодня в 16:00 по МСК собраться и наполнить наши головы пониманием, что же такое Mappers 😉

Что мы узнаем:
- Зачем нам вообще нужны Mappers?
- Какие наиболее популярные Mappers есть?
- Рассмотрим часто встречающуюся реализацию - MapStruct.
- Напишем мини-проект в котором реализуем разные варианты настроек MapStruct, рассмотрим варианты реализаций и взаимодействий
.

Как всегда жду всех! 🫵

Но увижу все тех же 🤪
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Оказывается их так просто запомнить... 🤓

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
Встреча создана!
https://telemost.yandex.ru/j/29429052127252

Заходим! ✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
Mapper MapStruct. Коротко о важном. Встреча от 16.02.2025

Запись нашей встречи -
YOUTUBE
RUTUBE

На сегодняшней встрече мы разобрали на примере работу мапперов - библиотек которые помогают преобразовывать объекты в друг друга. А также:
- Зачем нам вообще нужны Mappers?
- Какие наиболее популярные Mappers есть?
- Рассмотрели часто встречающуюся реализацию - MapStruct.
- Написали немного кода, посмотрели как все это работает, изучили разные варианты взаимодействий.


Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!

Всем хорошего настроения! 🤘🔫
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Класс BigInteger в Java — основы и внутреннее устройство

В Java для работы с целыми числами, которые выходят за пределы диапазона long (от -2⁶³ до 2⁶³-1), используется класс BigInteger. Этот класс позволяет работать с числами произвольной длины, что делает его незаменимым для задач, требующих высокой точности, таких как криптография, научные вычисления и финансы.

Внутреннее устройство

Класс BigInteger хранит число в виде массива целых чисел (int[]), где каждый элемент массива представляет часть большого числа. Это позволяет BigInteger работать с числами, которые могут быть сколь угодно большими, ограничиваясь только доступной памятью.
Хранение данных: Число хранится в виде массива int[], где каждый элемент массива представляет 32 бита числа. Это позволяет эффективно использовать память и выполнять операции над большими числами.
Знак: Отдельно хранится знак числа (положительное или отрицательное).


Пример внутреннего представления числа:
BigInteger bigInt = new BigInteger("123456789012345678901234567890");
Внутри это число будет представлено как массив int[], где каждый элемент массива хранит часть числа.


Основные методы класса BigInteger

Конструкторы:
BigInteger(String val) — создает объект BigInteger из строки.
BigInteger(byte[] val) — создает объект BigInteger из массива байт.
BigInteger(int signum, byte[] magnitude) — создает объект BigInteger с указанным знаком и массивом байт.


Пример:
BigInteger bigInt = new BigInteger("12345678901234567890");


Арифметические операции:
add(BigInteger val) — сложение.
subtract(BigInteger val) — вычитание.
multiply(BigInteger val) — умножение.
divide(BigInteger val) — деление.
mod(BigInteger val) — остаток от деления.


Пример:
BigInteger a = new BigInteger("10000000000000000000");
BigInteger b = new BigInteger("20000000000000000000");
BigInteger sum = a.add(b); // 30000000000000000000


Сравнение:
compareTo(BigInteger val) — сравнивает два числа. Возвращает -1, 0 или 1, если текущее число меньше, равно или больше переданного.
equals(Object x) — проверяет равенство двух объектов BigInteger.

Пример:
BigInteger a = new BigInteger("100");
BigInteger b = new BigInteger("200");
int result = a.compareTo(b); // -1, так как a < b


Битовые операции:
and(BigInteger val) — побитовое И.
or(BigInteger val) — побитовое ИЛИ.
xor(BigInteger val) — побитовое исключающее ИЛИ.
shiftLeft(int n) — сдвиг влево на n бит.
shiftRight(int n) — сдвиг вправо на n бит.


Пример:
BigInteger a = new BigInteger("10"); // 1010 в двоичной системе
BigInteger b = a.shiftLeft(2); // 101000 (40 в десятичной)


Другие полезные методы:
pow(int exponent) — возведение в степень.
gcd(BigInteger val) — наибольший общий делитель.
isProbablePrime(int certainty) — проверка на простоту.


Пример:
BigInteger a = new BigInteger("17");
boolean isPrime = a.isProbablePrime(100); // true, так как 17 — простое число


Плюсы и минусы BigInteger

Плюсы:
Поддержка чисел произвольной длины.
Высокая точность вычислений.
Богатый набор методов для арифметических и битовых операций.

Минусы:

Медленнее, чем примитивные типы данных (int, long).
Требует больше памяти для хранения больших чисел.


Пример использования
import java.math.BigInteger;

public class BigIntegerExample {
public static void main(String[] args) {
BigInteger a = new BigInteger("12345678901234567890");
BigInteger b = new BigInteger("98765432109876543210");

BigInteger sum = a.add(b);
BigInteger product = a.multiply(b);

System.out.println("Сумма: " + sum);
System.out.println("Произведение: " + product);
}
}


#Java #Training #Medium #BigInteger
Что выведет код?

public class Task170225 {
public static void main(String[] args) {
int x = 5;
int y = 0;

if (x > 0) {
while (x > 0) {
y += x;
x--;
}
}

System.out.println(y);
}
}


#Tasks
Варианты ответа:
Anonymous Quiz
14%
5
5%
10
70%
15
11%
RuntimeException
Маленький, пушистый гайд по Cubernetes 🤓 🤣

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
Класс BigDecimal в Java

Класс BigDecimal в Java используется для выполнения точных арифметических операций с числами с плавающей точкой. В отличие от примитивных типов double и float, которые могут терять точность из-за особенностей двоичного представления, BigDecimal обеспечивает полный контроль над точностью и округлением. Это делает его идеальным выбором для финансовых расчетов, где важна каждая копейка.

Внутреннее устройство


BigDecimal хранит число в виде двух компонентов:
Мантисса (unscaled value): Целое число типа BigInteger, представляющее значимые цифры числа.
Масштаб (scale): Целое число, указывающее количество цифр после десятичной точки.


Пример:
BigDecimal decimal = new BigDecimal("123.456");


Здесь:
Мантисса: 123456
Масштаб: 3 (три цифры после точки).


Основные методы класса BigDecimal

Конструкторы:
BigDecimal(String val) — создает объект BigDecimal из строки.
BigDecimal(double val) — создает объект BigDecimal из числа double (не рекомендуется из-за потери точности).
BigDecimal(BigInteger val) — создает объект BigDecimal из BigInteger.


Пример:
BigDecimal a = new BigDecimal("123.456");
BigDecimal b = new BigDecimal(123.456); // Не рекомендуется


Арифметические операции:
add(BigDecimal val) — сложение.
subtract(BigDecimal val) — вычитание.
multiply(BigDecimal val) — умножение.
divide(BigDecimal val) — деление.
remainder(BigDecimal val) — остаток от деления.


Пример:
BigDecimal a = new BigDecimal("100.50");
BigDecimal b = new BigDecimal("20.25");
BigDecimal sum = a.add(b); // 120.75


Округление:
setScale(int newScale, RoundingMode roundingMode) — устанавливает новый масштаб (количество знаков после точки) и применяет указанный режим округления.
RoundingMode — перечисление, определяющее стратегию округления (например, RoundingMode.HALF_UP для округления до ближайшего числа).


Пример:
BigDecimal a = new BigDecimal("123.456789");
BigDecimal rounded = a.setScale(2, RoundingMode.HALF_UP); // 123.46


Сравнение:
compareTo(BigDecimal val) — сравнивает два числа. Возвращает -1, 0 или 1, если текущее число меньше, равно или больше переданного.
equals(Object x) — проверяет равенство двух объектов BigDecimal (учитывает масштаб).


Пример:
BigDecimal a = new BigDecimal("100.00");
BigDecimal b = new BigDecimal("100.0");
boolean isEqual = a.equals(b); // false, так как масштабы разные
int comparison = a.compareTo(b); // 0, так как числовые значения равны


Другие полезные методы:
abs() — возвращает абсолютное значение.
pow(int n) — возведение в степень.
stripTrailingZeros() — удаляет незначащие нули после точки.


Пример:
BigDecimal a = new BigDecimal("123.4500");
BigDecimal stripped = a.stripTrailingZeros(); // 123.45


Плюсы и минусы BigDecimal


Плюсы:
Высокая точность вычислений.
Полный контроль над округлением.
Подходит для финансовых расчетов.


Минусы:
Медленнее, чем примитивные типы (double, float).
Требует больше памяти.


Пример использования
import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalExample {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("100.50");
BigDecimal b = new BigDecimal("20.25");

BigDecimal sum = a.add(b);
BigDecimal product = a.multiply(b);
BigDecimal rounded = product.setScale(2, RoundingMode.HALF_UP);

System.out.println("Сумма: " + sum);
System.out.println("Произведение: " + product);
System.out.println("Округленное произведение: " + rounded);
}
}


#Java #Training #Medium #BigDecimal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM