🚩 Задача с собеса: пират и сундуки
Представьте, что вы пират и у вас есть 12 закрытых сундуков. Все они полны золотых монет, но один — фейковый: в нём только песок. Золото тяжелее, песок легче. У вас есть большие весы без гирь, и всего три взвешивания, чтобы вычислить пустышку.
Как решить эту задачу:
1.Делим сундуки на группы по 6 штук. Взвешиваем. Берём ту группу, где вес меньше.
2.Снова делим на группы, но теперь по 3. Взвешиваем. Берём ту тройку, где легче.
3. Сравниваем внутри этой тройки два сундука. Лёгкий сундук и будет с песком. Если сундуки одинаковые по весу, но с песком тот, что остался.
Задача решается бинарным поиском .
🐸 Библиотека шарписта
#dotnet_challenge
Представьте, что вы пират и у вас есть 12 закрытых сундуков. Все они полны золотых монет, но один — фейковый: в нём только песок. Золото тяжелее, песок легче. У вас есть большие весы без гирь, и всего три взвешивания, чтобы вычислить пустышку.
Как решить эту задачу:
1.
2.
3.
Задача решается
#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20👏3❤2😁1
Вопросы и задачи на знание языка, баз данных и алгоритмов позади и рекрутер задаёт такой вопрос:
Твиттер или Х?
Как бы вы ответили? К слову, подписывайтесь на наши каналы в обоих соц. сетях. Там мемы и полезные материалы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚5
📀 Record-типы в C#
record в C# — это удобный способ описывать объекты данных без лишнего кода. Они сравниваются по значению, остаются неизменяемыми и отлично подходят для DTO или моделей в DDD.
Если раньше приходилось писать десятки строк с Equals, GetHashCode, ToString и конструкторами, то теперь всё это даёт одна строчка:
Отличие от классов
Class сравнивается по ссылке. Два объекта с одинаковыми данными — разные сущности.
Record сравнивается по значению. Два объекта с одинаковыми полями — эквивалентны.
Дополнительные фишки
Записи неизменяемы, но их удобно клонировать с изменением:
Можно наследовать record-тип:
record — это синтаксический сахар, который сокращает код и делает модели данных чище и понятнее.
🐸 Библиотека шарписта
#il_люминатор
record в C# — это удобный способ описывать объекты данных без лишнего кода. Они сравниваются по значению, остаются неизменяемыми и отлично подходят для DTO или моделей в DDD.
Если раньше приходилось писать десятки строк с Equals, GetHashCode, ToString и конструкторами, то теперь всё это даёт одна строчка:
public record User(string Name, int Age);
Отличие от классов
Class сравнивается по ссылке. Два объекта с одинаковыми данными — разные сущности.
Record сравнивается по значению. Два объекта с одинаковыми полями — эквивалентны.
var u1 = new User("Alice", 25);
var u2 = new User("Alice", 25);
Console.WriteLine(u1 == u2); // true
Дополнительные фишки
Записи неизменяемы, но их удобно клонировать с изменением:
var u1 = new User("Alice", 25);
var u2 = u1 with { Age = 26 };
Console.WriteLine(u2); // User { Name = Alice, Age = 26 }
Можно наследовать record-тип:
public record User(string Name, int Age);
public record Admin(string Name, int Age, string Role) : User(Name, Age);
record — это синтаксический сахар, который сокращает код и делает модели данных чище и понятнее.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤1
🤖 Курс «ИИ-агенты для DS-специалистов»
Последняя возможность в этом году освоить ИИ-агентов — курс стартует уже 3 октября! Первый вебинар пройдёт в день старта, а подробности вебинара можно найти на сайте.
📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой.
🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽.
🔗 Записаться на курс и узнать подробности
Последняя возможность в этом году освоить ИИ-агентов — курс стартует уже 3 октября! Первый вебинар пройдёт в день старта, а подробности вебинара можно найти на сайте.
📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой.
🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽.
🔗 Записаться на курс и узнать подробности
🥱5
работа с null всегда была источником ошибок. Каждый хоть раз ловил NullReferenceException в рантайме.
Есть два подхода: старый — вручную проверять null, и новый — использовать nullable reference types с поддержкой компилятора.
Код с ручной проверкой на null:
public string GetUserName(User? user)
{
if (user == null)
return "Anonymous";
return user.Name;
}
Плюсы:
• просто и понятно
• работает везде
Минусы:
• легко забыть проверить
• ошибки проявятся только в рантайме
С включённой фичей #nullable enable компилятор начинает помогать:
public string GetUserName(User? user)
{
return user?.Name ?? "Anonymous";
}
•
User?
явно говорит: объект может быть null• компилятор подсветит, если забыли проверить
• меньше бойлерплейта, больше читаемости
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤🔥5🥱5❤3
🐘 PostgreSQL 18 — быстрее, умнее, надёжнее
Вышла новая версия PostgreSQL 18. Главное новшество — асинхронный ввод-вывод. Также ускорили апгрейды: теперь статистика оптимизатора сохраняется между версиями, и база работает быстрее сразу после обновления.
Для разработчиков добавили виртуальные вычисляемые колонки, генерацию UUIDv7 для оптимальной индексации и поддержку SSO через OAuth 2.0. В текстовых операциях появился быстрый PG_UNICODE_FAST для Unicode-сравнений и новые возможности для полнотекстового поиска.
➡️ Анонс обновления
🐸 Библиотека шарписта
#async_news
Вышла новая версия PostgreSQL 18. Главное новшество — асинхронный ввод-вывод. Также ускорили апгрейды: теперь статистика оптимизатора сохраняется между версиями, и база работает быстрее сразу после обновления.
Для разработчиков добавили виртуальные вычисляемые колонки, генерацию UUIDv7 для оптимальной индексации и поддержку SSO через OAuth 2.0. В текстовых операциях появился быстрый PG_UNICODE_FAST для Unicode-сравнений и новые возможности для полнотекстового поиска.
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
🤖 Курс «ИИ-агенты для DS-специалистов»
Последняя возможность в этом году освоить ИИ-агентов с Proglib— старт живых вебинаров на курсе уже 3 октября!
Уже 24 студента изучают 5 лонгридов подготовительного модуля, чтобы сформировать базу к старту живых вебинаров с Никитой Зелинским.
📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой.
🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽.
🔗 Записаться на курс и узнать подробности
Последняя возможность в этом году освоить ИИ-агентов с Proglib— старт живых вебинаров на курсе уже 3 октября!
Уже 24 студента изучают 5 лонгридов подготовительного модуля, чтобы сформировать базу к старту живых вебинаров с Никитой Зелинским.
📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой.
🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽.
🔗 Записаться на курс и узнать подробности
1🥱2❤1
🔥 Избавляемся от if-else деревьев
Когда логика программы разрастается, мы часто пишем целые деревья if-else или switch. Но такой код тяжело читать и сопровождать.
Вместо if-ветвей можно использовать паттерн State. Он выносит каждое состояние в отдельный класс. Объект делегирует своё поведение текущему состоянию, а переходы происходят прозрачно.
Код с if'ами:
Код со State:
Теперь добавление нового состояния — просто новый класс, без переписывания всей логики.
🐸 Библиотека шарписта
#sharp_view
Когда логика программы разрастается, мы часто пишем целые деревья if-else или switch. Но такой код тяжело читать и сопровождать.
Вместо if-ветвей можно использовать паттерн State. Он выносит каждое состояние в отдельный класс. Объект делегирует своё поведение текущему состоянию, а переходы происходят прозрачно.
Код с if'ами:
public class Document
{
public string State { get; set; } = "Draft";
public void Publish()
{
if (State == "Draft") State = "Moderation";
else if (State == "Moderation") State = "Published";
else Console.WriteLine("Документ уже опубликован");
}
}
Код со State:
public interface IDocumentState
{
void Publish(Document doc);
}
public class Draft : IDocumentState
{
public void Publish(Document doc) => doc.State = new Moderation();
}
public class Moderation : IDocumentState
{
public void Publish(Document doc) => doc.State = new Published();
}
public class Published : IDocumentState
{
public void Publish(Document doc) => Console.WriteLine("Уже опубликован");
}
public class Document
{
public IDocumentState State { get; set; } = new Draft();
public void Publish() => State.Publish(this);
}
Теперь добавление нового состояния — просто новый класс, без переписывания всей логики.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍14❤5😁3😢3
BitFaster.Caching — это библиотека для in-memory кеша с акцентом на работу в многопоточной среде.
В отличие от стандартного MemoryCache, она предлагает больше контроля над политиками вытеснения и поведением при высокой нагрузке.
Что умеет:
• Потокобезопасные кеши без глобальных блокировок.
• Поддержка LRU и LFU (включая TinyLFU) для выбора стратегии вытеснения.
• Атомарное вычисление значений, чтобы избежать шторма запросов.
• Настраиваемые политики истечения: по времени доступа или записи.
• API-билдер для конфигурации размера и параметров кеша.
Пример:
var cache = CacheBuilder
.NewLru<string, MyObject>()
.WithCapacity(1000)
.ExpireAfterAccess(TimeSpan.FromMinutes(5))
.Build();
var value = cache.GetOrAdd("key", k => new MyObject(k));
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
1🤩5🔥4👍2❤1
ИИ-агенты перестали быть экспериментом и превратились в полноценный инструмент для разработчиков. Они пишут код, проверяют ошибки, помогают с архитектурой и ускоряют рутинные задачи.
К 2025 году сформировался список решений, которые стали самыми востребованными в работе программистов. Одни берут скоростью, другие — точностью, третьи — умением интегрироваться в экосистему команды.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🥱5
Dependency Injection в .NET быстро превращает Program.cs в кашу. В видео показывают, как вынести DI в расширения, структурировать код и упростить регистрацию сервисов с помощью Scrutor.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍9👏2
Microsoft представила Agent Framework — открытый движок для разработки приложений, где разные ИИ-агенты могут общаться, договариваться и работать вместе.
Agent Framework опирается на открытые стандарты. Он поддерживает протоколы вроде MCP и A2A. Для тех, кто работает в экосистеме .NET и C#, это шанс строить надёжные агентные системы, которые можно интегрировать с корпоративными приложениями и сервисами.
Выглядит как попытка закрыть разрыв между локальными экспериментами и продакшеном.
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
👾 AI-агенты — настоящее, о котором все говорят!
Уже 3 октября стартует второй поток нашего нового курса «AI-агенты для DS-специалистов».
Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи.
На обучении вы соберёте полноценные LLM-системы с учётом особенностей доменных областей, получите hands-on навыки RAG, Crew-AI / Autogen / LangGraph и агентов.
🎓 В рамках курса вы научитесь:
1️⃣ адаптировать LLM под разные предметные области и данные
2️⃣ собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
3️⃣ строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой
Научитесь применять похожие подходы в разных доменных областях, получите фундамент для уверенного прохождения NLP system design интервью и перехода на следующий грейд.
🗓️ Завтра первый вебинар, успевайте залететь в ряды ИИ-первопроходцев 👈🏻
Уже 3 октября стартует второй поток нашего нового курса «AI-агенты для DS-специалистов».
Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи.
На обучении вы соберёте полноценные LLM-системы с учётом особенностей доменных областей, получите hands-on навыки RAG, Crew-AI / Autogen / LangGraph и агентов.
🎓 В рамках курса вы научитесь:
1️⃣ адаптировать LLM под разные предметные области и данные
2️⃣ собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
3️⃣ строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой
Научитесь применять похожие подходы в разных доменных областях, получите фундамент для уверенного прохождения NLP system design интервью и перехода на следующий грейд.
🗓️ Завтра первый вебинар, успевайте залететь в ряды ИИ-первопроходцев 👈🏻
🥱2
⚙️ Zero-Allocation LINQ для .NET
LINQ — одна из лучших фич в C#. Она делает код декларативным и читаемым. Но у стандартного System.Linq есть проблема: каждая операция создает кучу объектов и аллокаций
Если у вас миллионы запросов в секунду, эти «маленькие удобства» превращаются в серьёзные проблемы со сборщиком мусора, задержками и падением производительности.
ZLinq — это библиотека, которая реализует все стандартные LINQ-операции (Where, Select, GroupBy, Aggregate, OrderBy и т.д.) без выделения памяти в куче.
Пример:
➡️ GitHub либы
🐸 Библиотека шарписта
#sharp_view
LINQ — одна из лучших фич в C#. Она делает код декларативным и читаемым. Но у стандартного System.Linq есть проблема: каждая операция создает кучу объектов и аллокаций
Если у вас миллионы запросов в секунду, эти «маленькие удобства» превращаются в серьёзные проблемы со сборщиком мусора, задержками и падением производительности.
ZLinq — это библиотека, которая реализует все стандартные LINQ-операции (Where, Select, GroupBy, Aggregate, OrderBy и т.д.) без выделения памяти в куче.
Пример:
// Обычный LINQ
var result = numbers.Where(x => x % 2 == 0).Select(x => x * 2).ToList();
// ZLinq
var result = numbers.AsZEnumerable()
.Where(x => x % 2 == 0)
.Select(x => x * 2)
.ToList();
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔19👍2❤1