Интервью C++ - тестирование потенциальных кандидатов

В то время как не возможное использование Литерала, возможно, BitConverter может также быть решением?

22
задан eeerahul 5 October 2011 в 08:37
поделиться

14 ответов

Я бы не стал заставлять их писать код. Вместо этого я бы дал им на проверку пару фрагментов кода.

Например, первый будет о проектировании по контракту : узнают, знают ли они, что такое предусловия, постусловия и инварианты. Сделайте пару небольших ошибок, например, никогда не инициализируйте целочисленное поле, но утверждая, что оно> = 0 в инварианте, и посмотрите, заметят ли они их.

Второй - дать им bool contains (char * inString, char c) . Реализуйте это с помощью тривиального цикла. Затем спросите, есть ли ошибки. Конечно, ваш код здесь не проверяет наличие null во входном параметре inString (даже если в самом предыдущем вопросе говорилось о предварительных условиях!). Кроме того, цикл заканчивается на символе 0. Конечно, кандидат должен определить возможные проблемы и настоять на использовании std :: string вместо этой ерунды char * . Это важно, потому что, если они все же пожалуются, вы будете знать, что они не будут добавлять свои собственные char * в новый код.

Альтернатива, которая обращается к контейнерам STL : дайте им std :: vector и код, который ищет простые числа или считает нечетные числа или что-то в этом роде. Сделайте небольшую ошибку. Посмотрите, найдут ли они какие-либо проблемы и поймут ли они код. Спросите, в какой ситуации std :: set было бы лучше (когда вы собираетесь искать элементы систематически и исходный порядок входа не имеет значения).

Обсудите все вживую, давая возможность им подумать. пару минут. Уловите суть того, что они говорят. Не сосредотачивайтесь на «освещении» (сколько вещей они замечают), потому что некоторые люди могут быть в стрессе. Послушайте, что они на самом деле говорят, и посмотрите, есть ли в этом какой-то смысл.

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

21
ответ дан 29 November 2019 в 03:29
поделиться

Так есть ли у кого-нибудь предложения?

Я бы порекомендовал получить копию этого:

http://www.amazon.co.uk/Programming-Interviews-Exposed -Secrets-Programmer / dp / 047012167X / ref = sr_1_1? Ie = UTF8 & s = books & qid = 1252499175 & sr = 8-1

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

Вы можете попросить кандидата придумать дизайн UML для решения общей проблемы. Если они покажут вам шаблон дизайна, вы сможете обсудить плюсы и минусы этого шаблона. Затем вы можете попросить их написать код для одного из классов.

Это поможет вам определить их уровень технических знаний и их коммуникативные способности.

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

Проблемы со связными списками хороши для определения того, хорошо ли кандидат разбирается в указателях.

Что касается ссылок, вы можете показать им некоторый код, который неправильно использует ссылки, и попросить их описать проблему.

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

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

Я бы начал с простого ...

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

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

Наконец, задайте им простые вопросы о выборе структуры данных.

например, когда им следует использовать список, а не вектор.

Если вы чувствуете, что они понимают основы, вы могли бы либо спросите, как они подходят к проблемам оптимизации (обсудите профилировщики и т. д.), либо попросите их оптимизировать что-нибудь менее очевидное.

0
ответ дан 29 November 2019 в 03:29
поделиться

Что бы вы ни делали, объединение было бы неплохо. Придумайте хорошую программу и объединитесь с парнем и работайте над решением проблемы. ИМХО, это очень хорошая идея

0
ответ дан 29 November 2019 в 03:29
поделиться

Вот мой ответ на аналогичный вопрос, касающийся C #, но обратите внимание, что мой ответ не зависит от языка . Мой вопрос на собеседовании на самом деле на языке C. Я редко беру интервью у человека, чтобы узнать, умеют ли он программировать. Я хочу узнать, могут ли они думать, решать проблемы, сотрудничать, общаться, понимать что-то новое и так далее. А пока я кружусь вокруг, пытаясь увидеть, «понимают ли они это» с точки зрения общей картины разработки программного обеспечения. Я использую вопросы по программированию, потому что это обычная основа и простая уловка.

2
ответ дан 29 November 2019 в 03:29
поделиться

Вы можете выбрать потенциально проблемную задачу и посмотреть, как они к ней подходят. Попросите их написать, например, умный указатель, вы увидите, понимают ли они указатели, ссылки и шаблоны за один шаг :) Обычно они нервничают, поэтому они будут делать ошибки, эти ошибки могут помочь вам узнать, насколько хорошо они умеют решать проблемы какие пути они использовали бы, чтобы исправить ошибку и так далее. Единственная проблема с этим подходом состоит в том, что иногда собеседник просто ничего не знает о задаче, и вам нужно быстро придумать что-то более простое. Если они создают идеальный код, вы можете обсудить их выбор, но когда не на что смотреть, это угнетает вас обоих.

2
ответ дан 29 November 2019 в 03:29
поделиться

Не проверяйте только C ++ и общие технические навыки! Они, конечно, важны, но они ничего не значат, если люди не слушают, не отвечают должным образом или не выполняют взятые на себя обязательства.

Максимум проверьте способность ясно общаться. Если люди не могут сказать вам, что примерно они делали на своей прежней работе в течение нескольких минут, они также не смогут сообщить о своей работе у вас и т. Д.

В недавно созданной компании мы пригласили людей на собеседования группами по 3 человека. люди вместе. Они были удивлены, но никого это не рассердило. Это было очень интересно, потому что людям приходилось общаться не только с нами, но и с другими в таком же положении. Если нам было интересно, мы договорились о втором интервью.

3
ответ дан 29 November 2019 в 03:29
поделиться

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

3
ответ дан 29 November 2019 в 03:29
поделиться

Эта статья предлагает некоторые общие идеи, которые актуальны независимо от того, с каким языком вы работаете.

3
ответ дан 29 November 2019 в 03:29
поделиться

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

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

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

4
ответ дан 29 November 2019 в 03:29
поделиться

Оформить заказ Guerrilla, руководство Джоэла по собеседованию . Похоже, очень похоже на то, что вы ищете.

5
ответ дан 29 November 2019 в 03:29
поделиться

Я считаю, что программисту на C ++ нужно больше, чем просто общие навыки программирования, потому что ...

В C ++ сложнее выстрелить себе в ногу, но когда вы это делаете, вы сдуваетесь на всю ногу.

Написание безошибочного, поддерживаемого кода на C ++ предъявляет гораздо более высокие требования к нескольким областям, чем большинство языков.

Одна вещь я назову «педантичностью». Вы знаете, как некоторые люди могут с первого взгляда выявлять орфографические ошибки? Программист на C ++ должен уметь обнаруживать простые ошибки при чтении или написании кода (независимо от того, является ли код его собственным или нет). Программист, который полагается на технику «компиляции и тестирования» только для того, чтобы избавиться от простых ошибок, несовместим с языком C ++, потому что эти ошибки не всегда приводят к немедленному отказу в C ++.

Программистам на C ++ также нужно хорошо разбираться в низкоуровневых вещах. Указатели, распределители памяти, блокировки, взаимоблокировки. И "мелкие" проблемы C ++, такие как множественное наследование, скрытие методов и тому подобное, особенно если им нужно поддерживать чужой код.

Наконец, программисты на C ++ должны иметь возможность писать код, который будет легко использовать другим людям. Могут ли они хорошо разрабатывать вещи?

Хорошим тестом для первых двух областей является «Вот код C ++, который я получил из Интернета. Найдите ошибки и определите ненужные биты». (В Интернете есть много действительно плохого кода C ++, и часто программист делает ненужные вещи из-за неправильного понимания того, как быть «безопасным» на C ++.)

Последняя область, которую вы можете проверить с помощью более общих вопросов собеседования .

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

Наконец, программисты на C ++ должны иметь возможность писать код, который будет легко использовать другим людям. Могут ли они хорошо разрабатывать вещи?

Хорошим тестом для первых двух областей является «Вот код C ++, который я получил из Интернета. Найдите ошибки и определите ненужные биты». (В Интернете есть много действительно плохого кода C ++, и часто программист делает ненужные вещи из-за неправильного понимания того, как быть «безопасным» на C ++.)

Последняя область, которую вы можете проверить с помощью более общих вопросов собеседования .

распределители памяти, блокировка, взаимоблокировки. И "мелкие" проблемы C ++, такие как множественное наследование, скрытие методов и тому подобное, особенно если им нужно поддерживать чужой код.

Наконец, программисты на C ++ должны иметь возможность писать код, который будет легко использовать другим людям. Могут ли они хорошо разрабатывать вещи?

Хорошим тестом для первых двух областей является «Вот код C ++, который я получил из Интернета. Найдите ошибки и определите ненужные биты». (В Интернете есть много действительно плохого кода C ++, и часто программист делает ненужные вещи из-за неправильного понимания того, как быть «безопасным» в C ++.)

Последняя область, которую вы можете проверить с помощью более общих вопросов собеседования .

например, множественное наследование, скрытие методов и тому подобное, особенно если им нужно поддерживать чужой код.

Наконец, программисты на C ++ должны иметь возможность писать код, который будет легко использовать другим людям. Могут ли они хорошо разрабатывать вещи?

Хорошим тестом для первых двух областей является «Вот код C ++, который я получил из Интернета. Найдите ошибки и определите ненужные биты». (В Интернете есть много действительно плохого кода C ++, и часто программист делает ненужные вещи из-за неправильного понимания того, как быть «безопасным» в C ++.)

Последняя область, которую вы можете проверить с помощью более общих вопросов собеседования .

например, множественное наследование, скрытие методов и тому подобное, особенно если им нужно поддерживать чужой код.

Наконец, программисты на C ++ должны уметь писать код, который будет легко использовать другим людям. Могут ли они хорошо разрабатывать вещи?

Хорошим тестом для первых двух областей является «Вот код C ++, который я получил из Интернета. Найдите ошибки и определите ненужные биты». (В Интернете есть много действительно плохого кода C ++, и часто программист делает ненужные вещи из-за неправильного понимания того, как быть «безопасным» на C ++.)

Последняя область, которую вы можете проверить с помощью более общих вопросов собеседования .

Могут ли они хорошо разрабатывать вещи?

Хорошим тестом для первых двух областей является «Вот код C ++, который я получил из Интернета. Найдите ошибки и определите ненужные биты». (В Интернете есть много действительно плохого кода C ++, и часто программист делает ненужные вещи из-за неправильного понимания того, как быть «безопасным» в C ++.)

Последняя область, которую вы можете проверить с помощью более общих вопросов собеседования .

Могут ли они хорошо разрабатывать вещи?

Хорошим тестом для первых двух областей является «Вот код C ++, который я получил из Интернета. Найдите ошибки и определите ненужные биты». (В Интернете есть много действительно плохого кода C ++, и часто программист делает ненужные вещи из-за неправильного понимания того, как быть «безопасным» в C ++.)

Последняя область, которую вы можете проверить с помощью более общих вопросов собеседования .

7
ответ дан 29 November 2019 в 03:29
поделиться

Эта - очень сложная задача, хотя и выглядит довольно безобидной.

14
ответ дан 29 November 2019 в 03:29
поделиться

A few questions can allow you to know a lot about a candidate:

  • Differences between a pointer and a reference, when would you use each?
  • Why would you make a destructor virtual?
  • Where is the construction order of a class attributes defined?
  • Copy constructor and operator=. When would you implement them? When would you make them private?
  • When would you use smart pointers? what things would you take into account to decide which?
  • Where else have you seen RAII idiom?
  • When would you make a parameter const? when a method?
  • When would you make an attribute mutable?
  • What is virtual inheritance?
  • What is template specialization?
  • What are traits?
  • What are policies?
  • What is SFINAE?
  • What do you know about C++Ox standard?
  • What boost libraries have you used?
  • What C++ books have you read? (Sutter? Alexandrescu?)

Some short exercises (no more than 10 minutes) about STL containers, memory management, slicing, etc. would also be useful. I would allow him to do it in a computer with a ready environment. It's important to observe the agility.

6
ответ дан 29 November 2019 в 03:29
поделиться

«Напишите программу, которая получает 3 целых числа в диапазоне 0..2 ^ 32-1 и проверяет, представляют ли они допустимые грани треугольника».

Кажется, простой вопрос. Вход считается действительным, если сумма любых двух ребер больше третьего ребра. Однако есть некоторые подводные камни, с которыми должен справиться хороший программист:

  • Правильный тип для использования должен быть беззнаковым длинным. Многие «программисты» здесь потерпят неудачу.
  • Нулевые значения следует рассматривать как недействительные.
  • Следует избегать переполнения: «if (a + b <= c) return false» проблематично, поскольку a + b может вызвать переполнение.
  • if (a <= cb) также является плохим решением, поскольку cb может быть отрицательным. Не подходит для беззнаковых типов.
  • if (c> b) {if (a <= cb) return false; } else {if (a <= bc) return false; } Это выглядит намного лучше, но не будет работать правильно, если (a> = b + c).

Хороший программист должен быть ориентирован на детали. Это простое упражнение поможет проверить, так ли это.

5
ответ дан 29 November 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: