Трек Senior: 37 вопросов
Глубина и масштаб: внутренности runtime, производительность, распределённые системы, system design, надёжность, архитектурные решения и лидерство.
C# и .NET углублённо7
- 1 Span<T>, Memory<T>, ArrayPool — зачем и когда? Span<T> — ref struct, «окно» в непрерывную память (массив, стек через stackalloc, нативная память) без копирования и аллокаций. Живёт только на стеке: нельзя в поле клас… Senior6 мин
- 2 Reflection vs Source Generators — разница, производительность? Reflection — анализ и вызов типов во время выполнения: GetType(), GetProperties(), MethodInfo.Invoke, Activator.CreateInstance. Гибко, но медленно (проверки, boxing, нет… Senior5 мин
- 3 Что такое stackalloc и unsafe код — когда оправдано? unsafe разрешает указатели (int*), адресную арифметику, fixed, sizeof для любых unmanaged-типов. Требует <AllowUnsafeBlocks>true</AllowUnsafeBlocks>. Проверки границ и т… Senior5 мин
- 4 CLR JIT vs AOT компиляция — отличия, NativeAOT? C# компилируется в IL (промежуточный язык). Превратить IL в машинный код можно во время выполнения (JIT) или заранее (AOT). JIT (RyuJIT): компилирует метод при первом вы… Senior5 мин
- 5 volatile, Interlocked, Memory Barriers — когда нужны? Компилятор, JIT и процессор могут переупорядочивать операции чтения/записи и кэшировать значения в регистрах — в однопоточном коде это незаметно, в многопоточном ломает … Senior6 мин
- 6 ExecutionContext, AsyncLocal и SynchronizationContext: как контекст «течёт» через await? ExecutionContext — «окружение» логического потока выполнения: значения AsyncLocal<T>, контекст безопасности, культура (через AsyncLocal). Он захватывается при await, Tas… Senior6 мин
- 7 Как объект устроен в памяти: заголовок, MethodTable, выравнивание, размер объектов и массивов? Каждый объект ссылочного типа в куче (64-бит) имеет накладные расходы 16 байт: object header (8 байт: sync block index, хэш-код, биты GC и блокировок) и указатель на Met… Senior7 мин
Entity Framework Core3
- 8 Owned Types, Table Splitting, TPH/TPT/TPC наследование? Owned type (OwnsOne/OwnsMany) — тип без собственной идентичности, принадлежащий сущности-владельцу. Идеален для Value Objects DDD (Address, Money). По умолчанию хранится… Senior7 мин
- 9 Как работает Interceptors и Query Filters в EF Core? Interceptors — перехватчики операций EF Core: выполнение команд (DbCommandInterceptor), сохранение (SaveChangesInterceptor), соединения (DbConnectionInterceptor), транза… Senior6 мин
- 10 Оптимизация запросов: compiled queries, split queries, projection? Сначала измерить: логирование SQL, ToQueryString(), план выполнения (EXPLAIN ANALYZE), трассировка. Большинство проблем — в SQL и индексах, а не в EF. Проекция (Select в… Senior6 мин
Базы данных и SQL5
- 11 Репликация vs Шардирование vs Партиционирование? Репликация — копии одних и тех же данных на нескольких серверах. Цели: отказоустойчивость (failover) и масштабирование чтения (read replicas). Запись обычно идёт в один … Senior6 мин
- 12 Что такое CAP-теорема применительно к БД? CAP: распределённая система при сетевом разделении (Partition) должна выбрать между Consistency (все узлы отвечают актуальными данными или отказывают) и Availability (ка… Senior6 мин
- 13 Как работает B-Tree индекс под капотом? В СУБД используется B+-дерево: сбалансированное дерево из страниц (обычно 8 КБ), где все значения хранятся в листьях, а внутренние узлы содержат только ключи-разделители… Senior7 мин
- 14 Hash индексы, GIN, GiST, BRIN — специализированные индексы PostgreSQL? B-Tree (по умолчанию) — равенство, диапазоны, сортировка. Подходит в 90% случаев. Hash — только =; компактнее B-Tree для длинных ключей. С PostgreSQL 10 журналируется и … Senior7 мин
- 15 Статистика в PostgreSQL/SQL Server, ANALYZE, auto-vacuum? Статистика — сводка о распределении данных в столбцах: число строк, доля NULL, число различных значений, самые частые значения (MCV), гистограмма, корреляция с физически… Senior7 мин
Архитектура и паттерны3
- 16 Event Sourcing — что это и когда применять? Event Sourcing: вместо хранения текущего состояния храним последовательность событий, которые к нему привели (AccountOpened, MoneyDeposited, MoneyWithdrawn). Текущее сос… Senior7 мин
- 17 Microservices vs Monolith — когда что выбирать? Монолит — одно развёртываемое приложение с общей БД. Просто разрабатывать, тестировать, деплоить и отлаживать; транзакции ACID «бесплатно». Проблемы начинаются с ростом:… Senior6 мин
- 18 Saga pattern для распределённых транзакций (Choreography vs Orchestration)? Проблема: бизнес-операция затрагивает несколько сервисов со своими БД (заказ → резерв на складе → оплата → доставка). Одной ACID-транзакции нет, 2PC плохо масштабируется… Senior7 мин
System Design и распределённые системы12
- 19 Как проходить system design интервью: требования, оценки, архитектура, компромиссы? System design интервью проверяет не «правильный ответ», а ход мысли: умение уточнить задачу, оценить масштаб, предложить простую рабочую архитектуру, найти узкие места и… Senior7 мин
- 20 Масштабирование: вертикальное и горизонтальное, stateless, балансировка нагрузки L4/L7? Вертикальное масштабирование (scale up) — больше CPU/RAM на одной машине: просто, но есть потолок, растёт цена, остаётся единая точка отказа. Горизонтальное (scale out) … Senior7 мин
- 21 Модели согласованности и консенсус: strong, eventual, кворумы, Raft? Модель согласованности — гарантия, что увидит чтение после записи в распределённой системе с репликами. От строгой к слабой: линеаризуемость (strong) → последовательная … Senior7 мин
- 22 Распределённые блокировки и выбор лидера: Redis, PostgreSQL advisory locks, fencing tokens? Распределённая блокировка гарантирует, что операцию выполняет один экземпляр из многих: фоновая задача по расписанию, обработка одного заказа, миграция, вызов API с жёст… Senior6 мин
- 23 Проектирование API: пагинация, идемпотентность, версионирование, обратная совместимость? Публичный API — контракт, который трудно менять: клиенты (мобильные приложения, партнёры) обновляются месяцами. Проектируйте его как продукт: последовательные имена, пре… Senior7 мин
- 24 Multi-tenancy: как изолировать данные клиентов в SaaS на .NET? Multi-tenancy — одна система обслуживает много клиентов-организаций (тенантов), изолируя их данные, настройки и нагрузку. Главный риск — утечка данных одного тенанта дру… Senior7 мин
- 25 Высокая нагрузка: как масштабировать чтение и запись (кэши, реплики, CQRS, очереди, шардирование)? Сначала измерьте: где узкое место (CPU приложения, БД, сеть, блокировки), какое отношение чтения к записи, какие запросы самые тяжёлые. Оптимизация запросов и индексов ч… Senior7 мин
- 26 Развёртывание без простоя: rolling update, graceful shutdown, миграции БД по схеме expand/contract? Развёртывание без простоя требует, чтобы старая и новая версии работали одновременно: при rolling update часть подов уже новая, часть ещё старая — и обе ходят в одну БД … Senior7 мин
- 27 Надёжность: SLO, error budget, отказоустойчивость, управление инцидентами и постмортемы? SLI — измеряемый показатель качества (доля успешных запросов, p99 задержки), SLO — целевое значение (99,9% за 30 дней), SLA — договорное обязательство перед клиентом со … Senior7 мин
- 28 Разбор кейса: спроектировать сервис сокращения ссылок Классическая задача, на которой проверяют весь цикл: требования → оценки → API → хранение → генерация кодов → кэширование → аналитика → масштабирование и отказы. Ключевы… Senior6 мин
- 29 Разбор кейса: система уведомлений (email, SMS, push) с гарантиями доставки Задача проверяет асинхронную архитектуру: приём запросов → очередь → обработчики по каналам → внешние провайдеры с ретраями, лимитами и отслеживанием статусов. Ключевые … Senior6 мин
- 30 Чем Senior отличается от Middle: зона ответственности, влияние, техническое лидерство? Разница не в количестве известных технологий, а в масштабе ответственности и влияния: Middle самостоятельно решает поставленные задачи; Senior определяет, какие задачи р… Senior6 мин
Тестирование1
Производительность и диагностика3
- 32 Thread starvation — как диагностировать в ASP.NET Core? Thread pool starvation — все потоки пула заняты ожиданием (заблокированы), а новые работы (обработка запросов, продолжения await) стоят в очереди. Пул добавляет потоки м… Senior6 мин
- 33 Cache invalidation стратегии: TTL, eviction, distributed cache consistency? «В информатике есть две сложные вещи: инвалидация кэша и именование» (Фил Карлтон). Инвалидация — решение, когда кэшированное значение перестаёт быть верным. TTL (истече… Senior7 мин
- 34 Как работает Minimal API быстрее обычных Controllers? Minimal API и контроллеры используют один и тот же Kestrel, конвейер middleware и endpoint routing. Разница — в том, что происходит после выбора эндпоинта. Контроллеры (… Senior5 мин
Работа в команде и процессы3
- 35 Технический долг: что это и как объяснить бизнесу необходимость рефакторинга? Технический долг — метафора Уорда Каннингема: быстрое решение сейчас — это «заём», за который потом платятся проценты в виде замедления разработки, багов и инцидентов. Д… Senior6 мин
- 36 Менторинг джунов и проведение технических собеседований Менторинг — помочь человеку стать самостоятельным, а не решать задачи за него. Главные инструменты: вопросы вместо готовых ответов, задачи растущей сложности, регулярная… Senior7 мин
- 37 Архитектурные решения в команде: RFC, ADR и как договариваться? Архитектурные решения (выбор БД, брокера, способа интеграции, границ сервисов) дорого менять — их принимают осознанно, обсуждают и документируют. RFC / Design Doc — доку… Senior7 мин