Есть ли опыт с C++
Что проверяют
Питонисту C++ обычно нужен в одном месте: там, где Python упирается в производительность и приходится спуститься на уровень ниже. Интервьюер хочет понять ваш реальный уровень и то, как вы стыкуете C++ с Python. Следом спрашивают, как именно вы вызывали C++ из Python или как управлять памятью без утечек.
Как отвечать
Сначала честно назовите уровень: писали продакшен-код, делали расширения, читаете чужой код или изучали в вузе. Дальше каркас на своём опыте:
- где пригодилось: узкое место, найденное профилировщиком (
cProfile,py-spy), которое не решилось векторизацией в NumPy; - как связывали:
pybind11илиnanobindдля C++,Cython,ctypesиcffiдля готовых C-библиотек, прямой C API с ручнымиPy_INCREFиPy_DECREF. Сборка черезscikit-build-core, колёса под платформы черезcibuildwheel; - что важно знать из C++: RAII,
std::unique_ptrиstd::shared_ptrвместо ручногоdelete, семантика перемещения, контейнеры STL. Хорошо, если объясните, почему ошибка с памятью в расширении роняет весь процесс Python, а не выбрасывает исключение; - GIL: тяжёлый расчёт в расширении отпускает GIL (
py::gil_scoped_releaseв pybind11), иначе остальные потоки Python простаивают.
Цифру ускорения давайте свою и с условиями: какой участок, во сколько раз, на каких данных. Помните, что переход границы между Python и C++ стоит дорого, поэтому выигрыш дают крупные вызовы, а не миллион мелких.
Если опыта нет, скажите прямо и покажите, как решили бы задачу без C++: NumPy, Numba, готовая библиотека. Добавьте, что код на C++ сможете читать, если понадобится отладить зависимость.
Где спотыкаются
Преувеличивают опыт. Два вопроса про указатели или время жизни объектов быстро показывают реальный уровень.
Предлагают переписать всё на C++ ради скорости, не измерив, где на самом деле тратится время.
Называют процент ускорения без условий замера. Лучше «в 8 раз на расчёте матрицы расстояний», чем «приложение стало быстрее на 30%».