В чем разница между heap и stack?
Heap используется всеми частями приложения, в то время как stack используется лишь главным потоком выполнения программы.
Каждый раз когда мы создаем объект(практически всегда используя ключевое слово new) - этот объект хранится в heap, а в stack хранится ссылка на этот объект:
Stack - упорядоченная структура и работает по схеме LIFO(Last-In-First-Out). у heap весь доступ к объектам происходит по ссылкам из stack.
Heap в разы больше stack, stack работает быстрее благодаря структуре, stack "живет" короткий промежуток времени, в то время как heap "живет" весь "жизненный цикл" программы.
Heap используется всеми частями приложения, в то время как stack используется лишь главным потоком выполнения программы.
Каждый раз когда мы создаем объект(практически всегда используя ключевое слово new) - этот объект хранится в heap, а в stack хранится ссылка на этот объект:
Person person = new Person();тут мы создаем новый объект Person(), после чего он сразу же помещается в heap, а person становится ссылкой на этот объект и хранится в stack.
Stack - упорядоченная структура и работает по схеме LIFO(Last-In-First-Out). у heap весь доступ к объектам происходит по ссылкам из stack.
Heap в разы больше stack, stack работает быстрее благодаря структуре, stack "живет" короткий промежуток времени, в то время как heap "живет" весь "жизненный цикл" программы.
👍35🤬1
Что произойдёт при компиляции данного кода?
Anonymous Quiz
24%
Ошибка компиляции в строке 2
11%
Ошибка компиляции в строке 7
16%
Ошибка компиляции в строке 10
8%
Ошибка компиляции в строке 15
7%
Ошибка компиляции в строке 17
34%
Код скомпилируется без ошибок
👍13🤬1🍌1
Heap имеет структуру пирамиды. Это означает что самый большой элемент всегда будет занимать самую высокую позицию. Иллюстрация приведена на рисунке.
Вставляемый новый узел помещается в конец пирамиды. Но согласно условия что дочерний узел не может быть больше родительского, идет проверка с родительским узлом. Если новый элемент меньше - операция вставки закончена, если нет - новый элемент меняется местами с родительским, до момента пока родительского узла не останется(либо родительский элемент не будет больше дочернего).
Благодаря своей пирамидной структуре(если угодно - структура бинарного дерева) вставка/удаление элемента происходит за время O(logN).
Вставляемый новый узел помещается в конец пирамиды. Но согласно условия что дочерний узел не может быть больше родительского, идет проверка с родительским узлом. Если новый элемент меньше - операция вставки закончена, если нет - новый элемент меняется местами с родительским, до момента пока родительского узла не останется(либо родительский элемент не будет больше дочернего).
Благодаря своей пирамидной структуре(если угодно - структура бинарного дерева) вставка/удаление элемента происходит за время O(logN).
👍29🤩3🔥2❤1👏1
Что выведет данный код?
Anonymous Quiz
46%
21435
27%
212435
6%
122345
12%
12435
9%
Ошибка компиляции
👍20🌭3🤬2
Что такое packege access level?
В Java существует 4 модификатора доступа: 3 из них явных и один неявный. Private/public/protected - явные модификаторы, это означает что каждый из них нужно объявлять в коде. Так же существует четвёртый модификатор доступа - packege access level. Его необязательно объявлять в коде, данный модификатор означает что поле/метод будут доступны на уровне пакета или наследникам данного класса.
В Java существует 4 модификатора доступа: 3 из них явных и один неявный. Private/public/protected - явные модификаторы, это означает что каждый из них нужно объявлять в коде. Так же существует четвёртый модификатор доступа - packege access level. Его необязательно объявлять в коде, данный модификатор означает что поле/метод будут доступны на уровне пакета или наследникам данного класса.
👍21🤬3
Что означает понятие JIT?
Аббревиатура JIT означает Just-In-Time. В JRE существует подобный компилятор, который компилирует байт-код в собственный машинный код прямо во время выполнения программы. Таким образом повышается производительность Java-программ. В свою очередь JIT компилятор повышает непредсказуемость работы программы и повышает сложность отслеживания причины багов и ошибок. Так же такому компилятору необходимо гораздо больше памяти в сравнении с интерпретируемой компиляцией.
Аббревиатура JIT означает Just-In-Time. В JRE существует подобный компилятор, который компилирует байт-код в собственный машинный код прямо во время выполнения программы. Таким образом повышается производительность Java-программ. В свою очередь JIT компилятор повышает непредсказуемость работы программы и повышает сложность отслеживания причины багов и ошибок. Так же такому компилятору необходимо гораздо больше памяти в сравнении с интерпретируемой компиляцией.
👍23❤1🤬1
Каким будет результат работы программы?
Anonymous Quiz
28%
777
33%
666
11%
777 666
26%
ошибка компиляция
3%
ошибка времени выполнения
👍14
Для чего нужна Double Brace инициализация в Java?
Double Brace инициализация используется в Java для наполнения коллекций(set, list, map, queue) одновременно с их объявлением. В случае если вам необходимо создать unmodifiable коллекцию, без Double Brace инициализации нам будет необходимо создать список, положить туда необходимое кол-во элементов и создать из этого списка unmodifiableList используя Collections класс. Используя Double Brace инициализацию мы имеем возможность "положить" в unmodifiableList все необходимые элементы сразу при объявлении.
Double Brace инициализация используется в Java для наполнения коллекций(set, list, map, queue) одновременно с их объявлением. В случае если вам необходимо создать unmodifiable коллекцию, без Double Brace инициализации нам будет необходимо создать список, положить туда необходимое кол-во элементов и создать из этого списка unmodifiableList используя Collections класс. Используя Double Brace инициализацию мы имеем возможность "положить" в unmodifiableList все необходимые элементы сразу при объявлении.
👍20🐳2🔥1
Какая первая строка в этой программе станет причиной ошибки компиляции?
Anonymous Quiz
9%
6
5%
7
23%
9
37%
10
8%
12
6%
13
12%
В этом коде нет ошибок
👍16
Что такое WeakReference и SoftReference в Java? Какая разница между этими понятиями?
WeakReference и SoftReference упоминается в контексте сборки мусора.
SoftReference используется при кешировании внутри системы и будет удален сборщиком мусора в случае если осталось мало памяти, а на объект существуют только ссылки SoftReference. Это критично при кэшировании, так как наш сборщик мусора самостоятельно освободит нам память в критичной ситуации, но до этого момента не будет "трогать" эти объекты.
WeakReference - в случае если на объект ссылаются только через weak-ссылки, то объект будет удален сразу при обходе сборщиком мусора.
Это критические отличия между этими двумя типами ссылок.
WeakReference и SoftReference упоминается в контексте сборки мусора.
SoftReference используется при кешировании внутри системы и будет удален сборщиком мусора в случае если осталось мало памяти, а на объект существуют только ссылки SoftReference. Это критично при кэшировании, так как наш сборщик мусора самостоятельно освободит нам память в критичной ситуации, но до этого момента не будет "трогать" эти объекты.
WeakReference - в случае если на объект ссылаются только через weak-ссылки, то объект будет удален сразу при обходе сборщиком мусора.
Это критические отличия между этими двумя типами ссылок.
👍35👏2
Для чего используют слово static в Java? Возможно ли переопределить статический метод?
Ключевым словом staticв Java можно пометить поле, метод, блок или внутренний класс и это будет означать что этот субъект принадлежит классу, а не объекту. Иными словами - при изменении субъекта, он одинаково изменится для всех объектов данного класса.
Мы можем перегрузить статический метод, но мы не можем его переопределить, так как он принадлежит классу.
Ключевым словом staticв Java можно пометить поле, метод, блок или внутренний класс и это будет означать что этот субъект принадлежит классу, а не объекту. Иными словами - при изменении субъекта, он одинаково изменится для всех объектов данного класса.
Мы можем перегрузить статический метод, но мы не можем его переопределить, так как он принадлежит классу.
👍51
Вам нравится читать контент на этом канале?
Возможно, вы задумывались о том, чтобы купить на нем интеграцию?
Следуйте 3 простым шагам, чтобы сделать это:
1) Регистрируйтесь по ссылке: https://telega.in/c/javatasks
2) Пополняйтесь удобным способом
3) Размещайте публикацию
Если тематика вашего поста подойдет нашему каналу, мы с удовольствием опубликуем его.
Возможно, вы задумывались о том, чтобы купить на нем интеграцию?
Следуйте 3 простым шагам, чтобы сделать это:
1) Регистрируйтесь по ссылке: https://telega.in/c/javatasks
2) Пополняйтесь удобным способом
3) Размещайте публикацию
Если тематика вашего поста подойдет нашему каналу, мы с удовольствием опубликуем его.
Что будет выведено на экран?
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