В предыдущей статье мы рассмотрели Skype-собеседование в компанию Network Optix, в этой я расскажу о финальном этапе — собеседовании в офисе компании. Оно длилось более трёх часов и проходило в формате «трое на одного» 😄, то есть всё это время меня собеседовали трое сотрудников компании.
Disclaimer. ❗️ Это статья из цилка рассказов о том, как я проходил собеседования в различные IT-компании. В этих статьях я из этических соображений не раскрываю задачи, которые мне давали. Цель этих статей — сформировать картину того, какие знания и навыки требуют от кандидатов на позицию разработчика современные IT-компании.
1️⃣ Как и большинство задач в Network Optix, первая задача была максимально приближена к реальной практике и касалась особенностей работы с системой контроля версий Git и механизма сборки проектов на C++. Суть её сводилась к тому, чтобы формализовать задачу, придумать и реализовать алгоритм. То есть, в конце концов, это была классическая алгоритмическая задача, но чтобы её сформулировать, надо было продемонстрировать понимание работы систем контроля версий и сборки больших проектов на C++.
2️⃣ Следующая задача — классический пример system design interview. Меня попросили спроектировать аналог крупной распределённой системы, которой в реальной жизни пользуются многие люди по всему миру. Здесь надо было показать умение как создавать высокоуровневый дизайн, так и формат сообщений между отдельными машинами. Здесь надо сказать, что все сотрудники Network Optix, которые меня собеседовали, были техническими специалистами очень высокого уровня. И точно такого же уровня они требуют от кандидатов. В ходе работы над задачей звучал весьма распространённый для технических собеседований вопрос «в чём разница между TCP и UDP». Вот только стандартный ответ «первый гарантирует доставку, а второй — нет» оказался недостаточным :) Меня расспрашивали гораздо глубже и детальнее про особенности сетевых протоколов. Работа над этой задачей заняла не менее часа и, честно говоря, вымотала меня весьма порядочно.
3️⃣ Однако собеседование и не думало завершаться, и мы перешли к обсуждению проблем в многопоточных программах. Опять же, здесь нельзя было обойтись какими-то распространёнными рассуждениями о race condition и необходимости синхронизации. Чтобы правильно ответить на вопросы интервьюеров, надо было иметь представление об устройстве процессора и том, как на его уровне выполняются многопоточные программы.
4️⃣ Дальше была ещё задача по С++, которая так же, как и на Skype-собеседовании, требовала глубоких знаний и опыта применения языка. И на закуску — математическая задачка на логику, в которой надо было придумать принцип сжатия данных.
Итак, общие итоги по собеседованию в компанию Network Optix:
➡️ в компании работают технически очень сильные люди, которые разбираются как в разработке ПО, так и в железе
➡️ от кандидата ожидают большого реального опыта разработки на C++
➡️ решать алгоритмические задачки на доске не требуют
➡️ зато требуют знания сетевого стека, многопоточности, систем контроля версий и железа
➡️ а также умения объединять это всё вместе в большом проекте
Собеседования в Network Optix были очень сложными и потребовали много сил и энергии. Но на этом я не остановился. В следующей статье будет рассказ о Mail.Ru.
Post #31
853