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

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

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

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

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
Вопрос на собеседовании

Что такое volatile в Java и в каких случаях его следует использовать?

Ответ ⬇️
Ключевое слово volatile в Java используется для указания, что значение переменной может быть изменено несколькими потоками. Когда переменная объявляется как volatile, изменения, сделанные одним потоком, становятся видимыми для других потоков немедленно, избегая кеширования значения в локальной памяти потока. Это гарантирует "свежесть" значения, что важно в многопоточных программах для обеспечения корректного взаимодействия между потоками.

Однако volatile не заменяет блокировку (synchronized) и не обеспечивает атомарности операций. Его рекомендуется использовать для переменных, доступ к которым происходит через чтение/запись, но не требует сложной синхронизации, например, для флагов или индикаторов состояния.


Пример использования ⚙️
public class VolatileExample {
private volatile boolean flag = true;

public void run() {
new Thread(() -> {
while (flag) {
System.out.println("Работаем...");
}
System.out.println("Остановка");
}).start();

try {
Thread.sleep(1000);
flag = false; // изменение станет сразу видимым для первого потока
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}

public static void main(String[] args) {
new VolatileExample().run();
}
}


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3
⚙️ Path.resolve()

В Java метод Path.resolve() из пакета java.nio.file соединяет два пути, создавая новый путь. Если второй путь является абсолютным, он возвращается как есть. Это полезно для работы с относительными путями в файловой системе.

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

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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
➡️ Ratpack — асинхронный фреймворк для высоконагруженных приложений

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

Асинхронность на основе Netty для высокой производительности.
Интуитивно понятный DSL для описания маршрутов и логики.
Отличная интеграция с Gradle и другими инструментами.

🔗 Ссылочка на доку

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Что будет выведено при выполнении кода?

Пояснение
⬇️
Статические методы интерфейса не наследуются классами, поэтому попытка вызвать test.staticMethod() приводит к ошибке компиляции.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
⚙️ Stream.reduce()

В Java метод Stream.reduce() выполняет свёртку элементов потока в одно значение, используя заданную ассоциативную функцию. Это мощный инструмент для операций, таких как суммирование, произведение или объединение.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
⚙️ Objects.requireNonNull()

В Java метод Objects.requireNonNull() проверяет, что объект не равен null, и выбрасывает NullPointerException, если проверка не пройдена. Это удобный способ защитить код от неожиданных null.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
➡️ Pebble — современный движок шаблонов для Java

Pebble — это гибкий и производительный движок шаблонов, который позволяет легко интегрировать динамический HTML в ваши приложения. Разработанный с акцентом на расширяемость и безопасность, Pebble поддерживает удобный синтаксис, похожий на Twig.

Компактный синтаксис: интуитивно понятный синтаксис для построения шаблонов.
Шаблоны высокого уровня: поддержка наследования и макросов.
Безопасность: автоматическое экранирование HTML и поддержка WhiteList-фильтров.
Расширяемость: добавление пользовательских функций и фильтров.

🔗 Ссылочка на доку

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

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

Пример:

"{[()()]}"
true

"{[(])}"
false


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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🎄1
Что будет выведено при выполнении кода?

Пояснение
⬇️
Переменные sb1 и sb2 ссылаются на один и тот же объект StringBuilder. При вызове метода append изменения вносятся непосредственно в этот объект.

• sb1.append(" World") добавляет " World" к строке, делая её "Hello World".
• Затем sb2.append("!") добавляет "!" к той же строке, получая "Hello World!".
Так как объект изменяется напрямую, при выводе обе переменные показывают результат "Hello World!".


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

В Java метод Math.max() позволяет найти большее из двух чисел. Он работает с различными типами данных, такими как int, double, float, и полезен в задачах сравнения.

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

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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Друзья, планирую в историях публиковать разбор задачек с собеседований с подробными пояснениями от Senior Java разработчика из Яндекса, а также различные смешные мемасики.

Проголосуйте пожалуйста 👩‍💻

https://t.iss.one/boost/Java_per_month
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥40🔥7
⚙️ Arrays.binarySearch()

В Java метод Arrays.binarySearch() выполняет бинарный поиск в отсортированном массиве, возвращая индекс найденного элемента. Если элемент не найден, возвращается отрицательное значение, указывающее потенциальную позицию вставки.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
⚙️ 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