📜 JBake — генератор статических сайтов для Java-разработчиков. Этот инструмент превращает Markdown, AsciiDoc или HTML-файлы в готовые статические сайты, сохраняя при этом гибкость шаблонов через Freemarker и Groovy.
Сборка через Gradle позволяет кастомизировать процесс, а встроенная поддержка Docker избавляет от необходимости настраивать окружение вручную. Для блогов разработчиков есть удобная организация контента по датам и тегам. Проект развивается с 2013 года и сохраняет минималистичный подход — никаких избыточных зависимостей, только ядро и плагины для расширения функциональности.
🤖 GitHub
@javatg
Сборка через Gradle позволяет кастомизировать процесс, а встроенная поддержка Docker избавляет от необходимости настраивать окружение вручную. Для блогов разработчиков есть удобная организация контента по датам и тегам. Проект развивается с 2013 года и сохраняет минималистичный подход — никаких избыточных зависимостей, только ядро и плагины для расширения функциональности.
🤖 GitHub
@javatg
👍6❤2🥰1
🧠 Хитрая Java-задача: «Клонируемый итератор с разделяемым буфером»
Уровень: 💥 продвинутый (Java 17+)
🎯 Задача
Реализуйте класс
✔ Оборачивает любой
✔ Позволяет создать независимые клоны, каждый из которых продолжает чтение с текущего места
✔ Поддерживает *эффективное* разделение буфера: память O(k), где k — число активных клонов
✔ Не дублирует данные, не загружает всё в память и работает потокобезопасно (не обязательно
📌 Пример
💡 Ограничения
• Нельзя просто скопировать Iterator или заранее собирать весь список
• Память должна освобождаться, если часть буфера уже не нужна (все клоны её прошли)
• Только стандартная библиотека Java (можно использовать Deque, ArrayList, WeakReference, Optional, AtomicInteger и т.д.)
🔍 Подсказка по архитектуре
• Ведите общий буфер типа Deque<T>
• Каждому клону сопоставляется индекс, отслеживающий позицию в буфере
• По мере продвижения всех клонов — чистим буфер до минимального индекса
• Продумайте синхронизацию доступа, если хотите потокобезопасную версию
✅ Прототип реализации (без потокобезопасности)
🚀 Что можно улучшить
• Потокобезопасность (ConcurrentLinkedDeque, AtomicInteger)
• Освобождение ресурсов при уничтожении клонов (WeakReference)
• Поддержка remove()
• Версия Stream<T> с spliterator() или flatMap()
@javatg
Уровень: 💥 продвинутый (Java 17+)
🎯 Задача
Реализуйте класс
CloneableIterator<T>
, который:✔ Оборачивает любой
Iterator<T>
✔ Позволяет создать независимые клоны, каждый из которых продолжает чтение с текущего места
✔ Поддерживает *эффективное* разделение буфера: память O(k), где k — число активных клонов
✔ Не дублирует данные, не загружает всё в память и работает потокобезопасно (не обязательно
synchronized
, но без багов)📌 Пример
CloneableIterator<Integer> base = new CloneableIterator<>(List.of(10, 20, 30, 40).iterator());
Iterator<Integer> it1 = base.clone();
Iterator<Integer> it2 = base.clone();
System.out.println(it1.next()); // 10
System.out.println(it1.next()); // 20
System.out.println(it2.next()); // 10
System.out.println(it2.next()); // 20
System.out.println(it2.next()); // 30
💡 Ограничения
• Нельзя просто скопировать Iterator или заранее собирать весь список
• Память должна освобождаться, если часть буфера уже не нужна (все клоны её прошли)
• Только стандартная библиотека Java (можно использовать Deque, ArrayList, WeakReference, Optional, AtomicInteger и т.д.)
🔍 Подсказка по архитектуре
• Ведите общий буфер типа Deque<T>
• Каждому клону сопоставляется индекс, отслеживающий позицию в буфере
• По мере продвижения всех клонов — чистим буфер до минимального индекса
• Продумайте синхронизацию доступа, если хотите потокобезопасную версию
✅ Прототип реализации (без потокобезопасности)
import java.util.*;
public class CloneableIterator<T> {
private final Iterator<T> source;
private final List<T> buffer = new ArrayList<>();
private final List<Integer> positions = new ArrayList<>();
public CloneableIterator(Iterator<T> source) {
this.source = source;
}
public Iterator<T> clone() {
int index = 0;
positions.add(index);
int myId = positions.size() - 1;
return new Iterator<T>() {
private int pos = positions.get(myId);
@Override
public boolean hasNext() {
fillBuffer();
return pos < buffer.size();
}
@Override
public T next() {
fillBuffer();
if (pos >= buffer.size()) {
throw new NoSuchElementException();
}
T value = buffer.get(pos++);
positions.set(myId, pos);
cleanupBuffer();
return value;
}
private void fillBuffer() {
if (!source.hasNext()) return;
while (buffer.size() <= pos && source.hasNext()) {
buffer.add(source.next());
}
}
private void cleanupBuffer() {
int min = Collections.min(positions);
if (min > 0) {
buffer.subList(0, min).clear();
for (int i = 0; i < positions.size(); i++) {
positions.set(i, positions.get(i) - min);
}
}
}
};
}
}
🚀 Что можно улучшить
• Потокобезопасность (ConcurrentLinkedDeque, AtomicInteger)
• Освобождение ресурсов при уничтожении клонов (WeakReference)
• Поддержка remove()
• Версия Stream<T> с spliterator() или flatMap()
@javatg
❤5👍4🔥3😱2
Media is too big
VIEW IN TELEGRAM
🚀 Что нового
• Встроенный API для разбора и генерации PEM-текста (Privacy-Enhanced Mail)
• Поддержка публичных и приватных ключей, X.509-сертификатов, CRL
• Единый высокоуровневый интерфейс без сторонних зависимостей
🔍 Почему это важно
• Упрощает интеграцию с PKI и системами безопасности
• Исключает ручной парсинг Base64 и ошибки форматирования
• Обеспечивает безопасное хранение шифруемых ключей
Video: https://www.youtube.com/watch?v=hqvMn2SwKiI
JEP 470: https://openjdk.org/jeps/470
JDK 25 EA: https://jdk.java.net/25/
#Java #OpenJDK #Security
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤4👍3
🚀 Jooby — лаконичный веб-фреймворк для Java и Kotlin. Этот проект предлагает минималистичный подход к созданию API — без лишних абстракций, но с поддержкой популярных серверов вроде Jetty и Netty. Инструмент универсален: один и тот же код работает как в традиционных Java-приложениях, так и в Kotlin-проектах.
Фреймворк сохраняет совместимость с существующими решениями, позволяя подключать модули для GraphQL, WebSocket или авторизации. При этом стартовый шаблон умещается в несколько строк — достаточно вызвать
🤖 GitHub
@javatg
Фреймворк сохраняет совместимость с существующими решениями, позволяя подключать модули для GraphQL, WebSocket или авторизации. При этом стартовый шаблон умещается в несколько строк — достаточно вызвать
runApp
и описать роуты. 🤖 GitHub
@javatg
🔥4👍3🎉2
☕ Java-задача: что выведет этот код с `Integer` и `==`?
🔍 Варианты:
• a)
• b)
• c)
• d)
💡 Разбор:
В Java объект в диапазоне от -128 до 127 кешируется. Это значит:
- и будут ссылаться на один и тот же объект
- и — разные объекты, хоть и равны по значению
А оператор проверяет ссылочное равенство, а не значение.
✅ Правильный ответ: c) `true`, `false`
📌 Чтобы сравнивать значения , всегда используй :
🧠 Вывод: кеш работает в пределах -128..127. За пределами — создаются новые объекты. Используй вместо , если важны значения, а не ссылки.
public class Main {
public static void main(String[] args) {
Integer a = 100;
Integer b = 100;
Integer x = 1000;
Integer y = 1000;
System.out.println(a == b);
System.out.println(x == y);
}
}
🔍 Варианты:
• a)
true
, true
• b)
false
, false
• c)
true
, false
• d)
false
, true
💡 Разбор:
Integer
-
Integer a = 100;
Integer b = 100;
-
Integer x = 1000;
Integer y = 1000;
А оператор
==
✅ Правильный ответ: c) `true`, `false`
📌 Чтобы сравнивать значения
Integer
.equals()
System.out.println(x.equals(y)); // true
🧠 Вывод: кеш
Integer
equals()
==
👍15❤6🔥4
📚 Spring AI Alibaba — универсальный фреймворк для создания AI-агентов. Этот проект от Alibaba предлагает необычный подход к созданию чат-ботов. Вместо простых диалоговых систем здесь можно строить сложные мультиагентные workflows с визуальным графом выполнения, интеграцией с облачными сервисами Aliyun и даже human-in-the-loop взаимодействием.
Интересно выглядит DeepResearch — агент для аналитики, умеющий самостоятельно искать информацию, обрабатывать данные и генерировать отчеты. Поддержка Nacos и OpenTelemetry делает проект готовым к продакшену из коробки.
🤖 GitHub
@javatg
Интересно выглядит DeepResearch — агент для аналитики, умеющий самостоятельно искать информацию, обрабатывать данные и генерировать отчеты. Поддержка Nacos и OpenTelemetry делает проект готовым к продакшену из коробки.
🤖 GitHub
@javatg
❤11🥰4🤯2🎉2
🌊 Project Nessie — транзакционный каталог для data lakes с Git-подобным управлением версиями. Этот инструмент позволяет работать с данными как с кодом: создавать ветки, сливать изменения и откатывать их до предыдущих состояний. Особенно удобен для команд, которые хотят внести контроль версий в свои процессы обработки данных.
Инструмент поддерживает таблицы и представления Iceberg, а также интеграцию с популярными инструментами вроде Spark, Hive и Flink. Для быстрого старта можно развернуть готовый Docker-образ или воспользоваться CLI. Проект активно развивается: есть веб-интерфейс, аутентификация через OpenID Connect и подробная документация.
🤖 GitHub
@javatg
Инструмент поддерживает таблицы и представления Iceberg, а также интеграцию с популярными инструментами вроде Spark, Hive и Flink. Для быстрого старта можно развернуть готовый Docker-образ или воспользоваться CLI. Проект активно развивается: есть веб-интерфейс, аутентификация через OpenID Connect и подробная документация.
🤖 GitHub
@javatg
👍4🔥3🥰1
Forwarded from Machinelearning
This media is not supported in your browser
VIEW IN TELEGRAM
• Лёгкий и мощный инструмент для разработки в командной строке
• Работает на базе Gemini 2.5 Pro
• Код агента в открытом доступе (Apache 2.0)
• Поддержка контекста в 1 миллион токенов
• Бесплатный тариф: до 60 запросов в минуту и 1000 в день
• Привязка к Google Search
• Поддержка MCP
• Интеграция с VS Code (Gemini Code Assist)
Запуск в cli:
npx https://github.com/google-gemini/gemini-cli
@ai_machinelearning_big_data
#AI #ML #agent #Google
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥7👍6
⛓️ Jimmer — революционный ORM для JVM (Java/Kotlin), переосмысливающий работу с данными. Этот инструмент позволяет оперировать не отдельными сущностями, а целыми графами объектов любой сложности, как при чтении, так и при сохранении.
Инструмент имеет встроенную поддержку DTO с кодогенерацией, самостоятельного устранения проблемы N+1 запросов и работы с рекурсивными структурами. ORM автоматически оптимизирует SQL-запросы, убирает лишние JOIN'ы и поддерживает многоуровневое кеширование. Проект предлагает удобные DSL для запросов, интеграцию с GraphQL и работает через APT/KSP, что обеспечивает безопасность типов на этапе компиляции.
🤖 GitHub
@androidits
Инструмент имеет встроенную поддержку DTO с кодогенерацией, самостоятельного устранения проблемы N+1 запросов и работы с рекурсивными структурами. ORM автоматически оптимизирует SQL-запросы, убирает лишние JOIN'ы и поддерживает многоуровневое кеширование. Проект предлагает удобные DSL для запросов, интеграцию с GraphQL и работает через APT/KSP, что обеспечивает безопасность типов на этапе компиляции.
🤖 GitHub
@androidits
👍18❤8🔥2😁1
💻 RSocket — протокол для реактивного взаимодействия между сервисами через TCP, WebSockets и Aeron. В отличие от традиционных HTTP-запросов, он поддерживает четыре модели обмена сообщениями: запрос-ответ, поток данных, fire-and-forget и бесконечные подписки на события.
Проект обладает zero-copy режимом для снижения задержек и Java-реализацией с интеграцией в Reactor. Подходит для микросервисов, где важны двунаправленная связь и эффективная работа с потоками данных.
🤖 GitHub
@javatg
Проект обладает zero-copy режимом для снижения задержек и Java-реализацией с интеграцией в Reactor. Подходит для микросервисов, где важны двунаправленная связь и эффективная работа с потоками данных.
🤖 GitHub
@javatg
👍10🔥3❤2
🔌 EA Async — асинхронный код в Java без головной боли. Этот необычный проект от Electronic Arts привносит в JVM-экосистему синтаксис async/await, знакомый разработчикам из C# и JavaScript. С ним асинхронные операции с CompletableFuture выглядят как последовательный код, сохраняя при этом все преимущества неблокирующего выполнения.
Библиотека трансформирует код на этапе компиляции — вы пишете блокирующий код с await, а под капотом генерируются цепочки thenCompose/thenApply. Работает с Java 8+ и Scala, а интеграция через Maven-плагин позволяет вообще исключить runtime-зависимости.
🤖 GitHub
@javatg
Библиотека трансформирует код на этапе компиляции — вы пишете блокирующий код с await, а под капотом генерируются цепочки thenCompose/thenApply. Работает с Java 8+ и Scala, а интеграция через Maven-плагин позволяет вообще исключить runtime-зависимости.
🤖 GitHub
@javatg
🔥10👍5❤4
🌄 Landscapist — элегантная загрузка изображений в Jetpack Compose. Этот проект превращает работу с сетевыми изображениями в Kotlin Multiplatform-приложениях в простой и производительный процесс. Инструмент использует единый API для трех популярных библиотек: Glide, Coil и Fresco, с автоматической оптимизацией под recomposition в Compose.
В проекте интересно реализованы анимации: плавное появление, размытие и круговая раскладка работают из коробки. Также доступна встроенная поддержка Baseline Profiles для ускорения загрузки.
🤖 GitHub
@javatg
В проекте интересно реализованы анимации: плавное появление, размытие и круговая раскладка работают из коробки. Также доступна встроенная поддержка Baseline Profiles для ускорения загрузки.
🤖 GitHub
@javatg
🔥5❤4👍3
📚 Java & Related Concepts — полный гайд по Java-экосистеме. Этот репозиторий представляет собой целую энциклопедию для Java-разработчиков. Автор структурировал материал от основ языка до продвинутых тем: многопоточность, проектирование систем, алгоритмы и даже Kotlin с Android-разработкой.
Проект имеет полезные разделы с примерами кода: от классических паттернов вроде Singleton до задач на динамическое программирование. Для тех, кто готовится к собеседованиям, есть подборка LeetCode-шаблонов и реальных interview-задач.
🤖 GitHub
@javatg
Проект имеет полезные разделы с примерами кода: от классических паттернов вроде Singleton до задач на динамическое программирование. Для тех, кто готовится к собеседованиям, есть подборка LeetCode-шаблонов и реальных interview-задач.
🤖 GitHub
@javatg
🔥10❤2👍2
⚡️ Почему лучшие разработчики всегда на шаг впереди?
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: www.tg-me.com/ai_machinelearning_big_data
Python: www.tg-me.com/pythonl
Linux: www.tg-me.com/linuxacademiya
Мл собес www.tg-me.com/machinelearning_interview
C++ www.tg-me.com/cpluspluc
Docker: www.tg-me.com/DevopsDocker
Хакинг: www.tg-me.com/linuxkalii
МЛ: www.tg-me.com/machinelearning_ru
Devops: www.tg-me.com/DevOPSitsec
Data Science: www.tg-me.com/data_analysis_ml
Javascript: www.tg-me.com/javascriptv
C#: www.tg-me.com/csharp_ci
Java: www.tg-me.com/java_library
Базы данных: www.tg-me.com/sqlhub
Python собеседования: www.tg-me.com/python_job_interview
Мобильная разработка: www.tg-me.com/mobdevelop
Golang: www.tg-me.com/Golang_google
React: www.tg-me.com/react_tg
Rust: www.tg-me.com/rust_code
ИИ: www.tg-me.com/vistehno
PHP: www.tg-me.com/phpshka
Android: www.tg-me.com/android_its
Frontend: www.tg-me.com/front
Big Data: www.tg-me.com/bigdatai
МАТЕМАТИКА: www.tg-me.com/data_math
Kubernets: www.tg-me.com/kubernetc
Разработка игр: https://www.tg-me.com/gamedev
Физика: www.tg-me.com/fizmat
Папка Go разработчика: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: www.tg-me.com/addlist/eEPya-HF6mkxMGIy
Папка ML: https://www.tg-me.com/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://www.tg-me.com/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: www.tg-me.com/memes_prog
🇬🇧Английский: www.tg-me.com/english_forprogrammers
🧠ИИ: www.tg-me.com/vistehno
🖥 Chatgpt для кода в тг: @Chatgpturbobot -
📕Ит-книги: https://www.tg-me.com/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: www.tg-me.com/ai_machinelearning_big_data
Python: www.tg-me.com/pythonl
Linux: www.tg-me.com/linuxacademiya
Мл собес www.tg-me.com/machinelearning_interview
C++ www.tg-me.com/cpluspluc
Docker: www.tg-me.com/DevopsDocker
Хакинг: www.tg-me.com/linuxkalii
МЛ: www.tg-me.com/machinelearning_ru
Devops: www.tg-me.com/DevOPSitsec
Data Science: www.tg-me.com/data_analysis_ml
Javascript: www.tg-me.com/javascriptv
C#: www.tg-me.com/csharp_ci
Java: www.tg-me.com/java_library
Базы данных: www.tg-me.com/sqlhub
Python собеседования: www.tg-me.com/python_job_interview
Мобильная разработка: www.tg-me.com/mobdevelop
Golang: www.tg-me.com/Golang_google
React: www.tg-me.com/react_tg
Rust: www.tg-me.com/rust_code
ИИ: www.tg-me.com/vistehno
PHP: www.tg-me.com/phpshka
Android: www.tg-me.com/android_its
Frontend: www.tg-me.com/front
Big Data: www.tg-me.com/bigdatai
МАТЕМАТИКА: www.tg-me.com/data_math
Kubernets: www.tg-me.com/kubernetc
Разработка игр: https://www.tg-me.com/gamedev
Физика: www.tg-me.com/fizmat
Папка Go разработчика: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: www.tg-me.com/addlist/eEPya-HF6mkxMGIy
Папка ML: https://www.tg-me.com/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://www.tg-me.com/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: www.tg-me.com/memes_prog
🇬🇧Английский: www.tg-me.com/english_forprogrammers
🧠ИИ: www.tg-me.com/vistehno
📕Ит-книги: https://www.tg-me.com/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
🌳 AVL, Red-Black и обычные BST — в чём разница и что использовать
Если вы работаете с алгоритмами или backend-структурами, важно понимать, чем отличаются разные виды бинарных деревьев поиска. Они вроде бы похожи, но ведут себя по-разному под нагрузкой.
📘 1. Обычное BST (Binary Search Tree)
🔹 Это простое бинарное дерево, где:
> левый элемент < корень < правый элемент
🔹 Плюсы:
– простая реализация
– отлично работает в идеальных условиях (например, сбалансированные данные)
🔹 Минусы:
– если данные приходят в отсортированном виде — дерево вырождается в связный список
– время поиска, вставки, удаления может стать O(n) вместо O(log n)
📗 2. AVL-дерево
🔹 Это самобалансирующееся BST, в котором:
> разница высот левого и правого поддерева никогда не превышает 1
🔹 Плюсы:
– очень быстрое чтение и поиск (потому что дерево строго сбалансировано)
– гарантированное O(log n) на все операции
🔹 Минусы:
– при вставке и удалении может потребоваться много вращений, особенно при массовых изменениях
– чуть сложнее в реализации
📌 Используется, когда важна максимально быстрая навигация по дереву (например, базы данных, кэшированные индексы)
📕 3. Red-Black Tree (Красно-чёрное дерево)
🔹 Более "гибкое" самобалансирующееся дерево
> баланс поддерживается за счёт цветов узлов и набора правил
> менее строгое, чем AVL, но быстрее на изменениях
🔹 Плюсы:
– меньше вращений при вставке/удалении
– лучше масштабируется, особенно при больших объёмах данных
– используется в
🔹 Минусы:
– чуть менее сбалансировано, чем AVL
– поиск может быть чуть медленнее, но разница минимальна
📌 Используется в системах, где часто происходят вставки и удаления, и важна скорость обновлений, а не только чтения.
🧠 Итого:
🔗 Подробнее:
https://www.java67.com/2019/10/difference-between-binary-tree-avl-red-black-binary-search-tree.html
#algorithms #datastructures #backend #trees #avl #redblack
@javatg
Если вы работаете с алгоритмами или backend-структурами, важно понимать, чем отличаются разные виды бинарных деревьев поиска. Они вроде бы похожи, но ведут себя по-разному под нагрузкой.
📘 1. Обычное BST (Binary Search Tree)
🔹 Это простое бинарное дерево, где:
> левый элемент < корень < правый элемент
🔹 Плюсы:
– простая реализация
– отлично работает в идеальных условиях (например, сбалансированные данные)
🔹 Минусы:
– если данные приходят в отсортированном виде — дерево вырождается в связный список
– время поиска, вставки, удаления может стать O(n) вместо O(log n)
📗 2. AVL-дерево
🔹 Это самобалансирующееся BST, в котором:
> разница высот левого и правого поддерева никогда не превышает 1
🔹 Плюсы:
– очень быстрое чтение и поиск (потому что дерево строго сбалансировано)
– гарантированное O(log n) на все операции
🔹 Минусы:
– при вставке и удалении может потребоваться много вращений, особенно при массовых изменениях
– чуть сложнее в реализации
📌 Используется, когда важна максимально быстрая навигация по дереву (например, базы данных, кэшированные индексы)
📕 3. Red-Black Tree (Красно-чёрное дерево)
🔹 Более "гибкое" самобалансирующееся дерево
> баланс поддерживается за счёт цветов узлов и набора правил
> менее строгое, чем AVL, но быстрее на изменениях
🔹 Плюсы:
– меньше вращений при вставке/удалении
– лучше масштабируется, особенно при больших объёмах данных
– используется в
TreeMap
(Java), std::map
(C++), Linux kernel
🔹 Минусы:
– чуть менее сбалансировано, чем AVL
– поиск может быть чуть медленнее, но разница минимальна
📌 Используется в системах, где часто происходят вставки и удаления, и важна скорость обновлений, а не только чтения.
🧠 Итого:
| Структура | Быстрее при... | Баланс | Где применяется |
|----------------|------------------------|--------|----------------------------------------|
| **BST** | — (только в идеале) | ❌ нет | учебные задачи, простые деревья |
| **AVL** | ✅ Поиске | ✅ строгий | базы данных, индексы, словари |
| **Red-Black** | ✅ Вставке/удалении | ⚠ умеренный | языковые stdlib, ядра, runtime-структуры |
🔗 Подробнее:
https://www.java67.com/2019/10/difference-between-binary-tree-avl-red-black-binary-search-tree.html
#algorithms #datastructures #backend #trees #avl #redblack
@javatg
❤8👍7🔥4
🎨 Mordant — библиотека для стилизации текста в терминале. Этот мультиплатформенный Kotlin-проект превращает скучный терминальный вывод в визуально приятные интерфейсы. С ним можно не просто раскрашивать текст, но и создавать таблицы, анимированные прогресс-бары и даже рендерить Markdown прямо в консоли.
Инструмент умеет автоматически определять возможности терминала и поддерживает корутины для анимаций. Под капотом: умная система виджетов для компоновки элементов и кросс-платформенная работа на JVM, JS и Native.
🤖 GitHub
@androidits
Инструмент умеет автоматически определять возможности терминала и поддерживает корутины для анимаций. Под капотом: умная система виджетов для компоновки элементов и кросс-платформенная работа на JVM, JS и Native.
🤖 GitHub
@androidits
👍6🔥4❤2