Большие JSON-объекты замедляют десериализацию, перегружают память и увеличивают задержки.
Что делать, чтобы JSON не тормозил приложение:
JsonSerializer.DeserializeAsync
, чтобы не загружать весь объект в память.🖇 Полное руководство
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
🏗 🔨 Как не сломать продакшен: 8 основных паттернов распределенных систем
Разработка распределённых систем сопряжена с множеством вызовов: от управления состоянием и взаимодействия сервисов до обработки отказов и масштабирования. Чтобы упростить решение этих задач, инженеры используют проверенные временем архитектурные паттерны.
В статье рассматриваются ключевые шаблоны, помогающие строить надёжные и эффективные распределённые системы.
➡️ Читать статью
🐸 Библиотека devops'a
Разработка распределённых систем сопряжена с множеством вызовов: от управления состоянием и взаимодействия сервисов до обработки отказов и масштабирования. Чтобы упростить решение этих задач, инженеры используют проверенные временем архитектурные паттерны.
В статье рассматриваются ключевые шаблоны, помогающие строить надёжные и эффективные распределённые системы.
➡️ Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
🌐 Тестирование API в .NET
WireMock позволяет эмулировать HTTP-запросы и ответы, создавая локальные mock-сервисы вместо реальных API.
Возможности WireMock.Net:
• Mock API-запросов и ответов – можно заранее определить, как сервер должен реагировать.
• Гибкие настройки – поддержка кастомных заголовков, тел запросов, условий обработки.
• Интеграция с .NET-тестами – можно легко использовать в xUnit, NUnit или MSTest.
• Запись и воспроизведение запросов – полезно при тестировании реальных API-ответов.
Пример мокирования API
➡️ Подробнеe про мокирование API
🐸 Библиотека шарписта
WireMock позволяет эмулировать HTTP-запросы и ответы, создавая локальные mock-сервисы вместо реальных API.
Возможности WireMock.Net:
• Mock API-запросов и ответов – можно заранее определить, как сервер должен реагировать.
• Гибкие настройки – поддержка кастомных заголовков, тел запросов, условий обработки.
• Интеграция с .NET-тестами – можно легко использовать в xUnit, NUnit или MSTest.
• Запись и воспроизведение запросов – полезно при тестировании реальных API-ответов.
Пример мокирования API
var server = WireMockServer.Start();
// Определяем мок-ответ для запроса
server.Given(
Request.Create().WithPath("/test").UsingGet()
)
.WillRespondWith(
Response.Create()
.WithStatusCode(200)
.WithBody("{\"message\": \"Hello, WireMock!\"}")
);
// Используем API в тестах
var client = new HttpClient { BaseAddress = new Uri(server.Url) };
var response = await client.GetStringAsync("/test");
Console.WriteLine(response); // {"message": "Hello, WireMock!"}
server.Stop();
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰8👍3
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
👍1🥱1
📊 Как себя чувствует IT-рынок в 2025 году?
Друзья, запускаем важное исследование рынка труда в IT!
Нам очень важно понять:
• Как изменились зарплаты
• Что происходит с наймом
• Есть ли сокращения или рост
🔐 Опрос полностью анонимный
⏱️ Займёт всего 3-5 минут
📈 Результаты опубликуем в подробной статье
Ваши ответы помогут составить реальную картину происходящего в индустрии.
👉 Пройти опрос
Друзья, запускаем важное исследование рынка труда в IT!
Нам очень важно понять:
• Как изменились зарплаты
• Что происходит с наймом
• Есть ли сокращения или рост
🔐 Опрос полностью анонимный
⏱️ Займёт всего 3-5 минут
📈 Результаты опубликуем в подробной статье
Ваши ответы помогут составить реальную картину происходящего в индустрии.
👉 Пройти опрос
👾2👍1
🔄 Февральское обновление .NET
Microsoft выпустила обновление .NET 9.0.2, и вот самое важное, что стоит знать:
➖ Производительность и стабильность:
• Устранены критические ошибки JIT-компилятора, которые могли вызывать сбои при работе с исключениями.
• Исправлена проблема пошаговой отладки — теперь разработчики смогут эффективно анализировать код без неожиданных пропусков.
• Оптимизирована работа метода
➖ Совместимость и поддержка:
• Исправлены ошибки сборки для платформы Tizen (linux-armel).
• Обновлены ключевые образы: Alpine, Debian, Fedora для более надежного развертывания.
➖ Безопасность и надежность:
• Обновлена работа профилировщика для избежания блокировок при мониторинге потоков.
• Исправлена ошибка в
➡️ Подробности обновления
🐸 Библиотека шарписта
Microsoft выпустила обновление .NET 9.0.2, и вот самое важное, что стоит знать:
• Устранены критические ошибки JIT-компилятора, которые могли вызывать сбои при работе с исключениями.
• Исправлена проблема пошаговой отладки — теперь разработчики смогут эффективно анализировать код без неожиданных пропусков.
• Оптимизирована работа метода
Vector.Create
, что ускоряет вычисления в высоконагруженных приложениях.• Исправлены ошибки сборки для платформы Tizen (linux-armel).
• Обновлены ключевые образы: Alpine, Debian, Fedora для более надежного развертывания.
• Обновлена работа профилировщика для избежания блокировок при мониторинге потоков.
• Исправлена ошибка в
System.Reflection.Emit
, которая создавала неверные PDB-файлы.Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤🔥2❤2😁1👾1
Forwarded from Библиотека Go-разработчика | Golang
🆚 Go vs C#
Выбор языка — это всегда компромисс между производительностью, удобством и экосистемой. Давайте разберёмся, чем отличаются Go и C#.
➖ Область применения
• Go: создан Google, ориентирован на простоту, скорость и параллельность. Отлично подходит для облачных сервисов, микросервисов и высоконагруженных систем.
• C#: язык Microsoft, мощный инструмент для корпоративных решений, игр (Unity) и десктопных приложений.
➖ Кроссплатформенность
• Go: отлично компилируется под разные платформы без зависимостей.
• C#: поддерживает кроссплатформенность через .NET Core, но требует среды выполнения.
➖ Система типов
• Go: строгая, но минималистичная. Отсутствует наследование, но есть интерфейсы.
• C#: мощная объектно-ориентированная система с поддержкой дженериков, интерфейсов и функционального программирования.
➖ Где какой язык лучше
Выбирайте Go, если:
✅ Нужна максимальная производительность без лишней сложности.
✅ Работаете с микросервисами, API, контейнерами, облачными сервисами.
✅ Важна лёгкость развертывания без сложных зависимостей.
Выбирайте C#, если:
✅ Разрабатываете десктопные приложения или сервисы под Windows.
✅ Нужна мощная экосистема с продвинутыми библиотеками.
✅ Создаёте игры на Unity.
➡️ Подробное сравнение в статье
🐸 Библиотека Go разработчика
Выбор языка — это всегда компромисс между производительностью, удобством и экосистемой. Давайте разберёмся, чем отличаются Go и C#.
• Go: создан Google, ориентирован на простоту, скорость и параллельность. Отлично подходит для облачных сервисов, микросервисов и высоконагруженных систем.
• C#: язык Microsoft, мощный инструмент для корпоративных решений, игр (Unity) и десктопных приложений.
• Go: отлично компилируется под разные платформы без зависимостей.
• C#: поддерживает кроссплатформенность через .NET Core, но требует среды выполнения.
• Go: строгая, но минималистичная. Отсутствует наследование, но есть интерфейсы.
• C#: мощная объектно-ориентированная система с поддержкой дженериков, интерфейсов и функционального программирования.
Выбирайте Go, если:
Выбирайте C#, если:
➡️ Подробное сравнение в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱35👍8👾5🤔3🌚1
😳 Если бы языки программирования были девушками
Выбрать язык — всё равно что найти идеального партнера. Кто-то западает на строгую типизацию, кто-то ищет простоту и гибкость, а некоторые готовы углубиться в самые сложные алгоритмы отношений.
Мы заглянули в Тиндер разработчика и нашли там C#. Как вам? 😏
Еще большепрекрасных дам языков программирования — в нашем канале Библиотека программиста.
Свайпайте и выбирайте свой мэтч ❤️
🐸 Библиотека шарписта
Выбрать язык — всё равно что найти идеального партнера. Кто-то западает на строгую типизацию, кто-то ищет простоту и гибкость, а некоторые готовы углубиться в самые сложные алгоритмы отношений.
Мы заглянули в Тиндер разработчика и нашли там C#. Как вам? 😏
Еще больше
Свайпайте и выбирайте свой мэтч ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9🥱9😁4👍2🤩1
⚡️ Буст продуктивности в Razor/Blazor
Microsoft представила свежие обновления для работы с Razor в Visual Studio и Visual Studio Code.
1️⃣ Извлечение в компонент одним кликом
Теперь можно выделить кусок кода в Razor и мгновенно преобразовать его в отдельный компонент. Нажимаем Ctrl + . и выбираем "Extract to Component".
2️⃣ Новый токенизатор C# на основе Roslyn
Токенизатор — это инструмент, который разбивает код на отдельные элементы: ключевые слова, идентификаторы, строки, символы. В Razor он отвечает за корректное отображение и подсветку синтаксиса, а также за работу автодополнений.
Теперь Razor использует токенизатор Roslyn, из-за чего появилась поддержка нового синтаксиса C# и улучшилась обработка директив.
➡️ Примеры с кодом в блоге .NET
🐸 Библиотека шарписта
Microsoft представила свежие обновления для работы с Razor в Visual Studio и Visual Studio Code.
Теперь можно выделить кусок кода в Razor и мгновенно преобразовать его в отдельный компонент. Нажимаем Ctrl + . и выбираем "Extract to Component".
Токенизатор — это инструмент, который разбивает код на отдельные элементы: ключевые слова, идентификаторы, строки, символы. В Razor он отвечает за корректное отображение и подсветку синтаксиса, а также за работу автодополнений.
Теперь Razor использует токенизатор Roslyn, из-за чего появилась поддержка нового синтаксиса C# и улучшилась обработка директив.
➡️ Примеры с кодом в блоге .NET
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍2
Forwarded from Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
🐳 Делаем конкурента DeepSeek R1-Zero на домашней пекарне: метод GRPO в Unsloth
Обычно LLM требуют мощных GPU, но теперь даже на видеокарте с ограниченной памятью можно обучать модели логического рассуждения.
💡 Фишка — новый алгоритм GRPO, который позволяет моделям развивать логическое мышление без вмешательства человека.
Подробнее в нашей статье: https://proglib.io/sh/MyBCbq9is5
Обычно LLM требуют мощных GPU, но теперь даже на видеокарте с ограниченной памятью можно обучать модели логического рассуждения.
💡 Фишка — новый алгоритм GRPO, который позволяет моделям развивать логическое мышление без вмешательства человека.
Подробнее в нашей статье: https://proglib.io/sh/MyBCbq9is5
🚘 Моделирование состояний гонки в C#
Состояние гонки возникает при одновременном доступе потоков к общим данным, что приводит к непредсказуемым результатам. Просто увеличить количество потоков недостаточно из-за оптимизаций CPU и планировщика задач.
Для надёжной симуляции используйте
Избежать гонки помогут:
📎 Примеры симуляции гонки
🐸 Библиотека шарписта
Состояние гонки возникает при одновременном доступе потоков к общим данным, что приводит к непредсказуемым результатам. Просто увеличить количество потоков недостаточно из-за оптимизаций CPU и планировщика задач.
Для надёжной симуляции используйте
Thread.Sleep()
или семафоры для одновременного запуска потоков.Избежать гонки помогут:
lock
, Interlocked
, Monitor
.Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
⚠️ В машинном обучении, как в любви: слишком идеальные предсказания – это подозрительно!
Когда модель слишком прилипчива к тренировочным данным, результат оказывается… ну, как в отношениях, когда всё кажется идеальным, но реальность ломает сердце.
❌ Оверфиттинг (Overfitting) – модель так хорошо запомнила тренировочные данные, что на реальных данных начинает путаться.
💔 В любви: «Я выбрал идеального партнёра по профилю, а в жизни выяснилось, что его «идеальность» – всего лишь иллюзия!»
❌ Андерфиттинг (Underfitting) – модель обучена настолько поверхностно, что предсказывает мэтчи случайным образом.
💔 В любви: «Мне нравятся только люди с именем Александр, а всех остальных я даже не замечаю – бедный фильтр!»
❌ Неправильный выбор фичей (Feature Selection Fail) – если модель опирается на неважные признаки, она предсказывает мэтчи хуже случайности.
💔 В любви: «Ты любишь авокадо? Значит, мы созданы друг для друга!» – а потом оказывается, что это вовсе не про важное.
🎯 На вебинаре мы разобрали, как избежать этих ошибок и создать работающую модель для speed dating, которая на самом деле помогает находить любовь! Вчера мы не просто говорили о любви – мы её предсказывали!
🔥 Спасибо всем, кто был с нами и участвовал!
💘 Как же это было?
Если ты пропустил вебинар или хочешь пересмотреть запись – просто перейди по [ссылке] и получи видео 😉
Когда модель слишком прилипчива к тренировочным данным, результат оказывается… ну, как в отношениях, когда всё кажется идеальным, но реальность ломает сердце.
❌ Оверфиттинг (Overfitting) – модель так хорошо запомнила тренировочные данные, что на реальных данных начинает путаться.
💔 В любви: «Я выбрал идеального партнёра по профилю, а в жизни выяснилось, что его «идеальность» – всего лишь иллюзия!»
❌ Андерфиттинг (Underfitting) – модель обучена настолько поверхностно, что предсказывает мэтчи случайным образом.
💔 В любви: «Мне нравятся только люди с именем Александр, а всех остальных я даже не замечаю – бедный фильтр!»
❌ Неправильный выбор фичей (Feature Selection Fail) – если модель опирается на неважные признаки, она предсказывает мэтчи хуже случайности.
💔 В любви: «Ты любишь авокадо? Значит, мы созданы друг для друга!» – а потом оказывается, что это вовсе не про важное.
🎯 На вебинаре мы разобрали, как избежать этих ошибок и создать работающую модель для speed dating, которая на самом деле помогает находить любовь! Вчера мы не просто говорили о любви – мы её предсказывали!
🔥 Спасибо всем, кто был с нами и участвовал!
💘 Как же это было?
Если ты пропустил вебинар или хочешь пересмотреть запись – просто перейди по [ссылке] и получи видео 😉
👍2🥱2😁1
Forwarded from Proglib.academy | IT-курсы
Многие говорят о лидерстве, коммуникации и умении презентовать себя. Но будущее требует других навыков. Разбираем неочевидные soft skills, которые помогут прокачаться в IT и за рубежом.
▪️ Эмоциональный интеллект
▪️ Умение упрощать
▪️ Антихрупкость
▪️ Мультикультурность
▪️ Предпринимательское мышление
Эти навыки решают. Кто хочет оставаться в топе — развиваемся уже сейчас.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😁5❤2🥰1
🌲 AVL-дерево в C#
AVL-дерево — это самобалансирующееся бинарное дерево поиска, в котором:
• Баланс-фактор (разница высот левого и правого поддерева) каждого узла равен -1, 0 или 1.
• При нарушении баланса выполняется ротация (левая, правая или двойные) для восстановления баланса.
Баланс-фактор (BF) узла вычисляется так:
• BF = 0, 1 или -1 — дерево сбалансировано.
• BF > 1 — перегрузка слева.
• BF < -1 — перегрузка справа.
🤔 Что такое ротация в деревьях?
Ротация — это операция, которая переставляет узлы в бинарном дереве, изменяя их структуру без нарушения свойств дерева.
Когда высота левого и правого поддерева отличается более чем на 1, дерево становится разбалансированным. Это снижает эффективность операций поиска, вставки и удаления.
Виды ротаций в AVL-дереве:
1️⃣ Правое вращение
Применяется, когда перегрузка слева (BF > 1) и новый узел добавлен в левое поддерево левого потомка.
Простой пример:
После правого вращения:
2️⃣ Левое вращение
Применяется, когда перегрузка справа (BF < -1) и новый узел добавлен в правое поддерево правого потомка.
Пример:
После левого вращения:
3️⃣ Лево-правое вращение
Используется при перегрузке слева, если новый узел добавлен в правое поддерево левого потомка.
Сначала выполняется левое вращение для левого потомка.
Затем правое вращение для корня.
4️⃣ Право-левое вращение
Используется при перегрузке справа, если новый узел добавлен в левое поддерево правого потомка.
Сначала выполняется правое вращение для правого потомка.
Затем левое вращение для корня.
🐸 Библиотека шарписта
AVL-дерево — это самобалансирующееся бинарное дерево поиска, в котором:
• Баланс-фактор (разница высот левого и правого поддерева) каждого узла равен -1, 0 или 1.
• При нарушении баланса выполняется ротация (левая, правая или двойные) для восстановления баланса.
Баланс-фактор (BF) узла вычисляется так:
BF = Height(Left) - Height(Right)
• BF = 0, 1 или -1 — дерево сбалансировано.
• BF > 1 — перегрузка слева.
• BF < -1 — перегрузка справа.
🤔 Что такое ротация в деревьях?
Ротация — это операция, которая переставляет узлы в бинарном дереве, изменяя их структуру без нарушения свойств дерева.
Когда высота левого и правого поддерева отличается более чем на 1, дерево становится разбалансированным. Это снижает эффективность операций поиска, вставки и удаления.
Виды ротаций в AVL-дереве:
Применяется, когда перегрузка слева (BF > 1) и новый узел добавлен в левое поддерево левого потомка.
Простой пример:
C
/
B
/
A
После правого вращения:
B
/ \
A C
Применяется, когда перегрузка справа (BF < -1) и новый узел добавлен в правое поддерево правого потомка.
Пример:
A
\
B
\
C
После левого вращения:
B
/ \
A C
Используется при перегрузке слева, если новый узел добавлен в правое поддерево левого потомка.
Сначала выполняется левое вращение для левого потомка.
Затем правое вращение для корня.
Используется при перегрузке справа, если новый узел добавлен в левое поддерево правого потомка.
Сначала выполняется правое вращение для правого потомка.
Затем левое вращение для корня.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤4🌚3👾1
Forwarded from Библиотека питониста | Python, Django, Flask
📢 Где «выстрелит» твой стартап: 8 площадок для запуска и продвижения IT-проекта
Собрали для тебя проверенные места, где можно бесплатно показать свой продукт первым пользователям и даже найти инвестора. Работает как для зарубежного, так и для российского рынка.
👍 Ссылка на статью: https://proglib.io/sh/LrcFGsnuyU
Собрали для тебя проверенные места, где можно бесплатно показать свой продукт первым пользователям и даже найти инвестора. Работает как для зарубежного, так и для российского рынка.
👍 Ссылка на статью: https://proglib.io/sh/LrcFGsnuyU
👍2
🛠 Как разбить большой PR на GitHub на удобные части
Большие PR с сотнями изменений — кошмар для ревью. Но есть решение: разбейте их на небольшие, логичные части.
➖ Если изменения уже в основной ветке:
• Сгруппируйте изменения по логике: фичи, рефакторинг, конфиг.
• Создайте отдельные ветки под каждую группу.
• Cherry-pick нужные коммиты в новые ветки и сделайте PR.
➖ Если изменения ещё не закоммичены:
• Сделайте бэкап-ветку, чтобы ничего не потерять.
• Используйте
• Создавайте PR для каждой группы изменений, повторяя процесс, пока все изменения не будут разделены.
💡Советы:
• Один PR — одна задача.
• Пишите понятные сообщения коммитов.
• Указывайте зависимости между PR.
• Всегда держите бэкап-ветку на случай ЧП.
📎 Подробности и git-команды
🐸 Библиотека шарписта
Большие PR с сотнями изменений — кошмар для ревью. Но есть решение: разбейте их на небольшие, логичные части.
• Сгруппируйте изменения по логике: фичи, рефакторинг, конфиг.
• Создайте отдельные ветки под каждую группу.
• Cherry-pick нужные коммиты в новые ветки и сделайте PR.
• Сделайте бэкап-ветку, чтобы ничего не потерять.
• Используйте
git add -p
, чтобы выборочно добавить изменения.• Создавайте PR для каждой группы изменений, повторяя процесс, пока все изменения не будут разделены.
💡Советы:
• Один PR — одна задача.
• Пишите понятные сообщения коммитов.
• Указывайте зависимости между PR.
• Всегда держите бэкап-ветку на случай ЧП.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8👍2👏1
📚 Основы алгоритмов: полный гайд
Competitive Programmer’s Handbook — это книга для всех, кто хочет освоить соревновательное программирование.
Что внутри:
➖ Основы алгоритмической сложности.
➖ Структуры данных: стеки, очереди, деревья.
➖ Алгоритмы поиска и сортировки.
➖ Динамическое программирование, графы и многое другое.
➡️ Ссылка на книгу
🐸 Библиотека шарписта
Competitive Programmer’s Handbook — это книга для всех, кто хочет освоить соревновательное программирование.
Что внутри:
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5👍3❤1
🧑💻 Юнит-тесты в .NET с NUnit
NUnit — это фреймворк для модульного тестирования в экосистеме .NET, предоставляющий разработчикам инструменты для создания и выполнения тестов.
В экосистеме .NET Core одним из самых популярных инструментов для этого является NUnit.
Что умеет NUnit:
• Параметризованные тесты: запускайте один тест с разными входными данными через атрибут [TestCase].
• Асинхронная поддержка: легко тестируйте async/await методы.
• Интеграция с инструментами: совместим с Visual Studio, Rider и CLI-командой dotnet test.
• Чистый синтаксис: удобные утверждения через Assert.That(result, Is.EqualTo(42)).
Пример теста:
Пара советов по эффективному тестированию:
• Изолируйте тесты: используйте [SetUp] и [TearDown] для подготовки и очистки данных.
• Избегайте зависимостей: мокируйте внешние сервисы с помощью Moq или NSubstitute.
📎 Подробные примеры кода
💬 Делитесь в комментариях своим опытом работы с NUnit
🐸 Библиотека шарписта
NUnit — это фреймворк для модульного тестирования в экосистеме .NET, предоставляющий разработчикам инструменты для создания и выполнения тестов.
В экосистеме .NET Core одним из самых популярных инструментов для этого является NUnit.
Что умеет NUnit:
• Параметризованные тесты: запускайте один тест с разными входными данными через атрибут [TestCase].
• Асинхронная поддержка: легко тестируйте async/await методы.
• Интеграция с инструментами: совместим с Visual Studio, Rider и CLI-командой dotnet test.
• Чистый синтаксис: удобные утверждения через Assert.That(result, Is.EqualTo(42)).
Пример теста:
using NUnit.Framework;
namespace MyProject.Tests;
[TestFixture]
public class CalculatorTests
{
private Calculator _calculator;
[SetUp]
public void Setup()
{
_calculator = new Calculator();
}
[Test]
public void Add_WhenCalled_ReturnsSum()
{
int result = _calculator.Add(2, 3);
Assert.That(result, Is.EqualTo(5));
}
}
Пара советов по эффективному тестированию:
• Изолируйте тесты: используйте [SetUp] и [TearDown] для подготовки и очистки данных.
• Избегайте зависимостей: мокируйте внешние сервисы с помощью Moq или NSubstitute.
💬 Делитесь в комментариях своим опытом работы с NUnit
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱14👍6❤1👏1
Алгоритм поиска в глубину (DFS) является одним из фундаментальных методов обхода графов. Он используется для решения множества задач, таких как поиск пути, обнаружение циклов и топологическая сортировка.
DFS (Depth-First Search) — это алгоритм обхода графа, который начинает с начальной вершины и исследует как можно глубже вдоль каждого ветви, прежде чем возвращаться назад.
Алгоритм использует стек для отслеживания посещенных вершин. В рекурсивной реализации стек заменяется стеком вызовов функции.
Основные Шаги DFS
Реализация DFS в C#:
class Graph {
private int V;
private List<int>[] adj;
public Graph(int v) {
V = v;
adj = new List<int>[v];
for (int i = 0; i < v; i++)
adj[i] = new List<int>();
}
public void AddEdge(int v, int w) {
adj[v].Add(w);
}
public void DFS(int start) {
bool[] visited = new bool[V];
DFSUtil(start, visited);
}
private void DFSUtil(int v, bool[] visited) {
visited[v] = true;
Console.Write(v + " ");
foreach (int n in adj[v]) {
if (!visited[n])
DFSUtil(n, visited);
}
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14👾3❤2🥱1
Попробуйте повторить пранк из видео. Создайте отдельный класс, который дублирует имя всеми используемого системного класса и внедрите его в стандартный namespace.
Вы можете заложить внутрь неожиданную логику, а коллеги будут ждать совершенно другого результата.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱9😢4👏3😁2👾1
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
👏2👍1🔥1👾1