Ответ
При подготовке к собеседованию на C++ я фокусировался на нескольких ключевых областях, которые чаще всего проверяют:
- Базовый синтаксис и управление памятью: Указатели, ссылки, семантика перемещения, RAII, умные указатели (
unique_ptr,shared_ptr), работа сnew/deleteи потенциальные утечки. - Структуры данных и алгоритмы: Реализация и сложность основных структур (вектор, список, хеш-таблица, деревья) и алгоритмов (сортировки, поиск).
- Многопоточность и параллелизм: Работа с
std::thread, мьютексы (std::mutex), условные переменные, атомарные операции (std::atomic), избегание состояний гонки и deadlock. - ООП и шаблоны: Виртуальные функции, полиморфизм, правила создания/уничтожения объектов, CRTP, SFINAE, концепты (C++20).
- Оптимизация и низкоуровневые аспекты: Модель памяти, влияние кэша,
inline,constexpr, ассемблерные вставки при необходимости. - Стандартная библиотека (STL): Глубокое понимание контейнеров, итераторов, алгоритмов и их внутреннего устройства.
Я проверял себя на понимание, а не на зазубривание. Например, мог разобрать такой код и объяснить все подводные камни:
// Пример: Потенциальная проблема с владением памятью и исключениями
void riskyFunction() {
int* rawPtr = new int(42);
someFunctionThatMightThrow(); // Если выбросит исключение -> утечка памяти
delete rawPtr;
}
// Правильный подход с использованием RAII:
void safeFunction() {
std::unique_ptr<int> smartPtr = std::make_unique<int>(42);
someFunctionThatMightThrow(); // Память будет освобождена даже при исключении
}
Также я повторял тонкие моменты: strict aliasing, неопределенное поведение (UB), правила const и volatile.