Что будет выведено на экран?
Anonymous Quiz
33%
20
27%
10
7%
Ошибка времени выполнения
33%
Ошибка компиляции.
👍22🎉3🏆1
В чем различия ArrayList и LinkedList?
В первую очередь в самой структуре - ArrayList "под коробкой" использует массив, следовательно, каждый раз при вставке элемента будет создаваться новый массив размера n+1(где n размер массива до вставки). Из-за этого для вставки элемента в середину списка потребуется сначала "освободить" место под новый элемент, "сдвинув" все элементы после места вставки влево. Вставка в конец массива происходит за константное время. Доступ же к элементам происходит быстрее благодаря индексу элемента.
В свою очередь в LinkedList каждый элемент "знает" своих соседей. Следовательно, что бы вставить новый элемент(удалить старый) в середину все что нам надо это записать ссылки на соседей и перезаписать у соседей. Однако для доступа по индексу необходимо "перебрать" все элементы и найти нужный индекс. Так же при использовании LinkedList следует помнить про затраты памяти на хранение связи между элементами.
В первую очередь в самой структуре - ArrayList "под коробкой" использует массив, следовательно, каждый раз при вставке элемента будет создаваться новый массив размера n+1(где n размер массива до вставки). Из-за этого для вставки элемента в середину списка потребуется сначала "освободить" место под новый элемент, "сдвинув" все элементы после места вставки влево. Вставка в конец массива происходит за константное время. Доступ же к элементам происходит быстрее благодаря индексу элемента.
В свою очередь в LinkedList каждый элемент "знает" своих соседей. Следовательно, что бы вставить новый элемент(удалить старый) в середину все что нам надо это записать ссылки на соседей и перезаписать у соседей. Однако для доступа по индексу необходимо "перебрать" все элементы и найти нужный индекс. Так же при использовании LinkedList следует помнить про затраты памяти на хранение связи между элементами.
👍43🤨3🤔2🤣2🌚1
Каким будет результат компиляции и выполнения данного кода?
Anonymous Quiz
41%
3,3
3%
0,0
4%
0,3
18%
3,0
8%
Ошибка выполнения
26%
Ошибка компиляции
👍26🔥4🎉2
В чем особенность Map в сравнении с Set и List?
Map не является наследником интерфейсов Collection или Iterable. Так же Map хранит данные в виде ключ-значение. Соответственно доступ к элементам происходит не по индексу, а по уникальному ключу. При добавлении нового элемента всегда нужно создавать для него уникальный ключ(например при использовании HashMap и не правильном заполнении ключа могут возникать коллизии - ситуации когда по ключу доступен совершенно не тот элемент который нужен).
Map не является наследником интерфейсов Collection или Iterable. Так же Map хранит данные в виде ключ-значение. Соответственно доступ к элементам происходит не по индексу, а по уникальному ключу. При добавлении нового элемента всегда нужно создавать для него уникальный ключ(например при использовании HashMap и не правильном заполнении ключа могут возникать коллизии - ситуации когда по ключу доступен совершенно не тот элемент который нужен).
👍32
В чем отличие между HashMap и Hashtable?
Hashtable потокобезопасна и синхронизирована, но из-за этого теряется производительность. Кроме того Вы не сможете записать парой ключ-значение null-null, в HashMap это доступно. У HashMap есть альтернатива - ConcurrentHashMap которая является потокобезопасной. В целом Hashtable более старый класс и появился в Java до введения Collection framework в целом и HashMap в частности.
Hashtable потокобезопасна и синхронизирована, но из-за этого теряется производительность. Кроме того Вы не сможете записать парой ключ-значение null-null, в HashMap это доступно. У HashMap есть альтернатива - ConcurrentHashMap которая является потокобезопасной. В целом Hashtable более старый класс и появился в Java до введения Collection framework в целом и HashMap в частности.
👍31
Какие существуют литералы?
Литерал – последовательность символов, обозначающая значение примитивного типа (или строки).
⏺ Целочисленные (Integer). Возможные форматы: 2019, 1__000_000 (с Java 7), 10048L (можно l, но будет путаться с 1), 0xfd12aa, 0b1011101, 07654321.
⏺ С плавающей точкой (floating-point). Возможные форматы: 123.4, 56.7e8, .07, 42F, 1.4D (избыточно, по умолчанию и так double).
⏺ Символы и строки. Символ (char) – в одинарных кавычках: 'R'. Спецсимволы пишутся с бэкслешем: '\n'. Любой символ можно представлять в виде escape-последовательности: '\u00F1'. Строковый литерал – последовательность символов в двойных кавычках: "Blabla". Для символов строки действуют те же правила.
⏺ Логические (boolean). true и false.
⏺ Специальный литерал null.
Все нюансы описаны в официальной документации.
Литерал – последовательность символов, обозначающая значение примитивного типа (или строки).
Все нюансы описаны в официальной документации.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤🔥1
Какая есть особенность у Queue? Какие порядки упорядочивания элементов Queue вы знаете?
Queue - коллекция, хранящая элементы в порядке очереди. Выделяют два порядка для упорядочивания элементов - LIFO(last-in-first-out) и FIFO(first-in-first-out) - основные отличия между ними в том что при LIFO элемент который был вставлен последний, первый же и будет возвращен/удален. При FIFO первый вставленный элемент будет возвращен(методы element() и peek()) либо удален(remove() и poll()).
Queue - коллекция, хранящая элементы в порядке очереди. Выделяют два порядка для упорядочивания элементов - LIFO(last-in-first-out) и FIFO(first-in-first-out) - основные отличия между ними в том что при LIFO элемент который был вставлен последний, первый же и будет возвращен/удален. При FIFO первый вставленный элемент будет возвращен(методы element() и peek()) либо удален(remove() и poll()).
👍22
Когда стоит выбрать char[] вместо String?
Первая, очевидная причина – оптимизация. Если вам заранее известен размер строки, и он фиксирован, может быть полезно выбрать массив. Если программа работает с неизменяемыми подстроками, удобно представить их в виде offset-ов общего массива (как это было сделано раньше в самом
Следует помнить, что оптимизировать нужно осознанно и своевременно. JVM тоже прикладывает усилия по оптимизации строк (вроде интернирования), которые могут оказаться эффективнее ваших.
Вторая, менее очевидная причина – безопасность. Строки в Java иммутабельны. Это значит, что когда вы сохраняете пароль в объекте типа String, физически уничтожить его из памяти может только сборщик мусора.
Существует способ алгоритмической атаки на систему, когда хакер своими действиями вызывает переполнение памяти, и конфиденциальная информация попадает в heap dump.
Если пароль хранится в массиве, программист может самостоятельно «занулить» значение после использования.
Первая, очевидная причина – оптимизация. Если вам заранее известен размер строки, и он фиксирован, может быть полезно выбрать массив. Если программа работает с неизменяемыми подстроками, удобно представить их в виде offset-ов общего массива (как это было сделано раньше в самом
String).Следует помнить, что оптимизировать нужно осознанно и своевременно. JVM тоже прикладывает усилия по оптимизации строк (вроде интернирования), которые могут оказаться эффективнее ваших.
Вторая, менее очевидная причина – безопасность. Строки в Java иммутабельны. Это значит, что когда вы сохраняете пароль в объекте типа String, физически уничтожить его из памяти может только сборщик мусора.
Существует способ алгоритмической атаки на систему, когда хакер своими действиями вызывает переполнение памяти, и конфиденциальная информация попадает в heap dump.
Если пароль хранится в массиве, программист может самостоятельно «занулить» значение после использования.
👍45
Как прочитать криптографический ключ?
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
22%
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