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

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

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

Для связи: @ruslan_kuyanets
Download Telegram
#ЛитКод
Задача: 490. The Maze

В лабиринте есть шар, который может перемещаться по пустым пространствам (представленным как 0) и стенам (представленным как 1). Шар может катиться по пустым пространствам вверх, вниз, влево или вправо, но он не остановится до тех пор, пока не наткнется на стену. Когда шар останавливается, он может выбрать следующее направление.

Дан лабиринт размером m x n, начальная позиция шара и место назначения, где start = [startrow, startcol] и destination = [destinationrow, destinationcol]. Верните true, если шар может остановиться в месте назначения, иначе верните false.
Вы можете предположить, что границы лабиринта представляют собой стены. В приведённом ниже примере они не указаны.

Пример:
Input: maze = [[0,0,1,0,0],[0,0,0,0,0],[0,0,0,1,0],[1,1,0,1,1],[0,0,0,0,0]], start = [0,4], destination = [4,4]
Output: true
Explanation: One possible way is : left -> down -> left -> down -> right -> down -> right.


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

1⃣Инициализация и подготовка данных
Определите количество строк и столбцов в лабиринте (m и n). Создайте 2D массив visit для отслеживания посещённых ячеек. Запустите DFS (глубокий поиск) с начальной позиции.

2⃣DFS обход
Если текущая ячейка уже посещена, верните false. Если текущая ячейка совпадает с ячейкой назначения, верните true. Отметьте текущую ячейку как посещённую. Переберите все четыре направления движения (вверх, вправо, вниз, влево): продвигайтесь в выбранном направлении до тех пор, пока не столкнётесь со стеной или границей. После остановки вызовите DFS для новой позиции.

3⃣Результат
Если любой вызов DFS возвращает true, завершите выполнение и верните true. Если ни один путь не приводит к цели, верните false.

😎 Решение:
public class Solution {
public bool HasPath(int[][] maze, int[] start, int[] destination) {
int m = maze.Length, n = maze[0].Length;
bool[,] visit = new bool[m, n];
return Dfs(m, n, maze, start, destination, visit);
}

private bool Dfs(int m, int n, int[][] maze, int[] curr, int[] destination, bool[,] visit) {
if (visit[curr[0], curr[1]]) return false;
if (curr.SequenceEqual(destination)) return true;
visit[curr[0], curr[1]] = true;
int[][] directions = new int[][] { new int[] {-1, 0}, new int[] {1, 0}, new int[] {0, -1}, new int[] {0, 1} };
foreach (var dir in directions) {
int r = curr[0], c = curr[1];
while (r >= 0 && r < m && c >= 0 && c < n && maze[r][c] == 0) {
r += dir[0];
c += dir[1];
}
int[] newCurr = new int[] { r - dir[0], c - dir[1] };
if (Dfs(m, n, maze, newCurr, destination, visit)) return true;
}
return false;
}
}


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#статьи
😊 Процесс компиляции в .NET для C#, включая этапы от написания исходного кода до его выполнения.

Описание охватывает компиляцию в Common Intermediate Language (CIL), хранение в сборке, а также Just-In-Time (JIT) компиляцию в Common Language Runtime (CLR). Также упоминается Ahead-Of-Time (AOT) компиляция для оптимизации производительности.
Читать статью

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#Собес
🤔В чем разница между const и readonly в С#?

const задает константу, значение которой невозможно изменить после компиляции, тогда как readonly позволяет задать значение переменной только в момент инициализации или в конструкторе.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
#видео
🥺 Паттерн Abstract Factory, Абстрактная фабрика, C#, Unity

Видео объясняет порождающий паттерн проектирования "Абстрактная фабрика", начиная с его определения, ключевых аспектов и UML-схемы. Оно показывает, как этот паттерн помогает создавать семейства объектов (например, юниты, UI-элементы), избегая привязки к конкретным классам. Приводятся практические примеры кода: сначала без фабрик, затем с использованием абстрактной фабрики.
📱 Cмотреть видео

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
🥺 Как достичь развертывания без простоя с помощью YARP , используя стратегии Blue-Green и Canary
Читать

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤓 Работа с документами Office на .NET

Если нужно генерировать, читать или изменять файлы Word, Excel и PowerPoint (форматы .docx, .xlsx, .pptx) без установки Microsoft Office – Open-XML-SDK от Microsoft отлично подойдёт

🟠 Создание и редактирование файлов без COM и Interop
🟠 Извлечение данных из документов (например, текст из Word или ячейки из Excel)
🟠 Высокая производительность при работе с большими файлами
🟠 Поддержка .NET Core и .NET 6+

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Могут ли быть выполнены несколько блоков catch в одном программном блоке?

В С# можно использовать несколько блоков catch, но каждый блок обрабатывает
только одно исключение. Если исключение соответствует первому блоку catch,
остальные блоки игнорируются.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
#видео
😘 Cancellation Token в C#. Как использовать ресурсы сервера оптимально

Видео объясняет использование CancellationToken в .NET, включая его применение в ASP.NET, обработку исключений при отмене задач, использование в обычных приложениях и работу с ним в синхронных контекстах, помогая управлять отменой операций и предотвращать ошибки.
📱 Cмотреть на ютубе

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#полезное
😇 Изменение стандартного вида отладки для класса

Я недавно об этом узнал, но мы можем изменить стандартное отображение отладки для класса C# с помощью атрибута DebuggerDisplay.

Достаточно добавить атрибут [DebuggerDisplay] в класс

Это делает отладку удобнее, сразу показывая ключевую информацию о каждом объекте.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
😐 Что такое туннели Dev в Visual Studio?

Dev Tunnels в Visual Studio позволяют нам открывать доступ и отлаживать наши локальные API через удаленные URL-адреса.

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

Для многих разработчиков это означало необходимость развертывания в Azure App Service или другом облачном сервисе, чтобы проверить, работают ли методы обработки обратных вызовов.

Теперь в Visual Studio можно создать Dev Tunnel, который создаст удаленный URL, перенаправляющий запросы в запущенный локально экземпляр.

Затем этот URL можно указать в настройках вебхука стороннего сервиса, и при вызове удаленного URL у нас сработают брейкпоинты в локальной среде – что значительно упрощает процесс разработки.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес
🤔 Что такое зубчатые массивы (Jagged Arrays) ?

Зубчатый массив - это массив массивов, в котором длина каждого вложенного массива может быть разной.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#ЛитКод
Задача: 498. Diagonal Traverse

Дан массив m x n матрицы mat, верните массив всех элементов матрицы в диагональном порядке.

Пример:
Input: mat = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,4,7,5,3,6,8,9]


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

1⃣Инициализация и подготовка
Проверьте, пуста ли матрица. Инициализируйте переменные для хранения размеров матрицы. Создайте массив result для хранения окончательных результатов и временный список intermediate для промежуточных значений диагоналей.

2⃣Итерация по диагоналям
Внешний цикл для прохождения по всем диагоналям. Головы диагоналей находятся в первой строке и последнем столбце. Внутренний цикл для итерации по элементам каждой диагонали. Индексы элементов диагонали изменяются до выхода за пределы матрицы.

3⃣Обработка диагоналей
Для каждой диагонали сохраните её элементы в списке intermediate. Переверните элементы диагонали, если её номер чётный. Добавьте элементы диагонали в массив result.

😎 Решение:
public class Solution {
public int[] FindDiagonalOrder(int[][] mat) {
if (mat == null || mat.Length == 0) return new int[0];
int N = mat.Length, M = mat[0].Length;
List<int> result = new List<int>();

for (int d = 0; d < N + M - 1; ++d) {
List<int> intermediate = new List<int>();
int r = d < M ? 0 : d - M + 1;
int c = d < M ? d : M - 1;

while (r < N && c >= 0) {
intermediate.Add(mat[r][c]);
r++;
c--;
}

if (d % 2 == 0) {
intermediate.Reverse();
}
result.AddRange(intermediate);
}

return result.ToArray();
}
}


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
#видео
🥺 Подключаемся к API REST из браузера. CORS

Автор показывает, как настроить CORS на бэкенде, добавляя политику с разрешёнными источниками, заголовками и методами. Также демонстрируется исправление ошибки, связанной с редиректом с HTTP на HTTPS. В конце видео даются рекомендации по безопасной настройке CORS, ограничивая доступ только для доверенных источников.
📱 Cмотреть источник

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 В чем разница между методами System.Array.CopyTo() и System.Array.Clone()?

СоруТо() копирует элементы из одного массива в другой, а Clone() создает новый массив, содержащий все элементы исходного массива.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😎 Осваиваем Docker и C# вместе: начнем с основ
Читать

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

Это хайповая база данных нового поколения, которая обещает объединить лучшие черты SQL и NoSQL в одном флаконе.

Если раньше для сложных запросов и распределённых хранилищ приходилось мучиться с разными технологиями, то SurrealDB предлагает удобный и гибкий подход:

🟠Поддержка графовых связей (как у Neo4j)
🟠SQL-подобный язык запросов (но проще и мощнее)
🟠Хранение данных в JSON (как у MongoDB)
🟠WebSocket API для real-time взаимодействия
🟠Масштабируемость и горизонтальное шардирование

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Как улучшить производительность запросов в EF Core
Читать

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 В чем разница между операторами is и as в С#?

Оператор is используется для проверки, является ли объект экземпляром определенного типа, возвращая true или false . Оператор as пытается выполнить преобразование объекта к указанному типу и возвращает null , если преобразование НЕВОЗМОЖНО.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
#видео
😇 Что такое делегаты в С#? Как их можно использовать в Unity?

Видео рассказывает о делегатах в C#, начиная с примера их использования, затем объясняет, что такое delegate, зачем нужно ключевое слово event, и разбирает три стандартных типа делегатов:

1⃣Action (для методов без возвращаемого значения)
2⃣Predicate (для методов, возвращающих bool)
3⃣Func (для методов с возвращаемым значением).
📱 Cмотреть источник

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤓 Использование is null для проверки на null вместо == null в выражениях типа is в C# 9+

С появлением C# 9 был введен более элегантный способ проверки на null с помощью паттерн-матчинга.

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