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

Senior C++Питання на співбесіді C++

Senior · 5+ років досвіду

Співбесіда з C++ перевіряє три речі: чи розумієте ви обʼєктну модель, чи можна довірити вам памʼять і чи знаєте ви, чого коштує стандартна бібліотека. Нижче питання, які ставлять найчастіше, кожне з еталонною відповіддю. Senior: архітектуру, трейд-офи, менторство та прийняття рішень.

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

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

5 питань рівня Senior з відповідями

1

Як промахи кешу впливають на розкладку даних?

Відповідь

Промах в основну памʼять коштує близько двох сотень тактів, тому теоретично краща структура здатна програти неперервному масиву з розгромним рахунком. Звідси розкладка даних під спосіб обходу: структура масивів, коли ви чіпаєте одне поле в багатьох обʼєктів, пакування гарячих полів поруч і відмова від бігу за вказівниками у внутрішньому циклі. Хибне розділення — та сама проблема навиворіт: два потоки пишуть у різні змінні однієї кеш-лінії і серіалізуються на ній, лікується вирівнюванням до лінії.

2

Коли виправданий lock-free і чим він відрізняється від wait-free?

Відповідь

Lock-free гарантує, що прогрес робить хоч якийсь потік; wait-free — що кожен потік завершить операцію за обмежену кількість кроків. Lock-free виправданий за реальної конкуренції на невеликій, добре зрозумілій структурі — черга, лічильник, — де мʼютекс вимірювано домінує. Як вибір за замовчуванням він не виправданий: такий код важко написати вірно і важко тестувати, а неконкурентний мʼютекс швидкий, тому чесна відповідь починається з вимірювання.

3

Поясніть упорядкування памʼяті в `std::atomic`.

Відповідь

seq_cst стоїть за замовчуванням і дає єдиний спільний порядок для всіх потоків — коректно і найпростіше для міркувань. Пара acquire/release встановлює happens-before між звільняючим записом і захоплюючим читанням: саме це всередині робить мʼютекс, і цього досить для більшості схем виробник-споживач. relaxed гарантує лише атомарність без порядку і доречний для чогось на кшталт лічильника статистики. Послаблення порядку — виміряна оптимізація, а не точка старту.

4

Проєкт збирається двадцять хвилин. З чого почати?

Відповідь

Спершу виміряти: які одиниці трансляції і які заголовки домінують. Потім різати граф включень — попередні оголошення замість include, PIMPL на широко включуваних класах, винесення шаблонів звідти, де вартість інстанціювання реальна. Далі механічні виграші: передкомпільовані заголовки, ccache, паралелізм, unity-збірки і лінкер на кшталт lld чи mold. Модулі розвʼязують це по-справжньому там, де тулчейн до них готовий.

5

Код працює повільніше, ніж має. Який у вас метод?

Відповідь

Починати з відтворюваного вимірювання, бо інтуїція щодо продуктивності C++ помиляється достатньо часто, щоб бути небезпечною. Профілювати, щоб знайти, куди справді йде час, і дивитися на алгоритм раніше за мікрооптимізації. Перевіряти, що зробив оптимізатор, а не припускати: згенерований код відповідає на питання, на які читання джерела відповісти не може. І контролювати середовище — прапорці збірки, прогріті кеші, стрибки частоти й шум від інших процесів інакше дадуть цифри, яких немає.

🦎

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

На співбесіді ти говориш вголос під тиском. Кем поставить ті самі питання, оцінить кожну відповідь і покаже, що саме підтягнути.

Пройти інтерв'ю Senior C++ →
Безкоштовно · 3 інтерв'ю на місяць

Інші рівні — C++

Junior C++Middle C++Усі питання C++

Інші спеціалізації

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