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.
В Java, как реализуется принцип "fail-fast" в контексте коллекций и как это отличается от подхода "fail-safe"?
В Java, "fail-fast" система немедленно выдает ConcurrentModificationException, если обнаруживает, что коллекция была изменена во время итерации, кроме изменений через сам итератор. Напротив, "fail-safe" коллекции используют механизмы, такие как копирование коллекции или блокировки, чтобы обеспечить безопасное поведение во время итераций, даже если коллекция изменяется, предотвращая ConcurrentModificationException.
👍16❤1
Кастинг
Кастинг (приведение типов) — это операция, которая позволяет присвоить значение переменной одного типа переменной другого типа.
Существует два типа кастинга:
Расширение типа (widening casting) — это преобразование типа данных меньшей разрядности в тип данных большей разрядности. Например, преобразование типа
Сужение типа (narrowing casting) — это преобразование типа данных большей разрядности в тип данных меньшей разрядности. Например, преобразование типа
#для_продвинутых
Кастинг (приведение типов) — это операция, которая позволяет присвоить значение переменной одного типа переменной другого типа.
Существует два типа кастинга:
Расширение типа (widening casting) — это преобразование типа данных меньшей разрядности в тип данных большей разрядности. Например, преобразование типа
byte в тип int, short в тип long или char в тип int.Сужение типа (narrowing casting) — это преобразование типа данных большей разрядности в тип данных меньшей разрядности. Например, преобразование типа
int в тип byte, long в тип short или double в тип float.#для_продвинутых
👍9🔥1
Что такое BufferedInputStream?
Как работает BufferedInputStream?
Когда создается
#для_продвинутых
BufferedInputStream — это класс ввода-вывода Java, который добавляет буферизацию к базовому потоку ввода. Это означает, что он хранит данные из базового потока в памяти, чтобы их можно было читать большими порциями. Это может повысить производительность ввода-вывода, особенно при чтении из больших файлов.Как работает BufferedInputStream?
Когда создается
BufferedInputStream, он создает внутренний буфер, размер которого можно указать при создании. Затем он читает данные из базового потока в буфер. Когда приложение запрашивает чтение данных из BufferedInputStream, он сначала читает их из буфера. Если буфер пуст, BufferedInputStream читает данные из базового потока и сохраняет их в буфере.#для_продвинутых
👍12❤1
Класс ByteArrayOutputStream
Класс
#для_продвинутых
Класс
ByteArrayOutputStream представляет собой поток вывода, в котором данные пишутся в байтовый массив. Буфер автоматически растет, поскольку данные пишутся ему. Поток класса ByteArrayOutputStream создает буфер в памяти, и все данные, отправленные в поток, хранятся в буфере.#для_продвинутых
👍9
Ключевое слово new
Ключевое слово new используется для создания нового объекта. Оно всегда используется в сочетании с именем класса, к которому принадлежит создаваемый объект. Например, чтобы создать новый объект класса String, мы можем написать код, как на картинке.
В этом примере переменная str будет ссылаться на новый объект класса String. По умолчанию, новый объект будет инициализирован значениями по умолчанию для своего типа. Например, объект класса String будет содержать пустую строку.
#для_начинающих
Ключевое слово new используется для создания нового объекта. Оно всегда используется в сочетании с именем класса, к которому принадлежит создаваемый объект. Например, чтобы создать новый объект класса String, мы можем написать код, как на картинке.
В этом примере переменная str будет ссылаться на новый объект класса String. По умолчанию, новый объект будет инициализирован значениями по умолчанию для своего типа. Например, объект класса String будет содержать пустую строку.
#для_начинающих
👍19🔥1
Интерфейс Function
Функциональный интерфейс
#для_продвинутых
Функциональный интерфейс
Function представляет собой интерфейс, который используется для представления функции, принимающей один аргумент и возвращающей результат. Он является частью пакета java.util.function и был введен в Java 8 для поддержки функционального программирования.#для_продвинутых
👍13
#Вопросы_с_собеседования
Что такое цепочка конструкторов?
Цепочка конструкторов – это процесс вызова одного конструктора из другого по отношению к текущему объекту. Цепочка конструкторов возможна только в устаревших версиях, когда конструктор подкласса отвечает за вызов конструктора суперкласса первым. В цепочке конструкторов может быть любое количество классов. Цепочка конструкторов может быть достигнута двумя способами:
1) В том же классе, используя this().
2) Из базового класса с использованием super().
Что такое цепочка конструкторов?
Цепочка конструкторов – это процесс вызова одного конструктора из другого по отношению к текущему объекту. Цепочка конструкторов возможна только в устаревших версиях, когда конструктор подкласса отвечает за вызов конструктора суперкласса первым. В цепочке конструкторов может быть любое количество классов. Цепочка конструкторов может быть достигнута двумя способами:
1) В том же классе, используя this().
2) Из базового класса с использованием super().
👍12❤2
#Вопросы_с_собеседования
Чем отличается переопределение от перегрузки?
Переопределение — это возможность наследника предоставить свою реализацию метода, который уже предоставлен в родительском классе. При переопределении сигнатура метода (имя и параметры) в суперклассе и дочернем классе должны совпадать.
Перегрузка — это возможность определить несколько методов с одинаковым именем, но разными параметрами. При перегрузке сигнатура методов должна различаться по количеству, типу или порядку параметров.
Чем отличается переопределение от перегрузки?
Переопределение — это возможность наследника предоставить свою реализацию метода, который уже предоставлен в родительском классе. При переопределении сигнатура метода (имя и параметры) в суперклассе и дочернем классе должны совпадать.
Перегрузка — это возможность определить несколько методов с одинаковым именем, но разными параметрами. При перегрузке сигнатура методов должна различаться по количеству, типу или порядку параметров.
👍25❤1
DelayQueue
Элементы
#для_продвинутых
DelayQueue — это очередь, которая хранит элементы в порядке их задержки. Элементы в очереди извлекаются только после истечения их задержки.DelayQueue реализует интерфейс BlockingQueue, поэтому элементы могут извлекаться из нее только блокирующими методами take() или poll(long timeout, TimeUnit unit).Элементы
DelayQueue должны реализовывать интерфейс Delayed. Интерфейс Delayed определяет два метода:getDelay(): возвращает оставшуюся задержку элемента в миллисекундах.isExpired(): возвращает true, если задержка элемента истекла.#для_продвинутых
👍11
Что такое интерфейс Cloneable?
Это маркерный интерфейс, то есть он не содержит никаких методов, а только сигнализирует о том, что объекты класса, реализующего этот интерфейс, могут быть клонированы.
Клонирование объекта означает создание его независимой копии.
Как работает клонирование в Java?
1. Реализация интерфейса
2. Переопределение метода
3. Вызов метода
#для_продвинутых
Это маркерный интерфейс, то есть он не содержит никаких методов, а только сигнализирует о том, что объекты класса, реализующего этот интерфейс, могут быть клонированы.
Клонирование объекта означает создание его независимой копии.
Как работает клонирование в Java?
1. Реализация интерфейса
Cloneable: Класс, объекты которого вы хотите клонировать, должен реализовывать интерфейс Cloneable.2. Переопределение метода
clone(): Вам необходимо переопределить метод clone() из класса Object в вашем классе. Этот метод возвращает копию объекта.3. Вызов метода
clone(): Чтобы создать копию объекта, вызовите метод clone() у этого объекта.#для_продвинутых
👍15
Атомарные переменные в Java.util.concurrent
Пакет
Ниже перечислены все переменные, определенные в пакете:
В этом примере создается
Пакет
java.util.concurrent.atomic определяет классы, которые поддерживают атомарные операции над отдельными переменными. Все классы имеют методы get и set, которые работают как чтение и запись волатильных переменных. То есть set имеет отношение happens-before с любым последующим get на той же переменной. Ниже перечислены все переменные, определенные в пакете:
AtomicBoolean, AtomicInteger, AtomicLong, AtomicReference.В этом примере создается
AtomicInteger со значением 0. Затем значение инкрементируется с помощью метода incrementAndGet(). В конце значение получается с помощью метода get().👍11
Даны 3 потока Т1, Т2 и Т3? Как реализовать выполнение в последовательности Т1, Т2, Т3?
Такой последовательности выполнения можно достичь многими способами, например просто воспользоваться методом
Такой последовательности выполнения можно достичь многими способами, например просто воспользоваться методом
join(), чтобы запустить поток в момент, когда другой уже закончит своё выполнение. Для реализации заданной последовательности, нужно запустить последний поток первым, и затем вызывать метод join() в обратном порядке, то есть Т3 вызывает Т2.join, а Т2 вызывает Т1.join, таким образом Т1 закончит выполнение первым, а Т3 последним.👍22
ExecutorService
Лучший вариант использования
В этом примере создается
ExecutorService — это API JDK, который упрощает запуск задач в асинхронном режиме. В общем смысле, ExecutorService автоматически предоставляет пул потоков и API для назначения задач. Лучший вариант использования
ExecutorService — это обработка независимых задач, таких как транзакции или запросы по схеме "один поток для одной задачи".В этом примере создается
ExecutorService с помощью фабричного метода Executors.newSingleThreadExecutor(). Затем запускается задача с помощью метода submit(). В конце работы ExecutorService завершается с помощью метода shutdown().👍15
Класс Character
Класс
#для_начинающих
Класс
Character в Java является классом-обёрткой для примитивного типа данных char. Он предоставляет несколько полезных методов для работы с символами, таких как проверка на принадлежность к различным категориям (цифры, буквы, пробелы и т.д.) и преобразование регистров.#для_начинающих
👍13
Класс System
Класс
Класс
Класс
#для_начинающих
Класс
System представляет собой системный класс, который предоставляет набор методов и свойств, позволяющих взаимодействовать с операционной системой, окружением выполнения и осуществлять различные системные операции.Класс
System является частью пакета java.lang, который импортируется по умолчанию во все программы на Java.Класс
System является важным инструментом для взаимодействия с операционной системой и окружением выполнения. Он предоставляет широкий набор методов и свойств, которые могут быть использованы для различных целей.#для_начинающих
👍22
Класс Calendar
Класс
Момент времени можно представить в виде значения в миллисекундах, которое является смещением от эпохи, 1 января 1970 года 00:00:00.000 GMT (григорианский). Класс также предоставляет дополнительные поля и методы для реализации конкретной системы календаря за пределами пакета. Эти поля и методы определены как protected.
#для_продвинутых
Класс
Calendar представляет собой абстрактный класс, который предоставляет методы для преобразования между конкретным моментом времени и набором полей календаря, таких как год, месяц, день, часы, минуты, секунды и т. д., а также для манипулирования полями календаря, такими как получение даты следующей недели.Момент времени можно представить в виде значения в миллисекундах, которое является смещением от эпохи, 1 января 1970 года 00:00:00.000 GMT (григорианский). Класс также предоставляет дополнительные поля и методы для реализации конкретной системы календаря за пределами пакета. Эти поля и методы определены как protected.
#для_продвинутых
👍14❤1
Класс TimeZone
Класс
Класс
#для_продвинутых
Класс
TimeZone представляет собой часовой пояс. Часовой пояс — это географическая область, в которой используется один и тот же стандарт времени.Класс
TimeZone имеет несколько методов для работы с часовыми поясами. Например, метод getAvailableIDs() возвращает список всех известных часовых поясов. Метод getTimeZone(String id) возвращает объект TimeZone по его идентификатору.#для_продвинутых
👍13❤1
DecimalFormat
Чтобы использовать
Шаблон — это строка, которая определяет, как будет отображаться число.
#для_продвинутых
DecimalFormat — это класс, предназначенный для форматирования десятичных чисел. Он имеет множество параметров, которые позволяют настроить вывод числа в соответствии с вашими потребностями.Чтобы использовать
DecimalFormat, сначала вам нужно создать экземпляр класса. Вы можете сделать это, используя конструктор без параметров или конструктор с шаблоном.Шаблон — это строка, которая определяет, как будет отображаться число.
#для_продвинутых
👍7