Языки программирования

Вопросы на собеседовании: C++

14 уроков · 5 разделов · бесплатно, без регистрации

Реальные вопросы с C++ собеседований: указатели, виртуальность, умные указатели и move-семантика без зубрёжки.

Курс «Вопросы на собеседовании: C++» состоит из 5 разделов и 14 уроков: Память: стек, куча, указатели, ООП и виртуальность, RAII и умные указатели, Move-семантика и STL: структуры данных. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Память: стек, куча, указатели

    1. Стек и куча: где живут переменные

      Разбираем классический вопрос собеседования по C++: чем стек отличается от кучи, почему стековые переменные исчезают сами, а кучу нужно чистить руками.

    2. Указатели против ссылок

      Чем указатель в C++ отличается от ссылки: можно ли переназначить ссылку, что такое nullptr и почему это частый вопрос на собеседовании.

    3. new/delete и утечки памяти

      Разбор классической утечки памяти в C++: что происходит, если забыть delete после new, и как её обнаружить в коде на собеседовании.

  2. 2 ООП и виртуальность

    1. Виртуальные функции и полиморфизм

      Разбираем, зачем в C++ нужно ключевое слово virtual: что произойдёт при вызове метода через указатель на базовый класс без него и с ним.

    2. Как устроена vtable изнутри

      Что такое таблица виртуальных функций (vtable) в C++, как компилятор использует её для позднего связывания и почему virtual-методы чуть медленнее обычных.

    3. Множественное наследование и его проблемы

      Diamond problem (ромбовидное наследование) в C++: почему при наследовании от двух классов с общим предком возникает неоднозначность и как её решает virtual-наследование.

  3. 3 RAII и умные указатели

    1. RAII: ресурс = время жизни объекта

      Что такое RAII в C++, почему деструктор гарантированно вызывается и как эта идея легла в основу умных указателей.

    2. unique_ptr: единоличное владение

      Как unique_ptr автоматически освобождает память по правилу RAII, почему его нельзя копировать и что означает передача владения через std::move.

    3. shared_ptr и weak_ptr

      Как работает подсчёт ссылок в shared_ptr, почему циклические ссылки приводят к утечке памяти и как weak_ptr разрывает этот цикл.

  4. 4 Move-семантика

    1. lvalue и rvalue: в чём разница

      Что такое lvalue и rvalue в C++, зачем компилятору их различать и что выведет код с rvalue-ссылкой &&. Разбор с примерами для собеседования.

    2. Move-конструктор и std::move

      Как работает move-конструктор в C++, что на самом деле делает std::move (это приведение типа, а не перемещение) и почему после move объект остаётся в валидном, но неопределённом состоянии.

  5. 5 STL: структуры данных

    1. Как устроен vector изнутри

      Почему push_back в vector иногда быстрый, а иногда медленный: динамический массив, capacity и удвоение размера.

    2. map и unordered_map: разница

      Красно-чёрное дерево против хеш-таблицы: когда выбирать map, а когда unordered_map в C++.

    3. Итераторы и сложность операций STL

      Категории итераторов STL и почему вставка в середину vector и list стоит по-разному.