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
#Вопросы_с_собеседования

🎙️ Какие два класса не наследуются от Object?

Ответ:
Не ведитесь на провокации, нет таких классов: все классы прямо или через предков наследуются от класса Object!

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31😁14🤔2❤‍🔥1😢1🎄1
Вопрос на собеседовании

Что такое "false sharing" в многопоточном Java-приложении и как его можно избежать?

Ответ ⬇️
"False sharing" — это ситуация, когда несколько потоков обновляют разные переменные, находящиеся в одном кэше процессора. Это приводит к снижению производительности из-за необходимости синхронизации кэшей. Чтобы избежать "false sharing", можно использовать аннотацию @Contended (с включенной опцией JVM) или добавлять дополнительные поля для выравнивания.

🗣 Пример:
public class Main {
private static class Counter {
// Добавляем дополнительные поля для выравнивания
private long p1, p2, p3, p4, p5, p6, p7;
public volatile long count = 0;
private long q1, q2, q3, q4, q5, q6, q7;
}

public static void main(String[] args) throws InterruptedException {
Counter counter = new Counter();
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 1_000_000; i++) {
counter.count++;
}
});

Thread thread2 = new Thread(() -> {
for (int i = 0; i < 1_000_000; i++) {
counter.count++;
}
});

thread1.start();
thread2.start();

thread1.join();
thread2.join();

System.out.println("Итоговое значение: " + counter.count);
}
}

// Результат выполнения:
// Итоговое значение: 2000000


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤‍🔥2😱2
➡️ Использование библиотеки Hutool для ускорения Java-разработки

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

В отличие от других библиотек, Hutool имеет богатый набор функций, интегрированных в единую библиотеку.

Hutool — отличный выбор, если вы ищете многофункциональный инструмент для решения повседневных задач в Java.

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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥7👍5
➡️ Использование Scoped Values для безопасной передачи данных в потоки

Scoped Values — новая функциональность в Java 21, позволяющая безопасно и эффективно передавать неизменяемые данные между потоками и методами. Они предоставляют более простой и безопасный API по сравнению с ThreadLocal, уменьшая риск утечек памяти и ошибок, связанных с потоками.

🗣 Scoped Values упрощают управление контекстом приложения и повышают надежность многопоточных программ.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥6👍5
➡️ Использование библиотеки Jsoup для парсинга HTML в Java

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

Jsoup — идеальный выбор для тех, кому нужно быстро и безопасно работать с HTML в Java.

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

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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥1
➡️ Использование StackWalker для эффективного анализа стека вызовов

StackWalker — это новое API, введенное в Java 9, которое позволяет легко и эффективно работать с информацией о стеке вызовов.

В отличие от устаревших методов, таких как Thread.getStackTrace(), StackWalker предоставляет гибкий и производительный способ получения информации о стеке, поддерживая фильтрацию и построчную обработку.

🗣 StackWalker дает возможность работать с текущим стеком вызовов, избегая накладных расходов и ограничений старых методов.

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

Что такое "backpressure" в реактивных системах на Java, и как его можно обработать?

Ответ ⬇️
"Backpressure" возникает, когда источник данных производит элементы быстрее, чем потребитель может их обработать. В Java для управления этим в реактивных системах используется интерфейс Flow.Subscriber, который позволяет контролировать поток данных через запрос определенного количества элементов с помощью метода request.

🗣 Пример:
import java.util.concurrent.Flow;

public class BackpressureExample {
public static void main(String[] args) {
MyPublisher publisher = new MyPublisher();
MySubscriber subscriber = new MySubscriber();
publisher.subscribe(subscriber);
}
}

class MyPublisher implements Flow.Publisher<Integer> {
@Override
public void subscribe(Flow.Subscriber<? super Integer> subscriber) {
subscriber.onSubscribe(new Flow.Subscription() {
@Override
public void request(long n) {
for (int i = 1; i <= n; i++) {
subscriber.onNext(i);
}
subscriber.onComplete();
}

@Override
public void cancel() {
}
});
}
}

class MySubscriber implements Flow.Subscriber<Integer> {
private Flow.Subscription subscription;

@Override
public void onSubscribe(Flow.Subscription subscription) {
this.subscription = subscription;
subscription.request(5); // Запрашиваем 5 элементов
}

@Override
public void onNext(Integer item) {
System.out.println("Получен элемент: " + item);
}

@Override
public void onError(Throwable throwable) {
System.err.println("Ошибка: " + throwable.getMessage());
}

@Override
public void onComplete() {
System.out.println("Все элементы получены.");
}
}


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😱2🎄1
➡️ Использование библиотеки Jinjava для рендеринга шаблонов в Java

Jinjava — это шаблонизатор для Java, основанный на синтаксисе Jinja, популярного в мире Python. Эта библиотека позволяет гибко рендерить HTML-шаблоны с поддержкой переменных, циклов, условий и фильтров.

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

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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤‍🔥2
➡️ Использование библиотеки Picnic для форматирования таблиц в текстовом формате в Java

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

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

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

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

Что такое "weak references" в Java и когда их стоит использовать?

Ответ ⬇️
Weak references (слабые ссылки) позволяют ссылаться на объекты, не предотвращая их сборку сборщиком мусора (GC). Если на объект осталась только слабая ссылка, GC сможет освободить его память, когда посчитает нужным. Это полезно в ситуациях, когда нужно избежать утечек памяти, но при этом объект не должен оставаться в памяти, если он больше не используется, как в кэширующих структурах данных или пуле объектов.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤‍🔥2
➡️ Использование StructuredTaskScope для управления асинхронными задачами

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

🗣 Это отличное решение для обработки нескольких связанных задач, где важно, чтобы все задачи были завершены, или отменены вместе, если одна из них завершится с ошибкой.

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

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

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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔11👍7
➡️ Использование библиотеки Jolt для трансформации JSON в Java

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

Jolt — идеальный инструмент для случаев, когда необходимо трансформировать сложные JSON-данные.

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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤‍🔥2
#Вопросы_с_собеседования
Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?

- Метод должен удовлетворять условиям транзитивности, рефлексивности и симметричности.

- Метод должен быть согласованным - многократные вызовы с неизменными объектами должны возвращать один и тот же результат.

- Если x.equals(y) вернёт true, то x.hashCode() должен быть равен y.hashCode().

- Метод не должен выбрасывать исключения при сравнении допустимых значений.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤‍🔥1
➡️ Использование Sequenced Collections для упорядоченных коллекций

Sequenced Collections — интерфейс, который объединяет функциональность упорядоченных коллекций, таких как списки и наборы.

Он позволяет более эффективно работать с коллекциями, где важен порядок элементов, и предоставляет методы для работы с первым и последним элементами коллекции.

🗣 Это удобное API для работы с коллекциями, где требуется работа с последовательностями элементов.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
➡️ Использование библиотеки joor для упрощенной работы с рефлексией в Java

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

✔️ Она предоставляет удобный API для создания экземпляров, вызова методов и доступа к полям классов, делая код более читаемым и компактным.

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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥5👍2🎄1