P
prepair.app
Пройти интервью →
EnglishУкраїнськаРусский
🔷

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

Junior · без опыта / до 1 года

Собеседование по C++ проверяет три вещи: понимаете ли вы объектную модель, можно ли доверить вам память и знаете ли вы, чего стоит стандартная библиотека. Ниже вопросы, которые задают чаще всего, каждый с эталонным ответом. Junior: базовая теория, определения и простые практические кейсы.

Темы для подготовки

Память, указатели и RAII
ООП, виртуальные функции и vtable
Move-семантика и правило пяти
Шаблоны и метапрограммирование
Контейнеры STL и сложности
Многопоточность и гонки данных

7 вопросов уровня Junior с ответами

1

Чем указатель отличается от ссылки?

Ответ

Ссылка привязывается один раз, не бывает нулевой и не переприсваивается; указатель бывает нулевым, переприсваивается и поддерживает арифметику. Ссылку берут, когда объект обязан существовать, указатель — когда может отсутствовать. Поскольку ссылка это псевдоним, а не объект, &ref даёт адрес того, на что она ссылается.

2

Где живут переменные — стек, куча или статическая память?

Ответ

Локальные живут на стеке и умирают в конце области видимости. Всё, что пришло из new, живёт в куче, пока кто-нибудь не удалит. Глобальные и static живут в статической памяти всю программу. Понимание, где именно вы находитесь, закрывает большинство вопросов про время жизни, включая то, почему возвращать адрес локальной переменной сломано.

3

Что означает `static` в C++?

Ответ

Три разные вещи в зависимости от места. У локальной переменной — один экземпляр, переживающий вызовы. У глобальной переменной или функции на уровне файла — внутреннюю связь, невидимость для других единиц трансляции. У члена класса — один общий экземпляр, принадлежащий классу, а не объекту, и у статического метода нет this.

4

Чем `const`-указатель отличается от указателя на `const`?

Ответ

const int* p указывает на то, что менять нельзя, — сам указатель двигать можно. int* const p — указатель, который нельзя перенаправить, но значение по нему писать можно. Чтение объявления справа налево превращает это в механику вместо упражнения на память, а const int* const p — оба сразу.

5

Чем `delete` отличается от `delete[]` и что такое утечка памяти?

Ответ

delete парен к new, delete[] — к new[]; перепутать их — неопределённое поведение, потому что массивная форма обязана вызвать деструктор каждого элемента. Утечка — память, которую выделили и не освободили: программа продолжает её держать, и долгоживущий процесс растёт, пока не умрёт. Умные указатели существуют ровно затем, чтобы ни та, ни другая ошибка не была возможна.

6

Чем `class` отличается от `struct`?

Ответ

Только доступом по умолчанию: у struct члены публичные, у class — приватные. И то и другое может иметь конструкторы, методы и наследование. Различие соглашением: struct для простых наборов данных, class — когда есть инварианты, которые надо защищать.

7

Что такое полиморфизм и как его даёт `virtual`?

Ответ

Полиморфизм — это вызов одного интерфейса и получение поведения фактического типа. Пометка метода как virtual означает, что вызов разрешается по динамическому типу объекта во время выполнения, а не по статическому типу указателя. Без virtual вызов через указатель на базовый класс выполнит базовую версию — самый частый источник удивления у изучающих язык.

🦎

Прочитать ответы недостаточно

На собеседовании ты говоришь вслух под давлением. Кем задаст эти же вопросы, оценит каждый ответ и покажет, что именно подтянуть.

Пройти интервью Junior C++ →
Бесплатно · 3 интервью в месяц

Другие уровни — C++

Middle C++Senior C++Все вопросы C++

Другие специализации

🔍Junior QA Manual🤖Junior QA AutomationJunior Java Backend🐍Junior Python Backend🐘Junior PHP Backend🦫Junior Go Backend🟢Junior Node.js Backend💎Junior Ruby on Rails🟨Junior JavaScript⚛️Junior React Frontend