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

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

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

Для связи: @ruslan_kuyanets
Download Telegram
#полезное
🛞 Числовой StringComparer появится в dotnet 10

Он позволяет сравнивать числа по их числовому значению, а не в лексикографическом порядке.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4
#Собес #postgres
🤔 Какие существуют типы индексов в PostgreSQLu когда их использовать?

PostgreSQL поддерживает несколько типов индексов: B-Tree, Hash, GIN, GiST, BRIN, и SP-GiST. B-Tree подходит для поиска равенства и диапазона, Hash - только для равенства, GIN и GiST - для полнотекстового поиска, а BRIN оптимален для больших таблиц с последовательными данными.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#полезное
😊 Не совершайте эту ошибку

Не используйте .ToLower() для сравнения строк. Почему?

Метод .ToLower() создаёт новую строку в памяти для каждого сравнения, что приводит к лишним аллокациям.

Представьте метод, который вызывается очень часто — это может деградировать производительность приложения.

Кроме того, .ToLower() чувствителен к культуре, то есть результат может различаться в зависимости от текущей культуры, установленной в исполняющем потоке.

Что использовать вместо этого?

В .NET есть мощное перечисление — StringComparison.

Возможные варианты StringComparison:

- Ordinal — используйте в большинстве случаев, когда культурные правила не важны. Самый быстрый вариант.
- OrdinalIgnoreCase — для сравнений без учёта регистра, где культурные правила не имеют значения.
- CurrentCulture и CurrentCultureIgnoreCase — используйте при сравнении строк, отображаемых пользователю, так как они учитывают культурные правила.
- InvariantCulture и InvariantCultureIgnoreCase — подходят, когда нужна единообразная логика вне зависимости от культуры, например, при сохранении и извлечении данных.

> EF Core выбросит исключение, если использовать методы вроде
> String.Equals(string, StringComparison), так как они не транслируются в SQL.

Это не будет работать с EF.
Если вы используете SQL Server с коллацией по умолчанию, сравнение строк уже нечувствительно к регистру, поэтому обычное a == b или string.Equals(a, b) в LINQ будет работать.

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

Техническое собеседование. Осень 2024. Просил 270к+. Опыт в резюме: 3.6 года. Обсуждали опыт работы с микросервисами, оптимизацию запросов. Был лайвкодинг - задачи на проверку дубликатов в массиве и вычисление чисел Фибоначчи.

Вопросы:
- Как обеспечивается атомарность и изоляция транзакций?
- Как проектировали архитектуру базы данных для системы с высокой нагрузкой?
- Как работают кластеризованные и некластеризованные индексы? Когда их стоит применять?
- Какие методы использовали для оптимизации SQL-запросов (индексы, уменьшение JOIN, проверка на NULL) ?

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

#собес
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
#Собес #postgres
🤔 Что такое таблица в PostgreSQL и как её создать?

Таблица в PostgreSQL — это структура, используемая для хранения данных в виде строк и столбцов. Для создания таблицы используется команда CREATE TABLE имя таблицы (список_ столбцов) ; .

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#полезное
😬 Посмотрите этот классный open-source инструмент для визуализации JSON-данных в интерактивных графах.

Он предлагает функции конвертации JSON в другие форматы (CSV, YAML), генерацию JSON Schema, выполнение запросов и экспорт визуализаций в виде изображений.

Также он умеет форматировать, валидировать и создавать интерфейсы TypeScript.

Репозиторий: https://github.com/AykutSarac/jsoncrack.com

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
#полезное
🤣 Паттерн Options в .NET — это одна из тех фич, которые я стабильно использую во всех своих C#-проектах

✅ Более чистое управление конфигами
✅ Сильно типизированные классы
✅ Простая интеграция с DI
✅ Без проблем работает с appsettings.json, secrets.json, Azure Key Vault и прочим

Почему это важно

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

Обычно это выглядит так

🟠Определяешь конфиг в appsettings.json
🟠Создаёшь POCO-класс
🟠Биндишь его через .AddOptions<T>().BindConfiguration()
🟠Инжектишь в сервисы через IOptions<T>

Просто. Масштабируемо. Аккуратно.

А ты используешь этот паттерн у себя или до сих пор дёргаешь значения конфигов через IConfiguration["key"]

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
#Собес #postgres
🤔 Что такое PostgreSQL каковы его основные особенности?

PostgreSQL — это мощная обьектно-реляционная система управления базами данных с открытым исходным кодом. Она поддерживает расширяемость, соответствие стандарту SQL, работу с JSON, многоверсионное управление параллелизмом (MVCC) и транзакции с ACID-свойствами.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #postgres
🤔 Как создать новую базу данных в PostgreSQL?

B PostgreSQL новую базу данных можно создать с помощью команды SQL CREATE DATABASE имя_базы; или используя утилиту командной строки createdb имя_базы

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
📞 Изоляция данных в модульном монолите

🟠 Схема и роль на модуль — для каждого модуля создаётся собственная схема и роль
🟠 Привилегии только для своей схемы — модуль не имеет доступа к данным других схем
🟠 Отдельный DbContext + схема по умолчанию — разделение кода и данных на уровне ORM
🟠 Разные строки подключения и миграции — независимое управление конфигурацией и развёртыванием
🟠 Read-only представления для межмодульных запросов — безопасный доступ к данным между модулями

Смотрите пошаговое руководство: ссылка

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😅 Запуск .NET в браузере без Blazor

https://andrewlock.net/running-dotnet-in-the-browser-without-blazor/

В этой статье автор показывает, как запустить .NET в браузере без использования Blazor, а вместо этого опереться на более низкоуровневые абстракции, которые предоставляют [JSImport] и [JSExport].

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#полезное
😱 Вызов Azure Function из Azure SQL DB

Да, это реально. Хранимая процедура sp_invoke_external_rest_endpoint позволяет дергать HTTPS REST endpoint, переданный ей в качестве аргумента.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
🤯 Что такое RBAC и как это помогает с авторизацией

RBAC расшифровывается как Role-Based Access Control, то есть управление доступом на основе ролей

Суть простая

• У ролей есть набор разрешений
• Пользователи получают роли
• Разрешения определяют, что пользователи могут делать

Всё довольно просто, но при этом мощно

Хотя сами по себе роли могут быть слишком широкими

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

Так проще управлять и легче расширять

Как смоделировать такой подход и применить его в .NET — читать

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🏕 Rider 2025.2 теперь с расширенной поддержкой C# 14

Теперь доступны все свежие фичи языка:

🟠 Extensions
🟠 Partial events и конструкторы
🟠 Null-conditional assignments

Плюс обновления анализа кода в Rider 2025.2 : подробнее

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#полезное
🏠 Когда исключения неизбежны, нужен механизм для их обработки.

Вот как это можно настроить за несколько минут:

Начиная с .NET 8 у вас есть интерфейс IExceptionHandler

Это абстракция для управления исключениями с одним методом: TryHandleAsync

Он отвечает за обработку исключений в пайплайне ASP.NET Core.

Метод возвращает true, если исключение обработано успешно, и false, если его нельзя обработать.

Это позволяет реализовать кастомную логику под разные сценарии.

Для конфигурации нужно сделать три шага:

1⃣Зарегистрировать сервис IExceptionHandler через dependency injection
2⃣Зарегистрировать ExceptionHandlerMiddleware в пайплайне запросов
3⃣Зарегистрировать ProblemDetails ответ

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
#Собес #mongoDB
🤔 Что такое составной индекс и когда его следует использовать?

💬 Кратко:
Составной индекс в MongoDB используется для индексации нескольких полей вместе. Он эффективен для запросов, которые фильтруют или сортируют данные по нескольким полям. Составные индексы значительно повышают производительность таких запросов.

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🛞 Хочешь писать более чистый C#-код?

Начни с чистых функций.

Чистая функция проста:
Берёт входные данные, возвращает результат и больше ни на что не влияет.

Никаких запросов в базу. Никаких случайных значений. Никаких скрытых побочных эффектов

Такой код легче тестировать, отлаживать и ему проще доверять.

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
#полезное
🤯 Примеры использования разделителя цифр (_) в C#

// Можно использовать в целых числах
int oneMillion = 1_000_000;
Console.WriteLine(oneMillion); // Выведет: 1000000

// Работает и с числами с плавающей точкой
double billion = 1_000_000_000.0;
Console.WriteLine(billion); // Выведет: 1000000000

// Поддерживается и в двоичной, и в шестнадцатеричной записи
int binary = 0b1010_1011_1100;
Console.WriteLine(binary); // Выведет: 2748

int hexadecimal = 0x1234_abcd;
Console.WriteLine(hexadecimal); // Выведет: 305441741


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
#полезное
😱 В dotnet 9 появился обобщённый OrderedDictionary

Во многих случаях нужно хранить пары ключ-значение с сохранением порядка и быстрым поиском по ключу. Теперь это можно делать с помощью обобщённого OrderedDictionary в .NET 9.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2😈1
#Собес #mongoDB
🤔 Как обрабатываются изменения схемы в MongoDB?

💬 Кратко:
MongoDB является схемофлексибельной базой данных, позволяя изменять структуру документов без воздействия на уже существующие. Для обработки изменений схемы можно использовать версии документов, миграции данных и схему валидации с использованием JSON Schema.
📌 Полный разбор + примеры использования — на платформе:
👉
Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2