Ответ 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, даже в коде, который выглядит совершенно безвредным и интуитивным. Просить кандидата признать какой-то экземпляр этого может быть полезным, будь то пример "изменить ту же переменную дважды в одном выражении" выше или что-то другое.