Загрузка…
Загрузка…
backend / middle / tech_deep
Формат
online
Стадия
tech_deep
Когда
within_quarter
Длительность
78 мин
01
Поведенческий
Расскажи в целом про команду, про проекты, какую роль ты занимал в команде — что-то интересное вспомнишь?
Вводный блок. Follow-up: «какую роль в команде занимал — сам грузил задачи, кого-то менторил?»
02
Теория
С какими базами данных работал? Какой опыт, какие кейсы были?
Начало блока по базам данных
03
Теория
Какие уровни изоляции транзакций есть в PostgreSQL? Какой самый минимальный / какой идёт по умолчанию?
Кандидат сравнил SQL Server и PostgreSQL
04
Кейс
Ты сам пользовался уровнями изоляции на практике? Были ли кейсы со сложными транзакциями?
Заметки
Транскрипт технического собеседования (созвон в Zoom) .NET backend-разработчика. Компания-интервьюер явно не названа (есть обрывочная фраза про «грейды в точке» — возможно, речь о компании Точка, но это не однозначно). Два технических интервьюера (Серёжа и Борис); в конце упоминается, что дальше подключится Таня для «более общих вещей» (следующая часть в транскрипт не вошла). Кандидат — выходец из финтеха (WebMoney, рос от стажёра до сеньора), стек .NET/ASP.NET Core, EF Core, PostgreSQL/SQL Server, RabbitMQ/Kafka. Блоки собеседования: базы данных, ORM/EF Core, брокеры сообщений, C#/.NET (строки, коллекции, многопоточность), инфраструктура (Docker, CI/CD, Kubernetes, мониторинг), тестирование. Указанная длительность (~78 минут) — по таймкодам технической части.
Стиль интервьюера
Дружелюбный формат на «ты». Интервьюеры не топят за незнание: подсказывают, сами объясняют правильные ответы (SELECT FOR UPDATE в EF Core, multi-stage builds, Rx.NET, регионы памяти в .NET 8), делятся практикой и наводящими вопросами докручивают кандидата до решения (миграция типа колонки, reordering сообщений). Много уточняющих follow-up'ов «а как на практике у вас было устроено».
Follow-up к вопросу про уровни изоляции; кандидат рассказал про serializable для денежных переводов и read committed для отчётов
05
Теория
Когда сам проектируешь таблицы — чем руководствуешься при навешивании индексов, по каким столбцам их ставить?
06
Теория
Чем отличается EXPLAIN от EXPLAIN ANALYZE в PostgreSQL?
Возник как follow-up после упоминания плана выполнения запросов
07
Теория
Какие минусы у индексов? Почему не навесить индексы на все колонки?
08
System design
Задача: есть высоконагруженное приложение, в таблицу активно идут запросы на вставку и чтение по одной колонке. Нужно поменять тип этой колонки (например, со строки на число) так, чтобы пользователи не пострадали, данные сохранились и чтение не нарушилось. Расскажи поэтапно, как бы ты это делал.
Кандидата докручивали до схемы: добавить новую колонку → писать в обе → перенести данные пачками → переключить чтение → удалить старую
09
System design
Что конкретно ты бы делал в рамках первого релиза этой миграции? Сколько релизов понадобится?
Follow-up к задаче про смену типа колонки без простоя
10
Теория
Работал ли ты с JSONB? Когда нужно использовать JSON-колонку в базе, а когда следует создавать отдельные нормализованные таблицы?
Follow-up: на примере «друзья пользователя» — почему JSON, а не таблица со связью один-ко-многим; интервьюер дополнил про глубокие и изменяющиеся структуры данных
11
Теория
Работал ли ты с блокировками (локами) в базе данных? Какие локи знаешь?
Обсудили лок на таблицу, лок на строку; интервьюер рассказал про advisory lock
12
Теория
Приходилось ли на практике лочить конкретные строки (SELECT FOR UPDATE)?
Кандидат рассказал про SELECT FOR UPDATE в рамках outbox-паттерна
13
Теория
Как сделать SELECT FOR UPDATE, если используешь EF Core?
Кандидат не знал; интервьюер сам ответил: нативной функциональности нет, либо кастомизация через выражения, либо кастомный SQL
14
Теория
Расскажи про ORM: с какими работал, какие нравятся, какие интересные истории/практики были?
Кандидат: ~2,5 года на EF Core, плюс опыт с Dapper
15
Теория
Какой JOIN генерирует Include в EF Core — INNER или LEFT, и от чего это зависит?
Интервьюер пояснил, что тип JOIN у Include зависит от обязательности (nullability) навигационного свойства
16
Теория
Расскажи подробнее про виды загрузки данных (навигационных свойств) в EF Core: ленивая, жадная, явная загрузка.
Follow-up про ленивую загрузку через прокси-библиотеку и виртуальные свойства
17
Теория
Понимаешь ли, что делает Change Tracker в EF Core под капотом и на что он может влиять?
Обсудили слепок изменений, статусы Modified/Unchanged, отключение трекинга через AsNoTracking
18
Теория
В чём разница между AsNoTracking и AsNoTrackingWithIdentityResolution в EF Core?
Кандидат точно не вспомнил; речь про разрешение дублей сущностей при декартовом перемножении
19
Теория
Пользовался ли AsSplitQuery в EF Core? Что он делает и когда полезен?
Интервьюер пояснил: разворачивает джойны в отдельные SELECT'ы, полезно при декартовом взрыве данных
20
Теория
Как у вас были устроены миграции базы данных? Как вы их менеджили и деплоили — в какой момент при релизе накатывалась миграция?
Follow-up'ы: накатывали руками или пайплайном; обратная совместимость миграций; миграции через EF и через отдельные SQL-файлы
21
Теория
Расскажи про внутренний пул подключений к базе данных (AddDbContext vs AddDbContextPool, максимальное число подключений). Как он был настроен на проекте и как его настраивать под большой нагрузкой?
Также уточнили, как было устроено подключение к базе (connection string)
22
Теория
Работал ли с балансировщиками подключений к базе данных? Какие аспекты работы с ними знаешь?
Кандидат на практике не сталкивался
23
Теория
С какими брокерами сообщений / очередями имел дело? Расскажи, что из себя представляют RabbitMQ и Kafka, чем отличаются.
Начало блока про брокеры; кандидат упомянул exchange'и, топики, партиции, outbox-паттерн
24
Теория
Какие гарантии доставки сообщений бывают (at most once, at least once, exactly once)? Какая гарантия была поддержана вашим брокером?
Обсудили, что exactly once практически нереализуем; у кандидата at most once для логов, at least once для микросервисных операций
25
System design
Если гарантия доставки at least once — как защититься от дублей сообщений на принимающей стороне (в хендлере)?
Follow-up'ы: что происходит в хендлере, как понять, что сообщение уже было обработано (таблица обработанных id, статусы, транзакция)
26
System design
Усложнение: хендлер принимает сообщения с обновлением одного и того же поля; два сообщения перепутались по пути — сначала пришло новое, потом устаревшее, и оно перетирает актуальное значение. Как защититься от нарушения порядка (reordering) сообщений?
Кандидата выводили на проверку по timestamp создания сообщения и отбрасывание устаревших; обсудили id предыдущего сообщения для валидации состояния
27
Кейс
Пример: приходят два сообщения — пополнение баланса и списание; сообщение о покупке приходит раньше пополнения. Можно ли всегда просто отбрасывать «старые» сообщения, и как гарантировать порядок обработки, особенно в микросервисах, где разные реплики вычитывают сообщения с разной скоростью?
Follow-up к вопросу про reordering; интервьюер пояснил проблему реплик и разных ЦОДов
28
Поведенческий
С какими версиями .NET работал? Следишь ли за обновлениями, какие блоги/подкасты/каналы смотришь?
Follow-up'ы: что нового в .NET 9; переезжали ли на .NET 7; почему не сразу переходили на новые версии (нечётные/проблемные релизы)
29
Теория
Работал ли ты сам с деревьями выражений (Expression Trees) — что-то дорабатывать, строить декларативно выражения?
Обсудили самописный фреймворк с логикой на выражениях; кандидат глубоко не работал. Также уточнили, был ли фреймворк самописный или сторонний/платный
30
Теория
В .NET есть HttpClientFactory — знаешь, зачем её добавили, какие проблемы она решает? Пользуетесь ли вы ей?
Обсудили исчерпание пула подключений и проблему с DNS у долгоживущего HttpClient
31
Теория
Расскажи про строки в C#: какие у них плюсы и минусы, особенности (иммутабельность, ссылочный тип, передача в метод)?
Follow-up'ы про копирование/передачу по ссылке, StringBuilder, string pool
32
Теория
Что такое интернирование строк? Если создать три строки с одинаковыми значениями — будут ли они ссылаться на один участок памяти? Какие строки интернируются по умолчанию?
Интервьюер пояснил: при компиляции интернируются константы/литералы
33
Теория
Метод принимает три короткие строки (по три символа) и должен их сложить: что лучше использовать — встроенную конкатенацию или StringBuilder, и почему?
34
Теория
Приходилось ли анализировать и исправлять утечки памяти, профилировать приложение (например, dotMemory)? Пользовался ли BenchmarkDotNet?
Кандидат пользовался BenchmarkDotNet для сравнения коллекций; с профилированием памяти не работал
35
Теория
Какая алгоритмическая сложность поиска элемента в Dictionary?
Обсудили O(1) и деградацию до O(n) при коллизиях
36
Теория
FrozenDictionary уже использовали? Знаешь, как он устроен и когда полезен?
Обсудили: анализирует тип ключа и подбирает алгоритм, выигрывает на чтении при неизменяемых данных
37
Теория
Пользовался ли ты System.Threading.Channels (каналами)?
Кандидат не сталкивался; интервьюер пояснил, что это легковесные внутренние очереди
38
Теория
Работал ли с интерфейсом IObservable (реактивное программирование, Rx.NET)?
Кандидат вспомнил ObservableCollection с другого собеседования; интервьюер рассказал про Rx.NET
39
Теория
Какие примитивы синхронизации знаешь? На какие типы они делятся?
Обсудили пользовательские/уровня ядра/гибридные, Slim-версии, lock/Monitor, Mutex, Semaphore, Interlocked
40
Теория
Ты говорил, что разбирал, как async/await разворачивается в стейт-машину под капотом — расскажи.
Затронуто кратко; кандидат разбирал тему для внутреннего обучения
41
Теория
Копался ли в том, как происходит аллокация памяти в .NET (куча, поколения GC, регионы)?
Интервьюер упомянул, что с .NET 8 память выделяется регионами вместо больших сегментов
42
Теория
Использовал ли Docker, насколько глубоко в нём разбирался? Как был устроен Dockerfile на проекте, какой базовый образ использовался?
Блок про инфраструктуру; follow-up'ы про базовый образ (SDK vs runtime)
43
Теория
Знаешь, что такое multi-stage сборки в Docker?
Кандидат не сталкивался; интервьюер объяснил схему SDK-стейдж → перенос артефактов в легковесный runtime-образ
44
Теория
Знаешь про кэширование слоёв в Docker? Как можно оптимизировать скорость сборки образа?
Кандидат не сталкивался
45
Теория
С GitLab CI имел дело? Как у вас был устроен CI/CD?
У кандидата опыт с GitHub Actions и TeamCity «из коробки»; пайплайны GitLab не настраивал
46
Теория
Какой оркестратор у вас использовался (куда деплоились)? Кто описывал файлы релиза/манифесты для Kubernetes?
Кандидат в Kubernetes не лазил; конфигурацией занимался архитектор
47
Теория
Писал ли health-чеки / обязательные пробы для Kubernetes со стороны приложения? На что эти чеки влияли? Что произойдёт с подом, если отвалится база данных?
Кандидат писал простые чеки, но конкретно для Kubernetes-проб не настраивал
48
Теория
Как вы отслеживали ошибки и инциденты в проде? Какие метрики отслеживали в приложении и какими инструментами пользовались (Grafana, алерты, ELK)?
Follow-up'ы: алерты (вместо них звонили дежурные), counters, формат метрик, самописная система логов на ClickHouse, использовали ли ELK/Kibana
49
Теория
Расскажи про твой опыт с тестированием: какие тесты писал (юнит, интеграционные, функциональные) и как внедрял их на проекте?
Кандидат рассказал, как предложил внедрить юнит-тесты на проекте без тестов; функциональные тесты Kafka/RabbitMQ писали на Python
50
Теория
Знаешь разницу между интеграционными тестами и компонентными тестами?
Интервьюер пояснил: компонентные покрывают модуль с БД, интеграционные — отдельное приложение дёргает реальные запросы