Не спешите отвечать, код вполне может содержать намеренные ошибки. На интервью ценят скорость, но лучше ответить без ошибок.
Посмотреть ответ 👉
📍 Навигация: Вакансии • Задачи • Собесы
#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱20🌚1
Наткнулись на статью, которая ставит под сомнение один из главных технологических трендов последних лет — отказ от XML в пользу JSON.
XML был отвергнут не из-за технической неполноценности, а потому что победил JavaScript.
Что мы потеряли, отказавшись от XML:
• Схемы и валидация — XSD позволяет проверять типы и структуру данных на уровне документа, до парсинга. JSON Schema существует, но это сторонняя надстройка, которая так и не стала стандартом.
• Пространства имён — можно комбинировать документы из разных схем без конфликтов. В JSON приходится импровизировать с префиксами.
• Комментарии — в XML они есть изначально. JSON их запрещает, потому что они усложняют парсинг.
• Самодокументирование — XML-документ содержит или явно ссылается на свою схему. В JSON приходится гадать, что значит
"status": 1.Вместо того чтобы использовать XML, мы потратили миллиарды на создание библиотек валидации, TypeScript, генераторов API-клиентов — по сути, воссоздавая то, что уже было в XML.
Microsoft, несмотря на все критику, продолжали использовать XML для MSBuild, WPF, и системы конфигурации .NET Framework. Переход на JSON в .NET Core случился не потому что XML был плох, а под давлением модных трендов.
📍 Навигация: Вакансии • Задачи • Собесы
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🤔6
Рынок IT вакансий в 2026 году переполнен кандидатами с похожими PDF резюме. Рекрутеры тратят на просмотр отклика секунды, и стандартный формат часто теряется в потоке.
Новые форматы самопрезентации помогают выделиться и сразу показать навыки разработчика. Например, резюме в виде changelog'а.
Если стандартное резюме не приносит откликов, имеет смысл попробовать хотя бы один из нестандартных форматов и добавить его к привычному PDF.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Задачи копятся, а ты всё ещё вручную «жаришь» контроллеры под каждый промпт?
Это работа в забегаловке. Настоящий Шеф не пишет услуги вечно — он проектирует Систему. 💠
В понедельник, 26 января, стартует интенсив по разработке ИИ-агентов. Мы научим создавать автономные решения в экосистеме .NET, которые закроют рутину, пока ты занимаешься архитектурой.
В программе:
— мультиагентные системы в
— сложная логика в
—
Записаться на курс
Это работа в забегаловке. Настоящий Шеф не пишет услуги вечно — он проектирует Систему. 💠
В понедельник, 26 января, стартует интенсив по разработке ИИ-агентов. Мы научим создавать автономные решения в экосистеме .NET, которые закроют рутину, пока ты занимаешься архитектурой.
В программе:
— мультиагентные системы в
CrewAI: делегирование рутины и контроль логики;— сложная логика в
LangGraph: стейт-менеджмент и работа с графами;—
tool use интеграция: связь агентов с вашим API, БД и облаком. ⚡️Записаться на курс
🥱5❤1
Выходные выходными, но новости должны быть по расписанию.
— Быстрая загрузка Windows 95
— NBomber 6.2.0
— Ghostty почти запретил ИИ-генерированный код
Разработчик терминала Ghostty Митчелл Хашимото ужесточил правила: теперь любой PR с кодом от ИИ вроде Claude или Cursor требует раскрытия использования модели, полного тестирования человеком и предварительного одобрения issues, а нарушителей грозит бан и публичное осмеивание.
— Microsoft выпустили WinApp
Новый открытый инструмент WinApp CLI упрощает жизнь разработчикам на кросс-платформенных фреймворках вроде Electron, Rust или Dart, избавляя от ручной настройки SDK, манифестов, сертификатов и упаковки в MSIX.
— Chrome в Windows 11 скоро позволит перетаскивать несколько файлов из веб-приложений в Проводник
📍 Навигация: Вакансии • Задачи • Собесы
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Завтра стартуем: курс по разработке ИИ-агентов в .NET 💠
Хватит писать бойлерплейт — переходите к архитектуре автономных систем. Мы научим проектировать мультиагентные связки на
👉 Успейте занять место до начала занятий
Хватит писать бойлерплейт — переходите к архитектуре автономных систем. Мы научим проектировать мультиагентные связки на
CrewAI, управлять стейтом в LangGraph и подключать нейросети к вашим API и облаку.👉 Успейте занять место до начала занятий
🌚7👾2
Разбираем типичную ошибку, которая встречается даже в коде крупных проектов.
Код с подвохом:
struct StackValue
{
public override bool Equals(object obj)
{
if (Object.ReferenceEquals(this, obj))
return true;
if (!(obj is StackValue))
return false;
var value = (StackValue)obj;
return this.Kind == value.Kind
&& this.Flags == value.Flags
&& this.Type == value.Type;
}
}
На первый взгляд всё логично: сначала быстрая проверка через ReferenceEquals, если не сработала — сравниваем по полям.
В чём подвох
ReferenceEquals принимает параметры типа object. Когда вы передаёте структуру, происходит боксинг: значение копируется в хип и оборачивается объектом.Что происходит при вызове
Equals:• this упаковывается в новый объект
• Создаётся уникальная ссылка в heap
• Сравниваются две разные ссылки
• Результат всегда false
В современных версиях .NET есть правило CA2013, которое отлавливает подобные случаи.
📍 Навигация: Вакансии • Задачи • Собесы
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🥱3❤1
Классические design patterns из Банды четырёх часто вредят cloud-native приложениям.
Большинство классических паттернов проектирования создавались для in-process объектно-ориентированных систем — а не для распределённых, подверженных сбоям облачных окружений.
Но в 2026 году всё ещё встречаются облачные системы, построенные на репозиториях повсюду, синглтонах как кеше и фасаде, оборачивающем HTTP-вызовы.
Классические паттерны из книги Банды Четырёх предполагают общую память, быстрые вызовы методов, стабильные процессы, редкие сбои и единый блок развёртывания. Облачные системы предполагают противоположное: распределённую память, сетевые вызовы с задержками, временные процессы, постоянные частичные сбои и множество независимых сервисов.
Синглтон: самый опасный паттерн
Синглтон кажется удобным для глобального состояния в одном процессе. В облаке каждый под имеет свой экземпляр, и состояние рассинхронизируется при масштабировании. Холодные старты сбрасывают данные, а поды работают с разными версиями.
Репозиторий тормозит запросы
Репозиторий абстрагирует данные, чтобы домен оставался чистым. В распределённых системах это плодит лишние вызовы через сеть, N+1 проблемы и перерасход ресурсов БД. Каждый запрос добавляет задержку и траты.
Лучше ориентироваться на запросы: оптимизировать чтение, использовать CQRS для доминирующего чтения и принимать форму данных как часть дизайна. Доступ к БД становится ключевой частью архитектуры, а не скрытой деталью.
Фабрика усложняет жизнь
Фабрики прячут создание объектов и типы. В облаке они дублируют DI-контейнеры, маскируют жизненный цикл и ломают трассировку. Если код полон фабрик, локаторов и инъекций, ясность теряется.
Платформы вроде Kubernetes берут управление lifecycle на себя. Делайте ресурсы явными, отдавайте композицию контейнерам и избегайте лишних прослоек.
Обдумывайте контекст перед копипастой паттернов. Это спасёт от боли при росте нагрузки.
💬 Был у вас шаблон, который подставил вас в облаке?
📍 Навигация: Вакансии • Задачи • Собесы
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8❤4👍2🥱1
C#-разработчик? Пора осваивать AI-агентов
Экосистема
Начинаем сегодня в 19:00 МСК.
Основные темы:
— путь от базовых промптов до мультиагентных систем;
— использование инструментов и планирование задач;
— деплой и масштабирование своих ИИ-решений;
— работа с векторными хранилищами данных.
Занять место
Экосистема
.NET активно интегрирует ИИ (например, через Semantic Kernel). Наш курс поможет вам понять фундаментальные принципы построения автономных систем.Начинаем сегодня в 19:00 МСК.
Основные темы:
— путь от базовых промптов до мультиагентных систем;
— использование инструментов и планирование задач;
— деплой и масштабирование своих ИИ-решений;
— работа с векторными хранилищами данных.
Занять место
😁7
🛠 PostgreSQL как Dead Letter Queue
История о том, как в Wayfair отказались от Kafka DLQ в пользу PostgreSQL и получили более управляемую систему обработки сбоев.
Проблема: события падают, а видимости нет
Сбои встречались везде: API для обогащения данных падали или тормозили, консьюмеры крашились посреди обработки, события приходили с битыми или отсутствующими полями. Всё это находилось вне прямого контроля команды, но требовало изящной обработки.
Первая попытка: Kafka как DLQ
Логичным решением было использовать сам Kafka в качестве Dead Letter Queue. Общий паттерн: если событие не обработалось, отправляем его в отдельный топик DLQ.
Но быстро стало ясно, что это не лучший вариант. Kafka отлично двигает данные, но когда сообщения попадают в DLQ-топик, с ними сложно работать:
• Нельзя просто взять и выполнить запрос «покажи всё, что упало вчера»
• Нет нормальной фильтрации по причине сбоя
• Чтобы повторить обработку конкретного набора событий, нужны кастомные консьюмеры
• Для любого анализа требуется дополнительный инструментарий
Для системы, генерирующей критичные бизнес-отчёты, такое отсутствие видимости стало серьёзной проблемой.
Решение: PostgreSQL как первоклассный DLQ
Вместо публикации сбойных событий в топик Kafka, начали сохранять их прямо в таблицу DLQ в PostgreSQL. CloudSQL уже использовался как основное хранилище, так что операционно это почти ничего не добавило. Концептуально же сбои стали первоклассными гражданами системы, а не непрозрачными сообщениями, потерянными в потоке.
Дизайн-решения
• payload как JSONB — сохраняет сырое событие без жёсткой схемы. Можно хранить любую структуру и при этом эффективно запрашивать.
• Простая модель состояний — только PENDING и SUCCEEDED. Минимализм делает жизненный цикл события понятным.
• retry_after — предотвращает агрессивные повторы, когда зависимые системы нестабильны.
• retry_count — позволяет ограничивать количество попыток без внешнего состояния. Если событие не обработалось за 240 попыток — возможно, с ним что-то фундаментально не так.
• Временные метки — делают аудит и операционный анализ простым делом.
Целью не было заменить Kafka на PostgreSQL. Kafka остался основой для высокопроизводительного приёма событий, а PostgreSQL взял на себя то, что умеет лучше всего — долговременность, запросы и наблюдаемость вокруг сбоев.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#il_люминатор
История о том, как в Wayfair отказались от Kafka DLQ в пользу PostgreSQL и получили более управляемую систему обработки сбоев.
Проблема: события падают, а видимости нет
Сбои встречались везде: API для обогащения данных падали или тормозили, консьюмеры крашились посреди обработки, события приходили с битыми или отсутствующими полями. Всё это находилось вне прямого контроля команды, но требовало изящной обработки.
Первая попытка: Kafka как DLQ
Логичным решением было использовать сам Kafka в качестве Dead Letter Queue. Общий паттерн: если событие не обработалось, отправляем его в отдельный топик DLQ.
Но быстро стало ясно, что это не лучший вариант. Kafka отлично двигает данные, но когда сообщения попадают в DLQ-топик, с ними сложно работать:
• Нельзя просто взять и выполнить запрос «покажи всё, что упало вчера»
• Нет нормальной фильтрации по причине сбоя
• Чтобы повторить обработку конкретного набора событий, нужны кастомные консьюмеры
• Для любого анализа требуется дополнительный инструментарий
Для системы, генерирующей критичные бизнес-отчёты, такое отсутствие видимости стало серьёзной проблемой.
Решение: PostgreSQL как первоклассный DLQ
Вместо публикации сбойных событий в топик Kafka, начали сохранять их прямо в таблицу DLQ в PostgreSQL. CloudSQL уже использовался как основное хранилище, так что операционно это почти ничего не добавило. Концептуально же сбои стали первоклассными гражданами системы, а не непрозрачными сообщениями, потерянными в потоке.
Дизайн-решения
• payload как JSONB — сохраняет сырое событие без жёсткой схемы. Можно хранить любую структуру и при этом эффективно запрашивать.
• Простая модель состояний — только PENDING и SUCCEEDED. Минимализм делает жизненный цикл события понятным.
• retry_after — предотвращает агрессивные повторы, когда зависимые системы нестабильны.
• retry_count — позволяет ограничивать количество попыток без внешнего состояния. Если событие не обработалось за 240 попыток — возможно, с ним что-то фундаментально не так.
• Временные метки — делают аудит и операционный анализ простым делом.
Целью не было заменить Kafka на PostgreSQL. Kafka остался основой для высокопроизводительного приёма событий, а PostgreSQL взял на себя то, что умеет лучше всего — долговременность, запросы и наблюдаемость вокруг сбоев.
📍 Навигация: Вакансии • Задачи • Собесы
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🤔3
Работа с железом через .NET — это не просто про серверы и веб-приложения. С библиотекой Gpio вы можете управлять физическими устройствами напрямую с Raspberry Pi или других одноплатников.
Рассмотрим базовый пример: как заставить мигать светодиод.
Что понадобится
Минимальный набор компонентов: Raspberry Pi (или аналог с поддержкой .NET), светодиод на 5 мм, резистор 330 Ом, макетная плата и провода.
Как это работает
Схема собирается просто: плата подключается к аноду светодиода (длинная ножка), катод идёт через резистор на землю. Резистор ограничивает ток и защищает светодиод от выгорания.
В коде всего несколько строк:
using var controller = new GpioController();
controller.OpenPin(18, PinMode.Output);
bool ledOn = true;
while (true)
{
controller.Write(18, ledOn ? PinValue.High : PinValue.Low);
Thread.Sleep(1000);
ledOn = !ledOn;
}
В цикле мы записываем значение «включено» или «выключено», меняем состояние каждую секунду.
Приложение компилируется как self-contained и разворачивается на устройстве. После назначения прав на выполнение (
chmod +x) запускаете исполняемый файл — и светодиод начинает мигать с интервалом в секунду.📍 Навигация: Вакансии • Задачи • Собесы
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤🔥4🤔4❤1😁1
🐳 Docker для быстрого запуска сервисов локально
Docker это платформа для запуска приложений в контейнерах. Контейнер получает собственные зависимости, сетевую конфигурацию и порты и при этом не вмешивается в окружение хоста.
Предположим, вам нужно быстро поднять MongoDB локально, не устанавливая ее системным пакетом.
Достаточно выполнить:
Эта команда скачает официальный образ mongo с Docker Hub и запустит контейнер. Флаг
Так вы получаете рабочую MongoDB без отдельной установки сервера, настройки сервисов и борьбы с конфликтами версий.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view
Docker это платформа для запуска приложений в контейнерах. Контейнер получает собственные зависимости, сетевую конфигурацию и порты и при этом не вмешивается в окружение хоста.
Предположим, вам нужно быстро поднять MongoDB локально, не устанавливая ее системным пакетом.
Достаточно выполнить:
docker run -p 27017:27017 mongo
Эта команда скачает официальный образ mongo с Docker Hub и запустит контейнер. Флаг
-p 27017:27017 пробрасывает порт на хост, то есть вы обращаетесь к базе на localhost:27017.Так вы получаете рабочую MongoDB без отдельной установки сервера, настройки сервисов и борьбы с конфликтами версий.
📍 Навигация: Вакансии • Задачи • Собесы
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
💯15🥱3👍1👏1
🛋 Работа в кайф
Продуктивность — это не про силу воли и мотивацию. Это про то, как вы обустроили своё рабочее место. Синий свет экрана, температура в комнате, даже то, сколько воды вы выпили за день — всё это напрямую влияет на работу вашего мозга.
➡️ В статье 10 базовых советов по обустройству вашего рабочего места
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
Продуктивность — это не про силу воли и мотивацию. Это про то, как вы обустроили своё рабочее место. Синий свет экрана, температура в комнате, даже то, сколько воды вы выпили за день — всё это напрямую влияет на работу вашего мозга.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
💯7
C#/.NET-разработчик — до 300 000 ₽ и удалёнка.
С# разработчик — от 200 000 ₽ и снова удалёнка.
.NET Developer — внезапный офис в Новосибирске.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤2
AI-агенты в экосистеме .NET: расширяем границы возможного
Интеграция ИИ в энтерпрайз-продукты требует понимания того, как работают автономные системы. Изучите общие принципы построения агентских систем, чтобы внедрять их в свои проекты.
Курс «Углубленные AI-агенты» даст вам глубокую экспертизу в актуальном стеке.
На обучении вас ждёт:
— проектирование автономных агентских систем;
— освоение
— интеграция RAG и инструментов планирования;
— 13 живых вебинаров и поддержка менторов.
Поток уже стартовал, присоединяйтесь сейчас.
🚀 Записаться на основной курс
Если сомневаетесь — просто посмотрите вводное занятие.
Интеграция ИИ в энтерпрайз-продукты требует понимания того, как работают автономные системы. Изучите общие принципы построения агентских систем, чтобы внедрять их в свои проекты.
Курс «Углубленные AI-агенты» даст вам глубокую экспертизу в актуальном стеке.
На обучении вас ждёт:
— проектирование автономных агентских систем;
— освоение
LangGraph, CrewAI и AutoGen;— интеграция RAG и инструментов планирования;
— 13 живых вебинаров и поддержка менторов.
Поток уже стартовал, присоединяйтесь сейчас.
🚀 Записаться на основной курс
Если сомневаетесь — просто посмотрите вводное занятие.
❤🔥2❤1😁1
ExecuteUpdate и ExecuteDelete появились для случаев, когда вам не нужны сущности и сложные хуки.
Это способ выполнять быстрые массовые операции, говоря с базой на языке SQL через LINQ.
Простой пример с заказами, которые нужно отметить как просроченные:
public async Task<IActionResult> ExpireOldOrders()
{
var cutoff = DateTime.UtcNow.AddDays(-30);
var affectedRows = await _db.Orders
.Where(o => o.Status == OrderStatus.Pending
&& o.CreatedAt < cutoff)
.ExecuteUpdateAsync(setters =>
setters.SetProperty(
o => o.Status,
OrderStatus.Expired));
return Ok(new { affectedRows });
}
EF Core сгенерирует один SQL примерно такого вида:
UPDATE Orders
SET Status = 2
WHERE Status = 0
AND CreatedAt < @cutoff
Приложение отправляет в базу одну команду, а не тысячи мелких запросов. С точки зрения БД — это максимально естественный сценарий: нагрузка на сеть и блокировки минимальны.
ExecuteDelete решает такую же задачу для удаления:
public async Task<int> CleanOldLogsAsync(DateTime cutoff)
{
var affected = await _db.Logs
.Where(l => l.CreatedAt < cutoff)
.ExecuteDeleteAsync();
return affected;
}
EF Core не загружает логи в память — удаление происходит одним SQL-запросом.
Важно: эти методы обходят change tracking и не вызывают события SaveChanges.
Используйте их, когда производительность важнее бизнес-логики в коде.
📍 Навигация: Вакансии • Задачи • Собесы
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤1
Feature Flags — это условные переключатели, которые позволяют включать/выключать фичи на лету, без передеплоя приложения.
Зачем они нужны
• Безопасный rollout — можно включить фичу для 10% пользователей, проверить метрики, затем раскатывать дальше.
• A/B тестирование — запуск двух версий фичи и выбор лучшей на основе данных.
• Eсли что-то пошло не так, флаг выключается за секунду вместо отката всего деплоя.
• Возможность коммитить незавершённый код без риска для продакшна
Подготовка:
// Добавим NuGet пакет
dotnet add package Microsoft.FeatureManagement
// В appsettings.json
"FeatureManagement": {
"NewDashboard": false
}
В коде:
if (await featureManager.IsEnabledAsync("NewDashboard"))
{
RenderNewDashboard();
}
else
{
RenderOldDashboard();
}
📍 Навигация: Вакансии • Задачи • Собесы
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4
ValueTask часто хвалят за экономию памяти. Но если использовать его в публичном API, потребители могут не оценить такой шаг.
Вопрос: чем так плох ValueTask в публичном API? Он же снизит аллокации
Ответ:
📍 Навигация: Вакансии • Задачи • Собесы
#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😢1