Метод 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 они будут обрабатываться быстрее.
Почему строка является популярным ключом в HashMap в Java?
Поскольку строки неизменяемы, их хэш код вычисляется и кэшируется в момент создания, не требуя повторного пересчета при дальнейшем использовании. Поэтому в качестве ключа HashMap они будут обрабатываться быстрее.
👍23
Инструментация байт-кода Java
В рамках текущей статьи будет рассказано о способах инструментации байт-кода java или, другим языком, внесения изменений в компилированные файлы java .class. Здесь будут приведены примеры работы с фреймворками Javaassist и ASM и базовое описание байт-кода.
Смотреть статью
В рамках текущей статьи будет рассказано о способах инструментации байт-кода java или, другим языком, внесения изменений в компилированные файлы java .class. Здесь будут приведены примеры работы с фреймворками Javaassist и ASM и базовое описание байт-кода.
Смотреть статью
👍4
Выберите функциональный дескриптор для функционального интерфейса представленного на картинке.
Anonymous Quiz
25%
int -> String
75%
String -> int
👍15
«Входить в IT неспеша» или как стать Middle Java Backend разработчиком минуя ступень Junior
Статья о том, как шаг за шагом при дефиците свободного времени обучиться и устроиться на работу сразу Middle Java разработчиком перескочив через Junior ступеньку, основанная на личном опыте, и о том, как мне это помогло, когда сразу после трудоустройства пришлось тянуть проект практически в solo.
Смотреть статью
Статья о том, как шаг за шагом при дефиците свободного времени обучиться и устроиться на работу сразу Middle Java разработчиком перескочив через Junior ступеньку, основанная на личном опыте, и о том, как мне это помогло, когда сразу после трудоустройства пришлось тянуть проект практически в solo.
Смотреть статью
👍5😢3
#Вопросы_с_собеседования
Что представляет собой «обмен сообщениями»?
Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия. В
Пусть требуется создать физическую модель, описывающую сталкивающиеся шары разных размеров. Традиционный подход к решению этой задачи примерно таков: определяется набор данных, описывающих каждый шар (например, его координаты, массу и ускорение); каждому шару присваивается уникальный идентификатор (например, организуется массив, значение индекса которого соответствует номеру шара), который позволит отличать каждый из шаров от всех других. Наконец, пишется подпрограмма с названием, скажем, bounce; эта процедура должна на основе номера шара и его начальных параметров соответствующим образом изменять данные, описывающие шар. В отличие от традиционного подхода объектно-ориентированная версия программы моделирует каждый из шаров посредством объекта. При этом объект, соответствующий конкретному шару, содержит не только его параметры, но и весь код, описывающий поведение шара при различных взаимодействиях. Так, каждый шар будет иметь собственный метод bounce(). Вместо того, чтобы вызывать подпрограмму bounce с аргументом, определяющим, скажем, шар №3, необходимо будет передать объекту «шар №3» сообщение, предписывающее ему выполнить столкновение.
Что представляет собой «обмен сообщениями»?
Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия. В
ООП посылка сообщения (вызов метода) — это единственный путь передать управление объекту. Если объект должен «отвечать» на это сообщение, то у него должна иметься соответствующий данному сообщению метод. Так же объекты, используя свои методы, могут и сами посылать сообщения другим объектам. Обмен сообщениями реализуется с помощью динамических вызовов, что приводит к чрезвычайно позднему связыванию (extreme late binding).Пусть требуется создать физическую модель, описывающую сталкивающиеся шары разных размеров. Традиционный подход к решению этой задачи примерно таков: определяется набор данных, описывающих каждый шар (например, его координаты, массу и ускорение); каждому шару присваивается уникальный идентификатор (например, организуется массив, значение индекса которого соответствует номеру шара), который позволит отличать каждый из шаров от всех других. Наконец, пишется подпрограмма с названием, скажем, bounce; эта процедура должна на основе номера шара и его начальных параметров соответствующим образом изменять данные, описывающие шар. В отличие от традиционного подхода объектно-ориентированная версия программы моделирует каждый из шаров посредством объекта. При этом объект, соответствующий конкретному шару, содержит не только его параметры, но и весь код, описывающий поведение шара при различных взаимодействиях. Так, каждый шар будет иметь собственный метод bounce(). Вместо того, чтобы вызывать подпрограмму bounce с аргументом, определяющим, скажем, шар №3, необходимо будет передать объекту «шар №3» сообщение, предписывающее ему выполнить столкновение.
👍8
#Вопросы_с_собеседования
Каковы особенности многопоточности в Java EE и Spring?
Одной из особенностей многопоточности в
Ещё одна важная особенность - использование пулов потоков для более эффективного использования ресурсов и увеличение производительности.
Также в
Каковы особенности многопоточности в Java EE и Spring?
Одной из особенностей многопоточности в
Java EE и Spring является использование синхронизации и примитивов синхронизации, таких как блокировки и семафоры, для предотвращения конфликтов между потоками. Ещё одна важная особенность - использование пулов потоков для более эффективного использования ресурсов и увеличение производительности.
Также в
Spring есть возможность использования асинхронных методов, что позволяет не блокировать основной поток выполнения и ускорять обработку запросов.👍10😢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!
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, а также соответствующие геттеры и сеттеры для доступа к этим полям. Геттеры используются для получения значений полей, а сеттеры - для установки новых значений.👍9❤4
Что такое аргумент метода?
Anonymous Quiz
3%
переменная, в которую записывается результат работы метода
82%
значение или переменная, передаваемая в метод для участия в его работе
3%
значение, указываемое после ключевого слова "return"
4%
любая переменная, участвующая в работе метода
8%
переменная, объявленная в теле метода
👍21
Что такое FutureTask?
FutureTask представляет собой отменяемое асинхронное вычисление в параллельном Java приложении. Этот класс предоставляет базовую реализацию Future, с методами для запуска и остановки вычисления, методами для запроса состояния вычисления и извлечения результатов. Результат может быть получен только когда вычисление завершено, метод получения будет заблокирован, если вычисление ещё не завершено. Объекты FutureTask могут быть использованы для обёртки объектов Callable и Runnable. Так как FutureTask реализует Runnable, его можно передать в Executor на выполнение.👍13