Java | Вопросы собесов – Telegram
Java | Вопросы собесов
11.4K subscribers
41 photos
3 videos
1.13K links
Download Telegram
Какие правила переопределения hashcode и equals ?
Спросят с вероятностью 31%

Методы hashCode() и equals(Object obj) играют центральную роль в работе коллекций, особенно в таких структурах данных, как HashSet, HashMap, Hashtable и HashTable. Правильное переопределение этих методов критически важно для корректной работы этих и многих других коллекций. Вот основные правила и рекомендации для их переопределения:

1️⃣ Согласованность с equals: Если два объекта считаются равными согласно методу equals(Object obj), то вызов hashCode() на этих объектах должен возвращать одно и то же целочисленное значение. Это не значит, что объекты, не равные друг другу, обязательно должны иметь различные хеш-коды, но разные хеш-коды помогают улучшить производительность хеш-таблиц.

2️⃣ Повторяемость результата в течение одного выполнения программы: Пока информация, используемая в equals(Object obj), не изменяется, hashCode() должен всегда возвращать одно и то же значение. Это значение не обязано оставаться неизменным между разными выполнениями программы.

3️⃣ Переопределение equals требует переопределенияделения hash: Если вы переопределите его, вы должны также переопределить код. Несоблюдение этого правила может привести к нарушению контракта hashCode, что, в свою очередь, приведет к некорректной работе объекта в коллекциях, основанных на хеш-таблицах.

4️⃣ Консистентность equals: Метод equals(Object obj) должен быть рефлексивным (любой объект должен быть равен самому себе), симметричным (если a.equals(b) == true, то b.equals(a) == true), транзитивным (если a.equals(b) == true и b.equals(c) == true, то a.equals(c) == true) и консистентным (повторные вызовы должны возвращать одинаковые значения). Для любого ненулевого ссылочного значения x, x.equals(null) должен возвращать false.
public class Person {
private String name;
private int age;

// Конструкторы, геттеры и сеттеры

@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}

@Override
public int hashCode() {
return Objects.hash(name, age);
}
}


В этом примере equals проверяет, равен ли текущий объект переданному объекту, а hashCode вычисляет хеш-код, используя поля name и age. Использование класса Objects из стандартной библиотеки Java упрощает и безопасно осуществляет эти операции.

Для корректной работы объектов в хеш-основанных коллекциях важно правильно переопределить методы hashCode и equals, следуя вышеуказанным правилам и рекомендациям.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
🔥14👍91
Какой функциональный интерфейс из Java 8+ подходит для реализации операции, принимающей один аргумент и возвращающей boolean?
Anonymous Quiz
14%
Function<T, R>
71%
Predicate<T>
9%
Consumer<T>
7%
Supplier<T>
👍7
Что такое итератор и зачем он нужен ?
Спросят с вероятностью 19%

Итератор — это объект, который позволяет поочерёдно обходить элементы коллекции без раскрытия её внутреннего представления (структуры). Они используются для работы с различными структурами данных, такими как списки, множества и очереди. Основное предназначение — предоставить универсальный способ доступа к элементам коллекции, а также возможность их удаления в процессе итерации.

Зачем он нужен?

Абстракция: Скрывает детали реализации коллекции, предоставляя простой интерфейс для её перебора. Это позволяет использовать один и тот же способ обхода для коллекций с различными внутренними структурами.

Безопасность: Использование его для изменения коллекции во время итерации (например, удаление элементов) является безопасным. При попытке модифицировать коллекцию напрямую во время итерации может возникнуть ConcurrentModificationException, но многие реализации итераторов предоставляют метод remove(), который позволяет безопасно удалять элементы.

Универсальность: Итераторы предоставляют единый способ работы с различными типами коллекций, что упрощает написание гибкого и переиспользуемого кода.

Как он работает?

Предоставляет как минимум три метода:
1️⃣ hasNext(): возвращает true, если итератор имеет ещё элементы.
2️⃣ next(): возвращает следующий элемент коллекции и переводит курсор итератора на одну позицию вперёд.
3️⃣ remove(): удаляет последний элемент, который был возвращён итератором с помощью метода next(), из коллекции.

Пример:
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");

Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
// Можно безопасно удалять элементы с помощью итератора
if("Python".equals(element)) {
iterator.remove();
}
}


Итератор — это механизм для безопасного и универсального обхода элементов коллекций, позволяющий избежать проблем с изменением коллекции во время итерации и скрывающий внутреннее устройство коллекции. Он необходим для реализации стандартного способа перебора элементов без необходимости знать, как устроена коллекция, и предоставляет безопасный способ её модификации в процессе обхода.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍351
В нашей приватной 🔐 Базе собесов уже есть собесы практически из всех банков РФ, а также пара крупных bigtech компаний. Получить доступ можно, "вложившись" в базу 1-им своим реальным собеседованием.
👍82😁2
Каким образом HashMap связан с Set'ом ?
Спросят с вероятностью 25%

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

Как HashSet использует HashMap

Когда вы добавляете элемент в него, этот элемент используется как ключ во внутреннем HashMap. Значением для этого ключа является предопределённый статический объект, общий для всех элементов (обычно PRESENT, просто маркер, который не используется). Это делается для оптимизации памяти и производительности, так как интерес представляет только наличие ключа (элемента в HashSet), а не значение, ассоциированное с этим ключом.
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
private transient HashMap<E,Object> map;

// Предопределенный объект, используемый в качестве значения для всех ключей
private static final Object PRESENT = new Object();

public HashSet() {
map = new HashMap<>();
}

public boolean add(E e) {
return map.put(e, PRESENT)==null;
}

// Другие методы...
}


Преимущества этой связи

Уникальность элементов: HashSet гарантирует, что каждый элемент будет уникальным, так как HashMap не допускает дублирования ключей.
Высокая производительность: операции добавления, удаления и поиска в HashSet выполняются за константное время O(1) в среднем, благодаря хеш-таблице HashMap.
Эффективное использование памяти: хранение значения PRESENT для всех элементов минимизирует потребление памяти, так как не требуется отдельно выделять память под значения элементов.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍129🤯6🎉1
🔥Тесты для подготовки к собеседованию🔥
Выбери своё направление:

1. Frontend
2. Python
3. Java
4. Тестировщик QA
5. Data Science
6. DevOps
7. C#
8. С/C++
9. Golang
10. PHP
11. Kotlin
12. Swift
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
Что такое пул строк ?
Спросят с вероятностью 19%

Пул строк (String Pool) — это специальная область в куче (Heap), предназначенная для хранения уникальных экземпляров строковых литералов. JVM создает пул строк для экономии памяти и увеличения скорости выполнения программы за счет повторного использования объектов типа String.

Как работает пул строк?

Когда в коде создается строка через строковый литерал (например, String s = "Hello";), JVM сначала проверяет пул строк. Если строка с таким же значением уже присутствует в пуле, то новый объект не создается. Вместо этого переменной s присваивается ссылка на уже существующий объект в пуле. Если же такой строки в пуле нет, JVM создает новый объект строки в пуле и возвращает ссылку на него.

Это поведение отличается от создания строк через оператор new (например, String s = new String("Hello");). В этом случае в куче всегда создается новый объект String, независимо от того, содержится ли такая же строка в пуле строк или нет.

Примеры:
String s1 = "Hello"; // Создается в пуле строк, если такой строки еще нет
String s2 = "Hello"; // Не создается новый объект, s2 ссылается на тот же объект, что и s1
String s3 = new String("Hello"); // Создается новый объект вне пула строк

System.out.println(s1 == s2); // true, т.к. s1 и s2 указывают на один и тот же объект в пуле строк
System.out.println(s1 == s3); // false, т.к. s3 указывает на другой объект вне пула строк


Зачем он нужен?

Помогает оптимизировать использование памяти и повысить производительность приложений:

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

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

Можно использовать метод intern() класса String. Если строка, вызывающая метод intern(), еще не находится в пуле, то она добавляется туда, а затем возвращается ссылка на эту строку из пула. Если строка уже присутствует в пуле, то просто возвращается ссылка на уже существующую строку.

Пул строк — это механизм для оптимизации использования памяти и повышения производительности за счет повторного использования уникальных строковых литералов. Он позволяет избежать создания множественных копий одинаковых строковых объектов.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍30🔥41
Какие Scop'ы есть у bean'ов ?
Спросят с вероятность 19%

"scope" (область видимости) бина определяет жизненный цикл и видимость экземпляра бина в контексте приложения. Вот основные области видимости (scopes) бинов:

1️⃣ Singleton

- Описание: По умолчанию. Он создает и хранит один единственный экземпляр бина на каждый контейнер Spring IoC. Это означает, что каждый запрос на получение бина возвращает один и тот же объект.
- Применение: Используется для состояний без сохранения (stateless) бинов, общих настройках и конфигурациях.

2️⃣ Prototype

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

3️⃣ Request

- Описание: Бин создается один раз для каждого HTTP запроса. Доступен только в веб-приложениях.
- Применение: Используется для хранения информации, специфичной для каждого запроса.

4️⃣ Session

- Описание: Бин создается один раз для каждой HTTP сессии. Доступен только в веб-приложениях.
- Применение: Используется для хранения информации, специфичной для каждой сессии пользователя.

5️⃣ Application

- Описание: Бин создается один раз для всего сервлет-контекста (ServletContext). Доступен только в веб-приложениях.
- Применение: Используется для хранения глобальной информации, общей для всех сессий и запросов в рамках одного веб-приложения.

6️⃣ WebSocket

- Описание: Бин создается один раз для каждого WebSocket соединения. Доступен только при использовании веб-сокетов.
- Применение: Используется для хранения информации, специфичной для каждого WebSocket соединения.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍21🔥101
Какие отличия и что эффективнее HashTable и ConcurrentHashMap ?
Спросят с вероятностью 12%

HashTable и ConcurrentHashMap — это две разные реализации ассоциативных массивов, предназначенные для использования в многопоточных средах, но с различными подходами к синхронизации и производительности.

HashTable

- Потокобезопасность: Является потокобезопасной коллекцией, что достигается за счёт синхронизации всех публичных методов. Это означает, что только один поток может выполнять операции с таблицей в любой момент времени.
- Производительность: Вследствие глобальной блокировки, производительность она может существенно снижаться в многопоточных средах, где требуется высокая степень параллелизма.
- Устаревшая: Несмотря на то что класс всё ещё доступен в Java для обратной совместимости, он считается устаревшим, и его использование в новом коде обычно не рекомендуется.

ConcurrentHashMap

- Потокобезопасность: Также предоставляет потокобезопасную реализацию ассоциативного массива, но использует более изощренную стратегию для синхронизации. Вместо блокировки всей таблицы ConcurrentHashMap использует сегментирование (разделение таблицы на части), благодаря чему поддерживает более высокий уровень параллелизма.
- Производительность: Благодаря более тонкой синхронизации она обеспечивает лучшую производительность в многопоточных приложениях, особенно когда имеется много операций чтения и записи.
- Функциональность: Вводит дополнительные полезные методы, которые не доступны в `HashTable.

Основные отличия:

1️⃣ Механизм синхронизации: HashTable блокирует всю таблицу, что может привести к узкому месту при большом количестве потоков. ConcurrentHashMap использует разделение на сегменты для минимизации конфликтов блокировок и поддержания высокой производительности.

2️⃣ Производительность: ConcurrentHashMap обычно обеспечивает лучшую производительность в многопоточных приложениях за счёт более эффективной синхронизации.

3️⃣ Итераторы: Итераторы в HashTable могут бросать исключение ConcurrentModificationException, если коллекция была изменена во время итерации. В то время как итераторы ConcurrentHashMap не бросают это исключение, предоставляя слабую консистентность и отражая состояние коллекции на момент создания итератора.

4️⃣ Null значения: HashTable допускает использование null в качестве значения, но не в качестве ключа. В ConcurrentHashMap не допускается использование null ни в качестве ключей, ни в качестве значений.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍314
В чём разница между 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 разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍221
Какое максимальное значение может принимать переменная типа short в Java?
Anonymous Quiz
63%
32767
28%
65535
4%
-32768
5%
2147483647
👍8
В чем сложность поиска элемента по ключу в 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 разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍41🔥31
Какой паттерн проектирования обеспечивает создание одного и только одного экземпляра класса и предоставляет к нему глобальную точку доступа?
Anonymous Quiz
93%
Singleton
2%
Factory Method
2%
Builder
2%
Prototype
👍101
Почему 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 разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍392
Какая область памяти JVM отвечает за хранение структур данных, используемых для управления потоками выполнения?
Anonymous Quiz
39%
Heap
10%
Method Area
38%
Java Stacks
12%
Native Method Stacks
🔥15👍2
Что можно сказать о скоростях доступа к элементам в 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 разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍181
Чем отличается where от having ?
Спросят с вероятностью 19%

WHERE и HAVING используются для фильтрации записей, но они применяются на разных этапах выполнения запроса и имеют разные цели.

WHERE

- Применяется до агрегации данных. Это значит, что фильтрация происходит непосредственно на строках исходной таблицы или результата объединения таблиц, до того как произойдет любая операция группировки (GROUP BY) или агрегирования (SUM, COUNT, AVG и т.д.).
- Используется для фильтрации строк, которые будут включены в результаты группировки или в финальный набор данных, если группировка не используется.
- Не может использоваться для фильтрации агрегированных значений.
SELECT employee_id, SUM(salary)
FROM salaries
WHERE salary > 1000
GROUP BY employee_id;


В этом примере он фильтрует строки, где зарплата больше 1000, до того, как произойдет агрегация данных по employee_id.

HAVING

- Применяется после агрегации данных. Это означает, что фильтрация происходит уже на агрегированных результатах, полученных после применения GROUP BY и агрегатных функций.
- Используется для фильтрации групп в результате запроса с группировкой.
- Может использоваться только с GROUP BY или для фильтрации результатов, полученных с помощью агрегатных функций.
SELECT employee_id, SUM(salary)
FROM salaries
GROUP BY employee_id
HAVING SUM(salary) > 10000;


В этом примере он фильтрует группы, где суммарная зарплата по employee_id больше 10000, после того как данные были сгруппированы и агрегированы.

Основные отличия
- Момент применения: WHERE применяется до агрегации, HAVING — после.
- Цель использования: WHERE фильтрует строки, HAVING фильтрует группы или агрегированные значения.
- Условия использования: WHERE может использоваться в любом запросе, HAVING обычно используется с GROUP BY или для фильтрации агрегированных значений.

Эти различия делают WHERE и HAVING специализированными инструментами для разных этапов и целей фильтрации данных.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍43