Есть ли опыт с C++
Что проверяют
Вопрос почти никогда не про синтаксис C++ как таковой. Интервьюеру важно, справитесь ли вы с нативным кодом в Android-проекте: собрать, вызвать из Kotlin, отладить падение. Следом обычно просят рассказать, как устроен вызов через JNI и как вы разбирали нативный крэш.
Как отвечать
Отвечайте про свой опыт и сразу обозначьте уровень. Каркас:
- контекст: где был C++ (своя библиотека обработки изображений или аудио, обёртка над OpenCV или FFmpeg, игровой движок, общий код с iOS) и какая доля работы на него приходилась;
- сборка: NDK, CMake через
externalNativeBuildв Gradle, выбор ABI (arm64-v8a,armeabi-v7a,x86_64для эмулятора), подключение готовых.soиlibc++_shared; - связка с Kotlin:
external funиSystem.loadLibrary(), сигнатуры JNI, работа сJNIEnv, локальные и глобальные ссылки,AttachCurrentThreadдля своих потоков. Переход через JNI дорогой, поэтому в горячем цикле его избегают; - отладка: символизация крэшей через
ndk-stackили загрузку символов в Crashlytics, поиск ошибок памяти с ASan или HWASan; - результат: что дал нативный код в ваших цифрах, например время обработки кадра или размер APK. Если не мерили, так и скажите.
Плюсом будет знание актуальных требований, например поддержки страниц памяти 16 КБ для нативных библиотек в Google Play.
Если опыта нет или он учебный, скажите прямо: «В продакшене C++ не писал, в университете были курсовые на C++17, JNI знаю по документации и пет-проекту». Затем объясните, как бы разбирались: с каких примеров NDK начали бы и как спрятали бы нативную часть за Kotlin-интерфейсом.
Где спотыкаются
Отвечают «да, знаю C++» и перечисляют умные указатели и лямбды. Для Android-вакансии интереснее связка с платформой, чем общий синтаксис.
Не понимают стоимость JNI: гоняют мелкие вызовы через границу в цикле или в длинном нативном цикле не удаляют локальные ссылки, и таблица ссылок переполняется.
Преувеличивают уровень. Пара вопросов про FindClass из нативного потока или про разбор tombstone быстро показывает реальный опыт, поэтому честно назвать границу выгоднее.