Что спрашивают на собеседованиях в компаниях на должности С++ разработчика?
Table of Contents:
Что должен знать каждый C++ программист или Как проводить собеседование
Что спрашивают на собеседованиях в компаниях на должности С++ разработчика?
Данный вопрос задают гостям, каждый из которых частенько собеседует С++ разработчиков различного уровня.
Присутствуют представители от yandex, wargaming, ReSharper C++ и один из организаторов C++ moscow Александр.
Алгоритмы и структуры данных
Алгоритмы спрашивают во всех компаниях.
Писать на бумажке код могут не все, главно рассуждать правильно.
Важно уметь определять вычислительную сложность - n logn n2 экспотенциальная.
Все стараются не спрашивать алгоритмы открыто. А прятать их за задачами.
Пример задачи: Представьте что у вас есть комплишн в ide и собрал миллион элементов, а показывает в подсказках первые 20. Как найти 20 самых подходящих (критерий самый подходящий это поле в самом элементе).
И как ответ хотят услышать Partial Sort и что за линейное время можно найти 20 лучших. Еще круче если рассказать подробное и реализовать.
Важно знать как в stl реализованы контейнеры и сколько стоят вставки, доступ к элементам.
Из остылок почитать:
Из интересных задач: Есть утилита которая quick sort’ом сортирует данные. Как подобрать данные для наихудшего исхода.
Компиляторы
Знать глубоко как устроенны и работают компиляторы нужно только если вы его разрабатываете.
Знать как устроен, какие уровни есть будет большим плюсом.
Но куда важнее это то с каким компилятором вы работали, флаги тд, что ковыряли.
Какие оптимизации пробывали.
В каких средах.
С++
Из остылок почитать:
- C++ vtables. Часть 1 (basics + multiple Inheritance)
- C++ vtables. Часть 2 (Virtual Inheritance + Compiler-Generated Code)
Hacker’s Delight (Алгоритмические трюки для программистов) - https://doc.lagout.org/security/Hackers Delight.pdf. На русском (но 1ая версия) - http://rsdn.org/res/book/prog/worren.xml.
В компании геймдева особо про современный с++ не спрашивают.
В ReSharper C++ спрашиваю, но тоже “выводя” на тему вопросами “Какие фичи современные языка С++ вам нравятся”? Интересно, что бы я ответил… Наверное optional, variant и дедуцирование шаблона из конструктора.
Из примеров задач: Напишите сигнатуру std move
Из вопросов:
- Почему RTTI не работает
- Почему exception такие как с ними жить
- Как можно не жить с exception
Когда то я разберусь с семнатикой перемещения…
Стандартная библиотека С++
Если есть понимание как работает, как устроен внутри вектор (любой контейнер), как взаимодействует с кэшом - это большой плюс.
Шаблоны С++
Шаблоны спрашивают, но как часть языка.
Железо и ОС
Если человек осведомлен как всё перечисленной работает, хотя бы в “общем”, это не сомненный плюс. Но все эти темы скорее узкоспециализированы и нужны не всем.
Пример вопросов из решарпер:
- Вот у тебя есть struct из bool и int. Каков ее sizeof?
- Вот у нас есть квадратная матрица. Мы ее проходим по строкам или по столбцам. Какие у вас ожидания от быстродействия? Вопрос отсылка к кешам.
Многопоточность
Я удивлён, но никто из спикеров на собеседованиях не спрашивают об этом, если нет какой-то узкоспециализированной задачи.
Цитата:
Потому что никто и не знает как на самом деле работает mutex. И твоя задача понять откуда deadlock, а не как устроен mutex.
Сеть
Тоже цитата:
Книгу таненбаума стоит прочитать.
Если человек понимает как сет. стек работает - это большой плюс.
ООП
Я удивлен снова, но не просят глубоких знаний. Мне кажется спикеры просто устали уже.
Моё лично мнение - архитектура не менее алгоритмов важна, если не важнее. Т.к. спроектированый код - легче читается, легче для понимания и поддержки, расширения.
Инфраструктура
Подробно про это никто не спрашивают, просто уточняют что использовал, как, согласно проекту куда хантят.
Другие языки
Будет плюсом, но, цитата:
За 3 месяца можно выучить
Математика
Под специфичные задачи - могут спрашивать.
Но если человек будет jsonчики перекладывать, то нет.