TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
Сергей Назаров | Карьерный бустер

1 Oct, 18:44

Открыть в Telegram Поделиться Пожаловаться

😰 Ozon позвал на техничку, а ты не знаешь, чего ждать

Приглашение от Ozon радует недолго. Потом приходит тревога: большая компания, сильные собеседующие и никакого понимания, что именно спросят.

Читаешь отзывы, а там "гоняли два часа" и "спросили какую-то дичь про lock". И это никак не помогает.

Я разобрал 25 записей технических собеседований наших учеников в Ozon по C#. На таком объёме видно, что вопросы там не случайные, и "дичь про lock" спрашивали в 13 из 25.

🧵 Блокировки в асинхронном коде

Примитивы синхронизации всплывали в 21 из 25. Формулировки: "Почему нельзя await внутри lock?", "Ошибка будет при компиляции или при выполнении?", "Будет ли работать lock(42)?".

Типичная ошибка: сказать "так нельзя, будет дедлок" и замолчать. У интервьюера в голове сразу вопрос: "Он понимает почему или выучил запрет?".

> Отвечай через механику. С lock код с await просто не скомпилируется. С Monitor.Enter скомпилируется, и это ловушка. Продолжение после await может выполниться на другом потоке, а блокировка принадлежит потоку, который её взял. Exit с чужого потока бросит исключение, блокировка останется висеть, и следующий вызов встанет навсегда. Для асинхронной критической секции нужно использовать SemaphoreSlim с ограничением по одному потоку.

⚙️ Что происходит на await

Тема встречалась в 18 из 25. "Что происходит с потоком на первом await?", "Есть ли смысл помечать async метод, который считает факториал?", "Во что разворачивается async/await?".

Главная ошибка: считать, что на каждом await переключается поток, и путать await с Task.Run.

> Разложи по шагам. Код до первого await выполняется синхронно. На ожидании сети или диска поток возвращается в пул, а метод сохраняет состояние в машине состояний, которую сгенерировал компилятор. Когда операционная система сообщает, что ответ пришёл, продолжение ставится в очередь пула.

🗄 SQL руками

Вопросы по базе были в 22 из 25, живой запрос писали в 10.

Чаще других попадалась задача "сотрудники с максимальной зарплатой в каждом департаменте", пять раз. После подзапроса с MAX сразу звучит: "А если у двоих одинаковая зарплата?" и "Можно через оконную функцию?".

> В собесе по теории любимый вопрос: "Запрос всегда работал, а утром начал тормозить. Индексы есть. Куда смотреть?". Ответ "добавлю индекс" здесь не засчитают. Расскажи про план через EXPLAIN ANALYZE, актуальность статистики, VACUUM и селективность.

📨 Outbox — обязательный вопрос

Outbox прямо спрашивали в 13 из 25. "Нужно создать пользователя и гарантированно отправить событие в брокер. Как?", "Какие таблицы и компоненты добавишь?", "Что будет ключом идемпотентности в Inbox?".

Типичный провал: назвать паттерн и не объяснить, какую проблему он решает и как устроена отправка.

> Событие пишется в таблицу outbox в той же транзакции, что и данные. Фоновый процесс читает таблицу и отправляет события в брокер. Отправка может повториться, поэтому гарантия здесь "хотя бы один раз". На стороне получателя нужен Inbox с идентификатором сообщения, по которому отсекаются дубли.

🎯 Главное

Во всех четырёх темах проверяют одно: что случится с потоком, запросом или сообщением, когда что-то пойдёт не так.

Напиши в комментариях, на чём тебя ловили на техничке: на блокировках, на медленном запросе или на Outbox.

Это первый пост серии, дальше Pyrus, Сбер, X5, Касперский и Т-Банк. Полный список вопросов и задач с собеседований в Ozon по C# в боте @booster_tbot.

Если идёшь в Ozon и хочешь готовиться с ментором, который знает, что там спросят, напиши мне.

#техничка #csharp

499 0 11 11
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot