Библиотека собеса по C# | вопросы с собеседований
Open in Telegram
Вопросы с собеседований по C# и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://clc.to/QRJIVw Для обратной связи: @proglibrary_feeedback_bot Наши каналы: https://t.me/proglibrary/9197
Show more5 641
Subscribers
-124 hours
+27 days
+930 days
Posts Archive
Можно ли разрешить наследование класса, но запретить переопределение его метода?
Да, это возможно для второго класса в иерархии наследования. Для этого нужно использовать модификатор sealed в сочетании с ключевым словом override при переопределении виртуального метода. Таким образом, дальнейшее переопределение этого метода в последующих классах будет запрещено.
🐸Библиотека собеса по С#
Что такое ViewState?
ViewState — это функция ASP.NET для сохранения значений страницы перед ее отправкой на сервер. После публикации страницы данные из ViewState восстанавливаются.
🐸Библиотека собеса по С#
В ASP.NET Core у вас кэш над БД. Когда TTL истекает, сотни запросов одновременно пробивают кэш и штурмуют БД (cache stampede). Как спроектировать дедупликацию «получения значения» per-key без дедлоков и утечек, учитывая отмену/таймауты?
Сделать single-flight per key: ConcurrentDictionary<TKey, Lazy<Task<T>>> (или AsyncLazy) + GetOrAdd. Первый запрос запускает загрузку, остальные await той же Task. Важно: на ошибке/отмене удалять ключ из словаря, чтобы не закрепить failed-task; прокидывать CancellationToken; ставить таймаут и stale-while-revalidate для мягкого обновления. Для изоляции горячих ключей — пер-key SemaphoreSlim или Channel; результаты хранить в IMemoryCache с policy (TTL, size, eviction).
Библиотека собеса по С#
👀 Как работает командная логика в MVVM и что такое ICommand
В паттерне MVVM командная логика реализуется через интерфейс ICommand, который связывает действия пользователя (например, нажатие кнопки) с выполнением бизнес-логики в ViewModel.
ICommand имеет два метода:
• Execute — выполняет команду.
• CanExecute — проверяет, можно ли выполнить команду, например, активировать или деактивировать кнопку.
Когда пользователь выполняет действие, вызывается Execute, а CanExecute управляет доступностью команды. Это разделение логики между View и ViewModel улучшает тестируемость и поддерживаемость кода, поскольку UI не содержит бизнес-логики.
🐸Библиотека собеса по С#
Можете ли вы кратко объяснить, что такое пул потоков в C#?
Thread Pool в C# — это, по сути, коллекция потоков. Эти потоки используются для выполнения задач, не внося помех в реализацию основного потока. После того, как поток из пула потоков завершает реализацию, он возвращается в пул потоков.
Библиотека собеса по С#
Что такое enum и когда его следует использовать?
Enum — это тип значения, который используется для хранения перечислений, представляющих собой список именованных констант. Enum можно использовать для определения статических констант и константных флагов.
Библиотека собеса по С#
🖥 Многопоточность в .NET часто сводят к lock. Но в реальных системах этого недостаточно — особенно под нагрузкой, в легаси-коде и распределённых сценариях.
📕 На открытом уроке разберём, какие инструменты действительно есть в .NET и как выбирать подходящий примитив под конкретную задачу. Рассмотрим Monitor, Mutex, Semaphore, а также другие примитивы из System.Threading: ReaderWriterLockSlim, Barrier, ManualResetEventSlim, SpinLock.
❗️ Вы увидите практические примеры, типовые ошибки и узнаете, где блокировки становятся узким местом. Урок будет полезен разработчикам, работающим с высоконагруженными системами и легаси-кодом, а также тимлидам, которые проектируют архитектуру и отвечают за производительность.
📣 Встречаемся 27 января в 20:00 МСК в преддверии старта курса «C# Developer. Professional». Регистрация открыта: https://clc.to/wVqVuQ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
В продакшене .NET-сервис со временем начинает замедляться, при этом CPU загружен не полностью, но видно рост задержек при обработке запросов. Как вы будете искать и устранять проблему?
Провести профилирование (PerfView, dotTrace) для анализа блокировок и асинхронных операций, проверить работу async/await на предмет deadlock’ов, посмотреть contention в lock/Monitor. Оптимизировать использование асинхронных I/O, ограничить параллелизм (например, SemaphoreSlim), снизить аллокации и при необходимости перепроектировать горячие участки кода.
Библиотека собеса по С#
Вы планируете вернуть из публичного API ValueTask<T> ради снижения аллокаций. Какие риски это несёт для потребителей и как правильно поступить?
ValueTask<T> допускает только одно ожидание и плохо сочетается с повторным await/композицией (WhenAll, кеширование результата). Его нельзя хранить в полях и возвращать повторно. В публичных API обычно оставляют Task<T>, а ValueTask<T> используют только на горячих путях, где >90% завершений синхронные; при необходимости многократно ждать/комбинировать — сразу делать .AsTask().
Библиотека собеса по С#
Пятница, 19:00. Худшее время для деплоя, но идеальное, чтобы подтянуть архитектуру ИИ-систем и не поплыть на вопросе про RAG на интервью.
Подтяните свои знания перед следующим интервью.
Разберём на открытом уроке:
— механизмы
RAG против Fine-tuning;
— как хранить и искать данные в векторных хранилищах;
— пример кода для «чтения» PDF-файлов нейронкой.
Один из спикеров — Алексей Яндутов, ML-инженер в поиске Яндекса.
Это вводный урок курса «Разработка AI-агентов». Ориентируемся на практику.
Записаться на урокМожете ли вы описать, как бы вы реализовали регистрацию ошибок в приложении .NET?
Реализация регистрации ошибок в приложении .NET обычно включает использование библиотек регистрации, таких как log4net, NLog или встроенной Microsoft.Extensions.Logging. Эти библиотеки предоставляют настраиваемые механизмы, которые могут регистрировать ошибки в различных местах назначения, таких как файлы, базы данных или внешние службы.
Разработчики должны настроить библиотеку регистрации в коде запуска приложения и использовать различные уровни регистрации (например, Debug, Info, Warn, Error, Fatal) для сбора и классификации логов соответствующим образом.
🐸Библиотека собеса по С#
Можете ли вы объяснить, что означает LOD (уровень детализации) в Unity?
LOD (Level of Detail) в Unity — это метод, используемый для оптимизации производительности рендеринга путем снижения сложности 3D-моделей по мере их удаления от камеры. Это помогает поддерживать баланс между визуальным качеством и производительностью. Система LOD Unity позволяет разработчикам создавать несколько версий модели с разным уровнем детализации.
🐸Библиотека собеса по С#
Как бы вы настроили систему диалогов для NPC в Unity?
Для настройки диалоговой системы для NPC в Unity можно следовать следующим шагам:
1. Определение структуры диалога: Создайте структуру данных для хранения диалогов. Это может быть класс или структура, содержащая текст диалога, варианты ответов и ссылки на следующие реплики.
2. Создание интерфейса: Разработайте пользовательский интерфейс для отображения диалогов. Используйте UI элементы, такие как текстовые поля для отображения реплик и кнопки для выбора ответов.
3. Скрипт NPC: Напишите скрипт для NPC, который будет инициировать диалог при взаимодействии с игроком. Этот скрипт должен загружать соответствующий диалог из вашей структуры данных.
4. Система управления диалогом: Создайте класс, который будет управлять логикой диалога. Он должен обрабатывать выбор игрока, обновлять текст на экране и переходить к следующей реплике.
5. Сохранение и загрузка диалогов: Если диалоги сложные, можно использовать JSON или Scriptable Objects для хранения и загрузки данных диалога.
6. Тестирование и доработка: Протестируйте систему, чтобы убедиться, что все работает корректно, и внесите необходимые изменения для улучшения взаимодействия.
Эти шаги помогут вам создать базовую диалоговую систему для NPC в Unity.
🐸Библиотека собеса по С#
Можно ли изменить значение переменной во время отладки приложения?
Да, значения переменных можно изменять во время отладки.
🐸Библиотека собеса по С#
«Этот манёвр будет стоить нам 51 год...»
— или один заваленный оффер в BigTech из-за плавающих знаний в базе. На собеседованиях по
.NET всё чаще спрашивают не только синтаксис, но и фундаментальные алгоритмы с архитектурой. Пока рынок несётся вперёд, старые цены в Proglib Academy скоро останутся в прошлом.
Если вы хотите уверенно отвечать на каверзные вопросы или проектировать сложные системы, сейчас — лучшая точка входа.
Актуальные программы:
— Разработка ИИ-агентов
— Математика для разработки AI-моделей
— ML для старта в Data Science
— Математика для Data Science
— Специалист по ИИ
— Алгоритмы и структуры данных
— Программирование на Python
— Основы IT для непрограммистов
— Архитектуры и шаблоны проектирования
Забирайте обучение по старой цене, чтобы через год не смотреть на свой оффер со слезами из-за книжного шкафа.
Подготовиться к офферу выгодно
⚠️ Цены вырастут уже 19 январяЧто такое RedirectPermanent в ASP.Net?
Перегрузка метода RedirectPermanent(String) дает код статуса HTTP 301 в реакции и включает URL для перенаправления запроса. Код статуса HTTP 301 — это стандартный код в реакции HTTP. Он показывает, что существует длительное перенаправление, и дает область перенаправления.
🐸Библиотека собеса по С#
Можно ли запретить наследование от какого-то класса?
Да, можно. Для того, чтобы запретить наследоваться от класса необходимо объявить его с модификатором sealed.
Например, если мы не хотим чтобы от класса SomeClass можно было наследоваться, то объявляем его так:
sealed class SomeClass
{
// Объявление класса
}
В качестве альтернативы, можно запретить и создание экземпляров этого класса с помощью ключевого слова static (под капотом, будет использована пара модификаторов: abstract sealed).
static class Helper
{
// допустимы лишь статические методы
}
🐸Библиотека собеса по С#
✍🏻 Каковы различные способы перегрузки метода?
Различные типы данных параметров, разное количество параметров, разный порядок параметров.
Библиотека собеса по С#
Как бы вы объяснили разницу между 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.
Библиотека собеса по С#
