Список предыдущих серий:
Первая часть здесь
Вторая часть здесь
Третья часть здесь
Следующим этапом моего собеседования стала секция по С++. У меня было два дня после разговора с CEO, и их я потратил на подготовку. Конечно, я мог подумать: «Да легкотня, я целую специализацию на Coursera по плюсам сделал, зачем мне вообще готовиться?». Но я решил отнестись к этому серьёзно.
В прошлом посте я обратил ваше внимание на слова основателя стартапа о том, что им нужны разработчики, которые понимают, как работают аллокаторы памяти. Я, конечно, в теории знал, как это происходит, но явно не мог назвать себя большим специалистом в этой теме. Так что я решил повторить её и сделал это с помощью доклада Фёдора Короткого на C++ Russia 2018. Я слышал его выступление на конференции офлайн, и оно мне запомнилось. Ещё я почитал статьи про аллокаторы на Хабре.
И вот настал день собеседования. Мы созвонились с членом команды стартапа и общались примерно 45 минут. Он показал мне код на C++, в котором заполнялся map из строки в число. И каждую новую пару «строка-значение» в map помещали каким-то новым способом. Нужно было посмотреть на эти способы и про каждый из них сказать, как код отработает.
Там, в этих разных способах, были заложены всякого рода ошибки: проезды по памяти, возвращения ссылок на локальные переменные, появление лишних копирований и многое другое. То есть большинство способов заполнения этого map приводили к некорректной работе программы, и нужно было объяснить, что именно будет происходить неправильно.
Этот тест был сложным. Он требовал внимательного чтения кода и действительно хорошего знания языка, понимания, как работают те или иные конструкции. Мне показалось, что я справился достаточно успешно.
Когда мы закончили с этой частью, интервьюер начал задавать вопросы. Первым стал вопрос, связанный с тем, как работает оператор
new в C++ и как он выделяет память в двух разных процессах. Вот тут и пригодились знания об аллокаторах, которые я освежил в памяти за день до собеседования!Дальше я ответил ещё на несколько стандартных вопросов: про умные указатели, про
make_shared и make_unique. По итогам общения мне сказали: «Илья, спасибо, мы ещё раз посмотрим на результаты и с вами свяжемся».P.S. Пример вопроса с собеседования:
Как отработает код?
const char* str3() {
char x[] = "test5";
return x;
}
map<const char*, int> m;
m[str3()] = 42;