#Вопросы_с_собеседования
❓Как избежать ConcurrentModificationException во время перебора коллекции?
• Попробовать подобрать или реализовать самостоятельно другой итератор, работающий по принципу fail-safe.
• Использовать
• Преобразовать список в массив и перебирать массив.
• Блокировать изменения списка на время перебора с помощью блока
Отрицательная сторона последних двух вариантов - ухудшение производительности.
❓Как избежать ConcurrentModificationException во время перебора коллекции?
• Попробовать подобрать или реализовать самостоятельно другой итератор, работающий по принципу fail-safe.
• Использовать
ConcurrentHashMap
и CopyOnWriteArrayList
.• Преобразовать список в массив и перебирать массив.
• Блокировать изменения списка на время перебора с помощью блока
synchronized
.Отрицательная сторона последних двух вариантов - ухудшение производительности.
👍19
#Вопросы_с_собеседования
❓Напишите программу, которая узнает сколько дней прошло с начала года?
Ответ на картинке.
❓Напишите программу, которая узнает сколько дней прошло с начала года?
Ответ на картинке.
👍35👎20😱3
Глубокое погружение в Java Memory Model
В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике.
Смотреть статью
В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике.
Смотреть статью
Хабр
Глубокое погружение в Java Memory Model
Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме. В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да,...
👍13
#Вопросы_с_собеседования
❓FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?
Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок
Таким образом, исходя из факта, что
❓FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?
Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок
catch(Exception ex) {}
, иначе все дальнейшие блоки catch()
уже ничего не смогут обработать, т.к. любое исключение будет соответствовать обработчику catch(Exception ex)
.Таким образом, исходя из факта, что
FileNotFoundException extends IOException
сначала нужно обработать FileNotFoundException
, а затем уже IOException
.👍43
#Вопросы_с_собеседования
❓Как и когда происходит увеличение количества корзин в HashMap?
Помимо
❓Как и когда происходит увеличение количества корзин в HashMap?
Помимо
capacity
у HashMap
есть еще поле loadFactor
, на основании которого, вычисляется предельное количество занятых корзин capacity * loadFactor
. По умолчанию loadFactor = 0.75
. По достижению предельного значения, число корзин увеличивается в 2 раза и для всех хранимых элементов вычисляется новое «местоположение» с учетом нового числа корзин.👍27
Как проверить, отсортирован ли массив в Java
Один из способов - это использование библиотеки Apache Commons Lang, которая предлагает статический служебный метод. isSorted() в ArrayUtils учебный класс.
Другие варианты проверки отсортирован ли массив можно найти здесь.
Один из способов - это использование библиотеки Apache Commons Lang, которая предлагает статический служебный метод. isSorted() в ArrayUtils учебный класс.
Другие варианты проверки отсортирован ли массив можно найти здесь.
👍28
#Вопросы_с_собеседования
❓Как перебрать все пары «ключ-значение» в Map?
Использовать метод
❓Как перебрать все пары «ключ-значение» в Map?
Использовать метод
entrySet()
, который возвращает множество Set<Map.Entry<K, V>
пар «ключ-значение».👍22👎4
👎34👍31😱3
LJV: Чему нас может научить визуализация структур данных в Java
LJV — проект, созданный в 2004 году как инструмент для преподавания языка Java студентам. Он позволяет визуализировать внутреннее устройство структур данных. В этом докладе запускается LJV на разных структурах (от String до ConcurrentSkipListMap) в разных версиях Java и разбирается, что там внутри, как оно менялось от версии к версии, и как это всё работает.
Смотреть статью
LJV — проект, созданный в 2004 году как инструмент для преподавания языка Java студентам. Он позволяет визуализировать внутреннее устройство структур данных. В этом докладе запускается LJV на разных структурах (от String до ConcurrentSkipListMap) в разных версиях Java и разбирается, что там внутри, как оно менялось от версии к версии, и как это всё работает.
Смотреть статью
Хабр
LJV: Чему нас может научить визуализация структур данных в Java
Эта статья является пересказом моего доклада на Java-конференции SnowOne 2021 года. LJV — проект, созданный в 2004 году как инструмент для преподавания языка Java студентам. Он позволяет...
👍11
#Вопросы_с_собеседования
❓Напишите минимальный неблокирующий стек (всего два метода — push() и pop()) с использованием Semaphore
Ответ на картинке.
❓Напишите минимальный неблокирующий стек (всего два метода — push() и pop()) с использованием Semaphore
Ответ на картинке.
👍24
#Вопросы_с_собеседования
❓Сколько создается новых объектов, когда вы добавляете новый элемент в HashMap?
Создается один новый объект статического вложенного класса
❓Сколько создается новых объектов, когда вы добавляете новый элемент в HashMap?
Создается один новый объект статического вложенного класса
Entry<K,V>
.👍24
Класс AbstractSet
Класс
Подробнее можно почитать здесь.
Класс
AbstractSet
в Java является частью Java Collection Framework , которая реализует интерфейс Collection и расширяет класс AbstractCollection
. Он обеспечивает скелетную реализацию интерфейса Set. Этот класс не переопределяет какие-либо реализации из класса AbstractCollection
, а просто добавляет реализации для методов equals() и hashCode().Подробнее можно почитать здесь.
👍12
#Вопросы_с_собеседования
❓Какие разновидности сборщиков мусора реализованы в виртуальной машине HotSpot?
Java HotSpot VM предоставляет разработчикам на выбор четыре различных сборщика мусора:
• Serial (последовательный) — самый простой вариант для приложений с небольшим объемом данных и не требовательных к задержкам. На данный момент используется сравнительно редко, но на слабых компьютерах может быть выбран виртуальной машиной в качестве сборщика по умолчанию. Использование Serial GC включается опцией
• Parallel (параллельный) — наследует подходы к сборке от последовательного сборщика, но добавляет параллелизм в некоторые операции, а также возможности по автоматической подстройке под требуемые параметры производительности. Параллельный сборщик включается опцией
• Concurrent Mark Sweep (CMS) — нацелен на снижение максимальных задержек путем выполнения части работ по сборке мусора параллельно с основными потоками приложения. Подходит для работы с относительно большими объемами данных в памяти. Использование CMS GC включается опцией
• Garbage-First (G1) — создан для замены CMS, особенно в серверных приложениях, работающих на многопроцессорных серверах и оперирующих большими объемами данных. G1 включается опцией Java
❓Какие разновидности сборщиков мусора реализованы в виртуальной машине HotSpot?
Java HotSpot VM предоставляет разработчикам на выбор четыре различных сборщика мусора:
• Serial (последовательный) — самый простой вариант для приложений с небольшим объемом данных и не требовательных к задержкам. На данный момент используется сравнительно редко, но на слабых компьютерах может быть выбран виртуальной машиной в качестве сборщика по умолчанию. Использование Serial GC включается опцией
-XX:+UseSerialGC
.• Parallel (параллельный) — наследует подходы к сборке от последовательного сборщика, но добавляет параллелизм в некоторые операции, а также возможности по автоматической подстройке под требуемые параметры производительности. Параллельный сборщик включается опцией
-XX:+UseParallelGC
.• Concurrent Mark Sweep (CMS) — нацелен на снижение максимальных задержек путем выполнения части работ по сборке мусора параллельно с основными потоками приложения. Подходит для работы с относительно большими объемами данных в памяти. Использование CMS GC включается опцией
-XX:+UseConcMarkSweepGC
.• Garbage-First (G1) — создан для замены CMS, особенно в серверных приложениях, работающих на многопроцессорных серверах и оперирующих большими объемами данных. G1 включается опцией Java
-XX:+UseG1GC
.👍12❤2👎1