В то время как не возможное использование Литерала, возможно, BitConverter может также быть решением?
Я бы не стал заставлять их писать код. Вместо этого я бы дал им на проверку пару фрагментов кода.
Например, первый будет о проектировании по контракту : узнают, знают ли они, что такое предусловия, постусловия и инварианты. Сделайте пару небольших ошибок, например, никогда не инициализируйте целочисленное поле, но утверждая, что оно> = 0 в инварианте, и посмотрите, заметят ли они их.
Второй - дать им bool contains (char * inString, char c)
. Реализуйте это с помощью тривиального цикла. Затем спросите, есть ли ошибки. Конечно, ваш код здесь не проверяет наличие null во входном параметре inString
(даже если в самом предыдущем вопросе говорилось о предварительных условиях!). Кроме того, цикл заканчивается на символе 0. Конечно, кандидат должен определить возможные проблемы и настоять на использовании std :: string
вместо этой ерунды char *
. Это важно, потому что, если они все же пожалуются, вы будете знать, что они не будут добавлять свои собственные char *
в новый код.
Альтернатива, которая обращается к контейнерам STL : дайте им std :: vector
и код, который ищет простые числа или считает нечетные числа или что-то в этом роде. Сделайте небольшую ошибку. Посмотрите, найдут ли они какие-либо проблемы и поймут ли они код. Спросите, в какой ситуации std :: set
было бы лучше (когда вы собираетесь искать элементы систематически и исходный порядок входа не имеет значения).
Обсудите все вживую, давая возможность им подумать. пару минут. Уловите суть того, что они говорят. Не сосредотачивайтесь на «освещении» (сколько вещей они замечают), потому что некоторые люди могут быть в стрессе. Послушайте, что они на самом деле говорят, и посмотрите, есть ли в этом какой-то смысл.
Я не согласен с написанием кода в интервью. Я бы никогда никого не попросил писать код. Я знаю, что мой рукописный код в подобной ситуации, вероятно, не подходит. На самом деле меня редко просят об этом, но когда я
Так есть ли у кого-нибудь предложения?
Я бы порекомендовал получить копию этого:
т.е. неважно, получают ли они правильные ответы или нет, их то, как они подходят к проблеме, которая меня интересует
Вы можете попросить кандидата придумать дизайн UML для решения общей проблемы. Если они покажут вам шаблон дизайна, вы сможете обсудить плюсы и минусы этого шаблона. Затем вы можете попросить их написать код для одного из классов.
Это поможет вам определить их уровень технических знаний и их коммуникативные способности.
Я действительно забочусь о том, чтобы у них было хорошее твердое понимание указателей, а также понимание лежащих в основе различий между указателями и ссылками.
Проблемы со связными списками хороши для определения того, хорошо ли кандидат разбирается в указателях.
Что касается ссылок, вы можете показать им некоторый код, который неправильно использует ссылки, и попросить их описать проблему.
например, показать им определение класса, которое содержит ссылочную переменную-член, и реализацию конструктора со ссылкой отсутствует инициализация.
Мне также хотелось бы увидеть, как они подходят к оптимизации данной проблемы, потому что, по моему мнению, твердый и быстрый код является обязательным.
Я бы начал с простого ...
Покажите им пример кода, который передает строки в функцию по значению. (строки не должны изменяться в функции). Вы должны проверить, что они исправляют код, чтобы передать строки по константной ссылке.
После этого вы можете показать конструктор, который использует присваивание вместо инициализации (для объектов). Попросите их улучшить его.
Наконец, задайте им простые вопросы о выборе структуры данных.
например, когда им следует использовать список, а не вектор.
Если вы чувствуете, что они понимают основы, вы могли бы либо спросите, как они подходят к проблемам оптимизации (обсудите профилировщики и т. д.), либо попросите их оптимизировать что-нибудь менее очевидное.
Что бы вы ни делали, объединение было бы неплохо. Придумайте хорошую программу и объединитесь с парнем и работайте над решением проблемы. ИМХО, это очень хорошая идея
Вот мой ответ на аналогичный вопрос, касающийся C #, но обратите внимание, что мой ответ не зависит от языка . Мой вопрос на собеседовании на самом деле на языке C. Я редко беру интервью у человека, чтобы узнать, умеют ли он программировать. Я хочу узнать, могут ли они думать, решать проблемы, сотрудничать, общаться, понимать что-то новое и так далее. А пока я кружусь вокруг, пытаясь увидеть, «понимают ли они это» с точки зрения общей картины разработки программного обеспечения. Я использую вопросы по программированию, потому что это обычная основа и простая уловка.
Вы можете выбрать потенциально проблемную задачу и посмотреть, как они к ней подходят. Попросите их написать, например, умный указатель, вы увидите, понимают ли они указатели, ссылки и шаблоны за один шаг :) Обычно они нервничают, поэтому они будут делать ошибки, эти ошибки могут помочь вам узнать, насколько хорошо они умеют решать проблемы какие пути они использовали бы, чтобы исправить ошибку и так далее. Единственная проблема с этим подходом состоит в том, что иногда собеседник просто ничего не знает о задаче, и вам нужно быстро придумать что-то более простое. Если они создают идеальный код, вы можете обсудить их выбор, но когда не на что смотреть, это угнетает вас обоих.
Не проверяйте только C ++ и общие технические навыки! Они, конечно, важны, но они ничего не значат, если люди не слушают, не отвечают должным образом или не выполняют взятые на себя обязательства.
Максимум проверьте способность ясно общаться. Если люди не могут сказать вам, что примерно они делали на своей прежней работе в течение нескольких минут, они также не смогут сообщить о своей работе у вас и т. Д.
В недавно созданной компании мы пригласили людей на собеседования группами по 3 человека. люди вместе. Они были удивлены, но никого это не рассердило. Это было очень интересно, потому что людям приходилось общаться не только с нами, но и с другими в таком же положении. Если нам было интересно, мы договорились о втором интервью.
В зависимости от того, что ваша организация предварительно Скрининг похож на предположение, что человек ничего не знает о C ++ и только что добавил свое резюме, потому что это заставляет его выглядеть сверхтехническим. Шутки в сторону. Начни с чего-нибудь простого, как переворачивание струны. У меня были кандидаты, которые не могли даже написать для этого прототип функции !!
Эта статья предлагает некоторые общие идеи, которые актуальны независимо от того, с каким языком вы работаете.
Не забудьте также проверить на фанатизм кода . Я знаю, что не хочу, чтобы на меня или со мной работал кто-то, кто не был бы гибким и, следовательно, практичным программистом, как в своем отношении к языку программирования, так и в своем подходе к решению проблем.
Это дорогие мне характеристики. Способ тестирования для них не идеален, если собеседование не является длительным или не включает представление кода. Но показ фрагментов кода с намеренно спорными методами, предлагая сценарий варианта использования и спрашивая кандидата, как он думает о решении, - это один из способов.
Оформить заказ Guerrilla, руководство Джоэла по собеседованию . Похоже, очень похоже на то, что вы ищете.
Я считаю, что программисту на 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 ++.)
Последняя область, которую вы можете проверить с помощью более общих вопросов собеседования .
Эта - очень сложная задача, хотя и выглядит довольно безобидной.
A few questions can allow you to know a lot about a candidate:
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.
«Напишите программу, которая получает 3 целых числа в диапазоне 0..2 ^ 32-1 и проверяет, представляют ли они допустимые грани треугольника».
Кажется, простой вопрос. Вход считается действительным, если сумма любых двух ребер больше третьего ребра. Однако есть некоторые подводные камни, с которыми должен справиться хороший программист:
Хороший программист должен быть ориентирован на детали. Это простое упражнение поможет проверить, так ли это.