Библиотека собеса по C# | вопросы с собеседований
5.44K subscribers
262 photos
6 videos
1 file
472 links
Вопросы с собеседований по C# и ответы на них.

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

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

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

Наши каналы: https://t.iss.one/proglibrary/9197
Download Telegram
Как запускать периодические задачи без дрейфа и гонок?

Используйте PeriodicTimer (.NET 6+) или цикл с Stopwatch и компенсацией дрейфа; исключайте реэнтрантность через SemaphoreSlim (single-flight); прокидывайте CancellationToken, пропускайте тик, если прошлый ещё идёт, и логируйте задержки.

Библиотека собеса по С#
Halloween Special — последний день магии! 👻

Успевай сегодня купить курсы со скидкой 40%!

А также участвуй в розыгрыше MacBook Pro 14 💻

После полуночи останется только тыква 🎃

🔮 Открой портал и выбери курс
1
Как запускать периодические задачи без дрейфа и гонок?

Используйте PeriodicTimer (.NET 6+) или цикл с Stopwatch и компенсацией дрейфа; исключайте реэнтрантность через SemaphoreSlim (single-flight); прокидывайте CancellationToken, пропускайте тик, если прошлый ещё идёт, и логируйте задержки.

Библиотека собеса по С#
Как правильно задавать таймауты и отмену в async-цепочке без конфликтов?

Держите один источник истины для отмены: передавайте общий CancellationToken вниз по стеку, избегайте вложенных таймаутов. Для HTTP вместо HttpClient.Timeout используйте Polly Timeout или CancellationTokenSource.CancelAfter, везде прокидывайте токен и корректно обрабатывайте OperationCanceledException.

Библиотека собеса по С#
👍2
Что такое enum и когда его следует использовать?

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

Библиотека собеса по С#
👍1
Какова разница между IEnumerable и IQueryable при работе с удаленной базой данных?

IEnumerable представляет собой коллекцию данных, находящуюся в памяти, и позволяет перемещаться по этим данным только в одном направлении — вперед. В отличие от него, IQueryable находится в пространстве имен System.Linq и предоставляет возможность удаленного доступа к базе данных. Он позволяет перемещаться по данным как в прямом, так и в обратном порядке. При выполнении запроса происходит его оптимизация, что делает работу с данными более эффективной.

IEnumerable phoneIEnum = db.Phones;
var phones1 = phoneIEnum.Where(p => p.Id > id).ToList(); //SELECT * FROM PHONES, фильтрация на стороне клиента
IQueryable phoneIQuer = db.Phones;
int id = 3;
var phones2 = phoneIQuer.Where(p => p.Id > id).ToList(); //SELECT * FROM PHONES WHERE ID > 3

Библиотека собеса по С#
Можете ли вы определить разницу между перегрузкой и переопределением?

Перегрузка — когда у вас есть два или более методов в одной области действия с одинаковым именем, но разными параметрами.

Переопределение — позволяет вам изменить поведение метода в подклассе или дочернем классе.


Библиотека собеса по С#
👍1
Как писать код, устойчивый к триммингу и AOT (NativeAOT/Blazor WASM)?

Избегайте неявной рефлексии/динамики; для JSON используйте source-generators (JsonSerializerContext), для DI — compile-time контейнеры или дескрипторы без сканирования. Помечайте необходимые члены DynamicallyAccessedMembers/DynamicDependency, держите TrimmerRootDescriptor/link.xml минимальным. Не делайте Assembly.GetTypes() без фильтров; проверяйте PublishTrimmed сборками и тестами.

Библиотека собеса по С#
Как защитить внешний API от перегрузки в .NET 7+ с предсказуемым throttling?

Используйте System.Threading.RateLimiting (Token/Fixed/Sliding/ConcurrencyLimiter) и middleware UseRateLimiter. Для per-user/per-key — политику с partitioner; задайте QueueProcessingOrder и длину очереди, чтобы получить backpressure или немедленные отказы. Оборачивайте вызовы Polly-политиками (timeouts/ретраи с джиттером).

Библиотека собеса по С#
3
Как работать со временем и часовыми поясами без багов?

Храните время в UTC, наружу отдавайте DateTimeOffset. Избегайте DateTime.Now и Kind=Unspecified; для интервалов применяйте Stopwatch. Конвертацию делайте через TimeZoneInfo (с правилами DST), зависимости от времени инъецируйте через абстракцию часов (ISystemClock), время парсите/форматируйте в ISO-8601. Тестируйте переходы часовых поясов и «дырки» DST.

Библиотека собеса по С#
👍41
Когда выбирать System.IO.Pipelines вместо Stream, и что важно для корректного парсинга?

Для высокопроизводительных протоколов/сокетов: PipeReader выдаёт ReadOnlySequence<byte> без копий, парсите инкрементально, учитывайте частичные сообщения, управляйте backpressure через AdvanceTo(consumed, examined), не требуйте непрерывной памяти, корректно завершайте Complete() и прокидывайте CancellationToken.

Библиотека собеса по С#
Как диагностировать в проде thread pool starvation и «sync-over-async» без перезапуска?

Снимайте EventPipe-метрики (dotnet-counters): ThreadPool Queue Length/Completed/Active, aspnetcore-критерии; берите короткий dotnet-trace CPU-сэмплинг, при необходимости дамп. Признаки — длинная очередь, мало воркеров, блокирующие стеки. Лечение: end-to-end async, убрать .Result/.Wait(), вынести долгие блокировки, при пиках поднять MinThread, но не маскировать корень.

Библиотека собеса по С#
🖤 ЧЕРНАЯ ПЯТНИЦА: СКИДКА 40%

Что общего между Black Friday и подготовкой к собесам? Оба случаются раз в год, и оба нельзя пропустить! 😎

🔥 Курсы со скидкой 40% до конца ноября:

🐍 Python
📐 Математика
🤖 AI
🔢 Алгоритмы и структуры

Пока другие покупают кофемашины и телевизоры, инвестируй в себя📈
Как проектировать высокопроизводительные API без копий с Span<T>/ReadOnlySpan<T>?

Принимайте вход как ReadOnlySpan<T>/Span<T>, возвращайте данные через ReadOnlyMemory<T>/Memory<T> для async-границ, избегайте удержания Span вне стека, используйте ref readonly/scoped где уместно, не создавать лишних строк/массивов, использовать пулы буферов и инкрементальный парсинг/запись.


Библиотека собеса по С#
Как ускорить EF Core под высокую нагрузку без лишних аллокаций и N+1?

Для чтения — AsNoTracking и проекции Select на DTO, избегайте широких Include; используйте compiled queries и параметризацию, дробите кардинальность AsSplitQuery, для массовых правок — ExecuteUpdate/Delete или bulk-библиотеки; объединяйте SaveChanges, держите DbContext краткоживущим (скоуп) и следите за N+1 через логирование.

Библиотека собеса по С#
📊 Задача с собеседования

Имеются данные о продажах за последние 12 месяцев. Требуется оценить наличие линейной зависимости между количеством заключённых сделок и объёмом выручки, а также построить прогноз выручки при достижении 150 сделок.


Если не понимаете с какой стороны подступиться к задаче, то пора подтянуть математику.

🎓 Именно этому посвящен курс экспресс-курс «Математика для Data Science» от Proglib Academy:

— работа с векторами и матрицами;
— линейная регрессия и метод наименьших квадратов;
— вероятности, распределения, статистика;
— и многое другое.

Старт: 4 декабря
🔥 Скидка: 40% до конца ноября

👉 Подключиться к курсу
Как реализовать оптимистическую конкуренцию в EF Core, чтобы избежать потерь обновлений?

Добавьте конкурентный токен (rowversion/[Timestamp]), включите отслеживание и ловите DbUpdateConcurrencyException. При конфликте — стратегию «клиент/сервер побеждает» или мердж полей, затем повтор. Для массовых апдейтов используйте ExecuteUpdate с токеном в WHERE.

Библиотека собеса по С#
1
Как корректно освобождать ресурсы в DI, если требуется асинхронный dispose?

Используйте IAsyncDisposable и асинхронные скоупы (await using var scope = provider.CreateAsyncScope()), не блокируйте DisposeAsync() синхронно. Порядок освобождения — обратный порядку регистрации; следите, чтобы зависимые сервисы не переживали свои провайдеры, и не смешивайте Dispose/DisposeAsync без нужды.

Библиотека собеса по С#
Как тестировать код, зависящий от времени/таймеров, без Thread.Sleep и флаки?

Абстрагируйте время через .NET 8 TimeProvider/ITimeProvider и инжектируйте FakeTimeProvider в тестах; используйте PeriodicTimer/Delay от провайдера, продвигая виртуальное время (Advance). Так вы детерминируете ожидания, убираете реальное ожидание и проверяете граничные случаи (таймауты, ретраи, дедлайны) без гонок.

Библиотека собеса по С#
🔥1
Как задавать отмену и таймауты в async-цепочке без ловушек?

Прокидывайте один CancellationToken вниз по стеку; таймауты — через CancellationTokenSource.CancelAfter или Polly Timeout (без вложенных таймаутов); везде передавайте токен в I/O, ловите OperationCanceledException и завершайте работу идемпотентно.

Библиотека собеса по С#