Вопросы на собеседовании: C++
Реальные вопросы с C++ собеседований: указатели, виртуальность, умные указатели и move-семантика без зубрёжки.
Курс «Вопросы на собеседовании: C++» состоит из 5 разделов и 14 уроков: Память: стек, куча, указатели, ООП и виртуальность, RAII и умные указатели, Move-семантика и STL: структуры данных. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Память: стек, куча, указатели
- Стек и куча: где живут переменные
Разбираем классический вопрос собеседования по C++: чем стек отличается от кучи, почему стековые переменные исчезают сами, а кучу нужно чистить руками.
- Указатели против ссылок
Чем указатель в C++ отличается от ссылки: можно ли переназначить ссылку, что такое nullptr и почему это частый вопрос на собеседовании.
- new/delete и утечки памяти
Разбор классической утечки памяти в C++: что происходит, если забыть delete после new, и как её обнаружить в коде на собеседовании.
- Стек и куча: где живут переменные
2 ООП и виртуальность
- Виртуальные функции и полиморфизм
Разбираем, зачем в C++ нужно ключевое слово virtual: что произойдёт при вызове метода через указатель на базовый класс без него и с ним.
- Как устроена vtable изнутри
Что такое таблица виртуальных функций (vtable) в C++, как компилятор использует её для позднего связывания и почему virtual-методы чуть медленнее обычных.
- Множественное наследование и его проблемы
Diamond problem (ромбовидное наследование) в C++: почему при наследовании от двух классов с общим предком возникает неоднозначность и как её решает virtual-наследование.
- Виртуальные функции и полиморфизм
3 RAII и умные указатели
- RAII: ресурс = время жизни объекта
Что такое RAII в C++, почему деструктор гарантированно вызывается и как эта идея легла в основу умных указателей.
- unique_ptr: единоличное владение
Как unique_ptr автоматически освобождает память по правилу RAII, почему его нельзя копировать и что означает передача владения через std::move.
- shared_ptr и weak_ptr
Как работает подсчёт ссылок в shared_ptr, почему циклические ссылки приводят к утечке памяти и как weak_ptr разрывает этот цикл.
- RAII: ресурс = время жизни объекта
4 Move-семантика
- lvalue и rvalue: в чём разница
Что такое lvalue и rvalue в C++, зачем компилятору их различать и что выведет код с rvalue-ссылкой &&. Разбор с примерами для собеседования.
- Move-конструктор и std::move
Как работает move-конструктор в C++, что на самом деле делает std::move (это приведение типа, а не перемещение) и почему после move объект остаётся в валидном, но неопределённом состоянии.
- lvalue и rvalue: в чём разница
5 STL: структуры данных
- Как устроен vector изнутри
Почему push_back в vector иногда быстрый, а иногда медленный: динамический массив, capacity и удвоение размера.
- map и unordered_map: разница
Красно-чёрное дерево против хеш-таблицы: когда выбирать map, а когда unordered_map в C++.
- Итераторы и сложность операций STL
Категории итераторов STL и почему вставка в середину vector и list стоит по-разному.
- Как устроен vector изнутри