Java Learning
18.4K subscribers
1.62K photos
1 video
3 files
999 links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
⚙️ Comparator.reverseOrder()

В Java метод Comparator.reverseOrder() создаёт компаратор, который сортирует элементы в порядке убывания. Это удобно для работы с сортировкой коллекций, когда нужно изменить стандартный порядок.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Вопрос на собеседовании

Как работает CompletableFuture в Java, чем он отличается от Future, и как использовать метод thenCombine() для выполнения параллельных задач?

Ответ ⬇️
CompletableFuture — это расширение Future, позволяющее выполнять асинхронные задачи и комбинировать их без необходимости вручную управлять потоками. В отличие от Future, он предоставляет богатый API для обработки результатов, включая цепочку методов и возможность комбинирования нескольких задач. Метод thenCombine() используется для объединения результатов двух асинхронных задач, выполняемых параллельно, в одну итоговую операцию.

Пример использования ⚙️
import java.util.concurrent.CompletableFuture;

public class Main {
public static void main(String[] args) {
// Первая асинхронная задача
CompletableFuture<Integer> task1 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000); // Эмуляция задержки
} catch (InterruptedException e) {
e.printStackTrace();
}
return 10;
});

// Вторая асинхронная задача
CompletableFuture<Integer> task2 = CompletableFuture.supplyAsync(() -> 20);

// Комбинируем результаты двух задач
CompletableFuture<Integer> combined = task1.thenCombine(task2, Integer::sum);

// Получаем и выводим результат
combined.thenAccept(result -> System.out.println("Сумма: " + result));

// Ждем завершения всех задач (только для примера)
combined.join();
}
}

// Результат выполнения:
// Сумма: 30


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Semaphore

Semaphore — это класс, который позволяет ограничивать количество потоков, одновременно работающих с каким-либо ресурсом.

Поток должен получить разрешение, чтобы войти в критическую секцию.
Semaphore управляет набором разрешений (permits), а конструктор принимает количество разрешений.
Если разрешений нет, поток ставится в очередь до освобождения.

Метод acquire() получает разрешение, release() — освобождает.

Java Learning 👩‍💻
👍8
ZipFile

ZipFile — это класс, который используется для чтения содержимого ZIP-архивов. Он позволяет вам перебирать записи в архиве, получать информацию о них и извлекать их содержимое.

Java Learning 👩‍💻
👍4
⚙️HashMap.getOrDefault()

В Java метод HashMap.getOrDefault() возвращает значение для заданного ключа, если он существует, или значение по умолчанию, если ключ отсутствует. Это удобный способ избежать проверки на наличие ключа.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🎄1
👩‍💻 Задача по Java: Проверка строки на наличие всех букв алфавита

Напишите функцию, которая проверяет, содержит ли строка все буквы английского алфавита (a-z). Игнорируйте регистр букв и символы, не являющиеся буквами.

Пример:

System.out.println(isPangram("The quick brown fox jumps over the lazy dog")); 
// Ожидаемый результат: true

System.out.println(isPangram("Hello, World!"));
// Ожидаемый результат: false


Решение задачи на картинке ☝️

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥2
👩‍💻 Задача по Java: Проверка строки на наличие всех букв алфавита

Напишите функцию, которая проверяет, содержит ли строка все буквы английского алфавита (a-z). Игнорируйте регистр букв и символы, не являющиеся буквами.

Пример:

System.out.println(isPangram("The quick brown fox jumps over the lazy dog")); 
// Ожидаемый результат: true

System.out.println(isPangram("Hello, World!"));
// Ожидаемый результат: false


Решение задачи на картинке ☝️

Java Learning 👩‍💻
👍8
Что будет выведено при выполнении кода?

Пояснение
⬇️
Метод divide вызывает исключение ArithmeticException, так как деление на ноль недопустимо. Исключение перехватывается в блоке catch, где его сообщение выводится. После этого выполняется блок finally, который всегда исполняется независимо от того, было исключение или нет.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
⚙️ Collections.reverse()

В Java метод Collections.reverse() изменяет порядок элементов в списке на обратный. Это удобно для работы с коллекциями, где требуется обратный порядок.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
⚙️ String.replace()

В Java метод String.replace() заменяет все вхождения указанного символа или подстроки в строке на новое значение. Это удобно для модификации строк без необходимости создания сложных шаблонов.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
Вопрос на собеседовании

Что такое метод finalize() в Java, как он работает и почему его использование не рекомендуется?

Ответ ⬇️
Метод finalize() вызывается перед тем, как объект удаляется сборщиком мусора (garbage collector). Он используется для освобождения ресурсов, таких как файловые дескрипторы или сетевые соединения. Однако его использование не рекомендуется из-за непредсказуемости вызова (точное время выполнения сборки мусора неизвестно) и потенциальных проблем с производительностью. Вместо этого рекомендуется использовать try-with-resources или явно закрывать ресурсы.

Пример использования ⚙️
class Resource {
@Override
protected void finalize() throws Throwable {
System.out.println("Ресурс освобожден!");
}
}

public class Main {
public static void main(String[] args) {
new Resource(); // Создаем объект без сохранения ссылки
System.gc(); // Явный вызов сборщика мусора (не гарантирует немедленного выполнения)

System.out.println("Завершение программы");
}
}


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
⚙️ String.contains()

В Java метод String.contains() проверяет, содержится ли указанная подстрока в строке. Это удобный способ проверки наличия текста в строке.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
⚙️ String.startsWith() и String.endsWith()

В Java методы String.startsWith() и String.endsWith() проверяют, начинается или заканчивается строка на указанную подстроку. Это удобно для работы с текстами и валидации.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
#вопросы_с_собеседований
Расскажите про приведение типов. Что такое понижение и повышение типа?

Приведение типов — это преобразование переменной одного типа в другой.

Существует два вида приведения типов:
— Повышение типа (widening): автоматическое преобразование типа в другой, более широкий тип. Например, int в long. При этом не теряется точность, так как широкий тип может представить все значения узкого типа.
— Понижение типа (narrowing): явное приведение к более узкому типу, например double в int. Здесь возможна потеря точности, поэтому требуется явное приведение в коде.

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


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥1
RefactorFirst

RefactorFirst — это инструмент для Java-кода, помогающий определить и расставить по приоритетам классы, которые следует рефакторить в первую очередь. Он работает, сканируя код на наличие «божественных классов» (God Classes) и классов с высокой степенью связности.

«Божественных классов» — это классы, которые делают слишком много и, следовательно, являются плохо спроектированными. Они могут быть трудными для понимания, тестирования и сопровождения.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
⚙️ Math.round()

В Java метод Math.round() округляет число до ближайшего целого значения. Это полезно для обработки чисел с плавающей запятой, если требуется округление до ближайшего целого.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Fastjson

Fastjson — это высокопроизводительная библиотека Java, предназначенная для преобразования объектов Java в JSON и наоборот. Она легкая, быстрая и простая в использовании.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
⚙️ List.subList()

В Java метод subList() позволяет создать представление части списка. Это удобно для работы с подмножествами коллекций без необходимости копирования элементов.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Вопрос на собеседовании

Что такое ForkJoinPool в Java, как он работает, и как его использовать для параллельной обработки задач?

Ответ ⬇️
ForkJoinPool — это специализированный пул потоков, который рекурсивно делит задачи на подзадачи (fork) и объединяет их результаты (join). Он оптимизирован для задач, которые можно разделить на независимые части, например, вычисление суммы элементов массива. Основными классами являются RecursiveTask для задач с результатом и RecursiveAction для задач без результата.

Пример использования ⚙️
import java.util.concurrent.RecursiveTask;
import java.util.concurrent.ForkJoinPool;

class SumTask extends RecursiveTask<Integer> {
private final int[] array;
private final int start, end;

public SumTask(int[] array, int start, int end) {
this.array = array;
this.start = start;
this.end = end;
}

@Override
protected Integer compute() {
if (end - start <= 5) {
int sum = 0;
for (int i = start; i < end; i++) sum += array[i];
return sum;
} else {
int mid = (start + end) / 2;
SumTask left = new SumTask(array, start, mid);
SumTask right = new SumTask(array, mid, end);
left.fork();
return right.compute() + left.join();
}
}
}

public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
ForkJoinPool pool = new ForkJoinPool();
int result = pool.invoke(new SumTask(array, 0, array.length));
System.out.println("Сумма: " + result); // Сумма: 55
}
}


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
👩‍💻 Задача по Java: Binary Addition

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

Пример:

1, 1 --> "10" (1 + 1 = 2 in decimal or 10 in binary)
5, 9 --> "1110" (5 + 9 = 14 in decimal or 1110 in binary)


Решение задачи на картинке ☝️

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7