#статьи
🥺 Подробный план упражнений по освоению многозадачности и параллельного программирования на C#
Он охватывает основы, такие как многопоточность и синхронизация, а затем переход к более сложным темам, таким как асинхронное программирование, Parallel LINQ и шаблоны "производитель-потребитель".
Каждый этап включает примеры кода и практические задачи для закрепления знаний.
Читать статью
👉 Новости 👉 База вопросов
Он охватывает основы, такие как многопоточность и синхронизация, а затем переход к более сложным темам, таким как асинхронное программирование, Parallel LINQ и шаблоны "производитель-потребитель".
Каждый этап включает примеры кода и практические задачи для закрепления знаний.
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#ЛитКод
Задача: 767. Reorganize String
Дана строка s, переставьте символы строки s так, чтобы любые два соседних символа не были одинаковыми.
Верните любую возможную перестановку строки s или верните "", если это невозможно.
Пример:
👨💻 Алгоритм:
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.
😎 Решение:
👉 Новости 👉 База вопросов
Задача: 767. Reorganize String
Дана строка s, переставьте символы строки s так, чтобы любые два соседних символа не были одинаковыми.
Верните любую возможную перестановку строки s или верните "", если это невозможно.
Пример:
Input: s = "aab"
Output: "aba"
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: клик
👉 Новости 👉 База вопросов
Не реализуйте собственную аутентификацию, если вы разработчик на .NET.
ASPNET Core Identity может быть всем, что вам нужно.
Identity предоставляет вам
Это легко настроить в .NET приложении.
Вы полностью контролируете все данные в своей базе данных.
Identity имеет всё, что нужно для простых приложений.
Один недостаток — его сложно использовать в микросервисах.
Но это можно решить с помощью собственной реализации JWT.
Система аутентификации в .NET достаточно гибкая.
Вот как можно реализовать RBAC: клик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
#Собес
🤔 В чем разница между ключевыми словами ref и out?
чтобы параметр был инициализирован перед передачей, а out используется для
передачи параметров, которые будут инициализированы в методе.
👉 Новости 👉 Платформа
ref и out оба используются для передачи параметров по ссылке, но ref требует,чтобы параметр был инициализирован перед передачей, а out используется для
передачи параметров, которые будут инициализированы в методе.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥1
Media is too big
VIEW IN TELEGRAM
#видео
🤯 Полный курс. От нуля и до создания игры на Unity и C# 2024
Рассматриваются интерфейс Unity, работа с объектами и их компонентами, основы программирования (переменные, операторы, циклы, корутины), использование префабов и GetComponent, механики перемещения и взаимодействия (Input, стрельба, камера, анимация), а также создание врагов, эффектов, интерфейса и внутриигрового магазина.
📱 Cмотреть видео
👉 Новости 👉 База вопросов
Рассматриваются интерфейс Unity, работа с объектами и их компонентами, основы программирования (переменные, операторы, циклы, корутины), использование префабов и GetComponent, механики перемещения и взаимодействия (Input, стрельба, камера, анимация), а также создание врагов, эффектов, интерфейса и внутриигрового магазина.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😬 Это библиотека для управления авторизацией и правами доступа в
Она поддерживает настраиваемые роли, multi-tenant архитектуру, обновляемые JWT-токены и гибкие схемы аутентификации. Администраторы могут менять разрешения ролей без перезапуска, а данные хранятся с шардированием или в общей базе.
Гитхаб
👉 Новости 👉 База вопросов
ASP.NET Core. Она поддерживает настраиваемые роли, multi-tenant архитектуру, обновляемые JWT-токены и гибкие схемы аутентификации. Администраторы могут менять разрешения ролей без перезапуска, а данные хранятся с шардированием или в общей базе.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
👍 Примеры .NET DateOnly и TimeOnly
Мне очень нравятся эти новые типы, добавленные в dotnet 6.
Они позволяют нам лучше выражать намерения в коде и делают его более понятным для других разработчиков, показывая, что нас интересует только дата или только время.
До .NET 6 мы часто просто использовали DateTime и отбрасывали часть с временем для таких переменных, как DateOfBirth или OrderDate.
👉 Новости 👉 База вопросов
Мне очень нравятся эти новые типы, добавленные в dotnet 6.
Они позволяют нам лучше выражать намерения в коде и делают его более понятным для других разработчиков, показывая, что нас интересует только дата или только время.
До .NET 6 мы часто просто использовали DateTime и отбрасывали часть с временем для таких переменных, как DateOfBirth или OrderDate.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#Собес
🤔 Что такое свойства (Properties) в С#?
Свойства в С # — это специальные члены класса, которые позволяют гибко читать, записывать или вычислять значение приватного поля. Свойства используют методы доступа ("get" и "set"), которые скрывают внутреннюю реализацию и обеспечивают инкапсуляцию.
👉 Новости 👉 Платформа
Свойства в С # — это специальные члены класса, которые позволяют гибко читать, записывать или вычислять значение приватного поля. Свойства используют методы доступа ("get" и "set"), которые скрывают внутреннюю реализацию и обеспечивают инкапсуляцию.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Media is too big
VIEW IN TELEGRAM
#полезное
👍 Планирование фоновых задач в .NET с помощью Quartz
Видео посвящено настройке и использованию Quartz.NET в .NET для создания фоновых задач. Рассматриваются внедрение зависимостей, конфигурация Quartz, создание и планирование заданий с IJob, настройка ожидания завершения задач, предотвращение одновременного выполнения с DisallowConcurrentExecution и использование IConfigureOptions для управления фоновыми заданиями.
📱 Cмотреть видео
👉 Новости 👉 База вопросов
Видео посвящено настройке и использованию Quartz.NET в .NET для создания фоновых задач. Рассматриваются внедрение зависимостей, конфигурация Quartz, создание и планирование заданий с IJob, настройка ожидания завершения задач, предотвращение одновременного выполнения с DisallowConcurrentExecution и использование IConfigureOptions для управления фоновыми заданиями.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 490. The Maze
В лабиринте есть шар, который может перемещаться по пустым пространствам (представленным как 0) и стенам (представленным как 1). Шар может катиться по пустым пространствам вверх, вниз, влево или вправо, но он не остановится до тех пор, пока не наткнется на стену. Когда шар останавливается, он может выбрать следующее направление.
Дан лабиринт размером m x n, начальная позиция шара и место назначения, где start = [startrow, startcol] и destination = [destinationrow, destinationcol]. Верните true, если шар может остановиться в месте назначения, иначе верните false.
Вы можете предположить, что границы лабиринта представляют собой стены. В приведённом ниже примере они не указаны.
Пример:
👨💻 Алгоритм:
1⃣ Инициализация и подготовка данных
Определите количество строк и столбцов в лабиринте (m и n). Создайте 2D массив visit для отслеживания посещённых ячеек. Запустите DFS (глубокий поиск) с начальной позиции.
2⃣ DFS обход
Если текущая ячейка уже посещена, верните false. Если текущая ячейка совпадает с ячейкой назначения, верните true. Отметьте текущую ячейку как посещённую. Переберите все четыре направления движения (вверх, вправо, вниз, влево): продвигайтесь в выбранном направлении до тех пор, пока не столкнётесь со стеной или границей. После остановки вызовите DFS для новой позиции.
3⃣ Результат
Если любой вызов DFS возвращает true, завершите выполнение и верните true. Если ни один путь не приводит к цели, верните false.
😎 Решение:
👉 Новости 👉 База вопросов
Задача: 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.
Определите количество строк и столбцов в лабиринте (m и n). Создайте 2D массив visit для отслеживания посещённых ячеек. Запустите DFS (глубокий поиск) с начальной позиции.
Если текущая ячейка уже посещена, верните false. Если текущая ячейка совпадает с ячейкой назначения, верните true. Отметьте текущую ячейку как посещённую. Переберите все четыре направления движения (вверх, вправо, вниз, влево): продвигайтесь в выбранном направлении до тех пор, пока не столкнётесь со стеной или границей. После остановки вызовите DFS для новой позиции.
Если любой вызов 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) компиляция для оптимизации производительности.
Читать статью
👉 Новости 👉 База вопросов
Описание охватывает компиляцию в 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мотреть видео
👉 Новости 👉 База вопросов
Видео объясняет порождающий паттерн проектирования "Абстрактная фабрика", начиная с его определения, ключевых аспектов и UML-схемы. Оно показывает, как этот паттерн помогает создавать семейства объектов (например, юниты, UI-элементы), избегая привязки к конкретным классам. Приводятся практические примеры кода: сначала без фабрик, затем с использованием абстрактной фабрики.
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+
👉 Новости 👉 База вопросов
Если нужно генерировать, читать или изменять файлы Word, Excel и PowerPoint (форматы .docx, .xlsx, .pptx) без установки Microsoft Office – Open-XML-SDK от Microsoft отлично подойдёт
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мотреть на ютубе
👉 Новости 👉 База вопросов
Видео объясняет использование CancellationToken в .NET, включая его применение в ASP.NET, обработку исключений при отмене задач, использование в обычных приложениях и работу с ним в синхронных контекстах, помогая управлять отменой операций и предотвращать ошибки.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#полезное
😇 Изменение стандартного вида отладки для класса
Я недавно об этом узнал, но мы можем изменить стандартное отображение отладки для класса C# с помощью атрибута D
Достаточно добавить атрибут [DebuggerDisplay] в класс
Это делает отладку удобнее, сразу показывая ключевую информацию о каждом объекте.
👉 Новости 👉 База вопросов
Я недавно об этом узнал, но мы можем изменить стандартное отображение отладки для класса C# с помощью атрибута D
ebuggerDisplay.Достаточно добавить атрибут [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 у нас сработают брейкпоинты в локальной среде – что значительно упрощает процесс разработки.
👉 Новости 👉 База вопросов
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, верните массив всех элементов матрицы в диагональном порядке.
Пример:
👨💻 Алгоритм:
1⃣ Инициализация и подготовка
Проверьте, пуста ли матрица. Инициализируйте переменные для хранения размеров матрицы. Создайте массив result для хранения окончательных результатов и временный список intermediate для промежуточных значений диагоналей.
2⃣ Итерация по диагоналям
Внешний цикл для прохождения по всем диагоналям. Головы диагоналей находятся в первой строке и последнем столбце. Внутренний цикл для итерации по элементам каждой диагонали. Индексы элементов диагонали изменяются до выхода за пределы матрицы.
3⃣ Обработка диагоналей
Для каждой диагонали сохраните её элементы в списке intermediate. Переверните элементы диагонали, если её номер чётный. Добавьте элементы диагонали в массив result.
😎 Решение:
👉 Новости 👉 База вопросов
Задача: 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]
Проверьте, пуста ли матрица. Инициализируйте переменные для хранения размеров матрицы. Создайте массив result для хранения окончательных результатов и временный список intermediate для промежуточных значений диагоналей.
Внешний цикл для прохождения по всем диагоналям. Головы диагоналей находятся в первой строке и последнем столбце. Внутренний цикл для итерации по элементам каждой диагонали. Индексы элементов диагонали изменяются до выхода за пределы матрицы.
Для каждой диагонали сохраните её элементы в списке 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