TreeMap — это реализация интерфейса Map в Java, которая сохраняет элементы в отсортированном порядке. В отличие от HashMap и LinkedHashMap, которые не гарантируют порядок, TreeMap организует элементы по естественному порядку или с помощью заданного Comparator. Это достигается с помощью красно-чёрного дерева, структуры данных, поддерживающей отсортированный порядок с высокой эффективностью.
🔹 Структура TreeMap
TreeMap основан на красно-чёрном дереве, что позволяет выполнять операции вставки, удаления и поиска за логарифмическое время:
▪️ Каждая запись (node) в TreeMap содержит ссылки на левый и правый дочерние узлы, а также на родительский узел. Красно-чёрное дерево поддерживает сбалансированность, что минимизирует высоту дерева.
▪️ Каждый узел имеет атрибут «цвет» — красный или чёрный, что позволяет TreeMap быстро балансировать дерево при добавлении или удалении элементов.
🔹 Производительность
▪️ Вставка: Добавление новых элементов выполняется за O(log n), так как операция требует соблюдения порядка и может потребовать перестройки дерева для поддержания баланса.
▪️ Удаление: Удаление элементов также выполняется за O(log n), с обязательной корректировкой баланса дерева.
▪️ Поиск: Поиск элементов по ключу также занимает O(log n), благодаря сбалансированному дереву.
🔹 Использование памяти
Каждый узел в TreeMap содержит ссылки на дочерние узлы и родительский узел, а также информацию о цвете. Из-за этого TreeMap требует больше памяти, чем обычный HashMap, но сохраняет отсортированный порядок ключей.
🔹 Преимущества и недостатки
▪️ Преимущества:
- Поддержание отсортированного порядка: TreeMap гарантирует, что элементы будут отсортированы по возрастанию (или согласно Comparator), что полезно для приложений, где важен порядок ключей.
- Быстрая навигация: TreeMap поддерживает методы для нахождения минимальных и максимальных элементов, а также диапазонные операции, такие как subMap, headMap и tailMap.
- Балансировка: Красно-чёрное дерево автоматически балансируется, что обеспечивает высокую производительность на больших наборах данных.
▪️ Недостатки:
- Более высокие временные затраты на вставку и удаление: В отличие от HashMap и LinkedHashMap, TreeMap требует логарифмическое время на операции из-за необходимости поддержания баланса.
- Более высокое потребление памяти: Дополнительные ссылки и атрибуты для балансировки увеличивают использование памяти по сравнению с HashMap.
- Не поддерживает null ключи: В TreeMap нельзя использовать null в качестве ключа, что ограничивает его использование в некоторых сценариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
🧪 Чем заменить Postman: 5 отличных инструментов для разработки API
Postman долгое время был основным инструментом для разработки и тестирования API, но сейчас для большинства разработчиков его ограничения стали перевешивать преимущества. Рассмотрим альтернативные инструменты, которые могут предложить больше возможностей, чем Postman — даже в бесплатной версии.
👉Читаем здесь
Postman долгое время был основным инструментом для разработки и тестирования API, но сейчас для большинства разработчиков его ограничения стали перевешивать преимущества. Рассмотрим альтернативные инструменты, которые могут предложить больше возможностей, чем Postman — даже в бесплатной версии.
👉Читаем здесь
"O" — это Open/Closed Principle (Принцип открытости/закрытости).
🧑💻 Пример:
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Нужна ли математика на собеседованиях?
🗓 Сегодня в 20:00 встречаемся в прямом эфире, чтобы обсудим роль математики на собеседовании, а также поделимся инсайдами как успешно пройти техническое собеседование! https://proglib.io/w/47174041
🌟 Спикер: Станислав Петров – Senior Data Scientist.
😮 На вебинаре вы узнаете:
😱 Ошибаться — не страшно. Как ошибки и неудачные проекты могут стать ценным опытом. Почему «проекты в стол» способствуют профессиональному росту. И как преодолеть путь от junior до senior.
🙌🏻 Собеседования: можно ли к ним не готовиться?! Поделимся эффективными стратегиями подготовки и расскажем, на что работодатели обращают внимание в первую очередь.
✍️ Разберем реальные тестовые задачи, которые дают на собеседованиях на позицию Data Scientist.
🎁 Бонус: расскажем как проводить эффективное тестирование в маркетинге и их масштабируемость.
🎯 Почему важно посетить вебинар?
• Понимание математических концепций и их применение помогает успешно проходить собеседования и решать реальные задачи.
• Расширьте свой профессиональный кругозор и подготовьтесь к новым карьерным вызовам.
👉 Присоединяйтесь к нам и узнайте, как математика может помочь в вашей карьере https://proglib.io/w/47174041
🗓 Сегодня в 20:00 встречаемся в прямом эфире, чтобы обсудим роль математики на собеседовании, а также поделимся инсайдами как успешно пройти техническое собеседование! https://proglib.io/w/47174041
🌟 Спикер: Станислав Петров – Senior Data Scientist.
😮 На вебинаре вы узнаете:
😱 Ошибаться — не страшно. Как ошибки и неудачные проекты могут стать ценным опытом. Почему «проекты в стол» способствуют профессиональному росту. И как преодолеть путь от junior до senior.
🙌🏻 Собеседования: можно ли к ним не готовиться?! Поделимся эффективными стратегиями подготовки и расскажем, на что работодатели обращают внимание в первую очередь.
✍️ Разберем реальные тестовые задачи, которые дают на собеседованиях на позицию Data Scientist.
🎁 Бонус: расскажем как проводить эффективное тестирование в маркетинге и их масштабируемость.
🎯 Почему важно посетить вебинар?
• Понимание математических концепций и их применение помогает успешно проходить собеседования и решать реальные задачи.
• Расширьте свой профессиональный кругозор и подготовьтесь к новым карьерным вызовам.
👉 Присоединяйтесь к нам и узнайте, как математика может помочь в вашей карьере https://proglib.io/w/47174041
Процесс — это
Поток (или "нить") — это
Please open Telegram to view this post
VIEW IN TELEGRAM
Проверяемые исключения (Checked Exceptions)
Непроверяемые исключения (Unchecked Exceptions)
Please open Telegram to view this post
VIEW IN TELEGRAM
- throws: указывается в сигнатуре метода, чтобы сообщить, какие исключения метод может выбросить. Например, если метод может генерировать FileNotFoundException, это указывается так:
public void readFile() throws FileNotFoundException { ... }
Здесь throws не выбрасывает исключение, а только предупреждает, что оно может возникнуть.
- throw: используется непосредственно в теле метода, чтобы выбросить конкретное исключение. Пример:
if (file == null) {
throw new FileNotFoundException("Файл не найден");
}
Здесь throw запускает исключение, когда возникает определённое условие.
Please open Telegram to view this post
VIEW IN TELEGRAM
Прокси-объект — это
- В Hibernate прокси-объекты широко применяются для реализации ленивой загрузки.
Please open Telegram to view this post
VIEW IN TELEGRAM
ClassLoader — это компонент JVM, который отвечает за
🔍 Основные типы ClassLoader:
Please open Telegram to view this post
VIEW IN TELEGRAM
HashMap — это коллекция, обеспечивающая хранение пар "ключ-значение" и быструю работу с элементами за амортизированное O(1) время для операций вставки и поиска.
🔹 Структура HashMap
В основе HashMap лежит массив, где каждый элемент представляет собой "корзину" (bucket), и эти корзины хранят связные списки или сбалансированные деревья. Как работает эта структура:
▪️ Ключи: Ключ должен быть иммутабельным, а также допускается null в качестве ключа.
▪️ Хэширование: Для вычисления индекса бакета HashMap находит хэш для ключа. Далее используется операция побитового И (&) хэш-функции и n-1, где n - текущий размер массива бакетов (index = (n - 1) & hash).
▪️ Коллизии и цепочки: Если несколько ключей попадают в одну корзину (коллизия), HashMap использует связные списки для хранения этих значений. Когда длина связного списка превышает 8 элементов, HashMap автоматически преобразует его в красно-черное дерево для повышения эффективности поиска и вставки, обеспечивая O(log n) сложность для операций в таких корзинах.
🔹 Производительность
▪️ Добавление: За амортизированное O(1) время. При добавлении ключа HashMap сначала вычисляет хэш, а затем индекс корзины, где будет храниться элемент. Если корзина пуста, добавляется новый элемент. Если элемент с таким ключом уже есть, он заменяется.
▪️ Удаление: В зависимости от структуры корзины, время удаления элемента составляет O(1) для небольших корзин или O(log n) для корзин, содержащих красно-черное дерево.
▪️ Поиск: За амортизированное O(1) время при низком уровне коллизий. Однако в случае высоких коллизий и преобразования корзины в дерево сложность поиска возрастает до O(log n).
🔹 Использование памяти
Каждый элемент HashMap хранит не только ключ и значение, но также ссылки на следующий элемент в связном списке (или ссылки в дереве, если оно используется). Для эффективной работы HashMap настраивается порог "коэффициента загрузки" (load factor), после которого размер массива увеличивается вдвое, чтобы сократить количество коллизий.
🔹 Преимущества и недостатки
▪️ Преимущества:
- Доступ к элементам за амортизированное O(1).
- Возможность использования как связных списков, так и красно-черных деревьев позволяет HashMap эффективно справляться с коллизиями.
▪️ Недостатки:
- HashMap не гарантирует порядок элементов, в отличие от, например, TreeMap.
- Ссылки на элементы создают определенные накладные расходы, а при увеличении массива корзин в процессе реасширения требуются дополнительные ресурсы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔹 Fail-fast итераторы
🔹 Fail-safe итераторы,
Please open Telegram to view this post
VIEW IN TELEGRAM
Garbage Collector (GC) — это
Please open Telegram to view this post
VIEW IN TELEGRAM
Сериализация — это процесс
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
— Как найти первый уникальный символ в строке?
- Используйте доп. структуру данных для хранения количества вхождений каждого символа
- Предложите в комментарии другие варианты решения.
Реализация через Map на картинке 👆🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
Интеграционные тесты — это тесты, которые
Ключевые особенности:
🧩 Взаимодействие компонентов: Integration-тесты помогают выявить проблемы
🌐 Зависимость от окружения: Часто требуют доступ к
⏱️ Медленное выполнение: Интеграционные тесты занимают больше времени, чем unit-тесты, из-за
Please open Telegram to view this post
VIEW IN TELEGRAM
IoC (Inversion of Control) — это принцип проектирования, при котором
Основная идея IoC заключается в том, что
Please open Telegram to view this post
VIEW IN TELEGRAM
🧪 Unit-тесты: Проверяют работу отдельных, минимальных единиц кода, например, методов или классов, в изоляции. Основная цель — убедиться, что каждый отдельный модуль работает корректно.
🔗 Integration-тесты: Проверяют, как разные модули приложения взаимодействуют между собой. Часто требуют настройки окружения, например, базы данных или API, и помогают выявить ошибки на уровне интеграции.
🎭 End-to-End (E2E) тесты: Проверяют полную цепочку действий в приложении, начиная от пользовательского интерфейса и заканчивая бекендом и базой данных. Цель — убедиться, что вся система работает корректно от начала до конца.
🔄 Regression-тесты: Направлены на проверку, что новые изменения в коде не сломали существующую функциональность. Обычно включают в себя повторение уже существующих тестов.
🛠 Acceptance-тесты: Проверяют, соответствует ли функциональность приложения требованиям заказчика или конечного пользователя. Обычно проводятся на последнем этапе, перед выпуском продукта в продакшн.
💡 Performance-тесты: Оценивают производительность системы — время отклика, пропускную способность и поведение под нагрузкой. Помогают убедиться, что приложение остаётся стабильным при большом количестве запросов.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️Самые полезные каналы по Java в одной папке
В ней:
➖ канал для подготовки к собеседованиям
➖ интересные задачи
➖ основной канал
➖ книги по Java
➖ лучшие вакансии из сферы
➖ и наш чат, в котором можно общаться и задавать вопросы
Добавляйте 👉 тык сюда
В ней:
Добавляйте 👉 тык сюда
Please open Telegram to view this post
VIEW IN TELEGRAM
LinkedHashSet — это коллекция, обеспечивающая хранение уникальных элементов с сохранением порядка их вставки. LinkedHashSet, как и HashSet, работает с элементами за амортизированное O(1) время, но, в отличие от HashSet, сохраняет порядок добавления элементов благодаря дополнительной структуре связного списка.
🔹 Структура LinkedHashSet
LinkedHashSet базируется на HashMap, но имеет уникальную особенность — упорядочивание элементов за счёт использования связного списка поверх стандартной хеш-таблицы.
▪️ Хранение данных: LinkedHashSet использует LinkedHashMap для хранения элементов. Каждый добавляемый элемент выступает в роли ключа, а значение всегда фиксировано (обычно это объект-заглушка).
▪️ Связный список: Для поддержания порядка добавления, элементы связаны друг с другом в виде двусвязного списка. Это позволяет итерациям проходить элементы в порядке их вставки.
▪️ Уникальность элементов: Как и в HashSet, каждый элемент уникален. При попытке добавить дублирующий элемент он игнорируется, сохраняя уникальность всех значений.
🔹 Производительность
▪️ Добавление: Добавление элементов происходит за амортизированное O(1) время. LinkedHashSet вычисляет хэш элемента и индекс, где он будет храниться в массиве бакетов LinkedHashMap.
▪️ Удаление: Удаление происходит также за амортизированное O(1) время. LinkedHashSet находит элемент по хэшу, удаляет его из связного списка и освобождает место в корзине.
▪️ Поиск: Поиск происходит за амортизированное O(1) время благодаря хэш-таблице.
🔹 Использование памяти
LinkedHashSet требует немного больше памяти по сравнению с HashSet, так как хранит не только хэш-таблицу, но и двусвязный список, поддерживающий порядок добавления элементов. Это делает LinkedHashSet более затратным в плане памяти, особенно при большом количестве элементов.
🔹 Преимущества и недостатки
▪️ Преимущества:
- Сохранение порядка добавления элементов.
- Быстрая работа с элементами за амортизированное O(1) время, как и в HashSet.
▪️ Недостатки:
- Потребление ресурсов возрастает при большом количестве элементов, так как структура требует больше памяти для поддержания порядка.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека тестировщика | QA, тестирование, quality assurance, manual testing, autotesting, ручное тестирование, автотесты
🚀🐘 Оптимизация хранимых процедур в PostgreSQL: 4 трюка для взрывного ускорения
Кто из нас не сталкивался с медленными хранимыми процедурами в PostgreSQL? Наверняка таких мало. Сегодня поговорим о том, как реально ускорить их работу. Никакой сухой теории — только проверенные на практике методы. Разберем, как анализировать запросы, правильно использовать индексы и применять другие хитрости, которые действительно работают.
Читать статью
Кто из нас не сталкивался с медленными хранимыми процедурами в PostgreSQL? Наверняка таких мало. Сегодня поговорим о том, как реально ускорить их работу. Никакой сухой теории — только проверенные на практике методы. Разберем, как анализировать запросы, правильно использовать индексы и применять другие хитрости, которые действительно работают.
Читать статью