ru
Feedback

Не попадитесь на канал ботавода! Telemetrio находит и помечает такие каналы 👉 Хотите видеть метку — оформите подписку

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

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

Открыть в Telegram

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

Больше
5 630
Подписчики
-624 часа
-47 дней
-1830 дней
Архив постов
📣 Если вы уверенно пишете на C#, но веб-разработка до сих пор ограничивалась отдельными задачами, самое время собрать целост
📣 Если вы уверенно пишете на C#, но веб-разработка до сих пор ограничивалась отдельными задачами, самое время собрать целостную картину и выйти на уровень production-систем. Курс «C# ASP.NET Core-разработчик» — это практическое обучение созданию современных web-приложений и API. Вы разберётесь, как проектировать backend и frontend, строить высоконагруженные сервисы, работать с базами данных, микросервисами и инфраструктурой. В программе — ASP.NET Core, ReactJS, GraphQL, gRPC, SignalR, Docker, Kubernetes и CI/CD. ❕Обучение построено вокруг командной работы и Scrum-подхода. Вы не просто изучаете технологии, а проходите полный цикл разработки: от архитектуры и бизнес-логики до деплоя и масштабирования. Преподаватели — практикующие разработчики, программа регулярно обновляется под реальные требования рынка. ➡️Старт курса уже 26 февраля. Курс доступен в рассрочку. Пройдите короткое вступительное тестирование и получите специальные условия на обучение: https://clc.to/SP0arg Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Как спроектировать архитектуру мобильной игры в Unity, чтобы удерживать стабильные 60 FPS при тысячах активных сущностей и уметь выкатывать контент без обновления клиента (через CDN), при этом минимизируя аллокации и времена загрузок? Симуляцию вынести в ECS/DOTS с Jobs+Burst и фиксированным тиками, рендер отделить через Hybrid Renderer; для остального — агрегировать поведение в небольшое число систем вместо тысяч Update(). Память держать под контролем: NativeArray/пулы, адресная загрузка через Addressables с remote catalog, хэшами и версионированием на CDN, всё асинхронно с бюджетами времени кадра и пределами concurrent загрузки. Мир стримить аддитивно через Subscenes и пред-бейк, ассеты ужимать (ASTC/ETC2, LOD/mesh compression), шейдер-варианты резать. На сборке — IL2CPP, managed/code stripping, отключённые подробные исключения. Профилировать и регрессии ловить в CI (Profiler, Memory Profiler, Frame Debugger), целититься в бюджеты: CPU ≤ 6–8 мс, render ≤ 6–8 мс, загрузка — мелкими батчами без спайков GC. 🐸Библиотека собеса по С#

Различия между интерфейсом и абстрактным классом в .NET Интерфейс определяет набор поведения, которым должны обладать классы, его реализующие. Он включает только объявления свойств, методов и событий, без указания модификаторов доступа. Все члены интерфейса обязательно должны быть реализованы в классах, которые его используют. Абстрактный класс, в свою очередь, предлагает частичную реализацию функциональности и может содержать как абстрактные, так и виртуальные члены, которые должны быть реализованы наследующими его классами. Кроме того, абстрактный класс может содержать поля. Важно отметить, что ни интерфейс, ни абстрактный класс не могут быть инстанцированы. Библиотека собеса по С#

В проекте возникают микрофризы при спавне/деактивации множества объектов и подгрузке ассетов во время игры. Как диагностировать и убрать эти GC-спайки без ухудшения качества? Профилировать (Unity Profiler/Deep Profile) и убрать аллокации на горячем пути: вместо Instantiate/Destroy — Object Pooling; ассеты грузить Addressables.Load*Async с предварительным прогревом; исключить LINQ/boxing/строковые конкатенации в Update; включить Incremental GC; крупные вычисления вынести в Jobs + Burst; тяжелые загрузки — на кадры/батчами; проверять, что пул и кэш не вызывают утечек (release/UnloadUnusedAssets по плану). Библиотека собеса по С#

📣 Если C# для вас — это уже не просто язык, а инструмент для построения систем, следующий шаг — научиться проектировать и ра
📣 Если C# для вас — это уже не просто язык, а инструмент для построения систем, следующий шаг — научиться проектировать и разрабатывать так, как это делают сильные команды в продакшене. Курс «C# Developer. Professional» — про Best Practices .NET-разработки и реальную инженерную работу. Вы углубитесь в работу с атрибутами, асинхронность и многопоточность, разберёте паттерны проектирования, работу с SQL и NoSQL, кэширование, CI/CD и тестирование. ❕Программа построена вокруг практики и командной разработки. Вы будете работать в Scrum-команде, проходя весь цикл: от постановки задач до итогового проекта. Преподаватели — практикующие эксперты, программа регулярно обновляется под требования рынка. Это обучение, которое повышает инженерную зрелость и ценность специалиста. ➡️Старт курса - 27 февраля. Курс доступен в рассрочку. Пройдите короткое вступительное тестирование и получите специальные условия на обучение: https://clc.to/A9MlwQ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Что такое Round Trip в ASP.NET? В момент включения обработки на стороне сервера, тогда включаются четыре этапа: 1. Пользователь запрашивает веб-форму с веб-сервера. 2. Веб-сервер отвечает указанной веб-формой. 3. Пользователь вводит информацию и отправляет веб-форму на сервер. 4. Затем веб-сервер обрабатывает структуру формы и отправляет результаты обратно конкретному пользователю. Теперь этап 3 известен как постбэк страницы, в то время как этапы 3 и 4 в совокупности известны как «Round Trip». Можно сказать, что обратный путь включает в себя выполнение полного обхода по сети к веб-браузеру и получение ответа. Веб-приложения используют HTTP для создания соответствия между веб-программой и сервером. Библиотека собеса по С#

Что такое виртуальный метод в C#? Метод, который мы можем переопределить в производном классе, а это значит, что он может иметь разные реализации в базовом (исходном) и производном классах. Они используются, когда мы хотим расширить функциональность исходного метода базового класса. Мы используем ключевое слово virtual для создания виртуального метода в базовом классе, который позволяет переопределить функциональность в производном классе. То есть это пример полиморфизма. Вы не можете использовать ключевое слово virtual со статическими, абстрактными или частными методами в базовом классе. Библиотека собеса по С#

Как бы вы объяснили разницу между Repeater и ListView? Элемент управления Repeater является производным от класса Control. Повторитель просто повторяет данные, указанные в шаблонах. Повторяющиеся данные обычно представляют собой HTML-код, смешанный с записями из источников данных. Вывод Repeater не предопределен. Из-за этого Repeater требует больше всего работы для определения шаблона. Взамен он дает нам наибольшую гибкость для построения макета и оптимизации представления. С тем же шаблоном и тем же набором данных Repeater обычно работает быстрее, чем элементы управления Data List или GridView. Это в основном из-за класса DataReader, который используется для доступа только для чтения. DataReader быстрее, чем классы DataSet или DataTable, обычно используемые с GridView. По сравнению с элементами управления GridView и DataList, Repeater имеет ограниченные возможности. По умолчанию Repeater хорош для отображения данных. Это не лучший выбор, если вам нужно редактировать данные. Кроме того, по умолчанию он не обеспечивает разбиение на страницы и сортировку записей. Элемент управления ListView — это новейший элемент управления представлением данных, представленный в ASP.NET 3.5. Предыдущие элементы управления (Repeater, DataList и GridView) логически следуют друг за другом. Например, Repeater — самый простой, но быстрый, затем DataList имеет больше функций, но и больше накладных расходов, и, наконец, GridView — самый сложный, имеет больше функций, но самый тяжелый и, следовательно, самый медленный на странице. Теперь есть новый элемент управления ListView, который пытается предоставить лучшее с обеих сторон: скорость и гибкость в дизайне, а также множество функций, таких как разбиение на страницы, обновление или удаление записей и т. д. Из-за этого элемент управления ListView часто является лучшим выбором, чем Repeater или DataList. Библиотека собеса по С#

В вашей команде разработчиков часто случаются конфликты при merge в main. Как вы будете диагностировать и выстраивать процесс так, чтобы минимизировать количество конфликтов? Анализировать, где чаще всего возникают конфликты (монолитные файлы, частые изменения), внедрить короткоживущие feature-ветки и регулярные rebase на main, настроить code ownership и pull request review. При необходимости — разбить большие модули на более мелкие, а также автоматизировать форматирование кода, чтобы уменьшить “шум” в diff. Библиотека собеса по С#

В чем разница между переменными объектного типа и переменными динамического типа в C#? Динамические и объектные переменные имеют схожую функцию. Переменные объектного типа проверяют тип во время компиляции, тогда как динамические переменные — во время выполнения. 🐸Библиотека собеса по С#

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

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

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

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

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

🟥 Утечки данных в .NET-приложениях чаще происходят не из-за хакеров, а из-за неверной работы с ключами, конфигурациями и базовой криптографией. Ошибки на уровне кода быстро превращаются в инциденты. На открытом уроке разберём практическое применение System.Security.Cryptography: AES, RSA, хеширование и цифровые подписи. Поговорим о безопасном хранении и передаче секретов, управлении ключами и принципе наименьших привилегий. ❗️ Вы системно разберёте уязвимости OWASP Top-10 для .NET: инъекции, небезопасную десериализацию, XSS, CSRF — и способы их нейтрализации на уровне кода и архитектуры. Отдельно обсудим шифрование данных в БД, защиту строк подключения и безопасное логирование без утечек токенов. 🟥Встречаемся 10 февраля в 20:00 МСК в преддверии старта курса «C# Developer. Professional». Зарегистрируйтесь, чтобы не пропустить: https://clc.to/8jCEXw Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Объясните, что реально происходит при 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. Библиотека собеса по С#

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

Можно ли вызывать 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, не аллоцируем каждый кадр. Библиотека собеса по С#

🦾 Что такое абстракция и как она связана с ООП? Под абстракцией понимается модель реальной жизни, упрощенная для решения конкретной задачи, которая выражена в объекте, то есть любой объект — это абстракция, так как она только частично описывает реальную сущность. Поэтому любой объект можно считать абстракцией и он только частично описывает реальную сущность. Во время преобразования реальных сущностей в объект, он лишается тех характеристик, которые являются несущественными деталями. Например можно составить упрощенный класс человека, который умеет двигаться, а от всего остального мы абстрагируемся (в данным случае несущественно то, что он умеет дышать, кушать, видеть, слышать и так далее). Библиотека собеса по С#