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
SingleThreadPoolExecutor

SingleThreadPoolExecutor — это класс из пакета java.util.concurrent, который представляет собой пул потоков с одним потоком. Это означает, что все задачи, которые выполняются в этом пуле, выполняются в одном и том же потоке.

SingleThreadPoolExecutor имеет следующие конструкторы:
SingleThreadPoolExecutor(int corePoolSize) — создает пул с заданным количеством ядер процессора.
SingleThreadPoolExecutor(int corePoolSize, long keepAliveTime, TimeUnit unit) — создает пул с заданным количеством ядер процессора, а также временем ожидания перед уничтожением незадействованных потоков.

SingleThreadPoolExecutor имеет следующие методы:
execute(Runnable task) — выполняет указанную задачу в пуле.
submit(Runnable task) — выполняет указанную задачу в пуле и возвращает Future, который можно использовать для получения результата выполнения задачи.
shutdown() — останавливает пул и ждет, пока все задачи не будут выполнены.

#для_продвинутых
👍11😢2
Мемасик
😁105🤔2😢1
Дорогие подписчики, поздравляю вас с наступающим, а кого-то уже и с наступившим Новом Годом! Пусть 2024 станет для вас чем-то особенным и незабываемым.
🎄565👍4🔥4
#Вопросы_с_собеседования
Как работает механизм 'Double Brace Initialization' и какие потенциальные проблемы он может создать?


'Double Brace Initialization' в Java - это техника инициализации объектов, которая использует двойные фигурные скобки. Первая скобка создает анонимный внутренний класс, а вторая - блок инициализации этого класса. Этот метод часто используется для удобной инициализации коллекций. Однако он может привести к утечкам памяти, поскольку анонимный внутренний класс держит неявную ссылку на внешний класс, что может помешать сборке мусора во внешнем классе. Кроме того, он увеличивает размер класса и может влиять на производительность.
👍29
#Вопросы_с_собеседования
Объясните, как работает Java Memory Model и как это влияет на синхронизацию и параллельное выполнение в многопоточных приложениях Java


Java Memory Model (JMM) определяет, как потоки в Java взаимодействуют через общую память. Важные аспекты JMM включают понятия 'видимости' и 'упорядоченности'. Она гарантирует, что каждое действие в одном потоке перед выполнением следующего действия в другом потоке будет "заметно". Это важно для корректной синхронизации, чтобы избежать проблем, таких как гонки за данные и нарушения последовательности операций. JMM определяет, как и когда изменения, сделанные одним потоком, становятся видимыми для других, что критически важно при проектировании безопасных по отношению к потокам многопоточных приложений.
👍17😱1
PhantomHashMap

PhantomHashMap — это реализация HashMap, которая использует фантомные ссылки для отслеживания элементов, которые могут быть удалены из коллекции. Фантомные ссылки — это тип слабых ссылок, которые не препятствуют сбору мусора. Это означает, что объект, на который указывает фантомная ссылка, может быть собран мусором в любой момент времени, даже если он все еще присутствует в HashMap.

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

#для_продвинутых
👍12🤔9😢3😱1
Класс FilterOutputStream

Класс FilterOutputStream представляет собой базовый класс для потоков вывода, которые добавляют дополнительную функциональность к базовому потоку вывода. Он наследуется от класса OutputStream и реализует интерфейс Closeable.

Основная цель класса FilterOutputStream заключается в том, чтобы позволить разработчикам создавать потоки вывода, которые предоставляют дополнительные функции, не переопределяя весь набор методов базового потока вывода. Например, классы BufferedOutputStream и DataOutputStream расширяют класс FilterOutputStream, чтобы предоставлять функции буферизации и записи двоичных данных соответственно.

#для_продвинутых
👍5😱2
Forwarded from Ваня
DoubleAccumulator

DoubleAccumulator — это класс из пакета java.util.concurrent.atomic, который представляет собой атомарный аккумулятор для значений типа double. Он используется для накапливания значений типа double в потокобезопасном режиме.

DoubleAccumulator имеет следующий конструктор:

DoubleAccumulator(doubleBinaryOperator accumulatorFunction, double initialValue)


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

#для_продвинутых
👍11
#Вопросы_с_собеседования
Чем Hashtable отличается от Hashmap?


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

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

Наконец, Hashtable использует перечислитель (enumeration) для перебора значений, а HashMap использует итератор (iterator).
👍272
ByteBuffer и DirectByteBuffer

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

DirectByteBuffer — это подкласс ByteBuffer, который хранит свои данные в памяти, выделенной операционной системой. Это отличается от обычного ByteBuffer, который хранит свои данные в куче Java.

Основное преимущество DirectByteBuffer заключается в том, что он может обеспечить более высокую производительность, чем обычный ByteBuffer. Это связано с тем, что операциям ввода-вывода не нужно копировать данные из кучи Java в память операционной системы.

Однако DirectByteBuffer также имеет некоторые недостатки. Во-первых, он может потреблять больше памяти, чем обычный ByteBuffer. Во-вторых, он может быть более сложным в использовании, чем обычный ByteBuffer.

#для_продвинутых
👍84
Класс Selector

Класс Selector относится к пакету java.nio.channels и играет важную роль в работе с асинхронным вводом-выводом (NIO). Он позволяет одновременно следить за несколькими каналами (например, сокетами) и получать уведомления, когда в каком-либо канале есть возможность выполнить операцию чтения, записи или подключения.

#для_продвинутых
👍11
#Вопросы_с_собеседования
В чем разница между внедрением конструктора и внедрением сеттера?

Ответ на картинке.
👍20😱6😢2
FileChannel

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

#для_начинающих
👍13
ArrayUtils

ArrayUtils - это статический класс в библиотеке java.util.Arrays, который предоставляет различные методы для работы с массивами. Эти методы упрощают и ускоряют выполнение многих задач, связанных с массивами.

Чтобы использовать методы класса ArrayUtils, необходимо импортировать его в свой проект. Это можно сделать следующим образом:

import java.util.Arrays;


#для_продвинутых
👍23
RandomAccessFile

RandomAccessFile — это класс в пакете java.io, который позволяет выполнять произвольный доступ к файлу. Это означает, что вы можете читать и писать данные в файл в любом месте, а не только в начале или конце.

Для создания объекта RandomAccessFile необходимо передать два параметра: имя файла и режим доступа. Режим доступа может быть «r» для чтения, «w» для записи или «rw» для чтения и записи.

#для_продвинутых
👍13
#Вопросы_с_собеседования
В Java, как реализуется принцип "fail-fast" в контексте коллекций и как это отличается от подхода "fail-safe"?

В Java, "fail-fast" система немедленно выдает ConcurrentModificationException, если обнаруживает, что коллекция была изменена во время итерации, кроме изменений через сам итератор. Напротив, "fail-safe" коллекции используют механизмы, такие как копирование коллекции или блокировки, чтобы обеспечить безопасное поведение во время итераций, даже если коллекция изменяется, предотвращая ConcurrentModificationException.
👍161
Кастинг

Кастинг (приведение типов) — это операция, которая позволяет присвоить значение переменной одного типа переменной другого типа.

Существует два типа кастинга:

Расширение типа (widening casting) — это преобразование типа данных меньшей разрядности в тип данных большей разрядности. Например, преобразование типа byte в тип int, short в тип long или char в тип int.

Сужение типа (narrowing casting) — это преобразование типа данных большей разрядности в тип данных меньшей разрядности. Например, преобразование типа int в тип byte, long в тип short или double в тип float.

#для_продвинутых
👍9🔥1
Что такое BufferedInputStream?

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

Как работает BufferedInputStream?

Когда создается BufferedInputStream, он создает внутренний буфер, размер которого можно указать при создании. Затем он читает данные из базового потока в буфер. Когда приложение запрашивает чтение данных из BufferedInputStream, он сначала читает их из буфера. Если буфер пуст, BufferedInputStream читает данные из базового потока и сохраняет их в буфере.

#для_продвинутых
👍121
Класс ByteArrayOutputStream

Класс ByteArrayOutputStream представляет собой поток вывода, в котором данные пишутся в байтовый массив. Буфер автоматически растет, поскольку данные пишутся ему. Поток класса ByteArrayOutputStream создает буфер в памяти, и все данные, отправленные в поток, хранятся в буфере.

#для_продвинутых
👍9
Ключевое слово new

Ключевое слово new используется для создания нового объекта. Оно всегда используется в сочетании с именем класса, к которому принадлежит создаваемый объект. Например, чтобы создать новый объект класса String, мы можем написать код, как на картинке.

В этом примере переменная str будет ссылаться на новый объект класса String. По умолчанию, новый объект будет инициализирован значениями по умолчанию для своего типа. Например, объект класса String будет содержать пустую строку.

#для_начинающих
👍19🔥1