C# / .NET задачи и вопросы
1.56K subscribers
358 photos
3 files
247 links
🎲 Задачи и вопросы с собеседований по .Net/C# разного уровня сложности.

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
Обсуждаем тут: @netquizcom
Download Telegram
Что верно про BackgroundService в .NET?

👾 — Это таймер, который сам перезапускает приложение при сбое
👍 — Базовый класс для IHostedService: реализуете долгоживущую работу в ExecuteAsync(CancellationToken), отмена через stoppingToken
🥰 — Запускается только по расписанию Cron
⚡️ — Обязателен в ASP.NET Core для всех контроллеров

Библиотека задач по C#
👍4
Что вызовет await using у типа, реализующего и IDisposable, и IAsyncDisposable?

👾 — Сначала Dispose(), затем DisposeAsync()
👍 — Только DisposeAsync()
🥰 — Только Dispose()
⚡️ — Зависит от JIT, случайный выбор

Библиотека задач по C#
Что делает await Task.Yield()?

👾 — Переносит работу на отдельный поток пула
👍 — Отдаёт управление планировщику и асинхронно продолжит после yield (в текущем контексте, если он есть); не offload’ит работу
🥰 — Усыпляет поток на один квант
⚡️ — Гарантирует переключение на UI-поток

Библиотека задач по C#
👍1
Что означает ref readonly возврат из метода?

👾 — Можно присвоить новое значение через эту ссылку
👍 — Это ссылка только для чтения на исходные данные; запись запрещена, нельзя возвращать ссылку на временный
🥰 — Это обычная копия значения на стеке
⚡️ — Разрешено только для struct

Библиотека задач по C#
В .NET вы видите, что приложение часто вызывает сборку мусора, из-за чего падает производительность. Какой из подходов наиболее правильный для снижения давления на GC?

👾 — Хранить все объекты в глобальных переменных, чтобы их не собирал GC
👍 — Использовать пулы объектов (ArrayPool, ObjectPool) и Span, чтобы сократить количество аллокаций
🥰 — Вручную вызывать GC.Collect() после каждой тяжёлой операции
⚡️ — Перейти на dynamic для универсальности и уменьшения числа классов

Библиотека задач по C#
В .NET приложении необходимо обрабатывать миллионы строк текста с минимальными расходами памяти и максимальной скоростью. Какой подход будет наиболее правильным?

👾 — Использовать string конкатенацию (+) в цикле
👍 — Применить StringBuilder для конкатенации строк
🥰 — Сохранять строки в List и объединять их через string.Join
⚡️ — Использовать Span или Memory для работы с подстроками без создания новых объектов

Библиотека задач по C#
Можно ли запретить наследование от своего собственного класса?

Для того, чтобы запретить наследоваться от класса необходимо объявить его с модификатором sealed.
Является ли C# типобезопасным языком программирования?

👾 — Да
⚡️ — Нет

Библиотека задач по C#
🎉3
Что выведет код?

👾 — Wed
👍 — 3
🥰 — 2
⚡️ — 4

Библиотека задач по C#
👍5
В .NET приложении необходимо обрабатывать миллионы строк текста с минимальными расходами памяти и максимальной скоростью. Какой подход будет наиболее правильным?

👾 — Использовать string конкатенацию (+) в цикле
👍 — Применить StringBuilder для конкатенации строк
🥰 — Сохранять строки в List и объединять их через string.Join
⚡️ — Использовать Span или Memory для работы с подстроками без создания новых объектов

Библиотека задач по C#
👍3
У вас есть сервис на .NET, обрабатывающий большое количество параллельных запросов к базе данных. При нагрузочном тестировании вы замечаете, что количество потоков резко растёт, а производительность падает. Какой подход будет наиболее правильным для оптимизации?

👾 — Использовать Task.Run вокруг всех вызовов к базе, чтобы явно распараллелить операции
👍 — Применить асинхронный доступ к базе данных (async/await) с использованием I/O-bound операций
🥰 — Увеличить ThreadPool.SetMinThreads, чтобы обрабатывать больше потоков одновременно
⚡️ — Переписать сервис на синхронный код, чтобы избежать overhead от async/await

Библиотека задач по C#
👍1
В .NET у вас есть метод, который вызывается в высоконагруженном сервисе миллионы раз в секунду. В профилировании видно, что он активно генерирует мусор, перегружая GC. Какой из подходов будет наиболее правильным для оптимизации?

👾 — Переписать метод на небезопасный код (unsafe) и работать напрямую с указателями
👍 — Использовать Span и пулы объектов (ArrayPool, ObjectPool) для снижения количества аллокаций
🥰 — Увеличить размер heap в настройках CLR, чтобы GC срабатывал реже
⚡️ — Запустить несколько экземпляров метода параллельно, чтобы распределить нагрузку на разные потоки

Библиотека задач по C#
👍1
В высоконагруженном .NET сервисе вы часто работаете со строками: конкатенация, парсинг, подстроки. Профилирование показывает большое количество аллокаций и нагрузку на GC. Какой подход будет наиболее правильным для оптимизации?

👾 — Использовать обычный оператор + для конкатенации строк — компилятор сам оптимизирует
👍 — Применить StringBuilder для конкатенации и Span/Memory для работы с подстроками без копирования
🥰 — Перейти на dynamic, чтобы уменьшить количество перегрузок
⚡️ — Вызывать GC.Collect() вручную после больших операций со строками

Библиотека задач по C#
В Unity у вас есть сцена с сотнями одинаковых объектов (снаряды, враги и т.п.), и при частом их создании и уничтожении начинаются фризы из-за нагрузки на GC. Какой подход будет наиболее правильным?

👾 — Использовать Instantiate и Destroy как обычно, так как Unity оптимизирует это под капотом
👍 — Включить IL2CPP, чтобы сборщик мусора работал быстрее
🥰 — Реализовать Object Pooling (пул объектов) и переиспользовать экземпляры вместо постоянного создания/удаления
⚡️ — Уменьшить количество объектов на сцене, убрав часть из них вручную

Библиотека задач по C#
Объясните концепцию Raycasting в Unity и ее применения.

Raycasting предполагает проецирование линии (луча) из точки в определенном направлении для обнаружения столкновений с объектами на игровой сцене. Общие приложения включают в себя следующее:

⚡️ Механика стрельбы;
⚡️Проверка прямой видимости;
⚡️Взаимодействие объектов;
⚡️Обнаружение поверхностей для движения персонажа.

Библиотека задач по C#
Какой будет вывод следующего кода C# с использованием делегатов?

👾 — Hello, Delegates!
👍 — ShowMessage
🥰 — Error
⚡️ — Ничего из вышеперечисленного

Библиотека задач по C#
🎉1
Почему приватный виртуальный метод нельзя переопределить в C#?

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

Библиотека задач по C#
Какие из перечисленных протоколов определены средой выполнения .NET?

👾 — HTTP
👍 — HTTPS
🥰 — File
⚡️ — Все вышеперечисленное

🐸Библиотека задач по C#
Что такое IoC-контейнеры?

👾 — управляет зависимостями в приложении, автоматически создавая и внедряя объекты.
👍 — инвертирует управление созданием объектов, снижая связность между компонентами.
🥰 — упрощают код, управляя жизненным циклом и зависимостями объектов.
⚡️ — разрешает зависимости между классами и помогает внедрять их через конструкторы или свойства.

🐸Библиотека задач по C#
Как вы бы подошли к оптимизации сцены в Unity для виртуальной реальности (VR), учитывая ограничения по производительности? Обсудите как вы бы управляли ресурсами, освещением и рендерингом.

Этот вопрос тестирует понимание кандидатом специфических аспектов оптимизации в Unity для VR. Оптимизация для VR имеет особое значение из-за высоких требований к производительности и низкой задержке. Ответ должен включать стратегии по оптимизации ассетов и текстур, управлению памятью, использованию LOD (Level of Detail) систем для управления сложностью моделей, а также эффективному использованию освещения и теней. Кандидат также может обсудить использование различных профилировщиков и инструментов для мониторинга производительности, а также специфические подходы к рендерингу для VR, такие как сокращение overdraw и использование occlusion culling.

🐸Библиотека задач по C#