Проваленный собес на middle .net 150k+ #programming , #c#, #database , #programminglanguage , #net
Разбор технических вопросов middle .NET-собеседования: C#, LINQ, DI, PostgreSQL и паттерны микросервисов. Интервьюер последовательно уточняет ответы кандидата и объясняет важные детали реализации.
Bruce Wayne
Открыть на YouTube- Опубликовано на YouTube:
- Просмотры на YouTube: 946
- Лайки на YouTube: 28
Таймлайн
Коротко о видео
Техническое собеседование по C#/.NET охватывает коллекции, Equals/GetHashCode, IEnumerable/IQueryable, IDisposable и проектирование простого DI-контейнера. Затем интервьюер проверяет базы данных: индексы PostgreSQL, денормализацию, изоляцию транзакций и защиту от SQL-инъекций. В финале обсуждаются микросервисы, Saga, eventual consistency и назначение transactional inbox/outbox; кандидат на ряд уточняющих вопросов отвечает неполно, а интервьюер поясняет ожидаемые принципы.
Затронутые темы
Что взять на заметку
- Для IEnumerable важно отличать сам интерфейс с GetEnumerator от LINQ-методов расширения; получение Count у последовательности может потребовать полного обхода.
- GetHashCode нужен прежде всего хеш-коллекциям, например Dictionary и HashSet; одного Equals достаточно, если требуется только сравнение объектов вне таких структур.
- IQueryable принимает выражения Expression, которые провайдер может преобразовать, например, в SQL, вместо загрузки всей таблицы в память.
- IDisposable применяют для детерминированного освобождения внешних ресурсов; финализация служит страховкой, но не заменяет своевременный Dispose.
- Простейший DI-контейнер должен хранить соответствия интерфейс—реализация, создавать экземпляры через рефлексию и рекурсивно разрешать зависимости конструктора, учитывая циклы.
- Индексы PostgreSQL основаны на древовидных структурах; широкие деревья уменьшают число дорогих обращений к диску по сравнению с глубокими бинарными деревьями.
- От SQL-инъекций защищают параметризованные запросы: пользовательский ввод передают параметром, а не собирают из него SQL-строку.
- В микросервисах Saga даёт согласованность со временем, а transactional outbox записывает бизнес-изменение и сообщение в одной транзакции; inbox помогает не обработать доставленный повторно message дважды.