Библиотека собеса по C# | вопросы с собеседований
الذهاب إلى القناة على Telegram
Вопросы с собеседований по C# и ответы на них. По рекламе: @tproger_sales_bot Учиться у нас: https://clc.to/QRJIVw Для обратной связи: @proglibrary_feeedback_bot Наши каналы: https://t.me/proglibrary/9197
إظهار المزيد5 635
المشتركون
+224 ساعات
+27 أيام
-1430 أيام
أرشيف المشاركات
Будет ли повторно вызван статический конструктор после исключения?
Ответ: Нет. Если статический конструктор завершился необработанным исключением, среда выполнения не запускает его заново для того же загруженного типа.
Тип остаётся неинициализированным. Обращение, требующее его инициализации, обычно приводит к TypeInitializationException; исходную причину можно посмотреть в InnerException. Повторный вызов такого обращения не становится повторной попыткой выполнить конструктор.
Поэтому временно недоступный сервер или файл — плохая зависимость для статического конструктора. Даже если ресурс появится позже, автоматического восстановления типа не произойдёт.
Если операции нужны повторные попытки, их следует организовать отдельно от статической инициализации.
Подробнее в документации Microsoft Learn
🐸 Библиотека собеса по C#
Чем catch с when отличается от проверки if внутри catch?
Ответ: Фильтр when определяет, подходит ли обработчик, ещё до раскрутки стека. Условие if выполняется уже после входа в catch.
В конструкции catch (Exception ex) when (CanHandle(ex)) обработчик будет выбран только при истинном результате фильтра. Если фильтр вернул false, поиск подходящего catch продолжается. В том числе может сработать следующий catch у того же try.
Если же проверять условие внутри catch, исключение уже перехвачено. Чтобы передать его дальше, придётся явно выполнить throw; — к следующим catch того же try выполнение уже не перейдёт.
При этом throw; сохраняет исходный стек исключения. Его не стоит заменять на throw ex;, который меняет информацию о стеке.
Подробнее в документации Microsoft Learn
🐸 Библиотека собеса по C#
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше.
В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок.
Например, можно совместить два направления по работе с ИИ:
💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.📍 Разница в цене — почти 50 тысяч рублей. Можно освоить больше, не выходя за рамки запланированного бюджета. А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога. Акция действует до 31 октября включительно ⏳ ⏮️ Пора прокачать свой стек
Распространяется ли checked на арифметику внутри вызванного метода?
Ответ: Нет. Контекст checked действует на операции, записанные внутри него, и не переносится через вызов в тело другого метода.
Допустим, метод AddOne(int x) возвращает x + 1. Если обернуть вызов AddOne(int.MaxValue) в checked, это само по себе не заставит сложение внутри AddOne выбросить OverflowException.
Поведение сложения определяется контекстом в самом методе и настройками проверки переполнения при его компиляции. Чтобы явно проверять эту операцию, нужно написать checked(x + 1) в AddOne.
Поэтому без знания настроек компиляции нельзя уверенно обещать конкретный результат исходного примера. Важный принцип: checked не включает проверку во всём стеке вызовов.
Подробнее в документации Microsoft Learn
🐸 Библиотека собеса по C#
Защищает ли оператор ! от NullReferenceException?
Ответ: Нет. Постфиксный ! подавляет предупреждения nullable-анализа для выражения, но ничего не проверяет во время выполнения.
Если переменная value содержит null, обращение value!.Length всё равно завершится NullReferenceException. Оператор не создаёт объект, не подставляет значение и не добавляет проверку.
Использовать ! стоит, когда у разработчика есть основание считать значение ненулевым, а компилятор этого не видит. Если значение действительно может отсутствовать, нужна обработка этого случая: проверка null, условный доступ ?. или подходящее исключение.
Не путайте постфиксный value! с логическим отрицанием !flag. Подавление nullable-предупреждений доступно с C# 8.
Подробнее в документации Microsoft Learn
🐸 Библиотека собеса по C#
Гарантирует ли required, что свойство не будет равно null?
Ответ: Нет. required требует инициализации члена при создании объекта, но не проверяет его значение во время выполнения.
Для свойства required string Name { get; init; } выражение new User() вызовет ошибку компиляции. А new User { Name = null } удовлетворит требованию required. При включённом анализе nullable компилятор выдаст предупреждение о присваивании null; настройки проекта могут превращать такие предупреждения в ошибки.
Атрибут SetsRequiredMembers тоже не доказывает, что конструктор всё заполнил: компилятор доверяет этому обещанию автора.
Поэтому required не заменяет проверку аргументов и правил предметной области. Модификатор доступен с C# 11.
Подробнее в документации Microsoft Learn
🐸 Библиотека собеса по C#
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция!
До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один.
Например, можно совместить:
💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽ 🔥 Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога. Акция действует до 31 октября включительно ⏳ ⏬ Собрать свой учебный билд
Чем init отличается от set и делает ли он объект неизменяемым?
Ответ: Нет, init сам по себе не делает весь объект неизменяемым.
Свойству с set можно присваивать значение после создания объекта, если позволяет доступ. init ограничивает присваивание этапом инициализации: например, значение можно задать в инициализаторе объекта, а обычное присваивание после этого компилятор запретит.
Но если свойство хранит List<string>, вызов Add по-прежнему допустим. init запрещает заменить ссылку на список после инициализации, а не менять содержимое списка.
На собеседовании стоит разделять две вещи: возможность присвоить свойству новое значение и возможность изменить объект, на который оно ссылается. init появился в C# 9.
Подробнее в документации Microsoft Learn
🐸 Библиотека собеса по C#
Импульс Т1: возвращаемся с главным ИТ-событием осени ⚡️
19 ноября в Москве состоится одна из самых значимых ИТ-конференций года — Импульс Т1. Это масштабная площадка для обмена практическим опытом и формирования актуальных инженерных навыков.
Мероприятие объединит более 2000 участников ИТ-отрасли: программистов, архитекторов, инженеров, лидеров технологического рынка — всех, кто создает цифровое будущее.
Вас ждет:
🔹5 направлений деловой программы; 🔹130+ спикеров со всей страны; 🔹70+ активностей от практиков индустрии.Главная особенность года — «практические тренажеры», когда каждый участник формирует свой маршрут и сразу отрабатывает теорию на практике: 🔘Код-ретрит — развитие навыков парного программирования, разработка через тестирование и фокус на качестве кода в реальных условиях; 🔘Ресурсные игры — командная работа с ограничениями ресурсов и времени, практика решений конфликтов и ретроспективы; 🔘Зона арх-каты — стресс-тест архитектуры на прочность, поиск слабых мест и интерактивная карта решений; 🔘Стенд доступности — практическое погружение в цифровую доступность и опыт взаимодействия людей с ОВЗ с ИТ-сервисами. Зачем участвовать?
✔️ Получить реальные инструменты для ежедневной работы. ✔️ Показать экспертизу на деле и обменяться опытом с ведущими инженерами. ✔️ Быть в курсе ключевых трендов и опережать индустрию. ✔️ Стать частью сообщества технологических лидеров отрасли.📆 Дата: 19 ноября 2026 года. 📍 Где встречаемся: г. Москва, ул. Волочаевская, д. 48, стр. 1, Дворец культуры завода «Серп и молот» (LOFT#8). Получите доступ к опыту лидеров отрасли и новым ИТ-решениям, регистрируйтесь по ссылке. О рекламодателе
WaitAsync завершился по тайм-ауту. Исходная Task тоже остановилась?
Нет, сам WaitAsync ограничивает ожидание. В проверке на .NET 8 исходная задача возвращала 42 после задержки. Ожидание с коротким тайм-аутом выбросило TimeoutException, но последующий await исходной задачи всё равно получил 42.
Чтобы остановить работу, она должна поддерживать отмену: токен передают в саму операцию, а операция проверяет его или использует API, который это делает. Токен, переданный только в WaitAsync, не добавляет такой поддержки исходному коду.
Поэтому после тайм-аута надо решить, кто отвечает за продолжающуюся операцию, её ресурсы и возможное позднее исключение. «Перестали ждать» и «работа завершилась» — разные состояния.
Контракт Task.WaitAsync
Библиотека собеса по C#
Запрос проходит через несколько сервисов, обращается к базе данных и внешним API. Пользователь видит задержку или ошибку, а по отдельным записям в журналах трудно понять, на каком участке возникла проблема.
20 октября в 20:00 на открытом уроке курса «C# разработчик. Экспертный уровень» разберёте, как OpenTelemetry помогает превратить .NET-приложение из чёрного ящика в наблюдаемую систему.
Рассмотрите наблюдаемость и роль трассировок, метрик и журналов событий в исследовании работы приложения. Узнаете, как эти данные помогают получить целостное представление о пути запроса и искать причины ошибок и задержек.
На практике добавите средства сбора телеметрии в ASP.NET Core-приложение. Создадите собственные трассировки через ActivitySource и метрики через Meter, подключите автоматический сбор телеметрии для ASP.NET Core и HttpClient.
Урок проведёт Михаил Дмитриев.
Зарегистрироваться: https://otus.pw/gLRf/?erid=2W5zFGDkYbT
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Можно ли после Cancel вернуть CancellationTokenSource в рабочее состояние через TryReset?
Нет. Если отмена уже запрошена, TryReset возвращает false. Это не кнопка «отменить отмену». Проверка на .NET 8 подтвердила false после Cancel, а для свежего источника вернула true.
Метод предназначен для единственного владельца источника: предыдущая операция завершена, никто больше не должен запросить её отмену, оставшиеся регистрации больше не нужны. Успешный reset удаляет регистрации.
Одновременный вызов Cancel не является потокобезопасным сценарием. Также нельзя считать старый токен отдельным поколением: он всё ещё связан с тем же источником. Для независимых операций проще создавать отдельные источники отмены.
Контракт TryReset
Библиотека собеса по C#
Repost from Библиотека программиста
👀 Как вы смотрите видео?
Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране?
Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить.
🕰️ Опрос займёт около 3 минут.
В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео.
🔗 Поделиться опытом
🐸 Библиотека программиста
Альфа-Банк ищет скиллового коллегу QA Fullstack на C#
Полная удалёнка или гибрид в Москве, Питере и Екатеринбурге.
Что нужно делать:
— Разрабатывать автотесты на C#;
— Запускать функциональные, регрессионные и интеграционные тесты, включая API;
— Снижать количество дефектов в диалоге с разработкой и бизнесом.
Навыки:
— Опыт автоматизации на C# и ручного тестирования от года;
— Знание API (SOAP, REST), SQL, основ клиент-серверной архитектуры и тест-дизайна.
Условия и развитие:
— Сильное сообщество QA и C#-разработчиков: можно получить совет и поделиться опытом на митапе и в блоге на Хабре:
— Реальная перспектива роста: технический трек развития, в том числе до C#-лида.
Оставляйте отклик по ссылке.
🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК
Приглашаем на открытое собеседование: Senior C# разработчик проведёт его в прямом эфире. Можно посмотреть, как всё устроено изнутри, и понять, насколько ты готов к такому интервью.
Как это будет:
📂 Собеседует Александр Моргунов — Senior C# разработчик, 7+ лет в европейских высоконагруженных сервисах. Отвечает разработчик-доброволец;
📂 Всё как на настоящем собесе: Александр задаёт те вопросы и задачи, которые даёт кандидатам на своих интервью. Заранее их никто не знает;
📂 После каждого ответа Александр даст обратную связь: что прозвучало сильно, а что стоило раскрыть иначе. Так станет понятнее, на что обращают внимание на собесе;
📂 В конце можно задать любой вопрос.
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для C# разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир -> @shortcut_csharp_bot
Реклама.
О рекламодателе.
Приложение собрано, но при запуске .NET всё ещё компилирует код. Почему так происходит и что изменится, если подготовить машинный код заранее?
1 октября в 20:00 на открытом уроке курса «C# разработчик. Экспертный уровень» разберёте JIT и AOT в .NET и попробуете ReadyToRun и NativeAOT на практике.
Проследите путь от C# до IL и машинного кода. Узнаете, какую работу JIT выполняет во время исполнения приложения, и сравните обычную JIT-компиляцию с ReadyToRun и NativeAOT. Рассмотрите, что каждый подход меняет на этапе сборки и запуска.
На практике соберёте одно приложение в нескольких режимах. Сравните получившиеся файлы, размер приложения и время запуска, а затем разберёте результаты. Отдельно обсудите ограничения NativeAOT и сценарии, в которых его применение оправдано.
Урок проведёт Виктор Дзицкий.
Зарегистрироваться: https://otus.pw/Vi1t/?erid=2W5zFJ4cMgM
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🔍Тестовое собеседование с Senior C# разработчиком уже завтра
22 сентября (уже завтра!) в 19:00 по МСК приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle C# разработчика.
Как это будет:
📂 Александр Моргунов, старший C# разработчик с опытом 7+ лет в Европейских высоконагруженных сервисах, будет задавать реальные вопросы и задачи разработчику-добровольцу;
📂 Александр будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью;
📂 В конце можно будет задать любой вопрос Александру.
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для C# разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_csharp_bot
Реклама.
О рекламодателе.
Когда выбирать struct/record struct вместо class?
Для маленьких, неизменяемых и часто копируемых значений (≤ ~16–32 байт), где важна локальность и отсутствие аллокаций. Нужны структурное равенство/with — берите record struct. Если объект крупный/мутабельный/долго живёт — используйте class.
Библиотека собеса по С#
😭 Как не потратить недельный лимит AI-кодинга за три дня?
Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.
🔘 Поговорим о том:
— когда дорогая модель действительно нужна, а когда хватит дешёвой;
— сколько стоит один прогон и куда уходят токены;
— какие задачи можно отдавать субагентам;
— как настроить маршрутизацию моделей;
— что проверять в AI-коде перед merge.
✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после.
⬇️ 18 сентября, 19:00 МСК
⬇️ 1,5 часа · бесплатно
⬇️ Арсений Харланов и Олег Лайок
💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре.
🔗 Зарегистрироваться на вебинар
🔍Тестовое собеседование с Senior C# разработчиком уже завтра
15 сентября (уже завтра!) в 19:00 по МСК приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle C# разработчика.
Как это будет:
📂 Александр Моргунов, старший C# разработчик с опытом 7+ лет в Европейских высоконагруженных сервисах, будет задавать реальные вопросы и задачи разработчику-добровольцу;
📂 Александр будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью;
📂 В конце можно будет задать любой вопрос Александру.
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для C# разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_csharp_bot
Реклама.
О рекламодателе.
