Java | Вопросы собесов
Разбираем вопросы с собеседований на Java разработчика. Spring, Hibernate Сайт: https://easyoffer.ru/ Реклама: https://telega.in/c/easy_java_ru Предложения: @easyoffer_adv
إظهار المزيد8 565
المشتركون
+27124 ساعات
+4967 أيام
+1 91930 أيام
- المشتركون
- التغطية البريدية
- ER - نسبة المشاركة
جاري تحميل البيانات...
معدل نمو المشترك
جاري تحميل البيانات...
Как HashMap в Java обрабатывает коллизии, когда два разных ключа имеют одинаковый хэш-код?Anonymous voting
- HashMap заменит старое значение новым.
- Возникнет ошибка времени выполнения.
- Оба значения будут сохранены в одной корзине (bucket) как список.
- Второй ключ будет игнорироваться.
👍 6
Что можно сказать о скоростях доступа к элементам в HashMap при выполнении базовых операций ?
Спросят с вероятностью 12%
HashMap — это структура данных, использующая хэш-таблицу для хранения пар "ключ-значение". Она позволяет выполнять базовые операции, такие как вставка, поиск и удаление элементов, с высокой эффективностью. Основные аспекты скорости доступа к элементам в нем зависят от нескольких факторов, включая хэш-функцию, размер массива и обработку коллизий.
Сложность операций
1️⃣ Вставка (put): В идеальном случае, когда коллизий нет, вставка происходит за константное время O(1). Однако в случае коллизий, когда несколько ключей имеют одинаковый хэш-код и попадают в одну и ту же "корзину" или "слот" хэш-таблицы, время вставки может увеличиваться из-за необходимости обработки этих коллизий. В Java 8 и более поздних версиях при большом количестве коллизий в одной корзине список преобразуется в сбалансированное дерево, что позволяет вставку выполнять за логарифмическое время O(log n) в худшем случае.
2️⃣ Поиск по ключу (get): Как и в случае с операцией вставки, поиск в идеальных условиях выполняется за O(1). Если же происходят коллизии, и ключи организованы в связанный список или дерево внутри одной корзины, время поиска может возрасти до O(n) в худшем случае для связанного списка и до O(log n) для сбалансированного дерева (в Java 8 и более поздних версиях).
3️⃣ Удаление (remove): Скорость удаления элемента аналогична скорости вставки и поиска. В лучшем случае она составляет O(1), но может увеличиваться до O(n) или O(log n) в случае обработки коллизий, в зависимости от структуры данных, используемой для хранения элементов в одной корзине.
Факторы, влияющие на производительность
✅ Функция хэширования: Качество функции хэширования напрямую влияет на распределение элементов по корзинам хэш-таблицы и, соответственно, на количество коллизий. Хорошая хэш-функция обеспечивает равномерное распределение ключей и минимизирует коллизии.
✅ Начальный размер и коэффициент загрузки: Начальный его размер и коэффициент загрузки (load factor) также влияют на производительность. Коэффициент загрузки — это мера, при достижении которой происходит автоматическое увеличение размера хэш-таблицы. Правильный выбор этих параметров может помочь уменьшить количество коллизий и увеличить скорость доступа к элементам.
HashMap обеспечивает эффективный доступ к элементам для базовых операций, таких как вставка, поиск и удаление, в большинстве случаев работая за константное время O(1). Однако в худшем случае, когда происходят коллизии, производительность может снижаться, особенно если не используются улучшения, введённые. Правильная настройка и использование
HashMap
помогают максимизировать её производительность и эффективность в различных сценариях использования.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых👍 8
Photo unavailableShow in Telegram
Изучи алгоритмы, чтобы работать в Яндекс или Google
Приходи на бесплатное обучение от FAANG School. Там ты узнаешь:
– Как использовать разные структуры данных
при решении задач
– Какие 20% усилий дают 80% результата
при подготовке к алгоритмам
– Prefix Sum и Sliding Window. 2 подхода, которые закрывают задачи на 200к$ во время собесов в Google
– Как научиться решать алгоритмы без матана
Спикер – Разработчик из BigTech. За 7 лет решил 500 задач на LeetCode, прошел 30 собеседований в компаниях уровня Google и Meta, а сейчас работает в одной из крупных IT-гигантов в мире.
Переходи и жми на кнопку «Принять участие», чтобы начать обучение.
😁 13🤔 2👾 1
Какая область памяти JVM отвечает за хранение структур данных, используемых для управления потоками выполнения?Anonymous voting
- Heap
- Method Area
- Java Stacks
- Native Method Stacks
🔥 12
Почему Map стоит особняком в иерархии коллекций ?
Спросят с вероятностью 19%
Интерфейс Map занимает особое место в иерархии коллекций и, строго говоря, не является частью Collection Framework. Основная причина этого заключается в том, что он работает с парами "ключ-значение", а не с индивидуальными элементами, как это делают коллекции, такие как
List
, Set
, и т.д., которые хранят только объекты.
Основные отличия от других коллекций:
1️⃣ Пары ключ-значение: Хранит данные в виде пар "ключ-значение", где каждый ключ уникален, и каждому ключу соответствует ровно одно значение. В коллекциях, таких как List
или Set
, хранятся только отдельные объекты.
2️⃣ Уникальные ключи: В отличие от списков, где элементы могут дублироваться, в нем каждый ключ уникален, и попытка вставить в него новую пару "ключ-значение" с уже существующим ключом приведет к замене старого значения новым.
3️⃣ Доступ к элементам: Доступ к его элементам осуществляется по ключу, а не по индексу. В коллекциях, таких как List
, доступ к элементам осуществляется по индексу.
4️⃣ Не реализует интерфейс Collection
: Поскольку он работает с парами "ключ-значение" и имеет уникальные операции и поведение, не совместимые с интерфейсом Collection
, он не включается в иерархию коллекций как его часть.
5️⃣ Итерация: Итерация по нему отличается от итерации по другим коллекциям. Для перебора его элементов можно использовать набор ключей (keySet()), коллекцию значений (values()) или набор пар "ключ-значение" (entrySet()).
6️⃣ Функциональность: Предоставляет уникальные методы, такие как put()
, get()
, remove()
по ключу, которые не имеют прямых аналогов в других типах коллекций.
Из-за этих особенностей Map
считается отдельной частью структуры данных, предназначенной для работы с ассоциативными массивами, где каждому ключу соответствует значение. Это делает Map
идеальным инструментом для таких задач, как представление словарей, кэширование объектов и других ситуаций, где необходимо эффективно находить объект по уникальному идентификатору.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых👍 26❤ 1
Какой паттерн проектирования обеспечивает создание одного и только одного экземпляра класса и предоставляет к нему глобальную точку доступа?Anonymous voting
- Singleton
- Factory Method
- Builder
- Prototype
👍 5
В чем сложность поиска элемента по ключу в HashMap ?
Спросят с вероятностью 12%
HashMap представляет собой структуру данных, основанную на принципе хэш-таблицы, которая позволяет выполнять операции вставки, удаления и поиска элементов по ключу. Сложность поиска элемента по ключу в нем зависит от нескольких факторов, включая количество элементов в мапе и качество функции хеширования.
Идеальный сценарий
Когда коллизии отсутствуют (то есть каждый ключ хешируется в уникальный индекс в массиве бакетов), сложность поиска элемента по ключу составляет O(1). Это означает, что время поиска не зависит от количества элементов в нем.
Реальный сценарий
На практике полностью избежать коллизий невозможно, особенно при большом количестве элементов. Коллизия происходит, когда два или более ключа хешируются в один и тот же индекс. В таких случаях
HashMap
использует структуру данных "список" (до Java 8) или "красно-чёрное дерево" (начиная с Java 8) для хранения и поиска элементов внутри одного бакета.
- До Java 8: В случае коллизий элементы в одном бакете хранились в виде связного списка. Это означает, что в худшем случае, когда все элементы попадают в один бакет, сложность поиска элемента по ключу становится O(n), где n — количество элементов в нем.
- Начиная с Java 8: Если в одном бакете хранится больше определённого количества элементов (по умолчанию 8), список преобразуется в красно-чёрное дерево, что снижает сложность поиска в худшем случае до O(log n). Это улучшение помогает сохранять более эффективную производительность даже при большом количестве коллизий.
✅ В большинстве случаев он обеспечивает быстрый поиск элемента по ключу со сложностью O(1) благодаря эффективному распределению элементов по бакетам.
✅ Сложность поиска может увеличиться до O(n) или O(log n) в зависимости от версии Java и количества коллизий, но использование красно-чёрного дерева в новых версиях Java помогает уменьшить влияние коллизий на производительность.
✅ Качество функции хеширования ключей имеет решающее значение для минимизации коллизий и обеспечения его оптимальной производительности.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых👍 32🔥 1
Какое максимальное значение может принимать переменная типа short в Java?Anonymous voting
- 32767
- 65535
- -32768
- 2147483647
👍 3
В чём разница между SQL и NoSQL ?
Спросят с вероятностью 31%
SQL (Structured Query Language) и NoSQL относятся к разным типам систем управления базами данных, каждый из которых предлагает уникальные характеристики и преимущества для определенных случаев использования и требований к данным.
SQL (Реляционные БД):
- Структура: Организованы в таблицы, состоящие из строк и столбцов. Все данные должны следовать заранее определенной схеме, что означает строгую структуру с четко определенными типами данных для каждого столбца.
- Связи: Поддерживают сложные запросы и операции с данными, включая присоединения таблиц (joins), транзакции, которые обеспечивают ACID-совместимость (атомарность, согласованность, изолированность, долговечность).
- Масштабируемость: Традиционно лучше подходят для вертикального масштабирования, что означает улучшение характеристик одного сервера (например, увеличение CPU, RAM).
Примеры:
MySQL, PostgreSQL, Oracle, Microsoft SQL Server.
NoSQL (Нереляционные БД):
- Структура: Могут быть не только документо-ориентированными, но и ключ-значение, широкие столбцы, графовые базы данных. Они гибкие по отношению к структуре данных; схема данных может быть динамически изменена и не требует предварительного определения.
- Связи: Запросы обычно проще, и меньше поддержки для сложных операций с данными. ACID-транзакции поддерживаются не всеми данными системами.
- Масштабируемость: Разработаны с учетом горизонтального масштабирования, что означает добавление большего количества серверов или узлов в кластер для обработки большего объема данных и трафика.
Примеры:
MongoDB (документо-ориентированная), Redis (ключ-значение), Cassandra (широкие столбцы), Neo4j (графовые).
Основные различия:
1️⃣ Схема данных: SQL требует строгой предварительной схемы, в то время как NoSQL более гибкий и позволяет хранить неструктурированные или полуструктурированные данные.
2️⃣ Типы запросов и операции с данными: SQL поддерживает сложные запросы и операции, NoSQL обеспечивает более быструю запись и чтение за счет более простых запросов.
3️⃣ Масштабируемость: SQL базы данных традиционно масштабируются вертикально, в то время как NoSQL базы данных разработаны для горизонтального масштабирования.
4️⃣ Транзакции: SQL базы данных обеспечивают строгую поддержку ACID-транзакций, в то время как в NoSQL подходы к транзакциям могут варьироваться, и не все из них поддерживают полную ACID-совместимость.
Выбор между SQL и NoSQL зависит от конкретных требований к данным, предполагаемого объема и структуры данных, необходимости масштабирования и других факторов специфического проекта.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
👍 15
Что происходит, если метод shutdown() вызван на ExecutorService, но не все задачи завершены?Anonymous voting
- Все текущие задачи немедленно прерываются.
- Отклоняются новые задачи, но текущие продолжают выполняться.
- Сервис блокируется до завершения всех задач.
- Новые задачи выполняются после завершения текущих.
👍 5