C# 1001 notes
Ir al canal en Telegram
Регулярные короткие заметки по C# и .NET. Просто о сложном для каждого. admin - @haarrp
Mostrar más6 538
Suscriptores
-224 horas
-57 días
-330 días
Archivo de publicaciones
6 538
Кто такой архитектор ПО и как им стать?
Архитектор ПО — одна из самых востребованных позиций на современном рынке IT. Узнайте, что нужно, чтобы претендовать на эту должность, на бесплатном практическом уроке от OTUS.
💯 На вебинаре разберём:
- какую роль выполняет архитектор и зачем он нужен;
- какие бывают архитекторы;
- чем отличается архитектура от проектирования.
📅 Встречаемся 20 мая в 19:00 мск в рамках курса «Software Architect». Все участники вебинара получат специальную цену на обучение и персональную консультацию от менеджеров OTUS.
Ссылка для регистрации: https://vk.cc/cwwNcD?erid=LjN8KYfrz
6 538
+2
🖥 Полезные материалы по .NET и AWS
Держите полезный репозиторий с материалами о разворачивании и обслуживании .NET-приложений в AWS.
В частности, освещаются такие моменты:
— Настройка учетных данных AWS для приложений .NET
— Работа с AWS S3 в ASP.NET Core Web API
— Amazon API Gateway для разработчиков .NET
— Как защитить Amazon API Gateway с помощью Lambda Authorizer?
🖥 GitHub
@csharp_ci
6 538
🖥 Вот пример отличного исследования и дискуссии опытных программистов
https://github.com/dotnet/runtime/issues/101437
#dotNET
@csharp_ci
6 538
+2
🖥 Zenject, внедрение зависимостей, Unity C#
Очень понятное объяснение, что же такое Zenject, Dependency Injection и всё такое
Рекомендую)
Что внутри?
• 00:36 - Другие годные источники по зенджекту
• 02:20 - Что такое Dependency Injection?
• 03:39 - Проблема DI — большое количество сервисов
• 04:02 - Проблема DI — вложенные зависимости
• 04:56 - Проблема DI — разное время жизни сервисов
• 05:45 - Что делает Zenject?
• 06:35 - Binding в Zenject
• 07:54 - Installer-s в Zenject
• 09:16 - Context в Zenject
• 10:54 - Как это всё работает
• 11:54 - Дополнительные инструменты Zenject-а
• 13:04 - ITickable, IInitializable и IDisposable
📎 YouTube
🖥 GitHub
@csharp_ci
6 538
👋 Хотите узнать больше о библиотеке LINQ и расширить свои знания в программировании на С#?
🏃♂️ Приходите на открытый практический урок от OTUS. Спикер — опытный инженер и преподаватель.
✅ На вебинаре вы изучите, как использовать LINQ для построения запросов, как создавать запросы, аналогичные SQL и другие области его применения. Вы изучите функции и синтаксис LINQ для эффективного взаимодействия с данными в коллекциях. Улучшите производительность кода и сможете стать более эффективным программистом.
🚀 Урок пройдет 26 апреля в 20:00 мск и будет приурочен к старту большого курса «C# Developer. Professional». После вебинара вы получите специальную цену на обучение и персональную консультацию от наших менеджеров!
🎯 Короткий тест и вы получите доступ ко всем открытым урока курса и запись на вебинар: https://clck.ru/3A7abo
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 538
🖥 Реализация словаря на двух статических методах и делегате в C#
⏩Речь пойдет о структуре данных "словарь" (отображение или ассоциативный массив). В программировании мы чаще всего пользуемся шаблоном мышления, который предполагает, что есть данные и функции, которые над этими данными выполняют различные операции. При этом данные могут быть представлены как некоторые одиночные элементы – объекты простых типов (числа, bool’ы, символы и т.п.) и объекты сложных типов, которые мы проектируем сами (Student, Employer, Car, Factory и т.п.), так и коллекции, состоящие из этих одиночных элементов: множества, словари, списки, массивы, стеки и т.п. Коллекции могу существовать в виде обобщенных вариантов, в этом случае предполагается, что тип объектов, которые будут храниться в ней, задается (заранее известен) до компиляции (для статически типизированных языков), это способствует большей производительности и лучшей безопасности.
⏩Если немного поразмышлять над лямбда-исчислением Черча, то в какой-то момент становится понятно, что описанное выше восприятие данных — это всего лишь удобная абстракция, которую мы перетащили из нашего "физического" мира. Например, у нас есть яблоко (это объект данных), и мы над ним с помощью определенной функции (соковыжималка) производим работу, преобразуя его в сок (объект другого типа). А вот само яблоко, мы, как правило, в качестве функции не рассматриваем. В лямба-исчислении всё есть функция – то, над чем выполняются операции и то, что эти операции выполняет. Фон-неймановская архитектура, по дизайну которой построены почти все современные вычислительные системы, также нас толкает к тому, что функции и данные — это одно и тоже: байты в памяти мы можем интерпретировать как данные и как операции для работы над данными, тут другая идея: всё есть данные (биты), а уж как мы их интерпретируем — это наша ответственность.
📎 Реализация
@csharp_ci
6 538
👩💻 Лекции по .NET
Крутой плейлист, который постоянно пополняется свежими видосамипо C# от инженера из Microsoft Amichai Mantinband.
🔗 плейлист
@csharp_1001_notes
6 538
🔥Подборка лучших обучающих каналов для программистов.
➡️ Делитесь с коллегами и сохраняйте себе, чтобы не потерять
⚡Машинное обучение
Machine Learning - запускаем лучшие ИИ модели, пишем код, погружаемся в нейросети
Ml Собеседование - подготовка к собесу по мл, алгоритмам, коду
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат
🏆 Golang
Golang - изучи один из самых перспективных языков на ит-рынке
Golang собеседование - разбор задач и вопросов с собесов
Golang вакансии -работа для Go разработчика
Golang книги библиотека книг
Golang задачи и тесты
Golang чат
Golang news - новости из мира go
Golang дайджест
💥 Linux /Этичный хакинг
Linux Academy - гайды, секреты и лучшие материалы по Linux
Kali linux - погрузись в мир этичного хакинга и кибербезопасности
linux_kal - kali чат
Информационная безопасность
🚀 Data Science
Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data
🛢Базы данных
Sql базы данных - научим работе с базами данных профессионально
Библиотека баз данных
SQL чат
Вакансии Sql аналитик данных
#️⃣C#
С# академия - лучший канал по c#
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа
🐍 Python
Python/django - самый крупный обучающий канал по Python
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги
☕ Java
Java академия - java от Senior разработчика
Java вакансии
Java чат
Java вопросы с собеседований
Java книги
💻 C++
C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии
⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend
🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов
📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки
🇬🇧 Английский для программистов
🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence
🔥 DevOPs
Devops для программистов
Книги Devops
🌟 Docker/Kubernets
Docker
Kubernets
📓 Книги
Библиотеки Книг для программситов
💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend
6 538
🎉 Анонс выпускы .NET 9 Preview 3. 🙌
Узнайте, что нового появилось в библиотеках #dotNET, среде выполнения и SDK, включая:
➖ Библиотеку токенизаторов
➖ Временной интервал.Защита от перегрузок
➖ Более быстрая обработка исключений
... и многое другое.
Получить подробную информацию и ссылки на ресурсы можно здесь
➡️ https://github.com/dotnet/core/discussions/9271
6 538
Бесплатный курс для middle C#-разработчиков от Ozon
На курсе Route 256 инженеры Ozon расскажут про самые современные технологии, а также поделятся своим опытом разработки микросервисов.
Будут лекции, воркшопы, код-ревью домашних заданий и профессиональное комьюнити. Курс рассчитан на разработчиков с опытом от 3 лет, в конце Ozon предлагает офферы лучшим выпускникам.
Чтобы попасть на курс, нужно пройти отборочный контест 5 мая.
Узнать подробности и подать заявку
6 538
🖥 Подписать PDF-документы на C# и VB.NET
Цифровые подписи позволяют доказать, что документ PDF:
• Не изменялся с момента подписания.
• Был подписан цифровой подписью конкретного человека.
⏩Используйте библиотеку Docotic.Pdf для подписи PDF-документов в приложениях для .NET Framework и .NET Core. Вы можете скачать бинарные файлы библиотеки или использовать ее пакет NuGet.
⏩Как же наконец добавить цифровую подпись в PDF? Вам необходим цифровой сертификат
PKCS#12 (файл .pfx или .p12), выданный действительным центром сертификации, чтобы подписать PDF-документ. Вот базовый пример, показывающий, как подписать PDF-документ на C#:
using BitMiracle.Docotic.Pdf;
using (var pdf = new PdfDocument("document_to_sign.pdf"))
{
var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
{
DigestAlgorithm = PdfDigestAlgorithm.Sha256,
Format = PdfSignatureFormat.Pkcs7Detached,
Reason = "Testing digital signatures",
Location = "My workplace",
ContactInfo = "support@example.com"
};
pdf.SignAndSave(options, "signed.pdf");
}
Замените "your_cert.p12" собственным файлом сертификата .p12 или .pfx и "your_cert_password" собственным паролем. На GitHub вы можете загрузить и попробовать полную версию примера (подписать PDF-документ https://github.com/BitMiracle/Docotic.Pdf.Samples/tree/master/Samples/Digital%20signatures/SignDocument) на C# и VB.NET.
⏩Бывают случаи, когда необходимо подписать уже подписанный документ. Или несколько человек должны подписать одну форму друг за другом. Это также возможно. Шаги, в основном, те же. Просто убедитесь, что после подписывания вы сохраняете документ инкрементально. Инкрементальные обновления не нарушают цифровые подписи при условии, что вы делаете только разрешенные изменения.
📎 Подробнее
@csharp_ci6 538
🖥 Необходимо определить делегат и реализовать метод
⏩Итак, вот задание:
определить делегат
bool CounterHashSetDelegate(int a) и реализовать метод int Function12(HashSet<int> intSet, CounterHashSetDelegate filter), который возвращает количество элементов из intSet, которые удовлетворяют условию filter.
public static class
{
public delegate bool CounterHashSetDelegate(int a);
public static int Function12(HashSet<int> intSet, CounterHashSetDelegate filter)
{
int count = 0;
foreach (int i in intSet)
{
if(filter(i))
count++;
}
return count;
}
}
⏩Давайте сразу к сути, решение может выглядеть так:
public delegate bool CounterHashSetDelegate(int a);
class Program
{
static void Main(string[] args)
{
CounterHashSetDelegate d = IsEvenNum;
Console.WriteLine($"Количество четных элементов:{Function12(new HashSet<int> { 1, 2, 3, 4, 5 }, d)}");
d = IsGreaterThen;
Console.WriteLine($"Количество элементов > 2:{Function12(new HashSet<int> { 1, 2, 3, 4, 5 }, d)}");
Console.ReadKey();
}
public static bool IsEvenNum(int a)
{
return a % 2 == 0;// четное ли число например
}
public static bool IsGreaterThen(int a)
{
return a > 2;//больше ли например
}
public static int Function12(HashSet<int> intSet, CounterHashSetDelegate filter)
{
int count = 0;
foreach (int i in intSet)
{
if (filter(i))
{
count++;
}
}
return count;
}
}
Вот и все дела
@csharp_ci6 538
ХОЧЕШЬ ПОВЫШЕНИЕ В 2024 ГОДУ? 😎🔥
Согласно опросу, проведенному компанией Solo.io в 2022 году, на текущий момент 85% организаций переводят свои IT-системы на микросервисную архитектуру.
Но специалистов, которые глубоко понимают все тонкости и нюансы микросервисной архитектуры не так-то много.
Самое время разобраться в микросервисной архитектуре и стать более востребованным специалистом.
🚀 Стартуем 9 апреля.
Курс ведет действующий архитектор Кирилл Ветчинкин. Он успешно реализовал проекты с применением микросервисов для Мегафона, Теле2, ВСS Brокer, СберМаркет. Постоянный спикер крупных IT-конференций.
На курсе вы:
📌 Изучите и отработаете более 20 паттернов микросервисной архитектуры
📌 Познакомитесь c Domain Driven Design
📌 Научитесь декомпозировать систему на микросервисы с помощью Event Storming и DDD
Полная программа ТУТ https://microarch.ru/?utm_source=posev&utm_medium=erid:2VtzqwKifY2&utm_campaign=3
А самое главное — будет поддержка от эксперта, чат с одногруппниками и интересное практическое задание. Сертификат об участии по итогам прохождения курса.
Курс ориентирован на системных аналитиков и разработчиков, которые хотят больше погрузиться в архитектуру современных IT систем.
Узнай больше о курсе 👉 https://microarch.ru/?utm_source=posev&utm_medium=erid:2VtzqwKifY2&utm_campaign=3
Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2VtzqwKifY2
6 538
🖥 Небольшой проект, который вы могли бы добавить в свое резюме 👇
Реализация сервиса для сокращения URL-адресов с помощью .NET:
Создадим эндпоинты.
Первая принимает URL, создаёт короткий URL и возвращает его:
csharp
app.MapPost("shorten", async (
string url,
UrlShorteningService svc,
AppDbContext dbCtx,
HttpContext httpCtx) =>
{
if (!Uri.TryCreate(url, UriKind.Absolute, out _))
return Results.BadRequest(
"Предоставленный URL неверный.");
var code = await svc.GetCode();
var req = httpCtx.Request;
var shortUrl = new ShortUrl
{
Id = Guid.NewGuid(),
Url = url,
Code = code,
CreatedOn = DateTime.UtcNow
};
dbCtx.ShortenedUrls.Add(shortUrl);
await dbCtx.SaveChangesAsync();
return Results.Ok(
$"{req.Scheme}://{req.Host}/{code}");
});
Здесь возникает небольшая ситуация гонки, поскольку мы сначала генерируем уникальный код, а затем вставляем его в БД. Параллельный запрос может сгенерировать тот же уникальный код и вставить его в БД до того, как мы завершим транзакцию. Однако вероятность того, что это произойдет, невелика, кроме того, уникальный ключ в БД защищает нас от дублирования значений.
Второй эндпоинт перенаправит на исходный URL при доступе к сокращённому:
csharp
app.MapGet("{code}",
async (
string code,
AppDbContext dbCtx) =>
{
var shortUrl = await
dbCtx.ShortUrls
.SingleOrDefaultAsync(
s => s.Code == code);
if (shortUrl is null)
return Results.NotFound();
return Results.Redirect(shortUrl.Url);
});
Эта конечная точка ищет код в БД и, если он найден, перенаправляет пользователя на исходный длинный URL. Ответ будет иметь код состояния 302 (Found) согласно стандартам HTTP.
Недостатки и возможные улучшения
1. Недостатком реализации сервиса является длинная задержка, т.к. мы проверяем каждый генерируемый код в БД. Улучшением может стать заблаговременное создание уникальных кодов в БД.
2. Кэширование второй конечной точки позволит снизить нагрузку на БД для часто используемых коротких URL.
📌 Подробнее
@csharp_1001_notes6 538
🖥 Что полезного в новых версиях C#
Держите годное видео, в котором систематизируются знания о новых возможностях языка начиная с C#8 по C#11, а также обсуждаются на примерах новейшие возможности C# 12 и .NET 8.
📎 YouTube
@csharp_1001_notes
6 538
🖥 Преобразуйте базу данных SQL Server в базу данных SQLite из Code project.
https://codeproject.com/Articles/26932/Convert-SQL-Server-DB-to-SQLite-DB
https://github.com/karenpayneoregon/sqlserver-to-sqllite
@csharp_1001_notes
6 538
🖥 Прочитать Nullable<long> из строки
⏩Итак, дан код:
long? catCode = null;
// Если строка val не пустая,
if (!(String.IsNullOrWhiteSpace(val)))
{
// распознаем в первых цифрах до пробела целое 64-битное число.
// Если его там нет, записываем в catCode NULL.
// Если его удалось распознать, записываем его в catCode.
if (!(Int64.TryParse(val.Split(" ")[0], out long cc)))
{
catCode = null;
}
else
{
catCode = cc;
}
}
Как переписать этот код чуть понятнее?
⏩Как вариант, можно написать что-то в духе:
public static string LeftDigits(this string str)
{
if (str == null) return null;
if (!str.contains(" ") return null;
string left = str.Split(" ")[0];
if (! left.All(Char.IsDigit){
return null;
}
return left;
}
//...
string digits = LeftDigits(val);
long? catCode = digits != null ? Int64.Parse(digits) : null;
А есть ли ещё варианты?
Можете накидать свои в комментах
@csharp_1001_notes6 538
⚡️Компания Аванпост в поисках Разработчиков C# (Junior + / Middle)
🚀Какие задачи предстоит решать?
- Интеграционная разработка
- Разработка подключаемых модулей приложений (non-GUI) в соответствии с заданными интерфейсами, сервисов и приложений интеграционного слоя
- По мере профессионального роста – расширение сферы деятельности
👨💻Какие требования к кандидатам?
- Знание: С#, .Net Core
- Понимание концепций ООП и базовых шаблонов проектирования
- Понимание принципов работы реляционных СУБД
- Опыт написания простых SQL-запросов и работы с БД
- Технический английский, чтение документации и профессиональной литературы
🔥Что мы предлагаем:
- Удаленный формат работы
- Зарплата по результатам собеседования и определения навыков соискателя
- Профессиональный рост
- Оформление по ТК РФ
Узнал себя?
Принимай участие в One Day Offer и становись частью крупной IT-компании!
Подробности и регистрация: https://tglink.io/aea5ca1b4725
6 538
🔥 Создание отказоустойчивых облачных сервисов с помощью .NET 8
В новой версии .NET представлены пакеты
Microsoft.Extensions.Http.Resilience и Microsoft.Extensions.Resilience, основанные на библиотеке Polly. Их главная цель — упростить интеграцию отказоустойчивости в ваши приложения.
dotnet add package Microsoft.Extensions.Http.Resilience
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Http.Resilience" />
</ItemGroup>
var services = new ServiceCollection();
services.AddHttpClient("my-client")
.AddStandardResilienceHandler(options =>
{
// Configure standard resilience options here
});
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
