Вернуться в видеотеку

Проваленный собес на middle .net 150k+ #programming , #c#, #database , #programminglanguage , #net

Разбор технических вопросов middle .NET-собеседования: C#, LINQ, DI, PostgreSQL и паттерны микросервисов. Интервьюер последовательно уточняет ответы кандидата и объясняет важные детали реализации.

Источник: Bruce Wayne

Открыть на YouTube

Таймлайн

Коротко о видео

Техническое собеседование по 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 дважды.

Рекомендуем посмотреть