Какие типы интервью подходят для экрана телефона С++?

Любопытно, чтобы люди думали. Я проводил частые собеседования, и мне было достаточно в моей карьере, чтобы задуматься над ними, и я заметил широкий круг вопросов. Я сделал этот С++ конкретным, но стоит отметить, что у меня были люди, которые задавали мне алгоритмические вопросы сложности по телефону, и я даже не имею в виду, что такое сложность поиска хэша по сравнению с бинарным деревом, я имею в виду больше похоже на аналитическое проблемы, такие как "представьте, что есть 4 шмеля, каждый жужжит bla bla bla".

Теперь лично я предпочитаю держать телефонные экраны немного более конкретными и оставлять абстрактные вопросы для белой доски. Итак, при проведении телефонных интервью С++, какие темы вы затрагиваете, особенно для старших разработчиков?

Я знаю, что есть другой поток, похожий на это, но, откровенно говоря, он, похоже, полностью упустил точку зрения, что речь идет о экранах телефонов, а не о интервью, которые встречаются лицом к лицу. Плюс это больше С++.

Ответ 1

Я бы спросил об управлении ресурсами/памятью, потому что это важный вопрос на С++, и он не требует конкретного кода. Просто нарисуйте простой гипотетический сценарий и спросите, как они обеспечат освобождение жизненно важного ресурса даже перед лицом ошибок/исключений. Скажите, что они разрабатывают сетевое приложение, как они обеспечивают правильное закрытие наших сокетов? Разумеется, правильный ответ заключался бы в том, чтобы обернуть его в объект RAII, но не спрашивайте их напрямую (это легко для google "RAII", в то время как вышеупомянутый вопрос "как бы обеспечить, чтобы ресурсы были освобождены должным образом" на самом деле показывает вам, или нет, они знают подходящие методы.Если они ответят "оберните все в try/catch", у них может быть проблема. И это прекрасно связано с вопросами о различиях между кучей и стеком.

Возможно, вам удастся найти простой вопрос о безопасности исключений, который не требует никакого реального кода. В общем, я бы сказал, что обсуждение всех различных идиом С++ может быть хорошей идеей, потому что многие из них не требуют особого кода, но по-прежнему являются важными концепциями, специфичными для языка.

Посмотрите, знают ли они о умных указателях (опять же, предпочтитесь предоставить им ситуацию, когда требуются интеллектуальные указатели, и посмотреть, как они решат проблему) и, возможно, шаблоны /metaprogrammin (в последнем случае, возможно, просто узнайте если они знают, что это возможно, вместо того, чтобы требовать от них кода фактических метапрограмм на телефоне)

Вы также можете спросить о некоторых общих областях поведения undefined (каковы значения a и b после выполнения a = b++ + b++??) или выделить массив из 10 элементов и добавить 10 или 11 к указатель массива, и спросите, какой результат в каждом случае (+ = 10 является законным, дает указатель прошлого конца, + = 11 - undefined). Или дайте им сценарий, в котором им нужно скопировать много объектов, и спросите, как они это сделают (обычное циклическое копирование каждого элемента за раз, memcpy или std:: copy - очевидные ответы. Обратите внимание на предостережения с memcpy, что он небезопасен для объектов, отличных от POD)

Или спросите об их стиле кодирования в целом. Как они относятся к итераторам? Предпочитают ли они простые старые петли? Знают ли они, как использовать std:: for_each или std:: transform?

Изменить: Кажется, a = b++ + b++ (ответ undefined поведение, кстати) предложение, в частности, вызвало много комментариев. Возможно, люди слишком много читают об этом. Поскольку ОП сказал, что он предпочитает задавать конкретные (не абстрактные и легко объясняемые/отвечать/обсуждать по телефону) вопросы, которые могли бы немного рассказать о навыках С++ собеседника, и это просто (и да, возможно, nitpicky ) пример этого. Причиной этого является то, что 1) он имеет интуитивное значение, что неверно, и 2) вы должны иметь определенный уровень опыта с С++, прежде чем это осознаете. И, конечно, 3), коротко и легко спросить по телефону. Никому не нужно писать код. Нет, это не покажет, является ли кандидат "отличным программистом", но поскольку я понял этот вопрос, это тоже не было целью. Если кто-то ошибается, это совсем не значит, но если они понимают это правильно, вы можете быть уверены, что знают немного С++. Но если вы снова прочтете мой ответ, вы увидите, что это был просто быстрый пример категории вопросов, которые, как я думал, должны быть представлены. С++ полон поведения undefined, даже в коде, который выглядит совершенно безвредным и интуитивным. Просить кандидата признать какой-то экземпляр этого может быть полезным, будь то пример "изменить ту же переменную дважды в одном выражении" выше или что-то другое.

Ответ 2

Мне нравится выяснять, знают ли люди что-нибудь об инструментах, которые они используют. И я также считаю, что "старшие" разработчики могут иметь серьезные пробелы в своих знаниях.

Вы можете рассмотреть вопрос

  • Что такое vtable.
  • Как работают шаблоны.
  • Какая разница между кучей и стеком. Глубина ответа на этот вопрос может быть довольно освещающим!

"Вам действительно нужно взять интервью у меня" ответ на последний вопрос будет охватывать

  • распределение - лимиты, прецеденты, режимы сбоев, эффективность, очистка ресурсов, деструкторы
  • стек вызовов - что происходит, когда функция вызывается, параметры, обратные трассы

Ответ 3

Как часть экрана телефона для позиций С++, я спросил: "Кто такой Бьярне Страуструп".

Мне кажется удивительным, что многие люди, претендующие на звание старших разработчиков на С++, не могут идентифицировать. Подсказка для англоговорящих: перейдите к его FAQ и послушайте правильное произношение, прежде чем задавать вопрос.

Ответ 4

  • Шаблоны проектирования
  • Основы C/С++
  • Виртуальные функции
  • Полиморфизм
  • Понятия из серии Скотта Майера
  • О шаблонах. (Не в определенном порядке)

Последнее, но не менее важное. Я дам некоторую пробную проблему, которую я им скажу, чтобы создавать классы. Просто интерфейсы.