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

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

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

Для связи: @ruslan_kuyanets
Download Telegram
#новости
🫠 В .NET 9 введен новый тип Base64Url.

Существующий метод Convert.ToBase64String может генерировать строку с символами '/', '+', или '=', которые не безопасны для использования в URL, поскольку они имеют особое значение в URL.

Вместо этого, помощник Base64Url генерирует строку без этих символов.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое С#?

С# — это высокоуровневый объектно-ориентированный язык программирования, разработанный для создания надежных и безопасных приложений. Он является частью экосистемы .NET и используется для разработки программ под различные платформы, включая веб-приложения, десктопные и мобильные решения.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
#статьи
👍 Масштабируй .NET-приложения с проверенными практиками. Стратегии обработки миллионов запросов.

Статья рассказывает о масштабировании .NET-приложений для обработки миллионов запросов, включая микросервисы, кэширование (Redis), асинхронное программирование (async/await), оптимизацию запросов, использование облачных сервисов (Azure, AWS), контейнеризацию (Docker, Kubernetes) и мониторинг (Application Insights, Prometheus)
Читать статью...

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
#статьи
😊 Управление электронной почтой с помощью .NET 9 и C# с использованием MailKit

SmtpClient устарел и лучше использовать MailKit и MimeKit для эффективной и безопасной работы с электронной почтой.

🟠В статье представлены шаги по установке MailKit, безопасному хранению SMTP-учетных данных с использованием переменных окружения, а также примеры кода для отправки простых писем, писем с вложениями и HTML-содержимым.

🟠Особое внимание уделяется настройке параметров безопасности соединения с SMTP-сервером.
Читать

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Media is too big
VIEW IN TELEGRAM
#видео
😊 Gmail API с использованием .NET C# с исходным кодом (чтение писем и вложений)

📝В нем показано, как настроить и использовать API для чтения электронных писем из Gmail. Автор предоставляет ссылку на исходный код проекта, доступный по адресу: клик

📱 Cмотреть ютуб

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес
🤔 Что такое Common Language Runtime (CLR)?

CLR - это виртуальная машина, которая является частью .NET Framework. Она управляет выполнением программ, обеспечивая такие услуги, как управление
памятью, многозадачностью, безопасность типов и удаленным вызовом. CLR также разделяет код на управляемый и неуправляемый, где управляемый код работает в его среде.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Media is too big
VIEW IN TELEGRAM
#статьи
🥱 Процесс создания приложения на платформе .NET MAUI для Windows, способного сканировать штрихкоды с помощью камеры

🚩Автор демонстрирует, как использовать Windows Media API для захвата видеопотока с USB-камеры и интеграции с Dynamsoft Barcode Reader для распознавания штрихкодов. Проект включает две страницы: одну для загрузки изображений и другую для работы с живым видеопотоком с камеры, отображая результаты сканирования над изображением или видео.
Читать

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1
#полезное
😊 JsonStringEnum
MemberName

В версии 9 библиотеки System.Text.Json, которая является стандартным инструментом для сериализации и десериализации JSON в .NET, был добавлен новый атрибут под названием JsonStringEnumMemberName.

Этот атрибут расширяет возможности работы с перечислениями (enum) при преобразовании их в JSON и обратно.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
👍 Бесплатная, с открытым исходным кодом CRM для разработчиков .NET и солопредпринимателей!

Этот проект построен с использованием технологий, таких как ASP.NET Core 9, Clean Architecture, CQRS и MediatR. Он предоставляет возможности для управления клиентами, кампаниями и командами без дополнительных сборов, а также включает полный RESTful API.
Ознакомиться

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#Собес
🤔 Что такое наследование? Поддерживает ли С# множественное наследование?

Наследование — это механизм в С#, позволяющий одному классу наследовать
характеристики другого. С# не поддерживает множественное наследование для
классов, но поддерживает его для интерфейсов.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#ЛитКод
Задача: 364. Nested List Weight Sum II

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

Глубина целого числа — это количество списков, внутри которых оно находится. Например, вложенный список [1,[2,2],[[3],2],1] имеет значение каждого целого числа, установленное равным его глубине. Пусть maxDepth будет максимальной глубиной любого целого числа.
Вес целого числа определяется как maxDepth - (глубина целого числа) + 1.

Верните сумму каждого целого числа в nestedList, умноженную на его вес.

Пример:
Input: nestedList = [[1,1],2,[1,1]]
Output: 8
Explanation: Four 1's with a weight of 1, one 2 with a weight of 2.
1*1 + 1*1 + 2*2 + 1*1 + 1*1 = 8


👨‍💻 Алгоритм:

1⃣Инициализировать первый уровень BFS-дерева, добавив все элементы из входного nestedList в очередь.

2⃣Для каждого уровня извлекать передний элемент из очереди. Если это список, то добавить его элементы в очередь. В противном случае обновить значения sumOfElements, maxDepth и sumOfProducts.

3⃣Когда очередь станет пустой, вернуть значение (maxDepth + 1) * sumOfElements - sumOfProducts.

😎 Решение:
using System;
using System.Collections.Generic;

public class Solution {
public int DepthSumInverse(IList<NestedInteger> nestedList) {
var queue = new Queue<NestedInteger>(nestedList);
int depth = 1, maxDepth = 0, sumOfElements = 0, sumOfProducts = 0;

while (queue.Count > 0) {
int size = queue.Count;
maxDepth = Math.Max(maxDepth, depth);

for (int i = 0; i < size; i++) {
var nested = queue.Dequeue();

if (nested.IsInteger()) {
int value = nested.GetInteger();
sumOfElements += value;
sumOfProducts += value * depth;
} else {
foreach (var ni in nested.GetList()) queue.Enqueue(ni);
}
}
depth++;
}
return (maxDepth + 1) * sumOfElements - sumOfProducts;
}
}


👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#новости
😊 Версия 2.3.0 шаблонов Auth0 для .NET уже вышла!

🟠Добавлена поддержка .NET 9.0
🟠Minimal API теперь используется по умолчанию для Web API
🟠Добавлена поддержка параметра 'controllers' в Web API
🟠Исправлена ошибка выхода из системы в шаблонах Blazor

Теперь можно использовать актуальные шаблоны с последними возможностями .NET!
Ознакомиться

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
#видео
😬 Как запустить проект? ASP.NET Core + React + NGINX + Docker Compose

Видео объясняет процесс создания и развертывания веб-приложения с использованием API на FastAPI, клиентской части на React и проксирования через Nginx, с контейнеризацией всех компонентов в Docker.
📱 Cмотреть видео

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#Собес
🤔 В чем разница между структурой и классом в С#?

Класс и структура в С # похожи, но имеют ключевые различия. Класс - это ссылка на объект, а структура - это значение. Классы обычно используются для более сложных объектов, а структуры - для небольших, легких обьектов.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
#статьи
👍 Изучите SignalR в .NET Core для общения в чате в реальном времени.

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

Также затрагиваются вопросы масштабирования и использования IHubContext для отправки событий. Приводятся примеры кода для каждой стадии.
Читать статью

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
🥺 MediatR + CQRS - использование паттернов для разделения запросов и модификаций

В видео объясняются паттерны проектирования "Медиатор" и "CQRS" (разделение операций чтения и записи), а также их использование в разработке веб-приложения для заметок с помощью библиотеки MediatR.
📱 Cмотреть видео

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤯 BlazorToolkit

Это набор инструментов для разработки на Blazor.

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

Этот набор доступен через NuGet и лицензирован по MIT License.
Смотреть тут

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

Enum (перечисление) в С# - это тип данных, который позволяет задавать именованные целочисленные константы. Это облегчает работу с фиксированными наборами значений, такими как дни недели или направления.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#статьи
🥺 Подробный план упражнений по освоению многозадачности и параллельного программирования на C#

Он охватывает основы, такие как многопоточность и синхронизация, а затем переход к более сложным темам, таким как асинхронное программирование, Parallel LINQ и шаблоны "производитель-потребитель".

Каждый этап включает примеры кода и практические задачи для закрепления знаний.
Читать статью

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#ЛитКод
Задача: 767. Reorganize String

Дана строка s, переставьте символы строки s так, чтобы любые два соседних символа не были одинаковыми.

Верните любую возможную перестановку строки s или верните "", если это невозможно.

Пример:
Input: s = "aab"
Output: "aba"


👨‍💻 Алгоритм:

1⃣Инициализируйте пустой список ans для хранения переставленных символов. Создайте приоритетную очередь pq, используя структуру данных кучи. Каждый элемент в pq — это кортеж, содержащий количество символов и сам символ. Приоритетная очередь упорядочена так, что элементы с большим количеством имеют более высокий приоритет.

2⃣Извлеките элемент с наивысшим приоритетом из pq. Присвойте его количество и символ переменным count_first и char_first соответственно. Если ans пуст или текущий символ char_first отличается от последнего символа в ans, добавьте char_first в ans. Если количество char_first не равно нулю, уменьшите его на один. Если обновленное количество больше нуля, поместите его обратно в pq. Перейдите к следующей итерации.

3⃣В противном случае, если char_first совпадает с последним символом в ans, нужно выбрать другой символ. Если pq пуста, верните пустую строку, так как переставить символы невозможно. Извлеките следующий элемент из pq, присвоив его количество и символ переменным count_second и char_second соответственно. Добавьте char_second в ans. Если количество char_second не равно нулю, уменьшите его на один. Если обновленное количество больше нуля, поместите его обратно в pq. Наконец, поместите оригинальный char_first обратно в pq. Верните переставленные символы как строку, объединив элементы в ans.

😎 Решение:
using System;
using System.Collections.Generic;

public class Solution {
public string ReorganizeString(string s) {
int[] charCounts = new int[26];
foreach (char c in s) {
charCounts[c - 'a']++;
}

var pq = new PriorityQueue<int[], int>(Comparer<int>.Create((a, b) => b.CompareTo(a)));
for (int i = 0; i < 26; i++) {
if (charCounts[i] > 0) {
pq.Enqueue(new int[] { charCounts[i], i + 'a' }, charCounts[i]);
}
}

var result = new List<char>();
while (pq.Count > 0) {
var first = pq.Dequeue();
if (result.Count == 0 || first[1] != result[^1]) {
result.Add((char)first[1]);
if (--first[0] > 0) {
pq.Enqueue(first, first[0]);
}
} else {
if (pq.Count == 0) {
return "";
}
var second = pq.Dequeue();
result.Add((char)second[1]);
if (--second[0] > 0) {
pq.Enqueue(second, second[0]);
}
pq.Enqueue(first, first[0]);
}
}

return new string(result.ToArray());
}
}


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
😊 ASPNET Core Identity

Не реализуйте собственную аутентификацию, если вы разработчик на .NET.

ASPNET Core Identity может быть всем, что вам нужно.

Identity предоставляет вам

🟠Аутентификацию
🟠Управление пользователями
🟠Вход, выход, обновление токенов
🟠Роли и утверждения для авторизации
🟠Внешние провайдеры аутентификации (Google, Meta)

Это легко настроить в .NET приложении.

Вы полностью контролируете все данные в своей базе данных.

Identity имеет всё, что нужно для простых приложений.

Один недостаток — его сложно использовать в микросервисах.

Но это можно решить с помощью собственной реализации JWT.

Система аутентификации в .NET достаточно гибкая.

Вот как можно реализовать RBAC: клик

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