Ответ на "Оцените количество памяти на хранение одного примитива типа byte в LinkedList?"
Каждый элемент
Для
#вопросы_с_собеседований
Каждый элемент
LinkedList хранит ссылку на предыдущий элемент, следующий элемент и ссылку на данные. static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
//...
}
Для 32-битных систем каждая ссылка занимает 32 бита (4 байта). Сам объект (заголовок) вложенного класса Node занимает 8 байт. 4 + 4 + 4 + 8 = 20 байт, а т.к. размер каждого объекта в Java кратен 8, соответственно получаем 24 байта. Примитив типа byte занимает 1 байт памяти, но в JCF примитивы упаковываются: объект типа Byte занимает в памяти 16 байт (8 байт на заголовок объекта, 1 байт на поле типа byte и 7 байт для кратности 8). Также напомню, что значения от -128 до 127 кэшируются и для них новые объекты каждый раз не создаются. Таким образом, в x32 JVM 24 байта тратятся на хранение одного элемента в списке и 16 байт - на хранение упакованного объекта типа Byte. Итого 40 байт.Для
64-битной JVM каждая ссылка занимает 64 бита (8 байт), размер заголовка каждого объекта составляет 16 байт (два машинных слова). Вычисления аналогичны: 8 + 8 + 8 + 16 = 40байт и 24 байта. Итого 64 байта.#вопросы_с_собеседований
👍10
Оцените количество памяти на хранение одного примитива типа byte в ArrayList?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
👍1
Ответ на "Оцените количество памяти на хранение одного примитива типа byte в ArrayList?"
ArrayList основан на массиве, для примитивных типов данных осуществляется автоматическая упаковка значения, поэтому
В худшем случае вставка в середину списка эффективнее для
#вопросы_с_собеседований
ArrayList основан на массиве, для примитивных типов данных осуществляется автоматическая упаковка значения, поэтому
16 байт тратится на хранение упакованного объекта и 4 байта (8 для x64) - на хранение ссылки на этот объект в самой структуре данных. Таким образом, в x32 JVM 4 байта используются на хранение одного элемента и 16 байт - на хранение упакованного объекта типа Byte. Для x64 - 8 байт и 24 байта соответственно.В худшем случае вставка в середину списка эффективнее для
LinkedList. В остальных - скорее всего, для ArrayList, поскольку копирование элементов осуществляется за счет вызова быстрого системного метода System.arraycopy().#вопросы_с_собеседований
👍6
Для ArrayList или для LinkedList операция добавления элемента в середину (list.add(list.size()/2, newElement)) медленнее?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
👍1
Ответ на "Для ArrayList или для LinkedList операция добавления элемента в середину (list.add(list.size()/2, newElement)) медленнее?"
Для ArrayList:
• проверка массива на вместимость. Если вместимости недостаточно, то увеличение размера массива и копирование всех элементов в новый массив
• копирование всех элементов, расположенных правее от позиции вставки, на одну позицию вправо
• вставка элемента
Для LinkedList:
• поиск позиции вставки
• вставка элемента
В худшем случае вставка в середину списка эффективнее для
#вопросы_с_собеседований
Для ArrayList:
• проверка массива на вместимость. Если вместимости недостаточно, то увеличение размера массива и копирование всех элементов в новый массив
(O(N));• копирование всех элементов, расположенных правее от позиции вставки, на одну позицию вправо
(O(N));• вставка элемента
(O(1)).Для LinkedList:
• поиск позиции вставки
(O(N));• вставка элемента
(O(1)).В худшем случае вставка в середину списка эффективнее для
LinkedList. В остальных - скорее всего, для ArrayList, поскольку копирование элементов осуществляется за счет вызова быстрого системного метода System.arraycopy().#вопросы_с_собеседований
В реализации класса ArrayList есть следующие поля: Object[] elementData, int size. Объясните, зачем хранить отдельно size, если всегда можно взять elementData.length?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
👍1
Ответ на "В реализации класса ArrayList есть следующие поля: Object[] elementData, int size. Объясните, зачем хранить отдельно size, если всегда можно взять elementData.length?"
Размер массива
#вопросы_с_собеседований
Размер массива
elementData представляет собой вместимость (capacity) ArrayList, которая всегда больше переменной size - реального количества хранимых элементов. При необходимости вместимость автоматически возрастает.#вопросы_с_собеседований
👍5
LinkedList — это односвязный, двусвязный или четырехсвязный список?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
👍1
Ответ на "LinkedList — это односвязный, двусвязный или четырехсвязный список?"
Двусвязный: каждый элемент
#вопросы_с_собеседований
Двусвязный: каждый элемент
LinkedList хранит ссылку на предыдущий и следующий элементы.#вопросы_с_собеседований
👍5
Как перебрать элементы LinkedList в обратном порядке, не используя медленный get(index)?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Как перебрать элементы LinkedList в обратном порядке, не используя медленный get(index)?"
Для этого в
#вопросы_с_собеседований
Для этого в
LinkedList есть обратный итератор, который можно получить вызва метод descendingIterator().#вопросы_с_собеседований
😱4
Stack считается «устаревшим». Чем его рекомендуют заменять? Почему?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Stack считается «устаревшим». Чем его рекомендуют заменять? Почему?"
#вопросы_с_собеседований
Stack был добавлен в Java 1.0 как реализация стека LIFO (last-in-first-out) и является расширением коллекции Vector, хотя это несколько нарушает понятие стека (например, класс Vector предоставляет возможность обращаться к любому элементу по индексу). Является частично синхронизированной коллекцией (кроме метода добавления push()) с вытекающими отсюда последствиями в виде негативного воздействия на производительность. После добавления в Java 1.6 интерфейса Deque, рекомендуется использовать реализации именно этого интерфейса, например, ArrayDeque.#вопросы_с_собеседований
👍3👏1
Зачем нужен HashMap, если есть Hashtable?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Зачем нужен HashMap, если есть Hashtable?"
• Методы класса
•
•
Hashtable это устаревший класс и его использование не рекомендовано.
#вопросы_с_собеседований
• Методы класса
Hashtable синхронизированы, что приводит к снижению производительности, а HashMap - нет;•
HashTable не может содержать элементы null, тогда как HashMap может содержать один ключ null и любое количество значений null;•
Iterator у HashMap, в отличие от Enumeration у HashTable, работает по принципу «fail-fast» (выдает исключение при любой несогласованности данных).Hashtable это устаревший класс и его использование не рекомендовано.
#вопросы_с_собеседований
👍7
Что такое «денормализация»? Для чего она применяется?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Что такое «денормализация»? Для чего она применяется?"
Денормализация базы данных — это процесс осознанного приведения базы данных к виду, в котором она не будет соответствовать правилам нормализации. Обычно это необходимо для повышения производительности и скорости извлечения данных, за счет увеличения избыточности данных.
#вопросы_с_собеседований
Денормализация базы данных — это процесс осознанного приведения базы данных к виду, в котором она не будет соответствовать правилам нормализации. Обычно это необходимо для повышения производительности и скорости извлечения данных, за счет увеличения избыточности данных.
#вопросы_с_собеседований
👍2
Как получить доступ к переопределенным методам родительского класса?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Как получить доступ к переопределенным методам родительского класса?"
С помощью ключевого слова
С помощью ключевого слова
super мы можем обратиться к любому члену родительского класса - методу или полю, если они не определены с модификатором private.super.method();
#вопросы_с_собеседований👍4❤1
#вопросы_с_собеседований
В чем разница между композицией и агрегацией?
Ассоциация обозначает связь между объектами. Композиция и агрегация — частные случаи ассоциации «часть-целое».
Агрегация предполагает, что объекты связаны взаимоотношением «part-of» (часть). Композиция более строгий вариант агрегации. Дополнительно к требованию «part-of» накладывается условие, что экземпляр «части» может входить только в одно целое (или никуда не входить), в то время как в случае агрегации экземпляр «части» может входить в несколько целых.
Например, книга состоит из страниц, и мы не можем вырвать страницу из книги и вложить в другую книгу. Страницы четко привязаны к конкретной книге, поэтому это композиция. В тоже время мы можем взять и перенести книгу из одной библиотеки в другую - это уже агрегация.
В чем разница между композицией и агрегацией?
Ассоциация обозначает связь между объектами. Композиция и агрегация — частные случаи ассоциации «часть-целое».
Агрегация предполагает, что объекты связаны взаимоотношением «part-of» (часть). Композиция более строгий вариант агрегации. Дополнительно к требованию «part-of» накладывается условие, что экземпляр «части» может входить только в одно целое (или никуда не входить), в то время как в случае агрегации экземпляр «части» может входить в несколько целых.
Например, книга состоит из страниц, и мы не можем вырвать страницу из книги и вложить в другую книгу. Страницы четко привязаны к конкретной книге, поэтому это композиция. В тоже время мы можем взять и перенести книгу из одной библиотеки в другую - это уже агрегация.
👍3