Вернуться в каталог собеседований

С++ Собеседование. Middle Удивляет

Мок-интервью Middle C++-разработчика о микроархитектуре процессоров, оптимизации кода, STL, многопоточности, памяти и отладке. В конце приведён развёрнутый фидбек по ответам кандидата.

Ambushed Raccoon
  • Опубликовано на YouTube:
  • Просмотры на YouTube: 17,4 тыс.
  • Лайки на YouTube: 432
Открыть на YouTube

Таймлайн

Коротко о видео

Пробное собеседование 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 между хорошим и плохим коммитами.

Рекомендуем посмотреть