C# Development | YeaHub
743 subscribers
304 photos
33 videos
1 file
537 links
Теория, подготовка к интервью и курсы для C# разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#полезное
😇 Фича дня в EF Core — алгоритм Hi/Lo.

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

Работает это так. Приложение не берёт каждый новый ID отдельно, а запрашивает у базы целую пачку. В самой базе хранится hi_value, который отражает максимальный выданный идентификатор. Когда приложению нужна новая порция, оно начинает с hi_value + 1.

Минус в том, что могут появиться пропуски в последовательности, если приложение упадёт до того, как израсходует все ID из своей пачки, но это не критично.

Включается всё через метод UseHiLo, который создаёт в базе sequence для выдачи батчей идентификаторов. После этого EF Core может сам задавать все первичные ключи на клиенте, что особенно удобно для parent/child-отношений.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😇 Слышал о новом типе UUID?

Я часто использую UUID (Guid в C#) как уникальные идентификаторы в базе.

Они удобны тем, что «рандомные», но есть и минусы.

Во-первых, они занимают много памяти — Guid в C# весит 16 байт.
Кроме того, индексы с такими значениями могут фрагментироваться, так как они не сортируемые.

Теперь появился UUID V7. Он сортируемый, потому что в нем есть компонент времени.

Его можно создать в .NET 9 через Guid.CreateVersion7

Также он будет поддерживаться нативно в PostgreSQL 18.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
#Собес #mongoDB
🤔 Что такое агрегатный конвейер (aggregation pipeline) в MongoDB и как он работает?

💬 Кратко:
Агрегатный конвейер в MongoDB представляет собой последовательность этапов, каждый из которых выполняет операцию на входных документах и передает результат следующему этапу. Этапы могут включать фильтрацию ( $match ), группировку ( $group ), сортировку ($sort ), проекцию ( $project ) и другие. Это позволяет выполнять сложные преобразования и агрегации данных.

📌 Полный разбор + примеры использования — на платформе:
👉
Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👋 .NET Aspire позволяет запускать фронтенд прямо из Vite

В Community Toolkit появился пакет
Aspire.Hosting.NodeJS.Extensions, который позволяет интегрировать Node.js-приложения в .NET Aspire.

Что он даёт:
🟠 Запуск Vite-приложений напрямую из Aspire.
🟠 Поддержка npm, Yarn и pnpm — выбирай свой пакетный менеджер.
🟠 Автоустановка зависимостей перед стартом (`WithNpmPackageInstallation()`, WithYarnPackageInstallation(), `WithPnpmPackageInstallation()`).
🟠 Лёгкая интеграция фронтенда и бэкенда: всё управляется из одного места.

Пример кода:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddViteApp("vite-demo")
.WithExternalHttpEndpoints();

builder.AddViteApp("yarn-demo", packageManager: "yarn")
.WithExternalHttpEndpoints();

builder.AddViteApp("pnpm-demo", packageManager: "pnpm")
.WithExternalHttpEndpoints();

builder.Build().Run();


💡 Итог: теперь запуск React/Vue/Angular через Vite можно встроить прямо в Aspire, без лишних шагов и костылей.
Подробнее

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#полезное
🤯 Простой гид по масштабированию веб-приложений

Система с более чем миллионом пользователей была масштабирована пошагово

1⃣ Начало с простого

Приложение изначально монолит. Один API-сервер, одна база данных. Несколько лет работало стабильно, но с ростом пользователей система начала тормозить

2⃣ Масштабирование API

База данных пока не была узким местом. Масштабирование API и добавление балансировщика нагрузки в Azure позволили обрабатывать больше запросов. Вертикальное масштабирование DB-сервера сработало на время, но позже потребовалось больше

3⃣ Кэширование

Сначала использовался простой in-memory кэш на серверах. Позже внедрён Redis, распределённый кэш снизил нагрузку на базу. Большинство запросов стало обслуживаться из кэша

Главный совет

Решать проблему, которая есть сейчас. Не переусложнять архитектуру раньше времени
Подробнее о масштабировании приложений

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #mongoDB
🤔 Что такое покрытый запрос в MongoDB?

💬 Кратко:
Покрытый запрос в MongoDB — это запрос, все поля которого содержатся в индексе. MongoDB может удовлетворить запрос, просто сканируя индекс, без необходимости обращаться к фактическим данным в коллекции. Это значительно ускоряет выполнение запроса, уменьшая нагрузку на диск и улучшая производительность.

📌 Полный разбор + примеры использования — на платформе:
👉
Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Интерактивный визуальный гид по математике и алгоритмам через концепты геймдева — https://redblobgames.com

Особое внимание уделите главам про теорию графов

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Существует малоизвестный многим программистам паттерн обработки ошибок под названием Result Pattern.

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

Его можно применять для доменных валидаций, а также для асинхронных операций - например, запросов к базе данных или HTTP-запросов.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
#полезное
😜 SQL Ultimate Course — бесплатный полный курс по SQL на GitHub

Если хочешь освоить SQL с нуля и дойти до продвинутого уровня — бери готовый репозиторий:

Что внутри:
🔵 datasets/ — реальные данные из ERP и CRM
🔵 scripts/ — готовые SQL-скрипты для практики
- docs/ — документация и материалы курса

✅ MIT-лицензия — можно использовать и менять свободно
✅ Подходит для всех СУБД (PostgreSQL, MySQL и др.)
✅ К курсу прилагаются видео и гайды от автора

Автор: Data With Baraa — практик и ютубер, собравший в одном месте полный SQL-путь от простого SELECT до оптимизации запросов и реальных кейсов.
Репозиторий здесь

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🖥 Middle C # Backend разработчик в компанию Goodforecast

Техническое собеседование. Лето 2024. Вилка: 200k+. Опыт в резюме: 3.6 года. Проект: Переход с монолитной архитектуры на микросервисы.

Вопросы:
- Какие преимущества Postgres перед MS SQL?
- Чем отличается механизм отката транзакций (ROLLBACK) в Postgres и MS SQL (версионность vs физические операции)?
- Какие методы массовой вставки данных эффективнее AddRange (например,
BulkInsert)?
- Что быстрее: перестроить индекс после удаления данных или создать новый
индекс на пустой таблице?

Все вопросы можно посмотреть на нашей платформе

#собес #коллекции
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻3❤1
#Собес #mongoDB
🤔 Как MongoDB обрабатывает транзакции?

💬 Кратко:
MongoDB поддерживает многодокументные транзакции с версии 4.0. Транзакции позволяют выполнять несколько операций в одном или нескольких документах, обеспечивая их консистентность. Для работы с транзакциями нужно начать сессию и использовать методы startSession() , commitTransaction() , и abortTransaction() для управления транзакцией.

📌 Полный разбор + примеры использования — на платформе:
👉
Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
📞 90% .NET-разработчиков управляют версиями NuGet самым сложным способом.

Секрет работы с NuGet-пакетами в больших .NET-решениях это использовать Central Package Management (CPM).

Вместо того чтобы дублировать номера версий в каждом проекте, вы определяете их один раз в файле Directory.Packages.props.

После этого в проектах указывается только имя пакета — без версии.

Что это даёт
I. Единообразие по всей solution.
II. Одно место для обновления версии пакета.
III. Экономию времени при апгрейде .NET-версии.

Хватит тратить часы на поиски несовпадений версий. Управляйте пакетами централизованно и в одном месте.

P.S. Если в каком-то проекте нужна своя версия, всегда можно переопределить центральную.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#Собес #git
🤔 Что такое команды git reset -mixed и git merge - abort?

💬 Кратко:
git reset --mixed : отменяет изменения, которые были добавлены в индекс, но сохраняет изменения в рабочем каталоге.
git merge --abort : отменяет слияние, которое в данный момент находится в процессе, и возвращает репозиторий в состояние до начала слияния.

📌 Полный разбор + примеры использования — на платформе:
👉
Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😵‍💫 Обновление поддержки .NET STS

Начиная с .NET 9 (текущий STS), поддержка STS-релизов увеличена с 18 месяцев до 2 лет.

Теперь STS-релизы теряют поддержку в тот же день, что и предыдущий LTS-релиз.

Это значит, что обновление до STS-релиза больше не приведёт к потере поддержки

Долгожданное улучшение для разработчиков, которым важно оставаться на актуальной версии без риска прерывания поддержки.

https://devblogs.microsoft.com/dotnet/dotnet-sts-releases-supported-for-24-months/

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😊 Появилось расширение, которое добавляет эффекты из Elden Ring в вашу почту, LeetCode и GitHub

Теперь пулл реквесты ощущаются как битва с боссом
Забираем с GitHub

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👋 Нужна ли сервисная дискавери и зачем

В микросервисной архитектуре часто встает вопрос: как сервисы находят друг друга и надежно общаются

Хардкодить IP и порты — прямой путь к проблемам. Если сервис переезжает или запускается новый экземпляр, весь стек может сломаться

Сервисная дискавери позволяет обращаться к внешним сервисам по логическим именам, а не по физическим адресам и портам

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

Рабочий процесс выглядит так

1⃣ Сервис регистрируется в сервисном реестре
2⃣ Клиент обращается к реестру, чтобы узнать физический адрес сервиса
3⃣ Клиент отправляет запрос на этот физический адрес

В .NET это можно реализовать через Consul. Вот подробный туториал

Consul — популярное решение для распределенных систем

Есть более легковесное решение от Aspire, но там физические адреса задаются через конфигурацию приложения, поэтому оно менее надежное и гибкое

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#Собес #git
🤔 Как вы находите коммит, который что-то нарушил после операции слияния?

💬 Кратко:
Для поиска коммита, который нарушил код после слияния, можно использовать команду git bisect . Этот инструмент помогает найти коммит, который вызывает проблему, путем бинарного поиска.

📌 Полный разбор + примеры использования — на платформе:
👉
Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😇 После сильного падения трафика StackOverflow наконец-то совершил камбэк

Он запустил собственного ИИ-агента — stackoverflow.ai. Он отвечает только на основе проверенных ответов сообщества, подбирая прямые цитаты из них.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3