Java Learning
19.1K subscribers
1.6K photos
1 video
3 files
974 links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
Сжатие указателей в Java

В статье речь пойдет о реализации сжатия указателей в Java Virtual Machine 64-bit, которое контролируется опцией UseCompressedOops и включено по-умолчанию для 64 битных систем начиная с Java SE 6u23.

Смотреть статью
👍5
#Вопросы_с_собеседования

Можно ли создавать новые экземпляры класса, пока выполняется static synchronized метод?

Ответ:
Да, можно создавать новые экземпляры класса, так как статические поля не принадлежат к экземплярам класса.
👍39👎1
👍1
Что выведет код сверху?
Anonymous Quiz
33%
1,2
11%
5,2
47%
1,6
10%
5,6
👍40😱111
MyBatis

MyBatis фреймворк для осуществления маппинга между Java-приложениями и базами данных SQL. Обычно для подключения приложения к реляционной БД необходим API Java Database Connectivity. Он позволяет разработчикам выполнять крупные SQL-операции за несколько строчек кода.

MyBatis сравнивают с фреймворком Hibernate, так как оба являются посредниками между приложением и базой данных. Единственное отличие в том, что MyBatis не делает маппинг объектов Java в реляционную БД.

https://mybatis.org/mybatis-3/
👍17
#Вопросы_с_собеседования

Что такое deadlock?

Взаимная блокировка (deadlock) - явление, при котором все потоки находятся в режиме ожидания. Происходит, когда достигаются состояния:

1) взаимного исключения: по крайней мере один ресурс занят в режиме неделимости и, следовательно, только один поток может использовать ресурс в любой данный момент времени.
2) удержания и ожидания: поток удерживает как минимум один ресурс и запрашивает дополнительные ресурсов, которые удерживаются другими потоками.
3) отсутствия предочистки: операционная система не переназначивает ресурсы: если они уже заняты, они должны отдаваться удерживающим потокам сразу же.
4) цикличного ожидания: поток ждёт освобождения ресурса, другим потоком, который в свою очередь ждёт освобождения ресурса заблокированного первым потоком.

Простейший способ избежать взаимной блокировки – не допускать цикличного ожидания. Этого можно достичь, получая мониторы разделяемых ресурсов в определённом порядке и освобождая их в обратном порядке.
👍17
#Вопросы_с_собеседования

Скомпилируется ли код с картинки?

Ответ:
Да, код будет скомпилирован, потому что он следует спецификации функционального интерфейса, определяющей только один абстрактный метод. Второй метод, count, является методом по умолчанию, который не увеличивает количество абстрактных методов.
👍26
#Вопросы_с_собеседования

Как вызывать static метод интерфейса?

Используя имя интерфейса(см код на картинке).
👍16
#Вопросы_с_собеседования

В каком случае может быть потерян элемент в HashMap?

Допустим, в качестве ключа используется не примитив, а объект с несколькими полями. После добавления элемента в HashMap у объекта, который выступает в качестве ключа, изменяют одно поле, которое участвует в вычислении хэш-кода. В результате при попытке найти данный элемент по исходному ключу, будет происходить обращение к правильной корзине, а вот equals уже не найдет указанный ключ в списке элементов.

Тем не менее, даже если equals реализован таким образом, что изменение данного поля объекта не влияет на результат, то после увеличения размера корзин и пересчета хэш-кодов элементов, указанный элемент, с измененным значением поля, с большой долей вероятности попадет в совершенно другую корзину и тогда уже потеряется совсем.
👍23
#Вопросы_с_собеседования

Что выведет код сверху?

Ответ:
Compilation error

Null не является объектом в Java.

Компилятор Java предпочитает метод, который имеет более конкретные параметры.

Строка - это объект класса java.lang.Строка. Следовательно, строка более специфична, чем класс Object, но она в равной степени специфична и для класса Integer. Следовательно, значение null не может соответствовать какой-либо функции, поскольку оно не может выбирать между строкой и целым числом.
👍34🔥4😱2😢1
#Вопросы_с_собеседования

Опишите различные типы примитивов и объемы памяти, которые они занимают.

Java имеет 8 примитивных типов:
☕️ boolean — логическое значение true/false. Размер логического значения не определяется спецификацией JVM и может различаться в разных реализациях
☕️ byte — 8-битное значение со знаком
☕️ short — 16-битное значение со знаком
☕️ char — беззнаковое 16-битное значение
☕️ int — 32-битное значение со знаком
☕️ long — 64-битное значение со знаком
☕️ float — 32-битное значение с плавающей запятой одинарной точности, соответствующее стандарту IEEE 754
☕️ double — 64-битное значение с плавающей запятой двойной точности, соответствующее стандарту IEEE 754
👍46
Советы по оптимизации кода на Java: как не наступать на грабли

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

Смотреть статью
👍141
Классы StringBuilder и StringBuffer

Классы StringBuffer и StringBuilder в Java используются, когда возникает необходимость сделать много изменений в строке символов.

В отличие от строк, объекты типа StringBuffer и StringBuilder могут быть изменены снова и снова, оставляя после себя множество новых неиспользуемых объектов.

В Java StringBuilder был введен начиная с Java 5. Основное различие между StringBuffer и StringBuilder такое, что методы StringBuilder не являются безопасными для потоков (несинхронизированные).

Рекомендуется использовать StringBuilder всякий раз, когда это возможно, потому что он быстрее, чем StringBuffer в Java. Однако, если необходима безопасность потоков, наилучшим вариантом являются объекты StringBuffer.
👍30👎1
#Вопросы_с_собеседования

Какие виды ссылок на методы вы знаете?

☕️ ссылки на статические методы;
☕️ ссылки на методы экземпляра;
☕️ ссылки на конструкторы;
☕️ ссылки на обобщенные (шаблонные) методы.
👍29
#Вопросы_с_собеседования

Напишите программу на Java для вставки данного элемента в очередь с приоритетами

Ответ на картинке.
👍21
#Вопросы_с_собеседования

Скомпилируется ли код с картинки?

Ответ:
Да. При цепочке исключений компилятор заботится только о первом в цепочке, и, поскольку он обнаруживает непроверяемое исключение, не нужно добавлять throws.
👍23
#Вопросы_с_собеседования

Как конвертировать массив в список?

Используется метод Arrays.asList(), который преобразует массив в список.
👍44🤔21
Модификатор volatile

В Java модификатор volatile используется, чтобы позволить знать JVM, что поток доступа к переменной всегда должен объединять свою собственную копию переменной с главной копией в памяти.

Доступ к volatile переменной синхронизирует все кэшированные скопированные переменные в оперативной памяти. Ссылка на объект volatile может быть null.

Как правило, run() вызывается в одном потоке, а stop() вызывается из другого потока. Если в строке 1 используется кэшированное значение active, то цикл не может остановиться, пока вы не установите active = false в строке 2.
👍23👎2
#Вопросы_с_собеседования

В чем разница между & и &&?

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