👍38🔥2
#Вопросы_с_собеседования
❓Как работает HashMap при попытке сохранить в него два элемента по ключам с одинаковым hashCode(), но для которых equals() == false?
По значению
❓Как работает HashMap при попытке сохранить в него два элемента по ключам с одинаковым hashCode(), но для которых equals() == false?
По значению
hashCode() вычисляется индекс ячейки массива, в список которой этот элемент будет добавлен. Перед добавлением осуществляется проверка на наличие элементов в этой ячейке. Если элементы с таким hashCode() уже присутствует, но их equals() методы не равны, то элемент будет добавлен в конец списка.👍21
#Вопросы_с_собеседования
❓Кто кого расширяет: Queue расширяет Deque, или Deque расширяет Queue?
Queue - это очередь, которая обычно (но необязательно) строится по принципу FIFO (First-In-First-Out) - соответственно извлечение элемента осуществляется с начала очереди, вставка элемента - в конец очереди. Хотя этот принцип нарушает, к примеру, PriorityQueue, использующая «natural ordering» или переданный Comparator при вставке нового элемента.
Deque (Double Ended Queue) расширяет Queue и согласно документации, это линейная коллекция, поддерживающая вставку/извлечение элементов с обоих концов. Помимо этого, реализации интерфейса Deque могут строится по принципу FIFO, либо LIFO.
Реализации и Deque, и Queue обычно не переопределяют методы equals() и hashCode(), вместо этого используются унаследованные методы класса Object, основанные на сравнении ссылок.
❓Кто кого расширяет: Queue расширяет Deque, или Deque расширяет Queue?
Queue - это очередь, которая обычно (но необязательно) строится по принципу FIFO (First-In-First-Out) - соответственно извлечение элемента осуществляется с начала очереди, вставка элемента - в конец очереди. Хотя этот принцип нарушает, к примеру, PriorityQueue, использующая «natural ordering» или переданный Comparator при вставке нового элемента.
Deque (Double Ended Queue) расширяет Queue и согласно документации, это линейная коллекция, поддерживающая вставку/извлечение элементов с обоих концов. Помимо этого, реализации интерфейса Deque могут строится по принципу FIFO, либо LIFO.
Реализации и Deque, и Queue обычно не переопределяют методы equals() и hashCode(), вместо этого используются унаследованные методы класса Object, основанные на сравнении ссылок.
👍21
👍43❤1
#Вопросы_с_собеседования
Какие преимущества есть у многопоточности?
1) Многопоточность позволяет приложению / программе всегда реагировать на ввод, даже если она уже выполняется с некоторыми фоновыми задачами;
2) Многопоточность позволяет быстрее выполнять задачи, поскольку потоки выполняются независимо;
3) Многопоточность обеспечивает лучшее использование кэш-памяти, поскольку потоки разделяют общие ресурсы памяти;
4) Многопоточность уменьшает количество требуемого сервера, поскольку один сервер может одновременно выполнять несколько потоков.
Какие преимущества есть у многопоточности?
1) Многопоточность позволяет приложению / программе всегда реагировать на ввод, даже если она уже выполняется с некоторыми фоновыми задачами;
2) Многопоточность позволяет быстрее выполнять задачи, поскольку потоки выполняются независимо;
3) Многопоточность обеспечивает лучшее использование кэш-памяти, поскольку потоки разделяют общие ресурсы памяти;
4) Многопоточность уменьшает количество требуемого сервера, поскольку один сервер может одновременно выполнять несколько потоков.
👍34👎1
Сжатие указателей в Java
В статье речь пойдет о реализации сжатия указателей в Java Virtual Machine 64-bit, которое контролируется опцией UseCompressedOops и включено по-умолчанию для 64 битных систем начиная с Java SE 6u23.
Смотреть статью
В статье речь пойдет о реализации сжатия указателей в Java Virtual Machine 64-bit, которое контролируется опцией UseCompressedOops и включено по-умолчанию для 64 битных систем начиная с Java SE 6u23.
Смотреть статью
Хабр
Сжатие указателей в Java
В статье речь пойдет о реализации сжатия указателей в Java Virtual Machine 64-bit, которое контролируется опцией UseCompressedOops и включено по-умолчанию для 6...
👍5
#Вопросы_с_собеседования
❓Можно ли создавать новые экземпляры класса, пока выполняется static synchronized метод?
Ответ:
Да, можно создавать новые экземпляры класса, так как статические поля не принадлежат к экземплярам класса.
❓Можно ли создавать новые экземпляры класса, пока выполняется static synchronized метод?
Ответ:
👍39👎1
👍40😱11❤1
MyBatis
MyBatis фреймворк для осуществления маппинга между Java-приложениями и базами данных SQL. Обычно для подключения приложения к реляционной БД необходим API Java Database Connectivity. Он позволяет разработчикам выполнять крупные SQL-операции за несколько строчек кода.
MyBatis сравнивают с фреймворком Hibernate, так как оба являются посредниками между приложением и базой данных. Единственное отличие в том, что MyBatis не делает маппинг объектов Java в реляционную БД.
https://mybatis.org/mybatis-3/
MyBatis фреймворк для осуществления маппинга между Java-приложениями и базами данных SQL. Обычно для подключения приложения к реляционной БД необходим API Java Database Connectivity. Он позволяет разработчикам выполнять крупные SQL-операции за несколько строчек кода.
MyBatis сравнивают с фреймворком Hibernate, так как оба являются посредниками между приложением и базой данных. Единственное отличие в том, что MyBatis не делает маппинг объектов Java в реляционную БД.
https://mybatis.org/mybatis-3/
mybatis.org
MyBatis 3 | Introduction – mybatis
👍17
#Вопросы_с_собеседования
❓Что такое deadlock?
Взаимная блокировка (deadlock) - явление, при котором все потоки находятся в режиме ожидания. Происходит, когда достигаются состояния:
1) взаимного исключения: по крайней мере один ресурс занят в режиме неделимости и, следовательно, только один поток может использовать ресурс в любой данный момент времени.
2) удержания и ожидания: поток удерживает как минимум один ресурс и запрашивает дополнительные ресурсов, которые удерживаются другими потоками.
3) отсутствия предочистки: операционная система не переназначивает ресурсы: если они уже заняты, они должны отдаваться удерживающим потокам сразу же.
4) цикличного ожидания: поток ждёт освобождения ресурса, другим потоком, который в свою очередь ждёт освобождения ресурса заблокированного первым потоком.
Простейший способ избежать взаимной блокировки – не допускать цикличного ожидания. Этого можно достичь, получая мониторы разделяемых ресурсов в определённом порядке и освобождая их в обратном порядке.
❓Что такое deadlock?
Взаимная блокировка (deadlock) - явление, при котором все потоки находятся в режиме ожидания. Происходит, когда достигаются состояния:
1) взаимного исключения: по крайней мере один ресурс занят в режиме неделимости и, следовательно, только один поток может использовать ресурс в любой данный момент времени.
2) удержания и ожидания: поток удерживает как минимум один ресурс и запрашивает дополнительные ресурсов, которые удерживаются другими потоками.
3) отсутствия предочистки: операционная система не переназначивает ресурсы: если они уже заняты, они должны отдаваться удерживающим потокам сразу же.
4) цикличного ожидания: поток ждёт освобождения ресурса, другим потоком, который в свою очередь ждёт освобождения ресурса заблокированного первым потоком.
Простейший способ избежать взаимной блокировки – не допускать цикличного ожидания. Этого можно достичь, получая мониторы разделяемых ресурсов в определённом порядке и освобождая их в обратном порядке.
👍17
#Вопросы_с_собеседования
Скомпилируется ли код с картинки?
Ответ:
Да, код будет скомпилирован, потому что он следует спецификации функционального интерфейса, определяющей только один абстрактный метод. Второй метод, count, является методом по умолчанию, который не увеличивает количество абстрактных методов.
Скомпилируется ли код с картинки?
Ответ:
👍26
#Вопросы_с_собеседования
Как вызывать 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