Ozon в поисках C#-разработчиков в команду Доставки
Чем занимается команда: полным циклом взаимодействия покупателя с Ozon, начиная с добавления товаров в корзину, заканчивая выдачей или возвратом, чтобы миллионы пользователей могли совершать сотни тысяч заказов в день и получать их вовремя. Есть разные отделы: чекаут, корзина, логистика, личный кабинет продавца, путь поставок и другие.
Что предлагают:
• Ресурсы, чтобы делать лучшие продукты на рынке e-com
• Бенефиты и льготы
• Удаленку, гибрид или офис (Россия, Казахстан) — выбирать только тебе
• Профессиональную команду
Ознакомиться с подробностями вакансии и откликнуться можно по ссылке ниже
Откликнуться
Зачем при изменении сборки менять её версию или как сломать Visual Studio одной командой.
При выпуске нового релиза сборки её версию обычно меняют. Это особенно актуально, если разрабатывается библиотека, от которой зависят другие проекты. Но что, если этого не делать? Предлагаю вашему вниманию небольшую историю о проблемах с библиотеками.
Подробности: https://habr.com/ru/companies/pvs-studio/articles/724218/
ArrayPool<T>: подводные камни.
Автоматическая сборка мусора упрощает разработку, избавляя от необходимости отслеживать жизненный цикл объектов и удалять их вручную. Однако, чтобы сборщик мусора был полезным инструментом, а не главным врагом на пути к высокой производительности — иногда имеет смысл помогать ему, оптимизируя частые аллокации и аллокации больших объектов.
Для уменьшения аллокаций в современном .NET предусмотрены Span/Memory<T>, stackalloc с поддержкой Span, структуры и другие средства. Но если без объекта в куче не обойтись, например, если объект слишком большой для стека, или используется в асинхронном коде — этот объект можно переиспользовать. И для самых крупных объектов — массивов, в .NET встроены несколько реализаций ArrayPool<T>.
В этой статье автор расскажет о внутреннем устройстве реализаций ArrayPool<T> в .NET, о подводных камнях, которые могут сделать пулинг неэффективным, о concurrent-структурах данных, а также о пулинге объектов, отличных от массивов.
Подробнее: https://habr.com/ru/articles/723420/
Нужен ли ConfigureAwait?
В этой статье автор рассказывает зачем нужен ConfigureAwait(false), а также о том, как можно обходиться без него.
Подробности: https://habr.com/ru/post/721050/
Проблемы unsafe кода C#.
В этой статье автор показывает, какие проблемы может вызвать unsafe код. Также внутра несколько примеров того, как можно изменить значение константы, readonly поля и свойства без set метода.
Подробнее: https://habr.com/ru/post/707172/
Всё что нужно знать про ECS.
В этой статье автор рассказал всё, что знает про Entity-Component-System и попытался развеять различные предубеждения об этом подходе. Здесь вы найдете много слов о преимуществах и недостатках ECS, об особенностях этого подхода, о том как с ним подружиться, о потенциальных граблях, о полезных практиках, а также в отдельном разделе коротко посмотрим на ECS фреймворки для Unity/C#.
Подробности: https://habr.com/ru/post/665276/
Опыт разработки программы для игры в шашки с помощью алгоритма минимакс.
Изначально автор хотел писать на python, но потом решил сделать крутую красивую игру и выбрал Unity (C#). Спойлер: красивую игру сделать так и не вышло.
Подробности: https://habr.com/ru/post/710990/
Домашнее облачко или что можно сделать с Orange Pi 5 (Часть 1).
Многим разработчикам довольно часто бывают нужны какие-то локальные сервисы под рукой. Почему бы не использовать одноплатный компьютер?
Подробнее: https://habr.com/ru/post/708944/
Ozon открыл набор на бесплатные курсы для middle-специалистов Route 256
Актуально для инженеров, которые хотят перейти на Go, освоить микросервисы на C# или автотесты на Python.
А самое интересное — здесь вы узнаете, как все это применяется в Ozon.
🔹Два месяца онлайн-занятий в удобное вечернее время
🔹Менторство от экспертов и тьюторов
🔹Опыт разработчиков Ozon
🔹Офферы в команду для лучших выпускников
Как попасть на курс?
Оставь заявку на сайте ➡️ 5 февраля пройди отборочный контест ➡️ попади в рейтинг лучших ➡️ развивайся под менторством экспертов Ozon.
Регистрация на курс
Как увеличилась производительность LINQ в .NET 7?
В новой версии .NET улучшилась производительность методов Min, Max, Average и Sum для массивов и списков. Как вы думаете, во сколько раз увеличилась скорость их выполнения? В 2 раза, в 5? Нет, они стали гораздо быстрее. Посмотрим, как этого удалось достичь.
Подробности: https://habr.com/ru/company/pvs-studio/blog/702560/
Что нового в .NET 7.
Вышел .NET 7, а это значит, что можно вдоволь насладиться различными нововведениями и фишками. Расскажем про самые интересные улучшения: C# 11, контейнеры, производительность, GC и прочее.
Подробнее: https://habr.com/ru/company/pvs-studio/blog/699706/
Книга «EF Core в действии» в правильном переводе команды DotNetRu.
EF Core стал почти стандартом при разработке .NET приложений, использующих реляционные базы данных, и большое число разработчиков успешно применяют его в своих проектах. Эта книга представляет собой подробное руководство по работе с этим инструментом и будет интересна как новичкам, так и опытным разработчикам.
Подробности: https://habr.com/ru/company/jugru/blog/691664/
Шпаргалка по питону.
Сегодня делимся страницей со шпаргалкой по Python. Синтаксис, атрибуты, свойства. Все это можно найти по ссылке ниже.
Добавляйте в закладки: https://aka.ms/python_cheet_0318
#python
Стань мастером C#: подборка бесплатных книг.
Сегодня рассказываем о подборке книг по языку C#. Она состоит из 11 изданий и включает в себя как книги для начинающих - Основы компьютерного программирования на C#, так и профессиональную литературу - Обнаружение и извлечение информации.
Подробнее: https://aka.ms/book_csharp_0118
#book #csharp
AI School.
В рамках инициативы Microsoft AI мы запустили школу искусственного интеллекта. В удобном формате там собраны ссылки на учебные материалы по AI: книги, курсы, инструкции. И это далеко не все!
Присоединяйтесь: https://aka.ms/ai_dev
#aic #ai #dev
Динамические методы в .NET.
На сегодняшний день в .NET существует несколько видов кодогенерации: новомодные Source Generators, компилируемые Expression Trees, динамические сборки и динамические методы. Каждый способ имеет свои области применения, плюсы и минусы.
В этой статье автор рассказывает про динамические методы. Как их создавать, как работает стековая машина, некоторые базовые операции Common Intermediate Language: работа с константами, математические и битовые операции, а также работу с аргументами методов и локальными переменными.
Подробности: https://habr.com/ru/articles/730596/
Вакансии для разработчиков C# в Ozon Tech 🔔
📌 Для кого: middle, senior и team lead
📌 Скилы, которые ждем: C# (.NetCore), MSSQL, PostgreSQL, разработка высоконагруженных real-time систем
Решай интересные highload-задачи и применяй лучшие практики, чтобы миллионы пользователей могли совершать сотни тысяч заказов в день и получать их вовремя.
📌 Условия: удаленка, гибрид или офис (Россия, Казахстан) — выбирать только тебе
Подробную информацию о вакансиях, включая задачи и условия, можно найти на сайте по ссылке: https://bit.ly/41iTU11
Современные (инкрементные) Source Generators в .NET.
В процессе написания source generators автор столкнулся с тем, что на большой кодовой базе обычные генераторы работают медленно, существенно влияя на производительность IntelliSense в Visual Studio. Наткнувшись на описание более современного API — incremental generators, автор обрадовался и обновил генераторы. Однако ожидаемого прироста скорости не появлось. В результате поиска ответа на вопрос "почему так и что можно сделать?" и появилась эта статья.
Подробности: https://habr.com/ru/post/721874/
Swagger и полиморфные контракты в .NET 7.
Не так давно состоялся релиз седьмой версии платформы .NET. Он привнёс множество изменений и интересных нововведений, по которым уже успели пробежаться в рамках новостного обзора. В этой статье рассматривается развитие сериализации платформы (System.Text.Json) вместе с возможностями, которые она открывает.
Подробности: https://habr.com/ru/company/ruvds/blog/715000/
Сортировка слиянием — не так просто, как кажется.
В одной компании соискателю на позицию Senior C# developer выдали тестовое задание: отсортировать файл со строками определенного формата.
Требования такие:
- Формат строки: число, точка, пробел, далее любые символы до конца строки.
- Порядок сортировки — сначала сортируем текстовой части строки, потом по числу если текстовые части совпадают.
- Кодировка — UTF-8.
- Размер файла — 100гб - гарантированно больше объема ОП.
- Должно отработать за 1 час на машине проверяющего, вряд ли там будет супер-быстрый SSD и огромное количество оперативной памяти.
Эта задача вызвала бурные обсуждения о способах её решения. Многие программисты, причисляющие себя к рангу senior, предложили использовать базы данных, ибо не барское это дело - вручную писать алгоритмы сортировки. Некоторые даже попытались сделать решение на Apache Spark. Однако никто до конца задачу не решил, ибо мало кому удалось отсортировать в нужном порядке даже 10ГБ файл менее чем за 15 минут без SSD.
Подробности: https://habr.com/ru/post/714524/
Привет, читатель. Продолжаю размышлять над тем, как сделать контент канала интереснее. Решил, что неплохо было бы нам познакомится получше.
Мне интересно, есть ли среди подписчиков разработчики игр и интересна ли вообще эта тема. Мы касаемся этого не так часто, но Unity-разработчики ведь пишут на шарпах свои проекты. Можно было поговорить о работе с игровыми движками. Там полно своих нюансов и подходов. Вдохновил на мысль канал Кот и Код, там как раз есть технические моменты про связку С# и Unity, и в целом про работу игрового программиста. В общем можно было бы немного разбавить, а точнее дополнить текущий MS-контент. Что думаете?
Как всегда, жду от вас реакций. Да 👍 или нет 💩.
Книга «C# 10 и .NET 6. Современная кросс-платформенная разработка».
Шестое издание книги серьезно переработано, добавлены все новые функции, реализованные в версиях C# 10 и .NET 6.
Подробности: https://habr.com/ru/company/piter/blog/714396/
Развертывание ASP.NET Core приложения в Kubernetes.
Данная статья является краткой инструкцией по развертыванию ASP.NET Core приложения в Kubernetes с написанием Dockerfile для формирования образа (Docker image) и минимального манифеста для создания деплоймента и объекта, предоставляющего доступ к нему, – в статье будет использован ingress в исполнении nginx.
Подробнее: https://habr.com/ru/post/709342
Дельта компрессия и квантизация объектов в C#.
Cтатья затрагивает тему сериализации данных, которые передаются по unreliable каналам. В статье вы узнаете, как с помощью дельта компрессии и квантизации можно уменьшить размер объектов и, тем самым, уменьшить размер сериализованных данных. Попутно мы познакомимся с библиотекой для битовой сериализации данных NetCode.
Подробности: https://habr.com/ru/post/709954/
Быстрый консольный ввод на .NET.
Во времена, когда .NET был закрытой технологией только для Windows, за ним и языком C# закрепилась репутация платформы, которая отлично подходит для решения бизнес-задач, но непригодна для соревновательного программирования и написания высокопроизводительного кода.
Часто приходится слышать, что "шарпы медленные", особенно в контексте алгоритмических задач, например с timus.online и codeforces.com. И, увы, не только слышать, но и сталкиваться с реальными проблемами, связанными с особенностями платформы, получая Wrong Answer, Runtime Error, Memory Limit, Time Limit при корректном алгоритме.
Большинство этих проблем кроется в особенностях консольного ввода и вывода. Да и часто куда проще написать cin >> nили sc.nextInt(), чем int.Parse(Console.ReadLine()) или Console.ReadLine().Split().Select(int.Parse).ToArray(), из-за чего выбор падает на другой язык.
Далее подробности о распространённых проблемах с консольным вводом-выводом в .NET, и о том, как сделать ввод быстрым и удобным: https://habr.com/ru/post/705834/
Обзор нововведений в C# 11.
C# 11 выходит уже совсем скоро, так что пора детально изучить новые особенности, которые появятся в языке. И хотя их немного, среди них есть довольно интересные: обобщённая математика, исходные строки, модификатор required, параметры типа в атрибутах и прочее.
Подробности: https://habr.com/ru/company/pvs-studio/blog/694792/
Планируете взяться за .NET MAUI? Будьте готовы к приключениям с NullReferenceException.
.NET Multi-platform App UI – фреймворк, который разрабатывает Microsoft. Тем не менее, код некоторых его функций выглядит так, будто разработчики забыли о последствиях разыменования нулевых ссылок.
Подробности: https://habr.com/ru/company/pvs-studio/blog/691790/
MaartenSikkema/using-dotnet-core-orleans-redux-and-websockets-to-build-a-scalable-realtime-back-end-cd0b65ec6b4d">Масштабируемый реалтайм сервер на .Net Core Orleans, WebSockets и серверном Redux.
После этой статьи есть о чем задуматься. Например, использование Redux на серверной стороне. Идея великолепна. Больше всего мне нравится "time-travel" по стейту. Это незаменимо при отладке проблем бизнес-логики! Вместо многочасового копания логов, можно посмотреть цепочку событий и историю состояний, которые привели к проблеме.
Многие разработчики не слышали о модели акторов. Но в игровой разработке этой модели можно найти много применений.
Больше про преимущества модели в статье на хабре, вот несколько, упомянутых в ней:
- простота разработки. Использование асинхронного обмена сообщениями сильно упрощает жизнь когда приходится иметь дело с concurrent computing;
- масштабирование. Модель Акторов позволяет создавать огромное количество акторов, каждый из которых отвечает за свою частную задачу. Принцип shared nothing и асинхронный обмен сообщениями позволяет строить распределенные приложения, горизонтально масштабируясь по мере надобности;
- отказоустойчивость. Сбой одного актора может отлавливаться другими акторами, которые предпринимают соответствующие действия для восстановления ситуации (например, механизм супервизоров из Erlang-а).
Так где оно может пригодится при разработке игр?
- Акторы — это, по сути, конечный автомат (пример Akka.FSM), что является стандартным паттерном для игр
- Большинство действий в игре связано только с одним игроком, так что сервисы типа авторизации, магазина, инвентаря и т.д. могут быть легко представлены в виде акторов. Плюс ко всему вы получаете realtime систему, т.е. можете отгружать все обновления на клиент. Забудьте про REST API и поллинг
- Модель акторов имеет встроенную систему маршрутизации сообщений, с помощью них легко сделать чать для игры, представляя комнаты и пользователей как отдельных акторов. Броадкастинг из коробки :)
- Релтайм ПвП, в очень грубом сравнении, тоже похоже на чат. Юзеры отсылают свой ввод на сервер, сервер его обрабатывает, а потом броадкастит обновления всем в комнате
Хочу хочу хочу! Где взять?
- Для новичков, проще попробовать Project Orleans от Microsoft (использованный в самой первой статье) с системой виртуальных акторов. Система виртуальных акторов на порядок прощей традиционной. Плюс ко всему это позволяет масштабироваться без головной боли
- Традиционным акторным фреймворком считается Akka, оригинально разработанный на Scala. Официально есть реализации Scala и Java. Но людям, работающим с Unity/C# ближе будет порт Akka.Net.
- Для C++ решения рассмотрены в упомянутой статье с хабры:
+ QP/C++
+ Asynchonous Agents Library от Microsoft
+ C++ Actor Framework
+ SObjectizer
Что нового для мобильных разработчиков в Visual Studio 15.6 Preview.
В январе стала доступна предварительная версия Visual Studio 2017 15.6. В этой статье мы обсудим, что было добавлено в эту версию, включая подготовку среды macOS сборки проектов, развертывание на iOS через Wi-Fi, просмотр интерфейса на базе XAML в эмуляторе Remoted iOS Simulator в реальном времени и многое другое.
Подробнее: https://aka.ms/xam_article_0118_1
#xam #visualstudio #article #gen