Вернуться в видеотекуС++ Собеседование. Middle Удивляет
Мок-интервью Middle C++-разработчика о микроархитектуре процессоров, оптимизации кода, STL, многопоточности, памяти и отладке. В конце приведён развёрнутый фидбек по ответам кандидата.
- Направление
- Разное
- Формат
- Мок-собеседование
- Грейд
- Middle
- Длительность
- 1 ч 5 мин
Коротко о видео
Пробное собеседование Middle C++-разработчика Андрея посвящено низкоуровневой разработке: конвейеру процессора, предсказанию переходов, branchless-подходам, структурам данных, многопоточности и управлению памятью. Андрей описывает свой опыт в функциональной симуляции и оптимизации branch predictor, а также обсуждает образование, работу с трассами исполнения и ELF-файлами. В финале интервьюер даёт обратную связь: техническая специализация кандидата сильная, но стоит улучшить подачу опыта и алгоритмическую подготовку; это мнение интервьюера в рамках мок-интервью.
Затронутые темы
Что взять на заметку
- Кандидат объясняет назначение branch predictor через предотвращение пузырей конвейера и приводит пример с выходом из циклов, для которого полезны данные профилирования.
- При branchless-программировании нужно сопоставлять цену неверного предсказания перехода с ценой вычисления обеих ветвей; перед оптимизацией участники рекомендуют профилирование.
- Для уникальных отсортированных данных обсуждается std::set, а для сбора уникальных адресов переходов в трассе исполнения — std::unordered_set; multiset рассматривается как более редкая структура с несколькими значениями на ключ.
- В многопоточном C++ обсуждаются гонки, атомарные операции и memory order: sequentially consistent, acquire, release и relaxed; кандидат подчёркивает сложность корректной проверки таких решений.
- Кастомный пул памяти может быть полезен для заранее известного объёма данных и уменьшения обращений к системному аллокатору, но предсказуемость абсолютных виртуальных адресов всё равно зависит от ОС.
- Для поиска утечки памяти называются Valgrind Memcheck, наблюдение за ростом потребления памяти и логирование new/delete; для локализации регрессии — git bisect между хорошим и плохим коммитами.