Сегодня я провел свое первое собеседование с потенциальными интернами. Хотя это были в основном открытые вопросы, у меня были некоторые тривиальные задачи для них:
- Напишите функцию, которая возвращает true, если стороны треугольника (все целые числа) a, b и c могут представлять собой прямоугольный треугольник .
- FizzBuzz.
- Вычислить N-й элемент Фибоначчи, используя рекурсию (если бы они не знали, что такое Фибоначчи , я бы даже написал им определение F (n) = F (n-1) + F (n-2); F (1) = 1; F (0) = 1).
- Реализуйте структуру List для целого числа и напишите функцию, чтобы обратить его.
Это, очевидно, очень простые задачи, и я не был готов к тому, что кто-то не решит их.
Как мне действовать, когда они борются с этими вопросами? Должен ли я отказаться от ответа? Дайте подсказку за подсказкой (я так и сделал и сам решил проблему)? Или просто двигаться дальше (или, может быть, просто остановиться) с интервью?
пс. Имея проблемы с вопросами, я не имею в виду, как иметь ошибку, я имею в виду, если они не могут даже начать. Это был случай с вопросами Фибоначчи и Листа.
interview
internship
Миколас Симутис
источник
источник
Ответы:
Вы сказали, что вы проводите собеседование для стажировок в этом вопросе, так что с этой точки зрения, для разработчиков, работающих полный рабочий день, планка будет немного выше.
Когда вы берете интервью у стажеров, вы должны помнить, что они, возможно, не закончили учебу и что они также могли поступить в колледж без каких-либо предварительных знаний в области программирования и информатики. Таким образом, вам нужно масштабировать ожидания в соответствии с тем, что вы можете разумно ожидать от кого-то, и в какой-то степени престиж этой должности (т. Е. Google может сойти с ожиданий, о которых не может услышать компания, о которой люди не слышали).
Просматривая вопросы, которые вы представили, я, скорее всего, рассмотрю их в следующем интервью:
Основное применение геометрии с простым кодированием, большинство студентов должно быть в состоянии сделать это без особых затруднений. Самое большее напоминание о теореме Пифагора может понадобиться, если они демонстрируют небольшое напряжение из-за присутствия на собеседовании. Это почти можно рассматривать как проблему «повышения эго» в том смысле, что она может помочь успокоить некоторых людей, если они очень нервничают, идя на собеседование.
Опять же, еще одно применение некоторых основных контрольных утверждений. Студентам, которые не сталкивались с оператором модуля или не пользовались им часто, может потребоваться напомнить об этом, но они не должны сталкиваться с какими-либо реальными проблемами при решении проблемы.
Это, как правило, довольно распространенная проблема, поэтому большинство (если не все) студенты увидят ее в какой-то момент до окончания учебы. Загвоздка в том, что она обычно проявляется, когда рекурсия представляется учащимся, поскольку она хорошо себя зарекомендовала, или рекурсивное или циклическое решение, которое затем можно сравнить, чтобы учащиеся из разных школ могли видеть его в разное время в зависимости от последовательности курсов. На практике, если кто-то не мог придумать рекурсив, я попросил бы альтернативу, использующую циклы, и если они не могли придумать это, я бы больше беспокоился о их потенциальных возможностях.
Этот вопрос на самом деле может быть слишком открытым, так как он написан, поэтому он также может быть хорошим вопросом, чтобы увидеть, как кандидат ищет дополнительную информацию (например, должны ли быть удалены функции, преобразование в массивы и т. Д.), Но с учетом определенная постановка задачи («Реализовать базовую структуру списка для целых чисел, которая позволяет добавлять числа в конец или по произвольному индексу, удалять и включать функцию, возвращающую обратную копию списка»), ученики должны иметь возможность решать проблема в том, что списки представляют собой общую структуру, представленную либо в раннем курсе структур данных, либо в раннем базовом курсе информатики.
Что касается работы с кандидатами, если они испытывают трудности, убедитесь, что они расслаблены, и дайте им немного снисходительности, поскольку они могут просто испытывать беспокойство по поводу производительности, поскольку это может быть их первое настоящее собеседование. Могут потребоваться советы по решению проблем, особенно в случае третьей и четвертой проблем, а не первых двух.
Кроме того, структурируйте весь процесс собеседования таким образом, чтобы в нем были встроены точки «изящного выхода». Например, у вас может быть следующая повестка дня:
Этот поток интервью имеет тенденцию работать хорошо, если вы хотите иметь возможность отстранить кандидатов раньше, поскольку они знают с самого начала, что они могут быть уволены после перерыва. Короткое интервью перед викториной также означает, что они не просто появляются, чтобы сдать тест, что дает им некоторую практику интервью, а также может позволить им решить, что они не подходят. Если есть другие программисты, наблюдающие за тестом или помогающие кандидату во время него, то это также дает им возможность пройти / не пройти кандидата во время короткого перерыва.
Всегда, когда вы проходите собеседование для прохождения практики, а кандидаты являются студентами, вы должны помнить, что они все еще являются студентами и могут не практиковаться в проведении собеседований (что ведет к возможному беспокойству по поводу успеваемости), а также, возможно, не достигли точки в своих исследованиях, чтобы даже быть в состоянии ответить на вопросы, что означает, что было бы хорошей идеей отправить их по пути с копией «идеального (ых) решения (й)» для поставленных задач.
источник
Моя цель для любого собеседования при приеме на работу, независимо от того, на чьей я стороне, состоит в том, чтобы в конечном итоге почувствовать, что я разговариваю с коллегой. Коллеги приходят ко мне в офис все время, когда они сталкиваются с проблемой. Я прошу коллег о помощи, когда застреваю сам. Поэтому в интервью я пытаюсь воссоздать эту динамику.
Другими словами, что бы вы сказали, если коллега должен был реализовать последовательность Фибоначчи и не знал, что это такое? Вы объясните это им, пока они не поймут это достаточно, чтобы продолжить самостоятельно. В невежестве нет ничего постыдного, если оно не вечно.
Если вы выполнили это упражнение и все еще не можете представить себя работающим с этим человеком, тогда они не подходят для этой работы.
источник
Задача задавать подобные вопросы на собеседовании - определить, может ли кто-нибудь понять, как решать проблемы. Работа программиста обычно состоит из двух вещей: «Возьмите эти требования и внедрите их в код» и «выясните, почему реализация не соответствует требованиям, и исправьте их». Поэтому то, что вы действительно ищете, - это не решение этих конкретных вопросов, а способность разобраться.
Понимая это, я дал бы намек или два, чтобы кто-то начал, и, может быть, еще немного, если бы стало ясно, что они добиваются реального прогресса, но где-то упускают детали. Но если станет ясно, что они просто не могут понять, как решить проблему, тогда у вас есть ответ, и нет необходимости продолжать упражнение.
В качестве примера, когда я брал интервью у меня на текущей работе, мне был задан вопрос о поиске кратчайшего пути от одного узла к другому на графике. Я ответил, что, вероятно, использую что-то вроде алгоритма Дейкстры, который я смутно помнил, когда узнал об одном дне в колледже, и с тех пор никогда не использовал его, и дал быстрое (и неверное) объяснение этого, которое удовлетворяло конкретным условиям, заданным вопрос. Интервьюер указал, что мое решение окажется в бесконечном цикле, если график будет немного изменен, и это потрясло мою память, поэтому я объяснил правильный способ избежать этой проблемы. И я закончил тем, что получил работу.
источник
для стажировки вы могли бы спросить немного много.
Я понятия не имею, что вы подразумеваете под 4-м вопросом. Что касается вопроса о рекурсии, он немного непрактичен, просмотрите свою собственную кодовую базу и определите количество областей, в которых используется рекурсия, я готов поспорить, что их мало - нет. Ситуации интервью являются стрессовыми, и ожидание того, что кандидаты будут реализовывать редко используемые стратегии, которые имеют обратный характер по сравнению с большинством вещей, которые вы когда-либо будете программировать, несправедливо по отношению к ним, особенно в начале интервью. Лично я буду задавать вопросы, где они должны объяснить, что значат важные понятия / как они используются, предоставляя примеры из практики. Я был бы гораздо больше заинтересован в кандидатах, которые могут сказать вам, что X book или Google Y search предоставят все необходимое для реализации чего-либо в вашей кодовой базе.
источник
ИМХО, ваши первые два вопроса должны быть разрешены для любого, кто называет себя программистом, будь то младший или старший, прямо из школы или самоучка.
Если я увижу, что интервьюер борется с любым из них, я бы попытался перефразировать проблему и проверить, полностью ли он ее понял. Затем предложите ей использовать ручку и бумагу, доску, рисовать фигуры или любой другой подход, который она предпочитает для решения проблемы. Я также прошу ее мыслить вслух, чтобы понять ее мыслительный процесс и, при необходимости, дать небольшие подсказки, если она находится на правильном пути, просто не смеет продвигаться или имеет какое-то препятствие. Но если даже несколько подсказок не помогут, или - как вы упомянули выше - я решу проблему для нее, я, вероятно, закончу интервью, чтобы больше не тратить наше время. В интервью я всегда стараюсь увидеть и сосредоточиться на том, что знает кандидат, а не на том, что она не знает, но если мне кажется, что я не могу найти каких-либо существенных знаний, я сдаюсь через некоторое время.
3-й и 4-й являются несколько более сложными, поэтому я мог бы согласиться, если бы младший не смог их получить, если бы он продемонстрировал хороший подход к решению проблем и энтузиазм. Но для старшего они все еще необходимы.
источник
Мне пришлось посмотреть, что вы имели в виду под "FizzBuzz"; Оказывается, я слышал об игре и ее правилах, но не с таким названием и не скоро. Так что не думайте, что вам не нужно давать ЛЮБУЮ информацию собеседникам.
Тем не менее, это все основные проблемы кодирования, которые, как я ожидаю, кто-то опрашивает даже для позиции кодирования начального уровня, сможет продумать свой путь, если они не смогут кодировать ответ проверкой. Так что мы на одной странице. Ответ на вашу проблему зависит от того, как они ошибаются:
Незначительные синтаксические проблемы: если вы ожидаете код на определенном языке, не рассчитывайте слишком сильно, если они пропускают точку с запятой или неправильно пишут одно использование некоторого идентификатора. Большинство IDE сразу же это поймут, и все время от времени делают опечатки. Почти в каждом интервью, в котором я должен был что-то кодировать, «псевдо-C-иш» был приемлемым, если алгоритм был должным образом передан интервьюеру и логика была разумной.
Незначительный логический недостаток: если алгоритм будет вести себя так, как ожидалось, в большинстве, но не во всех ожидаемых сценариях (скажем, при кодировании FizzBuzz, 15 приведет только к «Fizz» или «Buzz», но не к обоим, как предполагалось), тогда будьте «модульным тестером» и укажите, что в этом случае алгоритм потерпит неудачу, и посмотрите, смогут ли они это исправить. Возможно, они упустили из виду этот конкретный случай или не полностью поняли требования. И то, и другое снова вполне понятно, повседневные случаи в кодировании, которые должны быть легко преодолены путем простого предоставления дополнительной информации или обратной связи.
Основные логические недостатки: если алгоритм не пройдет большинство или каких-либо тестовых сценариев, которые ему были даны, укажите это также и посмотрите, смогут ли они это исправить. Это больше проблема; либо они неправильно поняли какое-то очень основное требование системы, либо они упустили какую-то зияющую логическую дыру. Но, если они могут это исправить, учитывая более подробную информацию о проблеме, не сообщая точно, где происходит сбой их кода, объясните это неясным требованиям и продолжайте.
Не знаю с чего начать / жестко запрограммированный ответ на конкретные случаи / не могу понять их псевдокод: это красные флаги. Если вы попросите кого-нибудь написать алгоритм, который следует правилам FizzBuzz, объясните им эти правила, и вы получите пустой взгляд, интервью закончено. Точно так же, если они могут поставить ЧТО-ТО на доску, но она терпит неудачу на больших участках проблемного пространства, и вы должны держать их за руку, иллюстрируя сбой и как его исправить, я не буду переходить ко второму собеседованию ,
источник
Если у вас действительно есть потенциальный стажер, который ведет себя как олень в свете фар, потому что его никогда не брали на собеседование, у него были проблемы с тревогой, он никогда не сталкивался с такой ситуацией в реальной жизни (вы обычно замечаете это на языке их тела), вы можете просто начать с спрашивая их, над чем они работали последними.
Тогда это будет его территория, поэтому он не может быть безумно нервным. Когда вы найдете подходящее место, спросите: «Эй, как ты это реализовал?». Если он сможет объяснить, это может дать вам некоторое представление о его мышлении.
Поставьте свои собственные тесты в повестку дня после этого.
источник
Fizzbuzz является абсолютным требованием. Если они не могут закодировать Fizzbuzz, вы не должны нанимать их.
Обычно я спрашиваю кандидата на сессии кода перед собеседованием, где мы используем Документы Google для решения проблемы программирования (обычно это Fizzbuzz + проблема более высокого уровня, если они могут легко завершить Fizzbuzz).
Обычно я разговариваю по телефону или по скайпу с ними во время этого, и, поскольку я наблюдаю за тем, как они решают проблему (и говорит с ними о том, что они думают в определенные моменты), я могу быть достаточно уверенным, что они этого не сделали ». не гуглите ответ.
Пока ваши другие проблемы четко определены (то есть вы даете им формулу для каждой из них), тогда ваши вопросы в порядке.
Когда я беру интервью у кандидатов, я стараюсь придерживаться проблем программирования, с которыми они могут столкнуться. Мне нравятся проблемы со строковыми манипуляциями, потому что, когда вы в сети, практически все, с чем сталкивается пользователь, связано с каким-то видом манипуляции со строками. Как они справляются с этим важно.
источник
Это зависит от калибра позиции, которую вы пытаетесь заполнить.
Если вы ищете старшего разработчика, то я ожидаю, что они знают все это. Если они ошиблись, и я чувствовал себя злым, я бы просто прекратил интервью, спасибо и до свидания. Если бы у меня было более вежливое настроение, я бы просто поблагодарил их и поторопился с остальной частью интервью.
Если бы я собирался стать младшим разработчиком, то эти вопросы можно было бы считать довольно сложными. Я был бы более заинтересован в изучении их способности и готовности учиться. Так что я постараюсь дать им подсказки, а также вести их и посмотреть, как они реагируют.
источник
Стажеры - это другая порода интервью. Обычно я использую мои стандартные вопросы для разработчиков (например, те, которые вы задали), чтобы определить, где они находятся в своем образовании. Способность решать эти проблемы сильно варьируется от второкурсников до пожилых людей.
После того, как я получу эту информацию, я сфокусирую собеседование на других навыках, таких как, смогут ли они работать в команде, будут ли они обучаемы, получат ли они стажировку в нашей компании, увлечены ли они развитием / обучением и т. Д.
Для меня это не технические вещи, которые действительно отличают стажера от других кандидатов. Я бы предпочел потратить несколько месяцев на обучение / наставничество того, кто стремится учиться и расти, чем того, кто просто хочет работать на семестр.
источник
Спросите себя, какую ценность собеседник может добавить в вашу компанию. Фактор стоимости участия наставника, особенно если он не может решить проблемы на уровне fizzbuzz. Если ответ не соответствует предполагаемой зарплате, то у вас есть веские экономические причины не нанимать их.
Не бойтесь вернуться к своему менеджеру и сказать, что «не было кандидатов, которые бы добавили в нашу компанию достаточную ценность, чтобы сделать их наем достойным». Это должно быть лучше, чем в конечном итоге иметь кого-то, кто на самом деле имеет отрицательную ценность, из-за стоимости того, чтобы кто-то постоянно помогал им.
источник
Мой ответ может показаться немного недобрым или пренебрежительным, но я думаю, что он работает хорошо. Для начала я задаю кандидату очень простой вопрос, который служит разогревом, чтобы помочь ему обрести уверенность. Удастся ли им это или нет, но я перейду к вопросу, который менее тривиален и напрямую связан с тем, что влечет за собой работа.
На данный момент, это все или ничего. Если они пройдут через это, отлично, нет проблем. Если они немного изо всех сил, нет проблем, я помогу подтолкнуть их вместе, а затем перейти к другим вопросам, чтобы сохранить другие способности.
Если, однако, им совершенно не хватает возможности ее решить, я продолжаю и продолжаю остальное время интервью, помогая им в этом. Кандидат все еще чувствует себя вовлеченным в собеседование, но мне не нужно направлять собеседование в разные, не относящиеся к делу направления. Это хорошо и для кандидата, так как он может быть образовательным.
источник
Итак, мой ответ: будь лучше подготовлен сам.
PS Вы уже менеджер, поэтому вам действительно следует выдерживать стресс.
источник