Как прочитать криптографический ключ?
KeyFactory – основной класс платформы Java для работы с криптографическими ключами. Набор реализаций для этой фабрики подключается с помощью механизма SPI.
Существует большое разнообразие алгоритмов шифрования: DSA, RSA, и другие. Строка-название нужного алгоритма поставляется в фабрику ключей при её создании.
KeyFactory занимается конвертацией спецификации ключа в сам публичный или приватный ключ, и обратно.
Спецификация, объект интерфейса KeySpec, – входные данные ключа. Это может быть например модуль и экспонента приватного ключа RSA.
Сами внутренние представления ключей реализуют интерфейсы PublicKey и PrivateKey – наследники общего Key.
Для каждого конкретного типа ключа используются соответствующие им классы-реализации интерфейсов.
KeyFactory – основной класс платформы Java для работы с криптографическими ключами. Набор реализаций для этой фабрики подключается с помощью механизма SPI.
Существует большое разнообразие алгоритмов шифрования: DSA, RSA, и другие. Строка-название нужного алгоритма поставляется в фабрику ключей при её создании.
KeyFactory занимается конвертацией спецификации ключа в сам публичный или приватный ключ, и обратно.
Спецификация, объект интерфейса KeySpec, – входные данные ключа. Это может быть например модуль и экспонента приватного ключа RSA.
Сами внутренние представления ключей реализуют интерфейсы PublicKey и PrivateKey – наследники общего Key.
Для каждого конкретного типа ключа используются соответствующие им классы-реализации интерфейсов.
👍12🔥2
Какими способами можно создать потоки в Java?
В Java доступны три варианта создания потока из класса - расширить класс Thread либо реализовать интерфейсы Callable или Runnable.
При использовании Thread мы запускаем поток методом start(), а описываем логику выполнения в методе run().
При использовании Runnable мы должны вызвать метод run(), а у Callable - метод call(). Так как и Runnable и Callable - интерфейсы, мы определим логику выполнения внутри их методов(Runnable и Callable являются функциональными интерфейсами которые имеют только один метод - run() и call() соответственно). Разница в этих двух интерфейсов в том что Callable возвращает результат.
В Java доступны три варианта создания потока из класса - расширить класс Thread либо реализовать интерфейсы Callable или Runnable.
При использовании Thread мы запускаем поток методом start(), а описываем логику выполнения в методе run().
При использовании Runnable мы должны вызвать метод run(), а у Callable - метод call(). Так как и Runnable и Callable - интерфейсы, мы определим логику выполнения внутри их методов(Runnable и Callable являются функциональными интерфейсами которые имеют только один метод - run() и call() соответственно). Разница в этих двух интерфейсов в том что Callable возвращает результат.
👍31🔥4🍌1
Что такое монитор?
В случае если мы, например, имеем синхронизированный метод(помеченный ключевым словом syncronized) и один из наших потоков заходит в этот метод, то этот поток блокирует этот метод для других потоков и любой другой поток которому нужно будет воспользоваться нашим методом будет "ждать" пока первый поток не закончит свою работу с методом. Про такую ситуацию говорят: "данный метод занят монитором". Монитор в Java - объект, который обеспечивает правильную работу в многопоточной среде - отметка что синхронизированный блок кода временно стал недоступен, отметка что блок кода стал доступен после выполнения, ожидание если синхронизированный блок занят другим потоком.
В случае если мы, например, имеем синхронизированный метод(помеченный ключевым словом syncronized) и один из наших потоков заходит в этот метод, то этот поток блокирует этот метод для других потоков и любой другой поток которому нужно будет воспользоваться нашим методом будет "ждать" пока первый поток не закончит свою работу с методом. Про такую ситуацию говорят: "данный метод занят монитором". Монитор в Java - объект, который обеспечивает правильную работу в многопоточной среде - отметка что синхронизированный блок кода временно стал недоступен, отметка что блок кода стал доступен после выполнения, ожидание если синхронизированный блок занят другим потоком.
👍33
Какой результат выведет следующая программа?
Anonymous Quiz
24%
Equal
66%
Not equal
9%
Ошибка компиляции
👍30
Какие есть способы синхронизации в Java?
В Java существует несколько способов синхронизации:
• по методу/блоку инициализации - с помощью ключевого слова syncronized
• по переменной - используя ключевое слово volatile
• методы wait/notify/notifyAll
• используя классы из пакета java.util.concurrent - в этом пакете собраны классы работа которых основана на атомарных операциях.
В Java существует несколько способов синхронизации:
• по методу/блоку инициализации - с помощью ключевого слова syncronized
• по переменной - используя ключевое слово volatile
• методы wait/notify/notifyAll
• используя классы из пакета java.util.concurrent - в этом пакете собраны классы работа которых основана на атомарных операциях.
👍29
Какой результат выведет следующая программа?
Anonymous Quiz
35%
A is equal to Infinity
23%
A is equal to NaN
28%
Ошибку при выполнении
15%
Ошибку компиляции
👍14
В чем разница между sleep() и wait(), notify() и notifyAll() методами?
Метод sleep()заставляет поток "заснуть" на определенное время(указывается в миллисекундах) после чего поток продолжит свою работу. Метод wait() освобождает монитор занятый потоком так что другие потоки могут использовать указанный блок кода и поток переходит в состояние waiting - поток будет ждать вызова метода notify() или notifyAll() другим потоком. Разница между notify() и notifyAll()в том что notify() "высвободит" один поток(какой именно определить нельзя) а notifyAll() "освободит" все потоки из состояния waiting в состояние running.
Метод sleep()заставляет поток "заснуть" на определенное время(указывается в миллисекундах) после чего поток продолжит свою работу. Метод wait() освобождает монитор занятый потоком так что другие потоки могут использовать указанный блок кода и поток переходит в состояние waiting - поток будет ждать вызова метода notify() или notifyAll() другим потоком. Разница между notify() и notifyAll()в том что notify() "высвободит" один поток(какой именно определить нельзя) а notifyAll() "освободит" все потоки из состояния waiting в состояние running.
👍33🤔1
Какой результат выведет следующая программа?
Anonymous Quiz
7%
Hello
39%
Hello world
13%
Программа уйдет в бесконечный цикл
41%
Программа не скомпилируется
👍27
Что такое Dead lock?
Случай когда у нас выполняются два потока(A, B) и наш первый поток(А) заблокировал метод a() и второй поток(В) заблокировал метод b() и в то же время поток А пытается получить доступ к методу b(), а поток B пытается получить доступ к методу а() называют dead lock.
Случай когда у нас выполняются два потока(A, B) и наш первый поток(А) заблокировал метод a() и второй поток(В) заблокировал метод b() и в то же время поток А пытается получить доступ к методу b(), а поток B пытается получить доступ к методу а() называют dead lock.
👍34💯2
👍29🥴10🌚3
Зачем используют потоки-демоны в Java?
Потоки-демоны это "служебные" потоки, которые работают в фоновом процессе. Они служат для "обеспечения всем необходимым" основные потоки выполнения. В случае завершения всех основных потоков потоки-демоны завершатся автоматически, не дожидаясь окончания их выполнения.
Потоки-демоны это "служебные" потоки, которые работают в фоновом процессе. Они служат для "обеспечения всем необходимым" основные потоки выполнения. В случае завершения всех основных потоков потоки-демоны завершатся автоматически, не дожидаясь окончания их выполнения.
👍32
Какой результат выведет следующая программа?
Anonymous Quiz
38%
Hello
2%
null
8%
Ошибку при выполнении
52%
Ошибку компиляции
👍22🌚4
Что такое Future в Java?
Future - это интерфейс Java который находится в пакете java.util.concurrent. Future представляет методы для определения того была ли задача выполнена, ожидание выполнения для получения результата, получение результата уже выполненной задачи. В глобальном плане Future можно описать следующим образом - мы определяем задачу для Future, Future выполняет эту задачу независимо от нас, мы получаем результат.
Future - это интерфейс Java который находится в пакете java.util.concurrent. Future представляет методы для определения того была ли задача выполнена, ожидание выполнения для получения результата, получение результата уже выполненной задачи. В глобальном плане Future можно описать следующим образом - мы определяем задачу для Future, Future выполняет эту задачу независимо от нас, мы получаем результат.
👍30
Какой результат выведет следующая программа?
Anonymous Quiz
26%
0
51%
100
5%
200
18%
Ошибку компиляции
👍27🤔11👏5🤯3