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
Метод weakCompareAndSwap()

Метод weakCompareAndSwap() является одним из методов класса AtomicReference, который предоставляет атомарные операции с переменными ссылочного типа. Метод weakCompareAndSwap() выполняет операцию сравнения и обмена (compare-and-swap), которая заключается в следующем:

1. Метод проверяет текущее значение переменной.
2. Если текущее значение переменной соответствует ожидаемому значению, то метод выполняет обмен этого значения на новое значение.
3. Если текущее значение переменной не соответствует ожидаемому значению, то метод ничего не делает.

Метод weakCompareAndSwap() отличается от метода compareAndSwap() тем, что он не гарантирует полную атомарность операции сравнения и обмена. Если текущее значение переменной не соответствует ожидаемому значению, то поведение метода не определено. Он может завершиться с ошибкой или вернуть false.

#для_продвинутых
👍12
Метааннотации

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

Метааннотации могут использоваться для следующих целей:

— Определение параметров аннотаций. Метааннотации могут использоваться для определения параметров, которые будут применяться к аннотациям. Например, метааннотация @Retention определяет, когда аннотация будет доступна: в исходном коде, во время компиляции или во время выполнения.

— Определение правил для аннотаций. Метааннотации могут использоваться для определения правил, которые должны соблюдать аннотации. Метааннотация @Target определяет, к каким элементам кода можно применить аннотацию.

— Создание новых аннотаций. Метааннотации можно использовать для создания новых аннотаций. Например, можно использовать метааннотацию @Target для создания аннотации, которая может применяться только к классам.

#для_начинающих
👍152
Трюк с битовыми операциями

Этот код демонстрирует обмен значений двух переменных (a и b) без использования дополнительной временной переменной.

Он использует битовую операцию XOR (^). Ключевой момент здесь в том, что XOR двух одинаковых чисел возвращает 0, а XOR числа с 0 возвращает само это число. Таким образом, когда мы применяем XOR к a и b и затем обратно, мы фактически обмениваем их значения.
👍27😱1
Метод Character.toString()

Метод Character.toString() в Java используется для преобразования символа в строку. Он принимает в качестве аргумента символ типа char и возвращает строку, состоящую из одного символа.

Сигнатура метода:

public static String toString(char ch)


Аргумент:
ch — символ, который необходимо преобразовать в строку.

Возвращаемое значение:
Строка, состоящая из одного символа.

#для_начинающих
👍19
Блокирующий метод

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

Существует несколько способов сделать метод блокирующим. Один из способов — это использовать ключевое слово synchronized. Метод, помеченный ключевым словом synchronized, блокирует объект, на котором он вызывается. Это означает, что ни один другой поток не может вызвать этот метод, пока он не будет завершен.

Метод на картинке блокирует объект, на котором он вызывается, до тех пор, пока он не завершит свою работу.

#для_начинающих
👍16
Класс java.io.OutputStream

Класс java.io.OutputStream является абстрактным суперклассом для всех классов, представляющих выходной поток байтов в Java. Он входит в состав пакета java.io и отвечает за отправку байтов данных в определенное хранилище (sink).

Основные характеристики:
— Абстрактный класс, поэтому нельзя напрямую создавать его объекты.
— Представляет собой поток последовательных байтов.
— Предоставляет методы для записи байтов в это хранилище.
— Не гарантирует сохранения порядка байтов при записи.
— Не закрывает автоматически хранилище при окончании записи.

Основные методы:
write(byte b): записывает один байт в поток.
write(byte[] b): записывает массив байтов в поток.
write(byte[] b, int off, int len): записывает часть массива байтов в поток.
flush(): сбрасывает буфер потока, принудительно отправляя данные в хранилище.
close(): закрывает поток и освобождает ресурсы.

#для_начинающих
👍10
BeanPostProcessor

BeanPostProcessor — это интерфейс в Spring Framework, который позволяет разработчикам расширять логику создания бинов. BeanPostProcessors вызываются после того, как бин был создан и проинициализирован, но до того, как он будет зарегистрирован в контейнере Spring.

BeanPostProcessors имеют два метода обратного вызова:
postProcessBeforeInitialization(Object bean, String beanName): вызывается перед тем, как будет вызван метод init() бина.
postProcessAfterInitialization(Object bean, String beanName): вызывается после того, как будет вызван метод init() бина.

#для_продвинутых
👍16
Каким термином лучше всего описать отношение между классами Department и Employee:
Anonymous Quiz
20%
Ассоциация
34%
Композиция
33%
Агрегация
12%
Ни один из перечисленных ответов
👍172
#Вопросы_с_собеседования
Как поведёт себя уже инстанциированный итератор для collection, если вызвать collection.remove()?

При следующем вызове методов итератора будет выброшено ConcurrentModificationException.
👍17
Метод Double.compare()

Метод Double.compare() является более точным способом сравнения значений типа double, чем операторы == или !=. Это связано с тем, что числа с плавающей точкой могут быть не точными. Метод Double.compare() используется для сравнения двух значений типа double. Он возвращает целое число, указывающее на отношение между двумя значениями:

-1, если первое значение меньше второго
0, если оба значения равны
1, если первое значение больше второго

#для_начинающих
👍21
Найдите ошибку в коде

Ошибка в том, что оператор try не имеет соответствующего оператора catch. Оператор try используется для обработки исключений, но в этом случае он не обрабатывает ни одного исключения. Поэтому при возникновении исключения в блоке try будет получена ошибка:

Error:(2, 13) java: exception handling mismatch

Чтобы исправить ошибку, необходимо добавить оператор catch для обработки исключения.


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

#для_начинающих
😁21👍83
Метод executeQuery()

Метод executeQuery() в Java используется для выполнения запросов на выбор данных из базы данных. Он возвращает объект ResultSet, который представляет набор данных, возвращаемый запросом.

Синтаксис метода executeQuery() следующий:

public ResultSet executeQuery(String sql) throws SQLException;


Аргумент sql представляет собой строку, содержащую SQL-запрос. Возвращаемое значение метода executeQuery() — это объект ResultSet, который представляет собой набор данных, возвращаемый запросом. Объект ResultSet содержит информацию о столбцах данных, содержащихся в наборе данных, а также данные из каждого столбца.

#для_продвинутых
👍17
Аннотация @Entity

Аннотация @Entity используется в Java для обозначения класса, который является сущностью. Сущность — это объект, который представляет собой строку данных в базе данных.

Чтобы класс был объявлен сущностью, необходимо добавить к нему аннотацию @Entity. Аннотация @Entity сообщает фреймворку JPA, что класс Customer является сущностью и должен быть сохранен в базе данных.

#для_продвинутых
👍232
Маркер Remote

Маркер удаленности — это модификатор доступа, используемый для обозначения класса, интерфейса или метода как доступного только для удаленных объектов. Это означает, что объекты этого типа могут быть доступны только через удаленный вызов процедуры (RPC).

Класс MyRemoteClass теперь является удаленным классом, и его методы могут вызываться только удаленными объектами.

Чтобы вызвать метод удаленного класса, необходимо использовать класс RemoteStub. RemoteStub предоставляет набор методов для вызова методов удаленных классов.

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

StampedLock — это механизм блокировки, представленный в Java 8. Он отличается от других механизмов блокировки, таких как synchronized и ReentrantLock, тем, что использует концепцию меток. Метка — это целое число, которое используется для отслеживания состояния блокировки.

StampedLock поддерживает три режима блокировки:

— Обычный режим (READ): в этом режиме несколько потоков могут одновременно читать данные, защищенные блокировкой.
— Редактирование (WRITE): в этом режиме только один поток может получить доступ к данным для редактирования.
— Оптимистическая блокировка (OPTIMISTIC): в этом режиме поток может получить доступ к данным для чтения, не блокируя другие потоки. Если данные были изменены другим потоком до того, как поток закончил чтение, поток получит ошибку.

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

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

LongAdder работает следующим образом: он хранит несколько переменных, каждая из которых может быть обновлена ​​одновременно без блокировки. Когда несколько потоков пытаются обновить одно и то же значение, они распределены по этим переменным. Это позволяет снизить конкуренцию между потоками и повысить производительность.

LongAdder можно использовать в следующих случаях:
— Для хранения счетчиков, которые часто обновляются несколькими потоками.
— Для реализации распределенных счетчиков, которые могут быть обновлены ​​из любого места в сети.
— Для реализации распределенных хэш-таблиц, в которых значение хэша может быть обновлено ​​несколькими потоками.

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