Java for Beginner
756 subscribers
738 photos
212 videos
12 files
1.22K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Влияние на производительность

Факторы, влияющие на скорость операции put
Качество хэш-функции: Плохая хэш-функция, создающая много коллизий, значительно замедляет операцию, увеличивая длину цепочек.
Коэффициент загрузки: Высокий коэффициент загрузки уменьшает частоту операций resize, но увеличивает среднюю длину цепочек коллизий.
Начальная емкость: Слишком маленькая начальная емкость приводит к частым операциям resize, слишком большая — к избыточному потреблению памяти.
Размер данных: В TreeMap производительность зависит от сбалансированности дерева, в HashMap — от равномерности распределения хэшей.

Сравнительная производительность
HashMap: O(1) в среднем случае, O(log n) в худшем (с деревьями)
LinkedHashMap: O(1) с небольшими накладными расходами на поддержание порядка
TreeMap: O(log n) в любом случае благодаря сбалансированному дереву


Потокобезопасность и параллелизм

В несинхронизированных реализациях Map операция put не является атомарной, что может привести к:
Потере данных при конкурентной модификации
Повреждению внутренней структуры данных
Бесконечным циклам в цепочках коллизий


ConcurrentHashMap решает эти проблемы через:
Сегментированную блокировку (в старых версиях)
CAS (Compare-And-Swap) операции и fine-grained блокировку (в новых версиях)
Позволяет выполнять конкурентные put операции на разных сегментах



Практические рекомендации

Оптимизация производительности


Для HashMap:
Выбирайте адекватную начальную емкость, чтобы избежать частых resize операций
Используйте ключи с хорошими хэш-функциями
Рассмотрите возможность использования immutable ключей


Для TreeMap:

Обеспечьте согласованность Comparator или естественного порядка
Используйте для данных, которые требуют сортировки или диапазонных запросов


Общие рекомендации:
Избегайте частых put операций в критичных по производительности участках кода
Используйте bulk операции при добавлении больших объемов данных
Рассмотрите альтернативные реализации для специфических use cases


#Java #для_новичков #beginner #Map #put
👍2
Напоминаю про встречу!

В 16:00 по МСК, бот даст ссылку)

Приходите, познакомимся с graphQL
👍1
Что выведет код?

import java.util.HashMap;
import java.util.Map;

public class Task041125 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();

String key = "key";
System.out.print(map.put(key, 1) + " ");
System.out.print(map.put(key, 2) + " ");
System.out.print(map.putIfAbsent(key, 3) + " ");
System.out.print(map.compute(key, (k, v) -> null) + " ");
System.out.print(map.put(key, 4));
}
}


#Tasks
👍1
👍2
Бот заряжен и готов выдавать ссылки!

Переходите и просите у него ссылку)


Чтобы избежать ошибок при работе с ботом нажмите /start

@JFB_admin_bot
👍1
GraphQL. Как усложнение упрощает жизнь.

В сегодняшнем видео мы рассмотрели что такое GraphQL.

Сегодня я написал и запустил простой демонстрационный код в котором рассмотрел что такое GraphQL.
🔵 Разобрали в чем отличие от REST и gRPC, как это работает.
🔵 Написали файл shema.graphqls, разобрали какие типы данных в нем применяются.
🔵 Как всегда немного подебажили))

Репозиторий на GitHub ждет Ваших звезд ☺️

Ссылка на Youtube
Ссылка на Рутьюб

Смотрите, ставьте лайки, подписывайтесь на каналы!✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Вопрос с собеседований

Что делает класс AtomicInteger? 🤓


Ответ:

AtomicInteger
обеспечивает атомарные операции инкремента/декремента без блокировок.

Он использует низкоуровневые CAS (compare-and-swap) операции, что быстрее, чем синхронизация.

Это ключевой инструмент при реализации неблокирующих алгоритмов.



#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3