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

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

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

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

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
Метод interrupt()

interrupt() используется для прерывания потока исполнения. Этот метод является частью класса Thread и позволяет прервать поток, вызывая исключение InterruptedException, если поток находится в состоянии ожидания или блокировки. Если поток не находится в таком состоянии, метод interrupt() устанавливает флаг прерывания, который можно проверить с помощью метода isInterrupted().

Метод interrupt() может применяться в различных ситуациях, например, когда необходимо остановить поток по запросу пользователя или когда поток должен завершиться по достижении определенного условия.
👍12
#Вопросы_с_собеседования

🔍 Что такое race condition?

Состояние гонки (race condition) - ошибка проектирования многопоточной системы или приложения, при которой эта работа напрямую зависит от того, в каком порядке выполняются потоки. Состояние гонки возникает, когда поток, который должен исполнится в начале, проиграл гонку и первым исполняется другой поток: поведение кода изменяется, из-за чего возникают недетерменированные ошибки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
#вопросы_с_собеседований
Почему строка является популярным ключом в HashMap в Java?

Поскольку строки неизменяемы, их хэш код вычисляется и кэшируется в момент создания, не требуя повторного пересчета при дальнейшем использовании. Поэтому в качестве ключа HashMap они будут обрабатываться быстрее.
👍23
Инструментация байт-кода Java

В рамках текущей статьи будет рассказано о способах инструментации байт-кода java или, другим языком, внесения изменений в компилированные файлы java .class. Здесь будут приведены примеры работы с фреймворками Javaassist и ASM и базовое описание байт-кода.

Смотреть статью
👍4
Выберите функциональный дескриптор для функционального интерфейса представленного на картинке.
Anonymous Quiz
25%
int -> String
75%
String -> int
👍15
Java-программа для преобразования десятичной системы счисления в двоичную

Воспользуемся побитовыми операторами для решения данной задачи.

Временная сложность: O (1)
Вспомогательное пространство: O (1).
👍14
«Входить в IT неспеша» или как стать Middle Java Backend разработчиком минуя ступень Junior

Статья о том, как шаг за шагом при дефиците свободного времени обучиться и устроиться на работу сразу Middle Java разработчиком перескочив через Junior ступеньку, основанная на личном опыте, и о том, как мне это помогло, когда сразу после трудоустройства пришлось тянуть проект практически в solo.

Смотреть статью
👍5😢3
#Вопросы_с_собеседования

Что представляет собой «обмен сообщениями»?

Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия. В ООП посылка сообщения (вызов метода) — это единственный путь передать управление объекту. Если объект должен «отвечать» на это сообщение, то у него должна иметься соответствующий данному сообщению метод. Так же объекты, используя свои методы, могут и сами посылать сообщения другим объектам. Обмен сообщениями реализуется с помощью динамических вызовов, что приводит к чрезвычайно позднему связыванию (extreme late binding).

Пусть требуется создать физическую модель, описывающую сталкивающиеся шары разных размеров. Традиционный подход к решению этой задачи примерно таков: определяется набор данных, описывающих каждый шар (например, его координаты, массу и ускорение); каждому шару присваивается уникальный идентификатор (например, организуется массив, значение индекса которого соответствует номеру шара), который позволит отличать каждый из шаров от всех других. Наконец, пишется подпрограмма с названием, скажем, bounce; эта процедура должна на основе номера шара и его начальных параметров соответствующим образом изменять данные, описывающие шар. В отличие от традиционного подхода объектно-ориентированная версия программы моделирует каждый из шаров посредством объекта. При этом объект, соответствующий конкретному шару, содержит не только его параметры, но и весь код, описывающий поведение шара при различных взаимодействиях. Так, каждый шар будет иметь собственный метод bounce(). Вместо того, чтобы вызывать подпрограмму bounce с аргументом, определяющим, скажем, шар №3, необходимо будет передать объекту «шар №3» сообщение, предписывающее ему выполнить столкновение.
👍8
Меняем местами элементы первой и последний строки в матрице

Временная сложность: O(n*m), где n и m — количество строк и столбцов соответственно.
Вспомогательное пространство: O(1).
👍8
Магия Spring Framework своими руками

Смотреть статью
👍31
#Вопросы_с_собеседования

Каковы особенности многопоточности в Java EE и Spring?

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

Ещё одна важная особенность - использование пулов потоков для более эффективного использования ресурсов и увеличение производительности.

Также в Spring есть возможность использования асинхронных методов, что позволяет не блокировать основной поток выполнения и ускорять обработку запросов.
👍10😢1
Преобразуем строку в объект

Используем метод Class.forName(). Этот метод принимает параметр className , который является классом, для которого требуется его экземпляр.
👍8🤔3🔥1
Что такое «пул потоков»?

Создание потока является затратной по времени и ресурсам операцией. Количество потоков, которое может быть запущено в рамках одного процесса также ограниченно. Чтобы избежать этих проблем и в целом управлять множеством потоков более эффективно в Java был реализован механизм пула потоков (thread pool), который создаётся во время запуска приложения и в дальнейшем потоки для обработки запросов берутся и переиспользуются уже из него. Таким образом, появляется возможность не терять потоки, сбалансировать приложение по количеству потоков и частоте их создания.

Начиная с Java 1.5 Java API предоставляет фреймворк Executor, который позволяет создавать различные типы пула потоков:

Executor - упрощенный интерфейс пула, содержит один метод для передачи задачи на выполнение;
ExecutorService - расширенный интерфейс пула, с возможностью завершения всех потоков;
AbstractExecutorService - базовый класс пула, реализующий интерфейс ExecutorService;
Executors - фабрика объектов связанных с пулом потоков, в том числе позволяет создать основные типы пулов;
ThreadPoolExecutor - пул потоков с гибкой настройкой, может служить базовым классом для нестандартных пулов;
ForkJoinPool - пул для выполнения задач типа ForkJoinTask;
... и другие.

Методы Executors для создания пулов:
newCachedThreadPool() - если есть свободный поток, то задача выполняется в нем, иначе добавляется новый поток в пул. Потоки не используемые больше минуты завершаются и удалются и кэша. Размер пула неограничен. Предназначен для выполнения множество небольших асинхронных задач;
newCachedThreadPool(ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков;
newFixedThreadPool(int nThreads) - создает пул на указанное число потоков. Если новые задачи добавлены, когда все потоки активны, то они будут сохранены в очереди для выполнения позже. Если один из потоков завершился из-за ошибки, на его место будет запущен другой поток. Потоки живут до тех пор, пока пул не будет закрыт явно методом shutdown().
newFixedThreadPool(int nThreads, ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков;
newSingleThreadScheduledExecutor() - однопотоковый пул с возможностью выполнять задачу через указанное время или выполнять периодически. Если поток был завершен из-за каких-либо ошибок, то для выполнения следующей задачи будет создан новый поток.
newSingleThreadScheduledExecutor(ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков;
newScheduledThreadPool(int corePoolSize) - пул для выполнения задач через указанное время или переодически;
newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков;
unconfigurableExecutorService(ExecutorService executor) - обертка на пул, запрещающая изменять его конфигурацию;
👍11
Azure Event Hubs и Java – потоковая обработка больших данных

Azure Event Hubs
– это большая часть платформы облачных сервисов Microsoft, предоставляющая решение для потоковой обработки больших объемов данных. Сегодня мы кратко рассмотрим, как Java разработчики могут использовать Event Hubs в своих проектах.

Давайте рассмотрим Github репозиторий Microsoft с SDK для работы с Azure Event Hubs на Java.
1. Подключение
к Event Hubs: Вы можете использовать EventHubProducerClient для отправки событий и EventHubConsumerClient для получения событий. Вам нужно будет предоставить строку подключения и имя вашего Event Hub.

2. Отправка событий:
Метод send позволяет отправить одно событие или пакет событий.

3. Получение событий: Создайте EventProcessorClient для обработки входящих событий. Вам нужно будет реализовать ProcessEvent и ProcessError методы.

Пример кода из репозитория демонстрирует базовые операции с Azure Event Hubs на Java. Он поможет вам понять, как использовать эту технологию в своих проектах.

Более подробную информацию можно найти в официальной документации Microsoft.

Потоковая обработка данных является критически важной для многих предприятий, и Azure Event Hubs предоставляет мощный инструмент для эффективного управления этими данными. Будьте готовы к облачной эре с Azure!
👍5
Укажите результат выполнения следующего фрагмента кода: int a = 5, b = 6; a = b++; System.out.println(a);
Anonymous Quiz
12%
будет выдано сообщение об ошибке
9%
5
45%
6
32%
7
3%
ничего из перечисленного
👍12😱3
POJO

Термин POJO означает Plain Old Java Object, что переводится как "простой старый Java-объект". POJO - это обычный Java-класс, который не зависит от каких-либо фреймворков или библиотек и не имеет особых ограничений или требований к своей структуре.

POJO классы часто используются в различных контекстах, таких как модель данных, передача данных или DTO (Data Transfer Object). Они служат для хранения данных и обеспечивают доступ к этим данным через геттеры и сеттеры.

В этом примере класс Person имеет два приватных поля name и age, а также соответствующие геттеры и сеттеры для доступа к этим полям. Геттеры используются для получения значений полей, а сеттеры - для установки новых значений.
👍94
Переименовываем файл

Переименовать файл можно, переместив содержимое первого файла в новый файл и удалив предыдущий файл. Java обрабатывает эту операцию, используя метод resolveSibiling . Он используется для разрешения данного пути относительно родительского пути этого пути.
👍24
Что такое FutureTask?

FutureTask представляет собой отменяемое асинхронное вычисление в параллельном Java приложении. Этот класс предоставляет базовую реализацию Future, с методами для запуска и остановки вычисления, методами для запроса состояния вычисления и извлечения результатов. Результат может быть получен только когда вычисление завершено, метод получения будет заблокирован, если вычисление ещё не завершено. Объекты FutureTask могут быть использованы для обёртки объектов Callable и Runnable. Так как FutureTask реализует Runnable, его можно передать в Executor на выполнение.
👍13