#реалити
Привет! Всеми любимый формат реалити возвращается 🎉! Сегодня продолжу рассказывать об опыте прохождения технических интервью.
Начну с дисклеймера❗️ Моя цель — показать, какие знания и навыки действительно пригождаются при прохождении технических собеседований на позицию разработчика. При этом я стараюсь рассказывать об этом максимально этично по отношению к компаниям — я знаю, сколько сил нужно, чтобы подготовить хорошие задачи для собеседования разработчиков. Поэтому я либо называю компанию, но тогда про задачи рассказываю максимально расплывчато, либо даю больше деталей про задачи, но тогда не называю компанию.
Сегодня начну рассказ про своё собеседование в HFT-компанию "5 ns" (название выдумано, совпадения случайны). Я проходил его на позицию senior C++ developer. На первой секции было 3 вопроса по С++, и только для одного из них надо было писать код.
1️⃣ Первый вопрос проверял понимание внутреннего устройства
std::unordered_map. Чтобы на него ответить, надо хорошо понимать, когда в нём инвалидируются итераторы, а когда — ссылки и указатели на хранимые данные. Запоминать это всё довольно сложно, поэтому проще один раз разобраться, как работает хеш-таблица с цепочками, и всегда быть готовым к подобным вопросам. Разобраться в этом поможет, например, наш «Коричневый пояс по С++» 🥋2️⃣ Для ответа на второй вопрос «Поясов по С++» уже не хватит 😔 Ну и собеседование всё-таки на должность senior C++ 😜 Вопрос такой — как написать конструктор вектора от двух итераторов, чтобы он не конфликтовал с конструктором от
size_t и T? То есть как сделать так, чтобы код vector<int>(5, 4) создавал вектор из пяти четвёрок, а не пытался создать его от двух итераторов типа int? Мой ответ строился вокруг SFINAE 💡. Уже после собеседования я посмотрел, как это сделано в GCC, и, кажется, там есть специальный хак именно для вектора целых чисел 😎. Потому что если тип
T — не целочисленный, этой проблемы нет. 3️⃣ Наконец, третья задача была на написание кода. Целиком задачу раскрывать не буду, но её суть в том, чтобы уметь из двух расположенных рядом
uint16_t считать биты, например, с 5-го по 23-й и вернуть это в виде uint32_t. Тут надо уметь аккуратно обращаться с битами. Итак, подведём итоги, что важно было знать и уметь, чтобы успешно пройти первое собеседование в HFT-компанию "5 ns" на должность senior C++ developer:
— внутреннее устройство
std::unordered_map— метапрограммирование шаблонов
— bit manipulation
Эту секцию я прошёл, так что ждите рассказ о том, что было на втором собеседовании.
Ставьте 🔥, если почерпнули для себя что-то полезное, и пишите в комментариях, что именно. Ну и пересылайте этот пост знакомым, чтобы они тоже знали, какой уровень знания С++ ждут в HFT 😉
⬇️ Продолжение истории ⬇️