es
Feedback
Библиотека собеса по C# | вопросы с собеседований

Библиотека собеса по C# | вопросы с собеседований

Ir al canal en Telegram

Вопросы с собеседований по C# и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/4c2f1c3b Для обратной связи: @proglibrary_feeedback_bot Наши каналы: https://t.me/proglibrary/9197

Mostrar más
5 659
Suscriptores
-124 horas
Sin datos7 días
+6230 días
Archivo de publicaciones
Что такое ViewState? ViewState — это функция ASP.NET для сохранения значений страницы перед ее отправкой на сервер. После публикации страницы данные из ViewState восстанавливаются. 🐸Библиотека собеса по С#

Когда выбирать ValueTask вместо Task, и какие у него ловушки? Берите ValueTask, если бóльшая часть вызовов завершается синхронно (кэш, короткие I/O) и вы реально снижаете аллокации; иначе Task проще и часто не медленнее. Не публикуйте ValueTask без нужды в широких API: потребители могут ждать результат несколько раз или кешировать его — для ValueTask это некорректно (повторное ожидание допустимо только после преобразования в Task). Если нужно ждать более одного раза или хранить результат, конвертируйте один раз в Task через AsTask() и работайте с ним. Это структура: может содержать либо значение, либо ссылку на источник (IValueTaskSource). Ошибки владения/повторного ожидания ведут к Undefined Behavior. В композиции (WhenAll/WhenAny, LINQ over Tasks, сторонние библиотеки) часто всё равно произойдёт аллокация или боксинг — выигрыш исчезает. Исключения/отмена ведут себя как у Task, но повторное ожидание после ошибки у ValueTask недопустимо. Типичный кейс: горячие пути ASP.NET Core/парсеры/кэш — измерения показывают пользу; для остального оставляйте Task ради простоты и устойчивости. 🐸Библиотека собеса по С#

Почему Span<T>/ReadOnlySpan<T> — это ref struct, что это запрещает (heap/async/итераторы/лямбды), и как передавать “срезы” через async-границы? ref struct → только стек: нельзя боксить, хранить в полях классов, захватывать в замыканиях, использовать в async/итераторах — их состояния живут в куче, что небезопасно для byref-типов. Используйте Span<T> локально и синхронно; создавайте через stackalloc, слайсинг O(1). Для перехода через async/долгоживущего хранения берите Memory<T>/ReadOnlyMemory<T>; по месту обратно получайте .Span. Нельзя возвращать/принимать Task<Span<T>>; нужно Task<Memory<T>>. 🐸Библиотека собеса по С#

Можете ли вы объяснить, что такое кватернион и почему он используется в Unity? Кватернион — это математическая концепция, используемая в Unity для представления вращений. Это четырехмерный вектор, который избегает проблемы «карданного замка», связанной с углами Эйлера. Хотя кватернионы менее интуитивно понятны для непосредственной работы, они обеспечивают более стабильный и эффективный способ обработки вращений в трехмерном пространстве. Если вы уверены в себе, то обсудить, как преобразовывать кватернионы в углы Эйлера или упомянуть встроенные функции Unity для работы с кватернионами. 🐸Библиотека собеса по С#

Какой синтаксис нужно использовать в C# для отлова любого возможного исключения? Блок catch, отлавливающий исключения типа System.Exception. Также можно просто использовать catch{}, не указывая тип исключения. 🐸Библиотека собеса по С#

⏳ Время прокачать алгоритмы с 40-процентной скидкой до конца октября На собеседовании не просят бездумно написать шаблонное р
⏳ Время прокачать алгоритмы с 40-процентной скидкой до конца октября На собеседовании не просят бездумно написать шаблонное решение. Важно понимать, как работают алгоритмы под капотом. 🔹 В курсе ты научишься: — искать ошибки с помощью редакционного расстояния; — работать с балансированными деревьями и графами; — решать задачи с динамическим программированием; — и многое другое, что пригодится на собеседованиях. 🤔 Решаешь задачи только в тг каналах? Пройди курс и отправляйся на реальные собеседования! 🔗 Подробнее о курсе

Зачем Span<T> сделан ref struct, где его нельзя использовать, и когда вместо него брать Memory<T>? Span<T> — ref struct, чтобы не «утекать» на кучу: его нельзя хранить в полях классов, боксить, захватывать в лямбды/итераторы/async-стейтмашины; он должен жить только в текущем синхронном фрейме (часто ссылается на стек/неуправляемую память). Для долгоживущих/асинхронных сценариев берут Memory<T>/ReadOnlyMemory<T> (они heap-safe) и при необходимости получают краткоживущий Span через .Span. 🐸Библиотека собеса по С#

Когда использовать StringBuilder предпочтительнее, чем string? StringBuilder предпочтительнее использовать, если строка часто изменяется. 🐸Библиотека собеса по С#

Как используются делегаты в C#? Делегаты имеют несколько применений. Некоторые из них — механизм обратного вызова, многоадресная рассылка, асинхронная обработка, а также методы абстрагирования и инкапсуляции. Библиотека собеса по С#

Когда выбирать ValueTask вместо Task и какие у него подводные камни? Используй ValueTask только в «горячих» путях, где операция очень часто завершается синхронно и ты реально избегаешь аллокации Task; во всех прочих случаях — Task проще и безопаснее. Ограничения: ValueTask — struct, легко копируется и раздувает захваты в замыканиях; его можно корректно ожидать лишь один раз (если источник — IValueTaskSource), для повторных ожиданий/комбинаторов сначала делай AsTask(); неверное повторное ожидание ведёт к гонкам/исключениям; AP Библиотека собеса по С#

Как вы подходите к оптимизации производительности в Unity для мобильных устройств, учитывая ограничения аппаратного обеспечения и разнообразие экосистемы устройств? Для оптимизации производительности в Unity для мобильных устройств, важно сосредоточиться на следующих аспектах: Оптимизация ресурсов: Сжатие текстур и мешей, использование LOD (Level of Detail) для уменьшения детализации объектов на расстоянии и оптимизация ассетов для уменьшения загрузки на GPU. Эффективное использование освещения: Использование статического и запекаемого освещения вместо динамического, что снижает нагрузку на процессор. Оптимизация скриптов: Минимизация использования операций Update() и FixedUpdate(), оптимизация алгоритмов и структур данных. Пакетная обработка и куллинг: Использование пакетной обработки для уменьшения количества draw calls и эффективный куллинг для исключения не видимых объектов из рендеринга. Тестирование и профилирование: Регулярное использование профилировщика Unity для выявления и устранения узких мест производительности. Адаптация к различным устройствам: Создание различных профилей графических настроек для адаптации к разным классам устройств, учитывая их аппаратные возможности. Библиотека собеса по С#

Что вы подразумеваете под массивом и какие типы массивов существуют в C#? Коллекция схожих элементов, доступных через числовой индекс, называется массивом. Бывают одномерные массивы, двумерные массивы и jagged массивы. Библиотека собеса по С#

Можно ли вызывать Unity API из Job System/дополнительных потоков и как правильно применить параллельно посчитанные результаты к объектам сцены? Нельзя: UnityEngine.Object и большинство API — только с главного потока. Параллелим расчёты на NativeArray/NativeSlice/NativeHashMap (без managed-ссылок), помечаем [ReadOnly]/[WriteOnly], включаем Burst, Schedule/ScheduleParallel, сохраняем JobHandle, затем на главном потоке делаем Complete() и читаем Native*, применяя значения к Transform/Mesh в Update/LateUpdate. Контейнеры реюзаем с Allocator.Persistent, не аллоцируем каждый кадр. Библиотека собеса по С#

Что делает lock(obj) под капотом и почему плохая идея — блокировать this или строку? Компилятор разворачивает в try { Monitor.Enter(obj); } finally { Monitor.Exit(obj); }, монитор реентерабелен и висит на объекте. Блокировка this/публичных объектов/строк опасна: внешний код может их тоже залочить (строки интернируются) → риск дедлоков и лишнего контеншна. Библиотека собеса по С#

Объясните, что реально происходит при async/await в C#: как компилятор трансформирует метод, как выбирается поток для продолжения, что делает ConfigureAwait(false), и почему в UI/старом ASP.NET ловят дедлок при .Result/.Wait(). Компилятор разворачивает метод в IAsyncStateMachine: локальные и позиция сохраняются в полях, await берёт awaiter (обычно TaskAwaiter) и через OnCompleted/UnsafeOnCompleted регистрирует продолжение. По умолчанию продолжение постится в текущий SynchronizationContext (если он есть), иначе — в TaskScheduler.Current (обычно пул потоков). ConfigureAwait(false) отключает захват контекста, поэтому продолжение уходит в пул и не требует возвращения в UI-контекст. Дедлок появляется, когда однопоточный контекст (WinForms/WPF или классический ASP.NET) блокируется .Result/.Wait(), а продолжение пытается вернуться в тот же контекст, который занят блокирующим ожиданием; ни то ни другое не сдвигается. Лекарство: не блокировать асинхронщину (“async all the way”), в библиотечном коде использовать ConfigureAwait(false) там, где не нужен контекст, и передавать CancellationToken. Библиотека собеса по С#

✍🏻 Запишите названия всех этапов жизненного цикла страницы ASP.NET — Запрос страницы — Начало жизненного цикла страницы — Инициализация страницы — Загрузка страницы — Проверка — Обработка событий постбэка — Рендеринг страницы — Выгрузка Библиотека собеса по С#

🤖 Курс «ИИ-агенты для DS-специалистов» Последняя возможность в этом году освоить ИИ-агентов — курс стартует уже 3 октября! П
🤖 Курс «ИИ-агенты для DS-специалистов» Последняя возможность в этом году освоить ИИ-агентов — курс стартует уже 3 октября! Первый вебинар пройдёт в день старта, а подробности вебинара можно найти на сайте. 📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой. 🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽. 🔗 Записаться на курс и узнать подробности

Что такое процесс JIT-компилятора? Компилятор Just-In-Time (JIT) является частью Common Language Runtime (CLR) в .NET, которая отвечает за управление выполнением программ .NET независимо от языка программирования .NET. Специфичный для языка компилятор преобразует исходный код в промежуточный язык. Затем этот промежуточный язык преобразуется в машинный код компилятором Just-In-Time (JIT). Этот машинный код специфичен для компьютерной среды, в которой работает компилятор JIT. Библиотека собеса по С#

Можно ли разрешить наследование класса, но запретить переопределение метода? Можно для второго класса в иерархии наследования, если переопределяем виртуальный метод как sealed override, тогда дальнейшее переопределение по цепочке наследования запрещено. Библиотека собеса по С#

В проде на HTTP/2 (TLS) под пиками растёт p99: при единичной потере пакета “проседают” сразу несколько параллельных запросов на одном соединении. Почему так происходит и как это смягчить без переписывания приложения? Это TCP Head-of-Line blocking внутри одного HTTP/2-мультиплексированного TCP-соединения: ретрансмит одного сегмента задерживает все потоки. Смягчение: перейти на HTTP/3/QUIC (stream-level loss recovery) или шардировать запросы по нескольким TCP (connection pooling/limit concurrent streams), настроить приоритизацию, таймауты/keep-alive, включить современный congestion control (напр., BBR) и использовать CDN ближе к клиенту. Диагностика: метрики retransmits/RTT, pcap, qlog (для H3). Библиотека собеса по С#