Если бы вы могли задать программисту C ++ один вопрос, чтобы измерить их навыки в C ++, что бы это было?
Вопрос, который я считаю лучшим, звучит так: можете ли вы назвать «удалить это»? внутри функции-члена? (Я поставил это как ссылку, чтобы вы могли сначала обдумать это, а затем перейти к «Лучшему вопросу об интервью C ++ - всегда!», Чтобы увидеть правильный ответ.)
Я не спрашиваю об этом, потому что ожидаю, что большинство людей узнают ответ. Если они это сделают, это не будет таким полезным вопросом. Я прошу посмотреть, смогут ли они найти правильный ответ и как они это делают.
Лучший вопрос для интервью на C ++ - это проблема программирования, а не вопрос викторины.
источник
CString
,char*
,std::string
и т.д .; они возвращают новую строку или возвращаются на место; они вручную зацикливаются на символах или они вызывают библиотечную функцию. И, конечно, если они не могут сделать что-то простое, например, перевернуть строку, это также многое о них говорит! Есть также много дополнительных вопросов, например, работает ли он с Unicode, работает ли он с UTF-8 и т. Д.Я бы спросил их, что им нравится в C ++ 0x. Исходя из этого, я мог «подковать» их в различные стереотипы:
Скорее всего, некоторые из этих ведер идеально подходят для вас, а некоторые - «спасибо, что пришли». Как вопрос, который быстро дает вам много информации, это мой победитель.
источник
Я несколько удивлен, почему "вы можете удалить это?" считается интересным вопросом. Любой, кто написал COM-код на C ++, знает, что самое первое, что вы узнаете в первый день базового программирования COM, - это как правильно использовать «delete this». Я полагаю, что было бы полезно определить, скажем, кто-то говорит в своем резюме о написании COM-программ, но в качестве вопроса общего знания C ++, если кто-то не может ответить на него немедленно, тогда он не подойдет для моей команды.
В любом случае, если ваша цель - придумать вопрос, который измеряет навыки C ++, то выбор одного вопроса - неправильный путь. Поверни это другой стороной. Правильный вопрос:
Это не тот вопрос, который дает вам ответ, который вы хотите. Все говорят «восемь», независимо. Вопрос, который дает вам нужный ответ:
И бум , теперь вы их получили. Если кандидат думает, что «что-то делать с рекурсией» или «когда использовать виртуальный деструктор» - это такая вещь, с которой семеркам тяжело, то вы знаете, что они немного знают о рекурсии или деструкторах или чем-то еще и что их знания не идут намного дальше, чем это.
Это должно дать вам гораздо лучшую калибровку, чем придумать вопрос по пустякам. Если бы вы заставили меня придумать один хороший вопрос о факте о C ++, я бы, вероятно, спросил что-то вроде: «Как бы вы спроектировали семантический анализатор и генератор кода для той части компилятора C ++, которая работает с виртуальными методами? вызывается в деструкторе базового класса? Вам следует задавать вопросы, связанные с реальными вещами, над которыми вы работаете, и над которыми, вероятнее всего, будет работать кандидат. Это проблема, над которой мне пришлось поработать один раз, и я думаю, что это дало бы довольно хорошее представление о том, как человек разрабатывает семантические анализаторы и генераторы кода, а также свои знания C ++.
источник
Просто для удовольствия, у меня были программисты на C ++, которые шатались с этим маленьким ребенком:
Почему это приводит к бесконечному циклу (и да, он напечатан правильно)?
Удивительно, сколько их споткнуло. Конечно, я больше не могу использовать его после того, как он появился в переполнении стека . Бормочет ... бормочет ...
(Чтобы получить правильный ответ, прочитайте признание и обязательно прочитайте комментарии)
Добавлен бонусный вопрос
Существует классическая классическая FizzBuzz (как показано в знаменитой статье Coding Horror ). Я никогда не использовал его на собеседовании, но после того, как однажды пообедал с командой разработчиков, результаты были ... хм ... удивительно точными.
исповедь
Я был пойман на стандартном ответе "x ++ возвращает исходное значение". Тем не менее, правильный ответ заключается в том, что поведение не определено из-за точек последовательности. Никто никогда не упоминал точки последовательности во все времена, когда я использовал это, пока я не разместил это здесь.
Я получил образование и искренне хотел бы поблагодарить всех тех, кто нашел время, чтобы прокомментировать.
источник
Первое, что нужно задать, это простой вопрос об указателях. Я был удивлен, увидев, сколько людей, которые утверждают, что знают C ++ или, что еще хуже, C, не могут ответить на него. Тогда я бы задал простой вопрос о виртуальных функциях. Эта комбинация очень быстро говорит вам, знает ли человек C ++.
источник
Это во многом зависит от того, какой C ++ написан в вашей компании. (Когда мне приходилось нанимать программистов на C ++, я никогда не спрашивал об этом
delete
, потому что я спрашивал их о методах, позволяющих избежать написанияdelete
вообще.)В идеале вы хотите нанять людей, которые пишут код выше уровня того, что в настоящее время пишет ваша команда, но не слишком высоко над ним, если только вы не хотите объединить это с обучением команды, чтобы поднять его на более высокий уровень.
источник
источник
Я полагаю, я бы спросил их, что еще они знают, или, скорее всего, задаст им вопрос в чем-то совершенно ином.
Слишком много программистов на C ++, которые мало знают о других языках. Узкий опыт обычно ограничен.
источник
Лучший вопрос для великого разработчика C ++: «Скажите мне, почему мы НЕ должны использовать C ++?»
источник
Я не думаю, что есть лучший вопрос C ++. C ++ - такой большой язык, а с C ++ 0X он вырос, так что вы можете быть сильным в определенном поддомене языка и совсем немного в другой части языка. Вопрос «одним выстрелом» будет использовать только чье-то знание небольшой части языка и рискует упустить из виду его или ее знание других аспектов языка.
источник
На StackOverflow есть куча. Я поделюсь несколькими:
/programming/2428404/tricky-interview-question-for-c
/programming/50447/favorite-c-interview-question
/programming/4269838/interview-question
/programming/2532102/can-a-pointer-ever-point-to-itself
/programming/3055141/interview-question-about-virtual-functions-in-c
источник
Мой любимый вопрос прост:
а) Вы начали с C, а затем переключились на C ++?
б) Если да, то какие первые вещи вы научились делать по-другому?
Этот ответ обычно дает мне представление о том, как программист подходит к С ++, и в целом понимает ООП и С ++.
здесь нет «правильного» или «неправильного» ответа, но обычно это отличный способ понять, откуда происходит кандидат.
источник
Я бы на самом деле подарил человеку немного кода из другого языка программирования, который был бы объектно-ориентированным и, желательно, отсутствовал в списке языков, которые он знает. Код должен представлять собой простую задачу, выполняемую на этом языке.
Смысл этого не в том, чтобы определить свои знания C ++, а в том, насколько хорошо они понимают программирование. Когда вы понимаете основные принципы программирования, вы можете решать проблемы.
источник
Как вы реализуете виртуальные функции в C ++, объясните сценарий реального мира.
источник
В данный момент я бы сказал: «Как бы вы реализовали конструктор перемещения для контейнера?»
Мое обоснование состоит в том, что, поскольку конструкторы перемещения являются функцией следующего стандарта, а не текущего, ответ кандидата будет указывать, активно ли рассматриваемый разработчик изучает свой язык или просто придерживается приемов, которые он знает.
источник
Я думаю , я бы спросить их мнение о дизайне, скажем,
std::string
. Я бы также спросить их , если они использовали другие конструкции (например, MFC / ATLCString
,wxString
и т.д.) и при условии , что они имеют, попросите их сравнить и сопоставить конструкции.Строки используются достаточно широко, поэтому почти любой, имеющий реальный опыт использования C ++, должен был использовать хотя бы один или два из вышеперечисленных. Почти все конструкции воплощают некоторые компромиссы между теоретической чистотой и практическим использованием. Некоторые могут работать очень хорошо, но только если они используются точно по назначению, в то время как другие обменивают большую универсальность на некоторую возможную неуклюжесть. Короче говоря, почти любой, кто имеет реальный опыт должен быть в состоянии выразить некоторые значимые мнения о своих разработках, и эти мнения должны рассказать вам достаточно о том, как они думают, как они проектируют код, степень, в которой они ценят прагматизм по сравнению с теоретической чистотой, и так далее.
источник