1) Newtonsoft.Json: Эта библиотека широко используется для работы с данными JSON в приложениях .NET. Newtonsoft.Json обеспечивает высокую производительность и простоту использования, что делает ее отличным решением для сериализации и десериализации данных JSON.
2) Dapper: Это простой и эффективный ORM, который обеспечивает высокую производительность и гибкость при работе с реляционными базами данных. Dapper прост в использовании и предлагает быстрый и эффективный способ взаимодействия с базами данных.
3) Polly: Polly - это библиотека, которая помогает легко обрабатывать ошибки в приложениях .NET.
4) AutoMapper: Эта библиотека .NET Core упрощает сопоставление объектов с объектами путем автоматического сопоставления свойств одного объекта с другим. Эта библиотека особенно полезна в больших проектах, где сопоставление может занять много времени и стать утомительным.
5) FluentValidation: Это библиотека, которая предоставляет API для построения правил валидации. Она позволяет легко создавать сложную логику проверки и поддерживает широкий спектр скриптов валидации, что делает ее полезным инструментом для обеспечения целостности данных в ваших приложениях.
6) Serilog: Эта библиотека представляет собой структурированную библиотеку протоколирования, которая упрощает сбор и анализ журналов вашего приложения. Она обеспечивает гибкость и расширяемость и поддерживает различные источники для хранения журналов, включая Elasticsearch, SQL Server и другие.
7) Swashbuckle.AspNetCore.Swagger: Эта библиотека генерирует документацию OpenAPI для вашего ASP.NET Core Web API. Она облегчает понимание функциональности вашего API и позволяет легко генерировать код для вашего API.
8) NLog: Это бесплатная платформа протоколирования для .NET с широкими возможностями маршрутизации и управления журналами.
9) Moq4: Это популярный фреймворк mocking для приложений .NET. Она позволяет легко создавать объекты для модульного тестирования.
10) StackExchange.Redis: Это библиотека для работы с базами данных Redis в приложениях .NET. Она предоставляет простой и эффективный способ взаимодействия с Redis, а также обеспечивает высокую производительность и масштабируемость.
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Как прокачать навыки в С++, если вы уже знаете основы языка
Разработчикам на С++, которые хотят прокачать навыки или ищут точки роста в карьере, выйти на новый этап развития поможет активное самообучение: закрепление теории и отработка знаний на практике. Вот только полагаться лучше не на случайные интернет-источники, а на материалы лидеров индустрии.
Советуем обратить внимание на бесплатный хендбук Академии Яндекса. Этот онлайн-учебник по С++ был создан специально для того, чтобы начинающие специалисты могли самостоятельно освоить новые темы, а более опытные — освежить знания. В хендбуке есть как теория, так и задачи с автопроверкой.
Сохраняйте ссылку и погружайтесь в бесплатные материалы по С++: https://clck.ru/33t57f
Разработчикам на С++, которые хотят прокачать навыки или ищут точки роста в карьере, выйти на новый этап развития поможет активное самообучение: закрепление теории и отработка знаний на практике. Вот только полагаться лучше не на случайные интернет-источники, а на материалы лидеров индустрии.
Советуем обратить внимание на бесплатный хендбук Академии Яндекса. Этот онлайн-учебник по С++ был создан специально для того, чтобы начинающие специалисты могли самостоятельно освоить новые темы, а более опытные — освежить знания. В хендбуке есть как теория, так и задачи с автопроверкой.
Сохраняйте ссылку и погружайтесь в бесплатные материалы по С++: https://clck.ru/33t57f
Книга дня. Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование
Автор: Стивен Клири
Автор поможет разобраться с трудностями и избежать подводных камней, возникающих при решении реальных задач. В вашем распоряжении 85 рецептов работы с .NET и C# 8.0, необходимых для параллельной обработки и асинхронного программирования.
#c_Sharp
📚Книга
@cpluscsharp
Автор: Стивен Клири
Автор поможет разобраться с трудностями и избежать подводных камней, возникающих при решении реальных задач. В вашем распоряжении 85 рецептов работы с .NET и C# 8.0, необходимых для параллельной обработки и асинхронного программирования.
#c_Sharp
📚Книга
@cpluscsharp
Максимальная площадь острова
Сложность: Средняя
Условие задачи: Условие задачи:
Дан двумерный массив размера m x n. "1" отвечает за сушу, "0" - за океан. Необходимо опеределить максмимальную площадь острова из островов, расположенных на карте.
Островом считается территория, образованная из "1", расположенных сверху, справа, снизу и слева относительно друг друга.
Пример:
Ввод: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]
Вывод: 6
Ввод: grid = [[0,0,0,0,0,0,0,0]]
Вывод: 0
Решение
public class Solution {
public int MaxAreaOfIsland(int[][] grid)
{
var best = 0;
var travelled = new bool[grid.Length][];
for (var i = 0; i < grid.Length; i++)
travelled[i] = new bool[grid[i].Length];
for (var i = 0; i < grid.Length; i++)
for (var j = 0; j < grid[0].Length; j++)
if (grid[i][j] == 1 && !travelled[i][j])
{
var q = ExploreIsland(grid, i, j, travelled);
best = Math.Max(best, q);
}
return best;
}
private int ExploreIsland(int[][] grid, int i, int j, bool[][] travelled)
{
if (i < 0 || j < 0 || i >= travelled.Length || j >= travelled[0].Length) return 0;
if (grid[i][j] == 0 || travelled[i][j]) return 0;
travelled[i][j] = true;
var north = ExploreIsland(grid, i + 1, j, travelled);
var west = ExploreIsland(grid, i, j - 1, travelled);
var east = ExploreIsland(grid, i, j + 1, travelled);
var south = ExploreIsland(grid, i - 1, j, travelled);
return north + west + east + south + 1;
}
}
Временная сложность : O(n^2*m^2)
Пространственная сложность: O(n∗m)
Пишите свое решение в комментариях👇
@cpluscsharp
Please open Telegram to view this post
VIEW IN TELEGRAM
Продолжаем говорить о Linq. Библиотека Linq очень полезна для написания быстрых, однострочных функций, приведем несколько примеров с кодом:
▪Суммирование всех чисел в диапазоне:
using System;
using System.Linq;
public class Program {
public static void Main() {
Console.WriteLine(Enumerable.Range(1, 100).Sum());
}
}
▪Применение функции ко всем числам в списке:
using System;
using System.Linq;
public class Program {
private static int Square(int n) => n * n;
public static void Main() {
int[] arr = { 1, 2, 3, 4 };
// direct anonymous function
int[] arr2 = arr.Select(n => n * n).ToArray();
// using another method
int[] arr3 = arr.Select(Square).ToArray();
foreach (int n in arr2)
Console.WriteLine(n); // output: 1, 4, 9, 16
foreach (int n in arr3)
Console.WriteLine(n); // output: 1, 4, 9, 16
}
}
▪Фильтрация списка номеров:
using System;
using System.Linq;
public class Program {
private static bool IsValid(int n) => n % 2 == 0 && n > 4;
public static void Main() {
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// direct anonymous function
int[] arr2 = arr.Where(n => n % 2 == 0 && n > 4).ToArray();
// using another method
int[] arr3 = arr.Where(IsValid).ToArray();
foreach (int n in arr2)
Console.WriteLine(n); // output: 6, 8
foreach (int n in arr3)
Console.WriteLine(n); // output: 6, 8
}
}
▪Нахождение минимального/максимального значения в списке:
using System;
using System.Linq;
public class Program {
public static void Main() {
int[] arr = { 4, 7, 2, 1, 3, 6, 9, 8, 0, 5 };
Console.WriteLine(Enumerable.Min(arr)); // output: 0
Console.WriteLine(Enumerable.Max(arr)); // output: 9
}
}
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
ArchUnitNET - это бесплатная, простая библиотека для проверки архитектуры кода на C#. ArchUnitNET это форк https://www.archunit.org/ для Java.
PS> Install-Package ArchUnitNET
▪ Github
▪Документация
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача. Слияние двух бинарных деревьев
Сложность: Лёгкая
Условие задачи: Даны два бинарных дерева, необходимо осуществить их наложение друг на друга и вывод результатов в новом дереве.
Примечание: Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод:
Вывод:
Ввод:
Вывод:
Пишите свое мнение в комментариях👇
@csharp_ci
Сложность: Лёгкая
Условие задачи: Даны два бинарных дерева, необходимо осуществить их наложение друг на друга и вывод результатов в новом дереве.
Примечание: Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод:
root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Вывод:
[3,4,5,5,4,null,7]
Ввод:
root1 = [1], root2 = [1,2]
Вывод:
[2,2]
* Определение для узла двоичного дерева.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
public class Solution {
public TreeNode MergeTrees(TreeNode root1, TreeNode root2)
{
if (root1 == null & root2 == null) return null;
if (root1 == null) return root2;
if (root2 == null) return root1;
var left = MergeTrees(root1.left, root2.left);
var right = MergeTrees(root1.right, root2.right);
if (root1.left != left) root1.left = left;
if (root1.right != right) root1.right = right;
root1.val += root2.val;
return root1;
}
}
Пишите свое мнение в комментариях👇
@csharp_ci
🔎 Полное руководство по созданию приложения-клона Google Translate с нуля на .NET
Добрый день! Я действительно взволнован проектом, который мне удалось создать для вас. Я сделал всё возможное, чтобы представить вам что-то с почти полной функциональностью, что-то, что вы можете продемонстрировать в своём портфолио, если вы новичок, и не волнуйтесь, дальше я начну создавать проекты для разработчиков среднего и продвинутого уровня, просто имейте немного терпения, пока я сосредоточен на новых разработчиках .NET.
Сегодняшний проект является клоном приложения Google Translate с использованием Google translate API v2. Я эстет, поэтому я представлю вам красивое приложение, однако оно будет не только «красивым», но также будет переводить текст, определять язык на основе пользовательского ввода, отображать поддерживаемые языки и менять местами пользовательский ввод с результатом перевода. Так что, если вы так же взволнованы, как и я, давайте сделаем это!
▪Статья
▪Полный код
@csharp_ci
Добрый день! Я действительно взволнован проектом, который мне удалось создать для вас. Я сделал всё возможное, чтобы представить вам что-то с почти полной функциональностью, что-то, что вы можете продемонстрировать в своём портфолио, если вы новичок, и не волнуйтесь, дальше я начну создавать проекты для разработчиков среднего и продвинутого уровня, просто имейте немного терпения, пока я сосредоточен на новых разработчиках .NET.
Сегодняшний проект является клоном приложения Google Translate с использованием Google translate API v2. Я эстет, поэтому я представлю вам красивое приложение, однако оно будет не только «красивым», но также будет переводить текст, определять язык на основе пользовательского ввода, отображать поддерживаемые языки и менять местами пользовательский ввод с результатом перевода. Так что, если вы так же взволнованы, как и я, давайте сделаем это!
▪Статья
▪Полный код
@csharp_ci
📌 10 наиболее часто задаваемых технических вопросов на собеседованиях по C#
Как разработчику C#, вам, вероятно, не привыкать нервничать перед собеседованием. Но не волнуйтесь. Мы вам поможем! В этой статье мы обсудим 10 наиболее часто задаваемых технических вопросов на собеседованиях по C# и покажем, как на них отвечать.
▪Читать
@csharp_ci
Как разработчику C#, вам, вероятно, не привыкать нервничать перед собеседованием. Но не волнуйтесь. Мы вам поможем! В этой статье мы обсудим 10 наиболее часто задаваемых технических вопросов на собеседованиях по C# и покажем, как на них отвечать.
▪Читать
@csharp_ci
C# для профессионалов: тонкости программирования
Автор: Джон Скит
Книга расскажет о сложных областях и темных закоулках языка, которые может предоставить только эксперт Джон Скит.
#c_Sharp
📚 Книга
@csharp_ci
Автор: Джон Скит
Книга расскажет о сложных областях и темных закоулках языка, которые может предоставить только эксперт Джон Скит.
#c_Sharp
📚 Книга
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
HTTP mock-сервер, полезный для создания заглушек сервисов и имитации ответов API, использующий возможности ASP.NET Core, встроенную генерацию фальшивых данных.
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
Anonymous Quiz
13%
Compile-time error
7%
Runtime error
71%
Int32 String
9%
String Int
🧬Orleans
Orleans - это кросс-платформенная платформа для создания надежных, масштабируемых распределенных приложений
🖥 Github
📄Документация
@csharp_ci
Orleans - это кросс-платформенная платформа для создания надежных, масштабируемых распределенных приложений
📄Документация
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Задача "Самый короткий мост"
Условие: на вход подается матрица, в которой 1 - суша, 0 - вода.
Остров представляет из себя совокупность частей суши, соединенных в четырех направлениях. На решетке существуют только два острова.
Можно изменить 0 на 1 для соединения двух островов в один.
Необходимо посчитать количество смен нулей на единицу для соединения двух островов.
Пример:
Ввод: grid = [[0,1],[1,0]]
Вывод: 1
Объяснение:
Ввод: grid = [[0,1,0],[0,0,0],[0,0,1]]
Вывод: 2
Решенние:
public class Solution {
public IList<int> SpiralOrder(int[][] matrix) {
List<int> lst = new();
int m = matrix.Length;
int n = matrix[0].Length;
int max = (int)Math.Ceiling(Math.Min(m,n)/2.0);
for(int index=0; index< max; index++){
if(m - index * 2 == 1 || n - index * 2 == 1) {
for(int i=index; i<m-index; i++)
for(int j= index; j<n-index; j++)
lst.Add(matrix[i][j]);
continue;
}
for(int i=index; i<n-index-1; i++)
lst.Add(matrix[index][i]);
for(int i=index;i<m-index-1; i++)
lst.Add(matrix[i][n-1-index]);
for(int i=n-1-index; i>index; i--)
lst.Add(matrix[m-1-index][i]);
for(int i=m-1-index; i>index; i--)
lst.Add(matrix[i][index]);
}
return lst;
}
}
Временная сложность:
O(mn)
Пространственная сложность:
O(nm)
Пишите свое мнение в комментариях👇
@csharp_ci
Условие: на вход подается матрица, в которой 1 - суша, 0 - вода.
Остров представляет из себя совокупность частей суши, соединенных в четырех направлениях. На решетке существуют только два острова.
Можно изменить 0 на 1 для соединения двух островов в один.
Необходимо посчитать количество смен нулей на единицу для соединения двух островов.
Пример:
Ввод: grid = [[0,1],[1,0]]
Вывод: 1
Объяснение:
Ввод: grid = [[0,1,0],[0,0,0],[0,0,1]]
Вывод: 2
Решенние:
public IList<int> SpiralOrder(int[][] matrix) {
List<int> lst = new();
int m = matrix.Length;
int n = matrix[0].Length;
int max = (int)Math.Ceiling(Math.Min(m,n)/2.0);
for(int index=0; index< max; index++){
if(m - index * 2 == 1 || n - index * 2 == 1) {
for(int i=index; i<m-index; i++)
for(int j= index; j<n-index; j++)
lst.Add(matrix[i][j]);
continue;
}
for(int i=index; i<n-index-1; i++)
lst.Add(matrix[index][i]);
for(int i=index;i<m-index-1; i++)
lst.Add(matrix[i][n-1-index]);
for(int i=n-1-index; i>index; i--)
lst.Add(matrix[m-1-index][i]);
for(int i=m-1-index; i>index; i--)
lst.Add(matrix[i][index]);
}
return lst;
}
}
Временная сложность:
O(mn)
Пространственная сложность:
O(nm)
Пишите свое мнение в комментариях👇
@csharp_ci
🧬CefSharp
CefSharp - библиотека, которая позволяет встраивать Chromium в приложения .NET. Это легкая обертка .NET вокруг Chromium Embedded Framework (CEF) Маршалла А. Гринблатта. Около 30% связки написано на C++/CLI, а большая часть кода - на C#. Его можно использовать из C# или VB, или любого другого языка CLR.
🖥 Github
@csharp_ci
CefSharp - библиотека, которая позволяет встраивать Chromium в приложения .NET. Это легкая обертка .NET вокруг Chromium Embedded Framework (CEF) Маршалла А. Гринблатта. Около 30% связки написано на C++/CLI, а большая часть кода - на C#. Его можно использовать из C# или VB, или любого другого языка CLR.
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Собрали для вас список бесплатных курсов по SQL от базовых до продвинутых.
1. SQL for Data Analysis
2. Интерактивный тренажер по SQL
3. Kaggle: Intro to SQL
4. Advanced SQL
5. Introduction to Structured Query Language (SQL)
6. Advanced Databases and SQL Querying
7. Databases and SQL for Data Science with Python
8. Oracle SQL – A Complete Introduction
9. Intro to SQL
10. Oracle SQL Basics
11. Beginners Guide to SQL
12. SQL for Data Science
13. Introduction to Databases and SQL Querying
14. Intro to Relational Databases
15. Hakerrank
16. Strata scratch
17. SQLBolt
18. W3schools
19. Курс по основам SQL, состоящий из 19 небольших уроков с лёгкой подачей
20. @sqlhub школа sql в телеграме
#SQL #курсы #бд
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Задача: Сортировочный список
Условие: дан односвязный список, необходимо отсортировать узлы списка по значению в порядке возрастания
Пример:
Ввод: head = [4,2,1,3]
Вывод: [1,2,3,4]
Ввод: head = [-1,5,3,4,0]
Вывод: [-1,0,3,4,5]
Можете ли вы отсортировать связанный список за O (n logn) времени и O(1) памяти (т.е. постоянного пространства)?
Решение:
пишите свое решение в комментариях 👇
@csharp_ci
Условие: дан односвязный список, необходимо отсортировать узлы списка по значению в порядке возрастания
Пример:
Ввод: head = [4,2,1,3]
Вывод: [1,2,3,4]
Ввод: head = [-1,5,3,4,0]
Вывод: [-1,0,3,4,5]
Можете ли вы отсортировать связанный список за O (n logn) времени и O(1) памяти (т.е. постоянного пространства)?
Решение:
public class Solution
{
public ListNode SortList(ListNode head)
{
if (head == null)
return null;
if (head.next == null)
return head;
var tail = head;
var mid = head;
var prev = head;
while (tail != null && tail.next != null)
{
tail = tail.next.next;
prev = mid;
mid = mid.next;
}
prev.next = null;
return MergeTwoLists(SortList(head), SortList(mid));
}
ListNode MergeTwoLists(ListNode list1, ListNode list2)
{
var head = new ListNode();
var newNode = head;
while (list1 != null && list2 != null)
{
if (list1.val < list2.val)
{
newNode.next = list1;
newNode = list1;
list1 = list1.next;
}
else
{
newNode.next = list2;
newNode = list2;
list2 = list2.next;
}
}
newNode.next = list1 ?? list2;
return head.next;
}
}
пишите свое решение в комментариях 👇
@csharp_ci
📎Plugin.Maui.ScreenSecurity
Полезная библиотека для защиты приложений NET MAUI без особых усилий. Помогает скрыть контент приложения, поставить защиту от скриншотов и записи экрана.
🖥 Github
@csharp_ci
Полезная библиотека для защиты приложений NET MAUI без особых усилий. Помогает скрыть контент приложения, поставить защиту от скриншотов и записи экрана.
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM