Библиотека шарписта | C#, F#, .NET, ASP.NET
22.9K subscribers
2.26K photos
36 videos
85 files
4.43K links
Все самое полезное для C#-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
#вопросы_для_самопроверки

Объясните предназначение ключевого слова volatile в C#.
Если у вас многопоточное приложение с разделяемыми несколькими потоками данными (например полями класса), то у вас нет гарантии того, что данные в эти разделяемые поля будут записаны одним потоком и прочитаны другим потоком именно в том порядке, в котором вы их написали в своём коде.

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

Ключевое слово volatile может применяться к полям следующих типов:
– Ссылочные типы.
– Типы указателей (в небезопасном контексте). Несмотря на то, что сам указатель может быть изменяемым, объект, на который он указывает, должен быть постоянным. Другими словами, объявить указатель на изменяемый объект невозможно.
– Простые типы, например sbyte, byte, short, ushort, int, uint, char, float и bool.
– Тип enum с одним из следующих базовых типов: byte, sbyte, short, ushort, int или uint.
– IntPtr и UIntPtr.

Ключевое слово volatile можно применять только к полям class или struct. Локальные переменные не могут объявляться как volatile.
Теперь bug hunter'ы могут помочь сервису, которым пользуются они сами, друзья, близкие и мама с бабушкой — Ozon первым среди российских e-commerce компаний запустил собственную bug bounty программу.

За найденные на сайте уязвимости можно получить до 120 000 ₽. Отправлять репорты можно на HackerOne: hackerone.com/ozon. Удачной охоты!
Возможности разработки кроссплатформенных мобильных, настольных и веб-приложений на языке C# расширяются, поэтому особенную пользу приобретают аналитические статьи, в которых проводится сравнение доступных на сегодняшний день инструментов для кроссплатформенной разработки под .NET Core.

Часть 1
Часть 2
C# разработчик
Формат работы: #fulltime #remote
Зарплата: $ 40 000 - 50 000 в год

Мы — платформа 6nomads, и прямо сейчас мы ищем опытного C# разработчика в компанию с экспертизой в игровой индустрии. Новому члену команды предстоит заниматься сложным многокомпонентным windows-приложением, его поддержкой, интеграцией и развитием.

Что важно:
— Опыт разработки на С# от 3 лет;
— Знание принципов ООП, SOLID, KISS, DRY;
— Опыт .NET core;
— Опыт работа с многопоточностью (не только через Tasks, но и через Threads);
— Опыт работы с системами контроля версий (Git);
— Английский достаточный для чтения тех документации.

Будет плюсом:
— Техническое образование, хорошая алгоритмическая подготовка;
— Опыт работы в распределенных командах;
— Опыт мобильной разработки и работы с эмуляторами;
— Опыт работы с неуправляемым кодом.

Что предлагают:
— Сложные задачи, в которых можно сильно прокачать свои навыки;
— Участие в построении архитектуры разрабатываемых продуктов;
— Гибкий график;
— Оплата обучения внутри и вне компании.

Чтобы откликнуться, необходимо пройти короткий отбор по ссылке https://6nomads.com/. После этого мы сможем рекомендовать вас работодателю и свести к минимуму затяжные согласования и лишние собеседования.
Immutable означает, что данные, хранящиеся в переменной, не могут быть изменены. При этом значение переменной может быть изменено посредством отказа от использования старых данных, которые могут быть изменены. Оригинальные данные остаются в памяти, а новые значения создаются вновь, в новой области памяти.

Примером является строковой тип String. Он не может быть изменён и при любых модификациях создаётся в результате новый экземпляр класса, все ссылки переприсваиваются, и сборщик мусора собирает старые экземпляры.
Михаил Зинченко (Team Lead в Wargaming) советует 5 книг об индустрии разработки видеоигр, при этом, первые две книги он советует прочесть и тем, кто никогда не занимался созданием каких-либо игр и не планирует делать этого в обозримом будущем, но если вы хоть немного причастны к ремеслу создания вымышленных интерактивных миров и почему-то не знакомы со столь чудесными произведениями — не мешкая, беритесь за чтение прямо сейчас.

https://proglib.io/w/375aefdb
Avalonia — фреймворк, позволяющий создавать кроссплатформенные приложения с графическим интерфейсом на основе XAML, предоставляющий гибкую систему стилей и поддерживающий широкий спектр операционных систем (Windows через .NET Framework и .NET Core, Linux через Xorg, macOS).

Немного материалов, связанных с Avalonia:
Github
Разработка кроссплатформенного десктопного приложения с помощью Avalonia
Реализация MVVM
System.Array.CopyTo() копирует не только сами элемента класса Array, но и объекты, которые связаны ссылками с элементами Array. Это всё называется «глубоким копированием».

System.Array.Clone() осуществляет так называемое «поверхностное копирование». При поверхностном копировании метод копирует только элементы объекта класса Array, и методу не важно, являются ли эти элементы ссылочными или значимыми типами. Копирования объектов, на которые ссылаются ссылочные типы, не происходит. Ссылки в новом объекте класса Array указывают на те же объекты, что и ссылки в оригинальном массиве Array.
Автор поднял редко обсуждаемые, но достаточно важные вопросы, связанные с глобализацией и локализацией в приложении ASP.NET. Он реализовал некоторую расширенную настройку, где сохранил выбранную информацию о языке в Cookie в браузере клиента.

https://proglib.io/w/96bf8af7
#вопросы_для_самопроверки

Объясните предназначение ключевого словоа stackalloc.
Ключевое слово stackalloc выделяет блок памяти в стеке. Выделенный в стеке блок памяти, который создает этот метод, автоматически удаляется по завершении выполнения метода. Вы не можете явным образом освободить память, выделенную stackalloc. Выделенный в стеке блок памяти не подвергается сборке мусора, поэтому его не нужно закреплять с помощью инструкции fixed.

При использовании stackalloc в среде CLR автоматически включается контроль переполнения буфера. Если буфер переполнен, процесс незамедлительно прерывается — это позволяет минимизировать риск исполнения вредоносного кода.
Что мотивирует вас откликнуться на вакансию?