#Вопросы_с_собеседования
Как вызывать static метод интерфейса?
Используя имя интерфейса(см код на картинке).
Как вызывать static метод интерфейса?
Используя имя интерфейса(см код на картинке).
👍16
#Вопросы_с_собеседования
❓В каком случае может быть потерян элемент в HashMap?
Допустим, в качестве ключа используется не примитив, а объект с несколькими полями. После добавления элемента в HashMap у объекта, который выступает в качестве ключа, изменяют одно поле, которое участвует в вычислении хэш-кода. В результате при попытке найти данный элемент по исходному ключу, будет происходить обращение к правильной корзине, а вот equals уже не найдет указанный ключ в списке элементов.
Тем не менее, даже если equals реализован таким образом, что изменение данного поля объекта не влияет на результат, то после увеличения размера корзин и пересчета хэш-кодов элементов, указанный элемент, с измененным значением поля, с большой долей вероятности попадет в совершенно другую корзину и тогда уже потеряется совсем.
❓В каком случае может быть потерян элемент в HashMap?
Допустим, в качестве ключа используется не примитив, а объект с несколькими полями. После добавления элемента в HashMap у объекта, который выступает в качестве ключа, изменяют одно поле, которое участвует в вычислении хэш-кода. В результате при попытке найти данный элемент по исходному ключу, будет происходить обращение к правильной корзине, а вот equals уже не найдет указанный ключ в списке элементов.
Тем не менее, даже если equals реализован таким образом, что изменение данного поля объекта не влияет на результат, то после увеличения размера корзин и пересчета хэш-кодов элементов, указанный элемент, с измененным значением поля, с большой долей вероятности попадет в совершенно другую корзину и тогда уже потеряется совсем.
👍23
#Вопросы_с_собеседования
❓Что выведет код сверху?
Ответ:
Compilation error
Null не является объектом в Java.
Компилятор Java предпочитает метод, который имеет более конкретные параметры.
Строка - это объект класса java.lang.Строка. Следовательно, строка более специфична, чем класс Object, но она в равной степени специфична и для класса Integer. Следовательно, значение null не может соответствовать какой-либо функции, поскольку оно не может выбирать между строкой и целым числом.
❓Что выведет код сверху?
Ответ:
Компилятор 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
Опишите различные типы примитивов и объемы памяти, которые они занимают.
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: как не наступать на грабли
Эти советы, в сущности, применимы в конкретных сценариях, требующих высокой производительности, поэтому совершенно нет нужды писать весь код именно в такой манере, поскольку обычно выигрыш в скорости будет мизерным, однако, на самых жарких участках разница может получиться существенной.
Смотреть статью
Эти советы, в сущности, применимы в конкретных сценариях, требующих высокой производительности, поэтому совершенно нет нужды писать весь код именно в такой манере, поскольку обычно выигрыш в скорости будет мизерным, однако, на самых жарких участках разница может получиться существенной.
Смотреть статью
Хабр
Советы по оптимизации кода на Java: как не наступать на грабли
Добрый вечер, коллеги. Перевод статьи, который мы вам предложим сегодня, призван помочь ответить на вопрос: а назрела ли необходимость целой книги по оптимизаци...
👍14❤1
Классы StringBuilder и StringBuffer
Классы StringBuffer и StringBuilder в Java используются, когда возникает необходимость сделать много изменений в строке символов.
В отличие от строк, объекты типа StringBuffer и StringBuilder могут быть изменены снова и снова, оставляя после себя множество новых неиспользуемых объектов.
В Java StringBuilder был введен начиная с Java 5. Основное различие между StringBuffer и StringBuilder такое, что методы StringBuilder не являются безопасными для потоков (несинхронизированные).
Рекомендуется использовать StringBuilder всякий раз, когда это возможно, потому что он быстрее, чем StringBuffer в Java. Однако, если необходима безопасность потоков, наилучшим вариантом являются объекты StringBuffer.
Классы StringBuffer и StringBuilder в Java используются, когда возникает необходимость сделать много изменений в строке символов.
В отличие от строк, объекты типа StringBuffer и StringBuilder могут быть изменены снова и снова, оставляя после себя множество новых неиспользуемых объектов.
В Java StringBuilder был введен начиная с Java 5. Основное различие между StringBuffer и StringBuilder такое, что методы StringBuilder не являются безопасными для потоков (несинхронизированные).
Рекомендуется использовать StringBuilder всякий раз, когда это возможно, потому что он быстрее, чем StringBuffer в Java. Однако, если необходима безопасность потоков, наилучшим вариантом являются объекты StringBuffer.
👍30👎1
#Вопросы_с_собеседования
❓Какие виды ссылок на методы вы знаете?
☕️ ссылки на статические методы;
☕️ ссылки на методы экземпляра;
☕️ ссылки на конструкторы;
☕️ ссылки на обобщенные (шаблонные) методы.
❓Какие виды ссылок на методы вы знаете?
☕️ ссылки на статические методы;
☕️ ссылки на методы экземпляра;
☕️ ссылки на конструкторы;
☕️ ссылки на обобщенные (шаблонные) методы.
👍29
#Вопросы_с_собеседования
❓Напишите программу на Java для вставки данного элемента в очередь с приоритетами
Ответ на картинке.
❓Напишите программу на Java для вставки данного элемента в очередь с приоритетами
Ответ на картинке.
👍21
#Вопросы_с_собеседования
❓Скомпилируется ли код с картинки?
Ответ:
Да. При цепочке исключений компилятор заботится только о первом в цепочке, и, поскольку он обнаруживает непроверяемое исключение, не нужно добавлять throws.
❓Скомпилируется ли код с картинки?
Ответ:
👍23
#Вопросы_с_собеседования
❓Как конвертировать массив в список?
Используется метод Arrays.asList(), который преобразует массив в список.
❓Как конвертировать массив в список?
Используется метод Arrays.asList(), который преобразует массив в список.
👍44🤔2❤1
Модификатор volatile
В Java модификатор volatile используется, чтобы позволить знать JVM, что поток доступа к переменной всегда должен объединять свою собственную копию переменной с главной копией в памяти.
Доступ к volatile переменной синхронизирует все кэшированные скопированные переменные в оперативной памяти. Ссылка на объект volatile может быть null.
Как правило, run() вызывается в одном потоке, а stop() вызывается из другого потока. Если в строке 1 используется кэшированное значение active, то цикл не может остановиться, пока вы не установите active = false в строке 2.
В Java модификатор volatile используется, чтобы позволить знать JVM, что поток доступа к переменной всегда должен объединять свою собственную копию переменной с главной копией в памяти.
Доступ к volatile переменной синхронизирует все кэшированные скопированные переменные в оперативной памяти. Ссылка на объект volatile может быть null.
Как правило, run() вызывается в одном потоке, а stop() вызывается из другого потока. Если в строке 1 используется кэшированное значение active, то цикл не может остановиться, пока вы не установите active = false в строке 2.
👍23👎2
#Вопросы_с_собеседования
❓В чем разница между & и &&?
& — это битовый оператор, а && — логический. & применим как к целым числам, так и к булевым типам, в то время как && — только к булевым. & применяется ко всем битам обеих сравниваемых переменных, а при использовании && второй аргумент может быть никак не задействован вовсе, если первый ложен.
❓В чем разница между & и &&?
& — это битовый оператор, а && — логический. & применим как к целым числам, так и к булевым типам, в то время как && — только к булевым. & применяется ко всем битам обеих сравниваемых переменных, а при использовании && второй аргумент может быть никак не задействован вовсе, если первый ложен.
👍41
#Вопросы_с_собеседования
❓В чем разница между проверяемыми и непроверяемыми исключениями?
Проверяемое исключение может быть обработано в блоке try-catch или объявлено в throws; тогда как непроверяемое исключение не требуется ни обрабатывать, ни объявлять.
Проверяемые и непроверяемые исключения также известны как исключения во время компиляции и во время выполнения соответственно.
❓В чем разница между проверяемыми и непроверяемыми исключениями?
Проверяемое исключение может быть обработано в блоке try-catch или объявлено в throws; тогда как непроверяемое исключение не требуется ни обрабатывать, ни объявлять.
Проверяемые и непроверяемые исключения также известны как исключения во время компиляции и во время выполнения соответственно.
👍27❤2👎2🔥1
#Вопросы_с_собеседования
❓Что такое стек и куча? Что хранится в каждой из этих структур памяти и как они взаимосвязаны?
Стек — это часть памяти, которая содержит информацию о вызовах вложенных методов вплоть до текущей позиции в программе. Он также содержит все локальные переменные и ссылки на объекты в куче, определенные в текущих выполняемых методах.
Эта структура позволяет среде выполнения возвращаться из метода, зная адрес, откуда он был вызван, а также очищать все локальные переменные после выхода из метода. Каждый поток имеет свой собственный стек.
Куча — это большой объем памяти, предназначенный для размещения объектов. Когда вы создаете объект с ключевым словом
❓Что такое стек и куча? Что хранится в каждой из этих структур памяти и как они взаимосвязаны?
Стек — это часть памяти, которая содержит информацию о вызовах вложенных методов вплоть до текущей позиции в программе. Он также содержит все локальные переменные и ссылки на объекты в куче, определенные в текущих выполняемых методах.
Эта структура позволяет среде выполнения возвращаться из метода, зная адрес, откуда он был вызван, а также очищать все локальные переменные после выхода из метода. Каждый поток имеет свой собственный стек.
Куча — это большой объем памяти, предназначенный для размещения объектов. Когда вы создаете объект с ключевым словом
new, он размещается в куче. Однако ссылка на этот объект находится в стеке.👍36❤1
В каком случае использование TreeSet предпочтительнее использования HashSet?
Anonymous Quiz
11%
Когда необходимо часто осуществлять обращение к элементам из Set
12%
Когда необходимо часто вставлять в Set новые элементы или удалять их
64%
Когда нужно гарантировать сохранение порядка элементов коллекции
13%
Когда нужно модифицировать производительность итератора по коллекции
👍35👎4
Метод ensureCapacity
Увеличивает размер внутреннего массива, чтобы в него поместилось количество элементов, переданных в minCapacity. Если массив достаточно вместителен, никакие преобразования не производятся.
Этот метод полезен, когда возникает потребность вместить большое количество элементов в несколько итераций. Например, при создании списка емкость его внутреннего массива — 10. При загрузке данных по сети они обрабатываются асинхронно порциями и результаты помещаются в массив. Если ожидается доставка 10 000 элементов, может быть неэффективно просто добавлять эти данные каждый раз: достаточно будет в начале обработки вызвать метод ensureCapaciry(10000) и записывать туда данные по мере необходимости.
Увеличивает размер внутреннего массива, чтобы в него поместилось количество элементов, переданных в minCapacity. Если массив достаточно вместителен, никакие преобразования не производятся.
Этот метод полезен, когда возникает потребность вместить большое количество элементов в несколько итераций. Например, при создании списка емкость его внутреннего массива — 10. При загрузке данных по сети они обрабатываются асинхронно порциями и результаты помещаются в массив. Если ожидается доставка 10 000 элементов, может быть неэффективно просто добавлять эти данные каждый раз: достаточно будет в начале обработки вызвать метод ensureCapaciry(10000) и записывать туда данные по мере необходимости.
👍23
#Вопросы_с_собеседования
❓Почему строка является популярным ключом в HashMap в Java?
Поскольку строки неизменяемы, их хэш код вычисляется и кэшируется в момент создания, не требуя повторного пересчета при дальнейшем использовании. Поэтому в качестве ключа HashMap они будут обрабатываться быстрее.
❓Почему строка является популярным ключом в HashMap в Java?
Поскольку строки неизменяемы, их хэш код вычисляется и кэшируется в момент создания, не требуя повторного пересчета при дальнейшем использовании. Поэтому в качестве ключа HashMap они будут обрабатываться быстрее.
👍45❤1
#Вопросы_с_собеседования
❓Чем похожи класс и интерфейс?
☕️ Интерфейс может содержать любое количество методов;
☕️ Интерфейс записан в файле с расширением .java, и имя интерфейса совпадает с именем файла;
☕️ Байт-код интерфейса находится в .class файле;
☕️ Интерфейсы появляются в пакетах, и их соответствующий файл байт-кода должен быть в структуре каталогов, которая совпадает с именем пакета.
❓Чем похожи класс и интерфейс?
☕️ Интерфейс может содержать любое количество методов;
☕️ Интерфейс записан в файле с расширением .java, и имя интерфейса совпадает с именем файла;
☕️ Байт-код интерфейса находится в .class файле;
☕️ Интерфейсы появляются в пакетах, и их соответствующий файл байт-кода должен быть в структуре каталогов, которая совпадает с именем пакета.
👍29🔥2❤1👎1