Когда-нибудь проходили собеседование в компании-разработчике программного обеспечения? Если да, то некоторые из них могут показаться вам знакомыми.

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

Во-первых, весь процесс собеседования может занять месяцы. Это включает в себя первоначальный контакт с рекрутером до личного собеседования. Фактическое личное собеседование, когда вы встречаетесь с людьми в компании, может длиться целый день или несколько дней, если вы им нравитесь. Может быть несколько интервью с разными людьми, но большинство взаимодействий имеют схожий характер. Как если бы эти компании объединились, чтобы разработать протокол собеседований.

Опыт

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

Худшее интервью

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

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

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

Он быстро отложил его в сторону и сказал: «Спасибо, но у меня есть несколько вопросов, так что давайте начнем». Даже не взглянув на мое резюме, он задал вопрос по алгоритму.

Я ответил: «Могу я хотя бы показать вам некоторые из своих работ? Я очень много работал над этим, и думаю, это покажет вам больше того, на что я способен ».

«Хорошо, но быстро», - ответил он, глядя на часы.

Я начал показывать свои заявки, и примерно через 5 минут он заявил: «Теперь у вас есть 40 минут, и у нас есть вопрос, который нужно решить. Нам действительно нужно начать ». Опечаленный тем фактом, что интервьюер не захотел просматривать мое резюме или обсуждать мои заявки, я задал несколько вопросов относительно алгоритма. Затем я подошел к доске для сухого стирания, чтобы решить проблему.

Когда я писал алгоритм, мы обсуждали возможные проблемы. Из-за этого я вносил изменения по мере появления различных требований и сценариев. В конце концов он сказал: «Ну, время вышло».

Я достал ручку и спросил: «Могу я получить вашу электронную почту, пожалуйста?»

«Нет, мне это не нравится, - сказал он.

Я был ошеломлен, потому что раньше никто никогда не отказывал в моей просьбе. Затем я ответил: «Хорошо. Я просто хотел поблагодарить вас за то, что вы нашли время, чтобы взять у меня интервью, но, думаю, теперь я могу это сделать. Спасибо."

Затем он ушел. После этого я немного посидел. Что я сделал не так? Что я мог сделать лучше?

К сожалению, я не устроился на эту работу, но жизнь продолжается.

Лучшее интервью

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

Когда я вернулся домой, я отправил электронные письма каждому, кто брал у меня интервью, поблагодарить их за то, что они нашли время поговорить со мной. Затем я получил электронное письмо с домашним заданием. Задача заключалась в создании приложения для Android, использующего API-интерфейсы Flickr для отображения 20 лучших изображений из указанного поиска, и у меня была неделя на его выполнение.

Поскольку после моего лучшего собеседования я все еще был на высоте, я приступил к работе. Я назвал свое приложение для Android «Flickr Go Live». Я не планировал этого делать, но следующие 6 часов я был в программном режиме. Во-первых, я убедился, что полностью понимаю требования. Затем я убедился, что понимаю API Flickr. Наконец, я спроектировал и запрограммировал приложение, убедившись, что все граничные случаи соблюдены, и подтвердил, что код чист и хорошо документирован. На мой взгляд, это было настоящее интервью, и я не собирался его портить.

Завершив работу над приложением, я отправил его на GitHub и отправил электронное письмо одному из собеседников с просьбой его просмотреть. Я чувствовал себя хорошо в течение дня. Я был доволен своим приложением. Позже на неделе, к моему удивлению, я получил предложение о работе от компании с более высокой оплатой, чем я просил. Я доказал, что умею программировать, и мне не нужно было писать ни единой строчки псевдокода на доске для сухого стирания. Доказательство было в моем приложении.

Протокол интервью

Из опыта собеседований, который я приобрел за эти годы, я заметил закономерности. Большинство софтверных компаний схожи в том, как проводят собеседования с кандидатами. Их можно описать следующим образом:

  1. Раздайте кандидату маркер и доску для сухого стирания.
  2. Попросите кандидата ответить на вопрос об алгоритме и / или структуре данных.
  3. Повторите шаг 2.

Вопрос

Все компании разные, но вопросы относительно одинаковые. Один вопрос, который привлек мое внимание, был следующий:

«Как узнать, является ли связанный список круговым?»

1. Linked List
A linked list is a programming data structure. It is a collection of data in which each element points to the next creating a sequence.

Этот вопрос дает представление о нескольких вещах. Это может дать представление о знаниях кандидата о структурах данных, алгоритмах и навыках решения проблем. Это отличный вопрос. Я действительно имею в виду это, но ответ также можно найти в Google. Чтобы доказать это, я нашел это в Google. Как видно из быстрого поиска в Google, на момент написания этой статьи этот поиск выдал 8 360 000 результатов за 0,77 секунды. Также обратите внимание, что в самой первой ссылке есть ответ на вопрос. Если кому-то когда-либо понадобится выяснить это в реальном мире, ему потребуется всего 10 секунд, чтобы найти ответ, и это довольно щедро.

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

Из-за мгновенного удовлетворения от Google нам нужно задавать более актуальные вопросы к сегодняшним методологиям программирования; вопросы, которые будут касаться повседневной жизни разработчика. Было бы неплохо задать следующий вопрос:

При программировании в командной среде вам предлагается добавить новую функцию, но вы знаете, что эта новая функция сломает чужой код. Что из следующего описывает шаги, которые вы предпринимаете?

A. Запрограммируйте свою функцию и немедленно приступайте к освоению.

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

C. Создайте новую ветку, запрограммируйте свою функцию, проведите анализ кода и объедините ее с мастером через неделю, никого не уведомляя. Несмотря на то, что это сломает мастер, эта функция действительно важна, и она достаточно долго ждала слияния.

Если вы ответили A или C, то я не хочу с вами работать. Разработка - это командное усилие, и мастер никогда не должен быть сломлен. Работая в команде, мы не хотим негативной работы.

3. Version Control
The term ‘master’ relates to the main branch in the commonly used version control system, git. Version control is used for a variety of things in software development. Some include versioning and team collaboration.
4. Negative Work
Negative work is when one or more programmers programs a feature or a set of features that affects the team in a negative manner. This may include a new set of bugs, incomplete functionality, or just broken code. Negative work may mean that other people from the team might need to help debug or fix the code in question.

Предложение

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

Новый протокол интервью

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

Проекты

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

Реальная жизненная ситуация

Поместите кандидата в реальную жизненную ситуацию программирования. Задайте этот любимый вопрос об алгоритме и / или структуре данных, но позвольте им найти ответ в Google. Существует огромное количество информации. Продумать это и найти правильное решение - вот что сделал бы настоящий программист. Действительно ли мы хотим, чтобы коллеги и коллеги были просто умны, или нам нужны специалисты по решению проблем, которые используют все возможные ресурсы для улучшения команды? Я возьму последнее в любой момент.

Контракт

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

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

Источники

  1. Https://en.wikipedia.org/wiki/Linked_list
  2. Https://www.google.com/search?q=how+to+know+if+your+linked+list+is+in+a+loop&oq=how+to+know+if+your+linked+list + is + in + a + loop & aqs = chrome..69i57.9549j0j1 & sourceid = chrome & ie = UTF-8
  3. Https://en.wikipedia.org/wiki/Version_control
  4. Http://blog.professorbeekums.com/2016/12/beware-of-developers-who-do-negative.html?m=1

Дополнительная информация о связанных списках

  1. Http://stackoverflow.com/questions/494830/how-to-determine-if-a-linked-list-has-a-cycle-using-only-two-memory-locations
  2. Https://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare