Программирование на Python и Objective-C в Mac OS

Программирование на Python и Objective-C под Mac OS и для iPhone / iPod Touch

Собеседование на программиста: Как пройти собеседование программисту — Это интересно…

Содержание

Как пройти собеседование программисту — Это интересно…

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

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

Если HR-а в компании нет, вас сразу протестирует программист, а затем вы получите тестовое задание (по результатам беседы). Есть и другие вариации – например, 3-этапное собеседование, итогом которого является интервью с руководителем организации. Но первые два — самые популярные.

Что спрашивают на собеседовании программиста

Пласт общих вопросов может в себя включать следующие:

  • Дайте определение компилятору и интерпретатору;
  • Назовите типы констант;
  • Что представляет собой методология Agile;
  • В чем плюсы и минусы модульного программирования;
  • Какие нововведения были в последнее время в языке N и т.п.

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

Что касается проверки умения работать с крупными массивами, то здесь программистам на собеседовании могут ставить следующие задачи:

  • Найти максимум и минимум в массиве из 100 чисел с помощью короткой программы;
  • «Развернуть» массив целых чисел без применения специальных библиотек;
  • Написать программу вставки пропущенных значений и удаления дублей в массиве целых чисел без применения библиотек и т.д.

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

  • Проверьте строку на наличие цифр или дублированных символов;
  • Напишите программу для подсчета гласных в строке;
  • Напишите программу для поиска в резюме ключевых данных и их передачи в нужные массивы для последующей обработки.

Такая проверка позволяет сразу отсеять неопытных кандидатов. А для IT-специалистов с высоким уровнем подготовки решить эти и более сложные задачи не составит труда. Однако потренироваться перед собеседованием тоже не помешает.

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

Все, что нужно знать программисту для собеседования

Последняя версия языка: что нужно знать, чтобы пройти собеседование

Разработчики и авторы курсов в Яндекс.Практикуме рассказывают, когда знание последней версии языка программирования критично, а когда ― нет.

Собеседование VS реальная работа: какие навыки пригодятся начинающим Python-разработчикам

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

Собеседование в IT-компанию: что нужно знать джуниору

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

Собеседование в Apple: топ-30 вопросов и ответов

В статье собраны технические и поведенческие вопросы, которые задают на собеседовании в Apple. Ответы на технические вопросы даны на C++.

Как разработчику подготовиться к техническому интервью, и чего ожидают от вас компании

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

5 заданий с собеседования на позицию Junior Golang-разработчика

Разбор нескольких заданий и вопросов, которые могут задать на собеседовании на позицию Junior Golang Developer

Придумываем дюжину новейших задач для собеседований в IT-компаниях

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

5 заданий по SQL с реальных собеседований

SQL — один из самых востребованных навыков в IT. Разбираем несколько задач с собеседований, разбитых по уровням junior, middle и senior.

10 логических задач с собеседований, которые заставят застрелиться

Собрали для вас 10 логических задач, которые могут попасться на собеседовании. Ответив на них правильно, вы точно произведёте впечатление.

5 вопросов с собеседования на позицию Junior backend-разработчика на PHP

5 вопросов с ответами решениями, которые можно встретить на собеседовании на должность Junior PHP backend разработчика

Одна задача и 10 минут, чтобы нанять iOS-разработчика

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

Примеры задач с собеседования на позицию Middle Ruby разработчика

Несколько задачек по основам Ruby и часто используемым функциям языка для собеседования на позицию middle разработчика.

Задания с собеседования на позицию Middle Backend разработчика с примерами на Python

Примеры реальных задач из собеседований на Python-разработчика в highload-проект.

Собеседование на позицию Middle JavaScript разработчика: примеры задач и необходимые знания

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

Примеры задач по JavaScript для подготовки джуна к собеседованию по фронтенду

В материале разработчик приводит несколько задач, которые чаще всего попадаются на позицию Junior/Middle Frontend

Небольшая подборка тестовых заданий для Junior DevOps инженера

Список часто встречающихся задач, которые помогут подготовиться к собеседованию начинающему DevOps-инженеру.

5 простых тестовых заданий на позицию Junior Frontend-разработчик

Рассматриваем несколько заданий с собеседований и разбираем их решение.

Как говорить о деньгах на собеседовании?

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

Задачи с собеседований: обработка параллельного редактирования данных

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

Задачи с собеседований: ищем самый тяжёлый шар за два измерения

Определяем с помощью задачи как хорошо соискатель умеет строить алгоритмы и системно искать решения.

Задачи с IT-собеседований: модуль для платформы интернет-магазинов

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

Как работает лифт в небоскребах? Алгоритмы + задачи с собеседований

Алгоритм по которому работает лифт в высотном здании должен учитывать множество факторов. Он сложнее чем у обычного лифта.

Как правильно составить резюме — советы экспертов, которые собеседуют в Яндексе

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

Как пройти интервью успешно: рекомендации для аналитиков

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

Стоит прочитать: обзор книги Гейл Макдауэлл «Карьера программиста»

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

Работа со строками в Python. Готовимся к собеседованию: примеры задач

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

Резюме программиста: как правильно составить и можно ли без него обойтись — отвечают эксперты

Спросили у экспертов, нужно ли сейчас резюме программиста, когда есть GitHub и LinkedIn, и если да, то как его составить.

Как пройти собеседование и стать SOC-специалистом

Рассказ о том, как стать специалистом-безопасником, которые стали особенно актуальны в период удалённой работы.

5 вещей, о которых стоит знать

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

Вот неполный список того, что обычно беспокоит программиста перед/на собеседовании:

  • «Должен ли я объяснять свой код?”
  • “Как правильно вести диалог с собеседником?”
  • «Я забыл создать экземпляр моей переменной! Я обречен!”
  • «Что собеседник думает о моем ответе?”
  • «Ничего, если я скажу/напишу так-то…?”

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

Собеседование для программиста началось, и все сводится к тому, чтобы впечатлить незнакомого человека за 60 минут: настоящая борьба! Но ничего, вы справитесь – мы в вас верим и поможем в этом.

Очень часто можно слышать от технического специалиста: “Отлично, я думаю, что это выглядит хорошо, но что бы вы в нем оптимизировали?”. Это очень каверзный вопрос, т. к. его задают для того, чтобы проанализировать вас на тему:

  • понимания качества кода;
  • способности найти проблемы и узкие места;
  • умения масштабировать проект на лету.

Если вы решили поставленную задачу, это не означает, что вам уже сделают job-offer.

Например, когда вы смотрите на фрагмент кода ниже, что он делает? Как бы вы его улучшили? Что может пойти не так?

def traverseArray(arr):
   numRows = len(arr)
   numCols = len(arr[0])
   addRight = True

   curStack = [(0, 0)]
   nextStack = []

   while curStack:
      coords = curStack.pop()
      if addRight:
         if coords[1] < numCols - 1:
            nextStack.append((coords[0], coords[1] + 1))
         if coords[1] == 0 and coords[0] < numRows - 1:
            nextStack.append((coords[0 ] + 1, coords[1]))
      else:
         if coords[0] < numRows - 1:
            nextStack.append((coords[0 ] + 1, coords[1]))
         if coords[0] == 0 and coords[1] < numCols - 1:
            nextStack.append((coords[0], coords[1] + 1))
      if (not curStack):
         curStack, nextStack = nextStack,curStack
         addRight = not addRight

m = [ [1], [2], [3] ]
traverseArray(m)

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

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

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

Приведем пример, чтобы проиллюстрировать сказанное выше:

Нужно объединить два отсортированных связных списка. Задачка организована на Leetcode, поэтому можете попробовать ее решить. В принципе, это можно сделать разными способами:

  1. Переместить все элементы в массив, а затем отсортировать его. Соединить каждый элемент массива вместе и создать указатель.
  2. Объединить их с помощью манипуляций с указателями. Сравнить два, найти наименьшие, а затем в конце вернуть результаты.

ООП – это ужасное и непонятное “нечто” для некоторых людей, очень ценный скил и один из фундаментальных навыков в разработке, который должен знать каждый программист.

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

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

Заезженная тема, но куда без нее? Резюме – это ваше лицо, ваша визитка и первое впечатление компании о вас.

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

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

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

Не “выдавливайте” из себя лишнее слово, т. к. вы сможете описать свой код после того, как допишете его. Если у вас появилось решение еще до того, как было полностью озвучено ТЗ, сообщите об этом интервьюеру – это будет огромным плюсом.

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

Рассмотрим два куска кода:

Часть справа гораздо легче понять и она легче читается. После этого можно заняться реализацией getNeighbors или isEmpty, в зависимости от того, что будет требоваться.

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

И напоследок приведем дополнительный список с очевидными (и не очень) пунктами, которые лучше взять на заметку, чем проигнорировать:

  • Внешний вид. Аккуратная прическа, отсутствие щетины/ухоженная борода и чистая выглаженная одежда – это обязательные атрибуты.
  • Дресс-код. Уточните перед собеседованием, какие правила в компании насчет одежды: толстовку с шортами могут неправильно расценить.
  • Список требований. Освежите в памяти те пункты из требований, которые вы забыли или не знаете, т. к. лучше что-то внятное ответить на вопрос, чем сказать «Не знаю».
  • Тестовое задание. Если вы справились/не справились с задачей, попросите указать вам на ошибки, поскольку собеседование – тоже важный опыт.
  • Готовый проект или пример кода. Это может пригодиться перед техническим собеседованием для оценки вашего навыка писать код и т. д.
  • Используйте профессиональную речь аккуратно: никто не любит «айтишно-молодежный» сленг в каждом слове на первых минутах общения.
  • Просите по возможности выслать вам с тестовым заданием список используемых технологий и инструментов, чтобы лучше подготовиться.

Оригинал

Как программисту провалить собеседование | GeekBrains

Правила неуспеха.

https://d2xzmw6cctk25h.cloudfront.net/post/398/og_cover_image/5d3c24c69e5e5aacf8460f405d37225a

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

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

Самые популярные ошибки при составлении резюме

Сергей Дмитриченко, основатель GMS Services, сооснователь AmazingHiring:

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

Бывает, что при составлении резюме, разработчик ориентируется на технического специалиста. Например, такое описание опыта разработчика драйверов под операционную систему windows: C/C++, Asm, x86, x64, DDK, WDF, WDM, не всем рекрутерам позволит распознать правильного кандидата. С точки зрения же программиста — этого вполне достаточно, чтобы понять специализацию. Пояснение „заклинаний“ кратким текстом поможет рекрутерам быстрее найти вас и правильно оценить.

Программисты не всегда правильно преподносят свой опыт и ожидания от новой работы. Умение емко и четко рассказать о своем опыте, расставить правильные акценты — важная часть интервью. Отдельная тема — ответ на вопрос „чего вы ждете от новой работы?“, часто его сложно добиться. Важно помнить всем известную истину: собеседование — это двойная продажа (компания продает себя кандидату и наоборот). Если вы согласились на интервью, поищите информацию о компании, будьте вежливы и доброжелательно настроены, проявляйте заинтересованность, будьте пунктуальны. 

Онлайн-репутация становится все более важным критерием найма. Высокий рейтинг на Stackoverflow, Kaggle, открытые репозитории на GitHub — информация, которую полезно добавлять в резюме. Она может позволить компаниям быстрее понять ваш профессиональный уровень и, возможно, сразу позвать на техническое интервью, вместо выполнения входного тестового задания».

Галина Денина, руководитель HR-службы Redmadrobot:

«Резюме стоит составлять, как минимум, отталкиваясь от того, в компанию какого профиля человек хочет устроиться — занимающуюся аутсорс-разработкой или продуктовую. Важно правильно расставлять акценты и ни в коем случае не игнорировать сопроводительное письмо, именно в нем можно сакцентировать внимание рекрутера на том, что соискатель считает важным и релевантным. В Redmadrobot самая частая причина отказа кандидатам — слабые технические навыки. 

Вовсе не нужно упражняться в остроумии и снабжать резюме искрометными (как вам кажется) шутками. Такие попытки выделить свое резюме могут поднять настроение сотрудникам HR-отдела, но не сделают его резюме более заметным с профессиональной точки зрения. Компаниям нужны профессионалы, а чувство юмора — это soft skill, который вы сможете ненавязчиво продемонстрировать на финальном испытании. Вообще с юмором нужно быть аккуратнее — вас могут неправильно понять или не воспринять серьезно».

5 способов не пройти собеседование

Павел Настобурко, руководитель AppLead:

  1. Проситься с первого месяца пребывания в компании работать дома или удаленно;
  2. Не иметь никакого представления, о том, чем занимается компания в которую пригласили на собеседование;
  3. Не уделять внимание тестовому заданию, с помощью которого работодатель проверит уровень знаний программиста-соискателя. Частое заблуждение думать о том, что потом результат тестового задания соискателя используют в дальнейшей работе компании. 
  4. Спешить или всячески показывать, что для собеседования выделили только 10 минут;
  5. Быть неспособным сформулировать должность на которую пришел. Вот это действительно очень раздражает.

Топ провальных «кейсов»

Екатерина Артюшина, HR-директор СимбирСофт:

«В нашей практике был кейс несанкционированного собеседования. Кандидат не просто пришел в компанию без предварительного приглашения или резюме, так еще и с мамой! Молодой человек был выпускником ИТ-специальности вуза, с хорошими оценками, но говорила на собеседовании только мама. Когда дошло до технической части, он почему-то не прошел, то ли давление со стороны навредило, то ли он просто не привык общаться самостоятельно».

Юрий Кондратьев, генеральный директор кадрового агентства Lightman Solutions:

«Могу вспомнить несколько случаев провального (для кандидатов) собеседования на технические позиции. Например, была встреча с разработчиком Java, на встречу он пришел с женой, сел в переговорной вместе с ней, когда его вызвали. Само собой, встреча приняла несерьёзный оборот. Провальность собеседования в самом способе проведения. Другой случай, программист 1С пришел, чтобы написать тест. Тест оказался сложным, и вместо ответов на большинство вопросов он тезисно писал рассуждения о жизни и нелегкой судьбе соискателя».

Елена Крачковская, руководитель административного отдела Группы Компаний ХОСТ:

«У нас был кандидат на разработчика Java. Он успешно выполнил тестовое задание, и мы пригласили его на собеседование. Тут-то и выяснилось, что задание за него выполнял дядя, а кандидат просто смотрел на «расшаренный» рабочий стол. На собеседовании он не ответил на самые простые вопросы по заданию и потом долго удивлялся, почему его не взяли на работу — „задание-то он выполнил“».

 

Тем, кто хочет разобраться в веб-разработке, рекомендуем профессию «Веб-разработчик» от GeekBrains.

50 вопросов и ответов по программированию для подготовки к техническому интервью

Готовясь к собеседованию, многие начинающие программисты понятия не имеют, каких вопросов ожидать от интервьеюров — будь то собеседование в стартап или технологический гигант вроде Amazon, Microsoft или Google. В статье на Hacker Noon разработчик Джавин Пол собрал вопросы, которые любят задавать на таких интервью, а также ответы на них и дополнительные ресурсы для подготовки.

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

Но прежде чем приступить к ним, понадобится хорошо изучить эти темы, или по крайней мере освежить навыки решения задач по ним. Для этого можно пройти курс по алгоритмам и структурам данных Роберта Хорвика: часть 1 и часть 2.

Список наиболее часто задаваемых вопросов для собеседований по программированию.

1. Массивы

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

Главный плюс такой структуры данных, как массив — он обеспечивает быстрый поиск сложностью О (1) при знании индексов, но добавление и удаление элементов из него происходит медленно, потому что нельзя менять размер массива после создания. Чтобы увеличить или уменьшить массив, нужно создать новый и скопировать в него все элементы из старого.

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

Вот самые частые вопросы:

  1. Как найти пропущенное число в заданном массиве целых чисел от 1 до 100? (решение)
  2. Как найти повторяющееся число в заданном массиве целых чисел? (решение)
  3. Как найти наибольшее и наименьшее число в неотсортированном массиве? (решение)
  4. Как найти все пары в массиве целых чисел, сумма которых равна заданному числу? (решение)
  5. Как найти повторяющиеся числа в массиве, если их несколько? (решение)
  6. Как удалить повторяющиеся элементы из заданного массива в Java? (решение)
  7. Как сортировать массив целых чисел без дополнительной памяти при помощи алгоритма быстрой сортировки? (решение)
  8. Как удалить повторяющиеся элементы из массива без дополнительной памяти? (решение)
  9. Как сделать поменять порядок элементов в массиве на обратный без дополнительной памяти в Java? (решение)
  10. Как удалить повторяющиеся элементы из массива без использования коллекций? (решение)

Эти вопросы помогут не только развить навыки решения задач, но и прокачать знания по массивам. Более сложные вопросы по теме можно найти в курсе по алгоритмам The Coding Interview Bootcamp: Algorithms + Data Structures, разработанном специально для подготовки к собеседованиям в таких технологических гигантах, как Google, Microsoft, Apple или Facebook.

Дополнительно можно поупражняться на этой подборке из 30 вопросов.

Записаться на курс Java Programming and Software Engineering Fundamentals от Coursera

2. Связный список:

Ещё одна базовая структура данных — связный список. Как и массив, это линейная структура данных, и элементы в нём хранятся линейно, но в отличие от массива — не в непрерывных областях. Они разбросаны в памяти и соединяются с помощью узлов. Связный список — ничто иное, как список узлов, каждый из которых содержит собственно данные и ссылку на следующий узел.

Благодаря такой структуре добавлять и удалять элементы в связном списке достаточно легко, так как нужно просто изменить ссылку без необходимости создавать новый список. При этом искать элементы сложнее; поиск по односвязному списку занимает линейное время O (n). В этой статье можно подробнее прочесть о различиях между массивами и односвязными списками.

Есть разные виды связных списков: односвязный список, который позволяет передвигаться только в одну сторону: в начало или в конец; двусвязный список, дающий возможность перемещения как вперёд, так и назад; кольцевой список, который формирует зацикленную структуру.

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

Вопросы для собеседования:

  1. Как найти центральный элемент в односвязном списке за один проход? (решение)
  2. Как проверить заданный связный список на цикличность? Как найти исходный узел цикла? (решение)
  3. Как сделать реверс связного списка? (решение)
  4. Как сделать реверс односвязного списка без рекурсии? (решение)
  5. Как удалить повторяющиеся узлы из несортированного связного списка? (решение)
  6. Как найти длину односвязного списка? (решение)
  7. Как найти 3-й узел с конца в односвязном списке? (решение)
  8. Как найти сумму двух связных списков, используя стек? (решение)

Эти вопросы помогут развить умение решать задачи на связные списки и углубить знание этой структуры данных. Если они вызывают трудности, можно обновить свои знания структур данных и алгоритмов, пройдя курс Data Structures and Algorithms: Deep Dive Using Java.

Кроме того, можно потренироваться на этом списке из 30 вопросов.

Записаться на курс Профессия Java-разработчик от Skillfactory

3. Строки

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

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

Вот наиболее частые из них:

  1. Как вывести повторяющиеся символы из строки? (решение)
  2. Как проверить, являются ли две строки анаграммами? (решение)
  3. Как вывести первый неповторяющийся символ из строки? (решение)
  4. Как сделать реверс заданной строки с использованием рекурсии? (решение)
  5. Как проверить, что строка состоит только из цифр? (решение)
  6. Как найти повторяющийся символ в строке? (решение)
  7. Как посчитать количество гласных и согласных звуков в заданной строке? (решение)
  8. Как посчитать, сколько раз в строке встречается заданный символ? (решение)
  9. Как найти все возможные перестановки элементов строки? (решение)
  10. Как сделать реверс слов в заданном предложении, не используя классы-коллекции? (решение)
  11. Как проверить, является ли одна строка перестановкой другой? (решение)
  12. Как проверить, является ли заданная строка палиндромом? (решение)

Способность решить эти вопросы говорит о достаточно хорошем уровне владений строками. Более продвинутые задачи можно найти в книге «Алгоритмы. Руководство по разработке» Стивена Скиены.

Ещё 20 вопросов можно найти здесь.

4. Двоичное дерево поиска

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

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

Секрет успешного прохождения вопросов, связанных с двоичным деревом — основательное знание теории, например, что такое размер или глубина двоичного дерева, что такое лист и узел, а также понимание основных алгоритмов обхода дерева: в прямом, симметричном и обратном порядке.

Наиболее распространённые вопросы по бинарным деревьям:

  1. Как реализуется двоичное дерево поиска? (решение)
  2. Как выполнить обход в прямом порядке в заданном двоичном дереве? (решение)
  3. Как обойти заданное двоичное дерево в прямом порядке без рекурсии? (решение)
  4. Как выполнить симметричный обход в заданном двоичном дереве? (решение)
  5. Как вывести все узлы заданного двоичного дерева, используя симметричный обход без рекурсии? (решение)
  6. Как применяется алгоритм обхода в обратном порядке? (решение)
  7. Как обойти заданное двоичное дерево в обратном порядке без рекурсии? (решение)
  8. Как вывести на печать все листья двоичного дерева поиска? (решение)
  9. Как посчитать количество листьев в заданном двоичном дереве? (решение)
  10. Как выполнить двоичный поиск в заданном массиве? (решение)

Если пройти эти вопросы самостоятельно слишком сложно, не помешает пройти какой-нибудь качественный курс по структурам данных и алгоритмам, например From 0 to 1: Data Structures & Algorithms in Java. Вот ещё два списка книг и курсов на эту тему.

5. Прочие алгоритмы и вопросы

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

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

  1. Как реализуется сортировка пузырьком? (решение)
  2. Как реализуется итеративная быстрая сортировка? (решение)
  3. Как реализуется сортировка вставками? (решение)
  4. Как реализуется сортировка слиянием? (решение)
  5. Как реализуется блочная сортировка? (решение)
  6. Как реализуется сортировка подсчётом? (решение)
  7. Как реализуется поразрядная сортировка? (решение)
  8. Как поменять местами значения двух переменных без использования третьей? (решение)
  9. Как определить, пересекаются ли два прямоугольника? (решение)
  10. Как спроектировать торговый автомат? (решение)

Свыше 189 вопросов для прохождения собеседования по программированию с ответами можно найти в книге «Карьера программиста» (6-е издание) Гэйл Лакман Макдауэлл.

Здесь можно пройти ещё 50 вопросов по программированию для прохождения собеседований по телефону; закрепить навыки можно с помощью вот этих подборок книг и курсов.

Вот ещё несколько ресурсов и подборок, которые помогут подготовиться к собеседованию:

Когда просят написать код на бумаге: что бесит программистов на собеседованиях

Вика: За время работы я часто сталкивалась с недовольными кандидатами. Разработчики — люди востребованные: они знают цену своим скиллам и часто требовательны не только к будущей работе, но и самому процессу собеседования. Хороший HR должен знать, как эффективно взаимодействовать с такими соискателями.

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

1. HR не читает резюме целиком. Или ленится проверить портфолио и ссылки

Артем: Увы, это одна из самых частых проблем: HR часто невнимательно изучают твое резюме. Возможно, у рекрутера «замылился» глаз на одинаковые, скопированные друг у друга CV с шаблонными формулировками. В любом случае — это очень неприятно, потому что это одна-две страницы осмысленного текста, ведь айтишники редко пишут «поэмы» в резюме.

Другая беда — портфолио. Оно дает возможность поговорить о созданных проектах (и участии программиста в них) предметно, а многие HR просто ставят галочку «есть портфолио/нет». И начинают обсуждать какую-то абстракцию.

Вика: Первое интервью — это «скрининг». Нужно проанализировать soft-skills, соответствие навыков и опыта требованиям вакансии и понять, насколько кандидат подходит компании. Первый «скрининг» не должен отнимать много времени, потому что будет еще знакомство с командой и руководителем. Поэтому может создаться впечатление, что резюме не читали или прошлись поверхностно.

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

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

Фото: Unsplash

Касаемо портфолио — не все HR умеют его оценить, но для хорошего специалиста GitHub — не просто слово. Грамотный рекрутер поймет, какие языки программирования кандидат использует, с какими фреймворками знаком, получит информацию о репутации в сообществе.

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

2. HR не дает достаточно информации о компании и вакансии

Артем: Нагонять туман во время собеседований, рассказывать про кофе с чаем и печеньками вместо конкретики — все это характеризует бестолковые интервью. Один раз я пришел на собеседование, и после беглого разговора с HR меня перекинули на CTO.

Он прошелся по знанию CSS, Java Script, задал много общих вопросов. Я со всем справился, вышел на работу и понял, что мы будем писать приложения на Ionic.

Я человек, который не знает Ionic, со мной рядом оказался человек, который не знает JavaScript, и мы писали приложение на Angular.

Зачем была вся эта мистика, странное собеседование с CTO не по профилю и эти общие вопросы? Когда HR недоговаривают, на какую позицию тебя берут, это заканчивается плохо.

Вика:

Почему так происходит?

  • рекрутеры не смогли или не захотели найти всю информацию о проекте у ответственного менеджера/разработчика. Такие ситуации довольно часто встречаются на рынке;
  • жесткий NDA, когда нельзя раскрывать детали.

Обе ситуации могут встречаться как при устройстве на работу через агентство, так и во внутренней службе по персоналу.

В компаниях, где HR делают свою работу хорошо:

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

3. Стресс-собеседования с написанием кода в реальном времени

Артем: Я проходил такие собеседования. Для меня самое главное, чтобы не надо было писать код на бумажке. Это очень неудобно, убивает много времени и сильно раздражает.

На первом этапе обычно ожидаешь неформальную встречу — ты приходишь поговорить с людьми, рассказать про себя, послушать, что происходит в компании. А тут тебя сажают в переговорку и дают тест на 30 минут. Надо собраться, сообразить, оценить задачу.

Тут два варианта:

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

Ты можешь не «въехать» за эти 30 минут в задание, что-то пропустить. Одно дело — работать с проектом, особенности которого ты уже знаешь. Но окунуться во что-то с нуля и сделать сразу очень хорошо в программировании сложно.

Фото: Unsplash

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

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

Но некоторые доводят стресс-собеседования до абсурда и просят писать код на бумаге.  

Еще один момент — удобно писать код «на удаленке», но делать это при личной встрече очень некомфортно. Я не хочу сидеть в переговорке и писать код, мне это не нравится. Такие условия ухудшают продуктивность.

Вика: Такие методы действительно применяют, но для меня это дикость.

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

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

Как надо?

Проще всего проверять навыки в реальном времени онлайн: кандидат пишет код, участники интервью задают вопросы. Или дать задание на дом, а потом задать уточняющие вопросы, раскрывающие понимание, как работает все «под капотом». Но онлайн — быстрее и эффективнее.

4. Собеседование с теми, кто ничего не понимает в программировании

Артем: У всех разная политика найма — если нужно, чтобы кандидат прошел через вышестоящее руководство и пообщался с ним, то окей. Будет здорово, если топ-менеджеры окажутся адекватными и не слишком дотошными, а встреча пройдет быстро.

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

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

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

Фото: Unsplash

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

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

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

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

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

5. Обязательное требование — высшее образование 

Артем: С моей точки зрения, высшее образование — это как в поговорке «встречают по одежке, провожают по уму». Вот только нельзя встречать по высшему образованию. Потому что если ты встретил кандидата по «вышке», то потом провожать по уму уже бессмысленно. Странный критерий отбора.

«Вышка» — это как костюм на праздник. Ты пришел без костюма, без высшего образования, но с большим подарком и с желанием поздравить. Но тебя не пускают. Одно дело, когда тебе явно говорят, что у тебя нет высшего образования, — тут можно приводить свои аргументы, парировать. Но бывает, что ты узнаешь об этом постфактум и ничего не можешь ответить.

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

А само обучение было довольно бессмысленным. Если бы я вылетел оттуда, значит, совсем дурак. Мое высшее образование говорит только о том, что я немного соображаю. Хотя со мной «учились» люди, которых стоило выгнать. За них учились их однокурсники, а родители платили деньги.

Фото: Unsplash

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

Вика: Сегодня говорить про «вышку» у программистов совершенно неактуально. Технологии развиваются быстрее, чем университеты. И в России, и в остальном мире вузы для айтишников остались в прошлом. Часто на интервью я даже забываю уточнить этот вопрос.

Большинство негосударственных компаний и стартапов оставили «вышку» в прошлом. Почему эта проблема до сих пор всплывает при найме?

В России — из-за внутренних правил в крупных госкорпорациях. У них прописано, что «мы не можем брать людей без высшего образования». Есть какие-то лазейки, чтобы устроиться туда без «корочки», но будет непросто.

За рубежом другие особенности — в некоторых странах разработчику просто не дадут иммиграционную визу, если у него нет «вышки». Чтобы получить визу квалифицированного мигранта, нужно набрать определенное количество баллов. А сделать это без диплома практически невозможно.

6. Длинные собеседования

Артем: Очень раздражают длинные собеседования. Три человека сидят напротив тебя одного, пытаются узнать все микродетали из биографии, постоянно что-то спрашивают не по профилю. 

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

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

Вика: Многочасовые собеседования — мучение для всех. Но, к сожалению, не всегда можно быстро понять мотивацию кандидата. Оптимальное время для интервью – 20-40 минут. Больше — только если вы нашли какие-то интересные темы для разговора, и человек не против уделить на это время. 

Независимо от любых «но» не стоит проводить собеседование дольше, чем один час. 

7. Долгие и бестолковые тестовые задания

Артем: Раздражают большие тесты. Однажды я проходил тест на IQ — он состоял из трех огромных частей, нужно было вводить слова и буквы. Мне он показался очень странным. Где-то через 30 минут мне все надоело, я начал писать ответы «от балды».

Естественно, результат оказался плохим. Но он никак не отражал мою общую адекватность. После этого мне предложили «вдогонку» еще одно задание. Желание идти работать в эту компанию полностью исчезло.

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

Хороший пример — я устроился в интересную компанию год назад. Там не было HR, на собеседовании мы общались с CTO. Он дал задачу, в которой я ошибся. СТO указал мне на ошибку, а я сразу же предложил ее решение. Это заняло всего две минуты. Все поняли мою логику и предложили работу. Такие тесты приятно решать.

Вика: Тяжело узнать уровень разработчика по короткому тесту. Такие задания раскрывают программиста только с одной стороны. Но невозможно понять все компетенции за 10 минут. Поэтому многие компании дают долгие задания.

На мой взгляд, не имеет смысла давать тесты больше, чем на 30 минут. И речь идет именно о техническом задании. Всякие задания на IQ с галочками — просто откровенная трата времени для оценки разработчиков.  

***

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


Материалы по теме:

Как проходит собеседование программиста 1С в Neti

Меня зовут Дмитрий, я из Саратова. Вот уже год, как я собеседую кандидатов на должность разработчика 1С в Neti. В марте я выступал на конференции для разработчиков и консультантов во Владимире, где рассказал, что нужно знать и уметь, чтобы стать программистом 1С в современной IT-компании.

Обычно в IT-компаниях, чтобы понять, насколько хорошо разработчик владеет языками программирования и какие технологии использует в работе, ему дают тестовое задание. Например, компании нужен разработчик на платформе «1С: Предприятие». HR приглашает кандидатов, имеющих сертификат «1С: Специалист», и просит их за несколько дней реализовать законченную конфигурацию предприятия с документами, регистрами, отчетами. После тестирования выбирают того, кто справился с заданием лучше всех.

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

 

HR-собеседование

Отправить своё резюме в HR-службу соискатель может через сайт, агрегатор поиска работы или во «ВКонтакте». Также кандидаты узнают о наших вакансиях из роликов на YouTube. В компании практикуется акция «Приведи друга»: если новый сотрудник пройдёт испытательный срок, тот, кто его порекомендовал, получит денежный бонус.

Связавшись с потенциальным работником, рекрутер уточняет данные из резюме и просит кандидата оценить свои знания 1С по 10-бальной шкале. Также HR узнает, с какими конфигурациями работал соискатель и назначает время теоретического собеседования.

 

Теоретическое собеседование

Кто-то спросит: «Зачем вы проверяете теорию? Разработчик должен задачи выполнять, а не курсы вести».

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

Теория — это 1,5-2-часовое собеседование, которое проводит опытный программист. Разработчик проверяет знания соискателя по следующим разделам платформы 1С:

  • справочники и регистры;
  • запросы;
  • СКД;
  • управляемые формы;
  • общие объекты;
  • КД;
  • обмены и web- и http-сервисы;
  • управление доступом.

По Запросам, СКД и УФ должны быть отличные знания, так как эти разделы критичные и базовые. Если кандидат теряется, мы помогаем ему прийти к правильному варианту: даём подсказки и рассуждаем вместе с ним. Если выясняется, что человек вообще не знаком с темой, мы максимально полно раскрываем её. Теоретическое собеседование не экзамен, на котором преподаватель расставляет оценки, а разговор. Мы стараемся, чтобы претенденты узнали что-то новое и ушли от нас с хорошим настроением, даже если не получат приглашения на следующий этап.

Кроме профессиональных навыков на собеседовании я определяю личные качества человека и его цели:

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

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

Если человек не справился с теорией, мы не прощаемся с ним навсегда, а даём бесплатные обучающие материалы: статьи, курсы, видео на YouTube, — чтобы он мог подтянуть слабые места и прийти на собеседование ещё раз.

 

Практическая часть

Если соискатель успешно проходит теорию, мы приглашаем его на практическую часть, которая занимает 2–2,5 часа. Мы помогаем кандидату с практикой: рассказываем, по каким темам она будет, и рекомендуем материалы для подготовки.

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

Выполняя задание, программист может использовать синтаксис-помощник, но тестировать результат, запуская его в режиме «Предприятия», нельзя. Это условие помогает избежать неприятностей в будущем. Иногда разработчики не до конца понимают, как работает их алгоритм, но, протестировав его и получив верный ответ, переносят код в рабочую базу. Через какое-то время в системе вылезает проблема и клиент может потерять деньги.

Создать алгоритм без тестирования несложно: от соискателя не требуется ничего выдающегося — задания довольно простые для подготовленного специалиста. Прежде всего с помощью задач мы выясняем, как разработчик размышляет, и определяем его практические знания Запросов, СКД и УФ. Также обращаем внимание на следующие моменты:

  • насколько внимательно человек читает задание и пишет код;
  • задаёт ли он дополнительные вопросы или сразу берётся за решение;
  • способен ли он проверить код в голове.

Если кандидат запутался, мы помогаем ему, например, рисуем таблицы, которые получаются после выполнения запроса.

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

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

 

Сбор рекомендаций

Успешное прохождение практики — еще не конец истории. Дальше HR-отдел собирает рекомендации с предыдущих мест работы соискателя. Мы не делаем из этого тайны — контакты коллег, которые согласны пообщаться с нами, предоставляют сами кандидаты.

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

Мой подход к выбору разработчика долгий — иногда все 4 этапа кандидат проходит за месяц, с учетом двухнедельной отработки на текущем месте. Но чаще это занимает меньше времени. Однако эта система помогает найти и взять в штат толкового программиста с прокачанными профессиональными навыками и развитыми личными качествами.

P. S. Статью помогла подготовить Анжелика Черниго.

Общие вопросы на собеседовании для программистов

На главную »FAQ» Какие вопросы работодатель может задать во время собеседования?

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

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

Существует два основных подхода к вопросам собеседования для программистов: практический и личный. Практические вопросы могут включать в себя решение проблемы потенциального сотрудника во время собеседования. Этот метод может передать подходы программиста к общению и решению проблем в стрессовой ситуации.

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

Общие вопросы на собеседовании для программистов

1. С какими языками программирования можно работать? Опишите свой опыт общения с ними.

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

2. Как вы подходите к ситуациям с высоким давлением, когда все идет не так? Приведите пример из своего опыта.

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

3.Что вы делаете в первую очередь, когда создаете что-то новое?

Возможность оценивать, расставлять приоритеты и планировать проект сильно влияет на успех программиста. Способность видеть весь проект от начала до конца и визуализировать, как выглядят промежуточные этапы, требует глубокого понимания программирования. Визуализация и практика необходимы для успеха.

4. Как вы следите за текущими тенденциями и достижениями в этой области?

Из-за быстрого развития технологий программист должен быть вечным учеником.Участие в непрерывном образовании, получение обновленных сертификатов и взаимодействие с другими программистами, работающими в аналогичных областях, могут быть очень полезными. Работодатели также ищут потенциальных сотрудников, открытых для дебатов, дискуссий и критики.

5. Какая идеальная рабочая среда?

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

Интервью: Один день из жизни программиста

Иногда бывает трудно решить, какую карьеру вы хотите продолжить. Мы, сотрудники JAXenter, это понимаем — вот почему мы решили поговорить с двумя людьми с большим опытом программирования. Хотите ли вы узнать больше о том, как выглядит карьера в программировании, или просто не знаете, чем занимаются ваши коллеги, надеюсь, вы найдете эти вопросы и ответы с Дженни Вем и Крисом Лоем столь же интересными, как и мы! В общем, хватит разговоров, перейдем к интервью:

JAXenter: Каков обычный день в жизни программиста?

Jenny: Обычный день для меня начинается с утренней встречи нашей команды, на которой мы сообщаем, над чем мы работаем и не мешает ли что-нибудь нашему прогрессу.Затем я проверяю рабочие заявки в Jira — инструменте, который мы используем для организации задач, которые необходимо выполнить, и либо начинаю новую заявку, либо продолжаю с той, над которой я работал.

Билетом может быть что угодно, от создания новых функций до исправления ошибок, и когда я заканчиваю сборку или исправляю что-то, моя команда проверяет проделанную мной работу и предлагает любые необходимые изменения. После внесения этих изменений мой новый код объединяется с «главной» копией кодовой базы, а затем я создаю новый тикет!

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

JAXenter: Какие качества / навыки делают программиста успешным?

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

Jenny: «Типичный» опыт программиста, вероятно, будет включать в себя информатику или степень STEM, хотя, очевидно, не все программисты имеют типичный опыт — в мою команду входят люди с более типичным опытом, а также люди, которые стали программистами после смена карьеры.На самом деле я изучал искусство, прежде чем пройти курс для начинающих по кодированию.

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

Как изменилось программирование

JAXenter: Как изменилась роль программиста за последние годы?

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

Интернет действительно демократизировал доступ к навыкам и знаниям.Благодаря экосистеме с открытым исходным кодом и популярным сайтам, обеспечивающим открытое сотрудничество, таким как GitHub и Stack Overflow, барьер для входа ниже, чем когда-либо. Следовательно, отрасль более разнообразна, чем когда-либо прежде.

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

JAXenter: Повлиял ли рост робототехники и автоматизации на роль программиста?

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

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

Такие отрасли, как производство и транспорт, напрямую несут на себе основную тяжесть автоматизации, и в мире машинного обучения / искусственного интеллекта это уже происходит в определенной степени.Хотя история подрывных стартапов предполагает, что в какой-то момент кто-то попытается автоматизировать нас, я не слишком беспокоюсь, если честно. Чем больше у нас автоматизации, тем больше мы можем сосредоточиться на более серьезных проблемах, которые могут решить технологии.

СМОТРИ ТАКЖЕ: За кодом: дизайнеры языков, сценарии для разработчиков 21 века

Ценность программистов

JAXenter: как программист чувствует, что они добавляют ценность и влияют на крупный бизнес?

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

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

JAXenter: Насколько сложно привлечь в бизнес сильных программистов?

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

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

JAXenter: Есть нехватка навыков?

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

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

СМОТРИ ТАКЖЕ: Женщины в сфере технологий: «Самое главное в начале — быть более уверенным в себе»

JAXenter: Как фирмы могут привлекать и привлекать лучших программистов?

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

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

Что дальше?

JAXenter: Как будут выглядеть будущие сотрудники программистов?

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

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

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

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

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

JAXenter: По мере того, как компании начинают автоматизировать процессы в своей организации, как роль программиста будет продолжать меняться?

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

СМОТРИ ТАКЖЕ: Как искусственный интеллект повлияет на разработку программного обеспечения

Карьерный совет

JAXenter: И наконец, какой совет вы дадите людям, которые хотят сделать карьеру в программировании?

Крис: Мой главный совет — просто наберитесь кода! Если у вас есть компьютер и доступ в Интернет, вы можете начать обучение бесплатно. Найдите онлайн-курс, создайте классный веб-сайт, решите несколько головоломок и приступайте к работе.

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

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

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

10 самых популярных вопросов на собеседовании для программистов, которые помогут найти наиболее подходящего

При проведении нетехнического собеседования трудно понять, является ли разработчик перед вами или — особенно если у вас есть только час, чтобы принять решение, или, что еще хуже, 15 минут!

Примерно так однажды вы взяли интервью у Джейка по телефону и решили, что он не отвечает всем требованиям.Тем не менее, он добавил вас в LinkedIn. Год спустя вы узнали, что его подхватил главный конкурент вашей компании, и он творит чудеса в другом пруду. Ага, ты позволил хорошей рыбе ускользнуть.

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

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

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

1. Почему вам интересно работать в «XYZ company»?

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

2. Любишь программировать? Если да, то почему?

Остерегайтесь разработчиков, которым сложно объяснить, почему им нравится программировать, и тех, кто программирует ради денег и / или потому, что легко найти работу. Хороший программист — это программист, которому нравится программировать ради создания, решения проблем и поиска решений.

3.Что вам нравилось в вашей предыдущей рабочей среде, а что не нравилось?

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

4. Работали ли вы когда-нибудь в многопрофильной команде (т.е. как с техническими, так и с нетехническими участниками)? Если да, то понравилось и почему? Если нет, хотели бы вы и почему?

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

5. Опишите ситуацию, в которой вы столкнулись с серьезным препятствием для завершения проекта. Как ты с этим справился? Какие шаги вы предприняли?

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

«Не забудьте также задать дополнительные вопросы — иначе вы потеряете возможность погрузиться в мыслительный процесс кандидата». — Карл Сакас

6. Приведите мне недавний пример стрессовой ситуации на работе. Что произошло? Как ты с этим справился?

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

7. Расскажите мне о проекте, над которым вы работали, и которым вы больше всего гордитесь. Что у вас получилось особенно хорошо?

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

8. Расскажите о проекте, над которым вы работали, и которым меньше всего гордитесь. Что бы вы сделали по-другому?

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

9. С какими языками программирования / фреймворками вы можете работать? Вы можете описать свой опыт общения с ними?

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

10. Если бы вы могли освоить одну технологию в этом году, что бы это было?

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

Давайте завершим

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

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

Что спросить у программиста на собеседовании

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

Какие языки программирования вы знаете?

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

Теперь, скорее всего, вы и собеседник не владеете одними и теми же языками программирования. Итак, ваши последующие вопросы следующие: (а) в чем разница между языками программирования, которые вы знаете; (б) какие языки вы предпочитаете и почему; и (c) для каких типов проектов лучше всего подходит каждый язык программирования? Чтобы разумно ответить на эти вопросы, нужно не только поверхностное знакомство с языками.Интервьюируемый должен действительно взаимодействовать с языками в достаточной степени, чтобы так много о них думать.

Какой ваш любимый язык программирования и почему?

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

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

Что бы вы изменили в своем любимом языке программирования / среде?

Компьютерные программисты связаны инструментами, которые они используют.Если вы используете инструмент в течение длительного времени, и ваши результаты и эффективность ограничены вашим инструментом, у вас сложится твердое мнение об этом инструменте. Если ваши результаты и эффективность ограничены вашими собственными ограничениями, у вас будет меньше шансов иметь мнение о том, как инструмент может быть лучше. Ваш программист должен иметь мнение об ограничениях любимого инструмента. Очень немногие программисты считают свой текущий инструмент идеальным. Если это так, то также может быть полезно получить самоуверенный отзыв о второй по популярности платформе и инструменте.Хотя ответ должен быть последовательным, цель не состоит в том, чтобы судить о мнении программиста, однако оно может отличаться от вашего. Цель, опять же, состоит в том, чтобы увидеть, имеет ли интервьюируемый твердое, информированное мнение об инструментах. Те, у кого нет твердого мнения, недостаточно активно используют свои инструменты, чтобы понять, что они на самом деле чувствуют.

С какой самой сложной проблемой программирования вы столкнулись за последние два года и как вы ее решили?

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

Этот вопрос позволяет программистам рассказать о том, что они делали в прошлом.Они могут солгать о прошлом. Однако для того, чтобы достаточно подробно изложить проблему и решение, им необходимо действительно это понять. Я обнаружил, что люди, которые не могут стать хорошими программистами, редко понимают, а тем более способны описать решения, которые предлагают другие люди. Затем вы можете продолжить, задав вопросы о том, почему они выбрали именно такое решение, какие еще варианты они могли выбрать, но не сделали, и сделают ли они тот же выбор сейчас, что и раньше.Вы делаете это, потому что вам нужны доказательства того, что (а) они знают, как думать о проблемах и возможностях; (б) они могут принимать технические решения, используя информацию, которая у них есть в данный момент; (c) они могут размышлять и видеть, как они могли бы сделать что-то лучше; и (г) они обладают достаточными коммуникативными способностями, чтобы рассказать вам об этих проблемах, решениях и их причинах.

Чем вы занимаетесь программированием в свободное время?

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

Чем еще вы занимаетесь в свободное время?

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

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


Вот часть 1: Советы профессионалов по найму лучших компьютерных программистов Джонатан Бартлетт: Будет легче, если мы остановимся и задумаемся о том, чем программирование отличается от других профессий. Наем программиста — другое дело, потому что вы редко ищете фиксированный набор навыков. Практически все, что делает программист, — это изобретение. То, для чего вы обычно нанимаете программиста, — это не фиксированная задача, а способность адаптироваться к тому, что будет дальше. Например, двенадцать лет назад никто не знал, в какой степени мобильные телефоны будут управлять нашим бизнесом.Идея нанять мобильных разработчиков была неслыханной.

Как пройти собеседование по программированию

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

Хороший программист играет на удивление небольшую роль в прохождении собеседований по программированию. Чтобы быть продуктивным программистом, вам нужно уметь решать большие, разрастающиеся проблемы в течение недель и месяцев.Напротив, каждый вопрос в интервью длится менее одного часа. Таким образом, чтобы добиться успеха на собеседовании, вы должны уметь быстро решать небольшие проблемы под принуждением, четко объясняя свои мысли. Это другой навык [1]. Вдобавок ко всему, интервьюеры часто плохо обучены и невнимательны (они предпочитают программировать) и задают вопросы, далекие от реальной работы. Они привносят предвзятость, сопоставление с образцом и отсутствие стандартизации.

Запустив Triplebyte, я это ясно вижу.Мы проводим собеседования с инженерами, не просматривая резюме, и быстро доставляем их на места в ведущих технологических компаниях. За последние девять месяцев мы опросили более 1000 программистов. Мы уделяем большое внимание практическому программированию и позволяем кандидатам выбрать один из нескольких способов оценки. Это означает, что мы работаем со многими (очень талантливыми) программистами без формального обучения CS. Многие из этих людей плохо справляются с собеседованиями. На завтрак они едят большие задачи, но не решаются на 45-минутные задачи алгоритма.

Хорошая новость в том, что собеседование — это навык, которому можно научиться. Нам удалось научить кандидатов лучше проходить собеседования. Действительно, качество, которое больше всего коррелирует с прохождением кандидатом Triplebyte собеседований в компаниях, — это не чистый талант, а, скорее, усердие.

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

1. Будьте полны энтузиазма

Энтузиазм оказывает огромное влияние на результаты собеседований. Около 50% кандидатов Triplebyte, которые не проходят собеседование в компаниях, терпят неудачу по нетехническим причинам. Обычно это описывается компанией как «плохая культура». Однако в девяти случаях из десяти соответствие культуре означает лишь энтузиазм по отношению к тому, чем занимается компания.Компаниям нужны кандидаты, увлеченные своей миссией. Для многих компаний это имеет такой же вес, как и технические навыки. Это имеет смысл. Возбужденные сотрудники будут счастливее и будут работать усерднее.

Проблема в том, что это можно подделать. Некоторым кандидатам удается убедить каждую компанию, с которой они разговаривают, в том, что это работа их мечты, в то время как другим (искренне взволнованным) никого не удается убедить. Мы видели это снова и снова. Решение состоит в том, чтобы каждый стал лучше демонстрировать свой энтузиазм.Это не разрешение лгать. Но собеседование похоже на свидание. Никто не хочет, чтобы на первом свидании ему говорили, что он — один из многих вариантов, даже если это обычно так. Точно так же большинство программистов просто хотят хорошую работу с хорошей зарплатой. Но заявлять об этом в интервью — ошибка. Лучший подход — подготовить перед собеседованием заметки о том, что вам нравится в компании, и сообщить об этом каждому интервьюеру, когда они спросят, есть ли у вас какие-либо вопросы. Хороший источник идей — прочитать недавние сообщения в блогах и пресс-релизы компании и отметить те, которые кажутся вам интересными.

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

2. Изучите общие концепции интервью

Большой процент вопросов интервью включает структуры данных и алгоритмы.Хорошо это или плохо, но это правда. Мы собираем детали вопросов от наших кандидатов, которые проходят собеседование в компаниях (мы проведем углубленный анализ этих данных в следующей статье), и вопросы алгоритмов составляют более 70% задаваемых вопросов. Вам не нужно быть экспертом, но знание следующего списка алгоритмов и структур данных поможет большинству компаний.

  • Хеш-таблицы
  • Связанные списки
  • Поиск в ширину, поиск в глубину
  • Быстрая сортировка, сортировка слиянием
  • Двоичный поиск
  • 2D-массивы
  • Динамические массивы
  • Двоичные деревья поиска
  • 354 Динамическое программирование Big
  • -O analysis

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

Выучить эти вещи не так сложно, как многие люди, с которыми мы разговариваем, со страхом. Алгоритмы обычно описываются академическим языком, и это может оттолкнуть. Но по своей сути нет ничего сложнее в этом списке, чем архитектура современного веб-приложения. Если вы можете создать веб-приложение (ну), вы можете изучить эти вещи. Ресурс, который я рекомендую, — это книга Стивена Скиены The Algorithm Design Manual . Главы с 3 по 5 отлично подходят для непосредственного ознакомления с этим материалом.Он использует C и некоторый математический синтаксис, но хорошо объясняет материал. На Coursera также есть несколько хороших курсов по алгоритмам. Этот, в частности, фокусируется на концепциях, которые важны при собеседовании.

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

3.Получите помощь от вашего интервьюера

Интервьюеры помогают кандидатам. Они дают подсказки, отвечают на идеи и обычно направляют процесс. Но они не помогают всем кандидатам одинаково. Некоторым программистам удается получить значительную помощь, даже если интервьюер не будет против них возражать. Других сурово судят за любые намеки, которые им дают. Вы хотите, чтобы вам помогли.

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

  1. Задавайте вопросы
  2. Обсуждайте с помощью грубой силы
  3. Обсуждайте оптимизированное решение
  4. Напишите код

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

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

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

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

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

4. Разговор о компромиссах

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

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

  • HTTP (на уровне протокола)
  • Базы данных (индексы, планирование запросов)
  • CDN
  • Кэширование (кэш LRU, memcached, redis)
  • Балансировщики нагрузки
  • Распределенный работник системы

Вам необходимо понимать эти концепции.Но что еще более важно, вам нужно понять, как они сочетаются друг с другом, чтобы сформировать настоящие системы. Лучший способ узнать это — прочитать о том, как другие инженеры использовали эти концепции. Блог High Scalability — отличный ресурс для этого. Он публикует подробные описания серверной архитектуры реальных компаний. Вы можете прочитать о том, как каждая концепция из приведенного выше списка используется в реальных системах.

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

5. Выделите результаты

Третий тип вопросов, с которыми вы можете столкнуться, — это вопрос об опыте.Здесь интервьюер просит вас рассказать о программном проекте, который вы завершили в прошлом. Ошибка, которую допускают многие инженеры в этом вопросе, — говорить о технически интересном стороннем проекте. Многие программисты предпочитают говорить о реализации классификатора нейронной сети или написании бота для грамматики Twitter. Это плохой выбор, потому что интервьюеру очень трудно судить об их объеме. Многие кандидаты преувеличивают простые побочные проекты (иногда они никогда не срабатывают), и интервьюер не имеет возможности сказать, делаете ли вы это.

Решение состоит в том, чтобы выбрать проект, который дал результаты, и выделить результаты. Это часто связано с выбором менее технически интересного проекта, но оно того стоит. Подумайте (заранее) о написанном вами программировании, которое оказало наибольшее влияние на реальный мир. Если вы написали игру для iOS и ее скачали 50 тысяч человек, количество загрузок делает ее хорошим вариантом. Если вы написали административный интерфейс во время стажировки, который был задействован для всего административного персонала, о развертывании стоит поговорить.Выбор практического проекта также покажет компании, что вы сосредоточены на реальной работе. Программист, слишком сосредоточенный на интересных технологиях, — это антипаттерн, против которого борются компании (эти программисты иногда непродуктивны).

6. Используйте динамический язык, но упомяните C

. Я рекомендую вам использовать динамический язык, такой как Python, Ruby или JavaScript, во время собеседований. Конечно, вы должны использовать тот язык, который знаете лучше всего. Но мы обнаруживаем, что многие люди пытаются пройти собеседование на C, C ++ или Java, считая, что это «настоящие» языки программирования.Несколько классических книг по собеседованию рекомендуют программистам выбирать Java или C ++. По крайней мере, в стартапах мы обнаружили, что это плохой совет. Кандидаты лучше справляются с использованием динамических языков. Я думаю, это правда из-за компактного синтаксиса динамических языков, гибкой типизации, списков и хеш-литералов. Это вседозволенные языки. Это может стать помехой при написании сложных систем (очень спорный вопрос), но это здорово, когда вы пытаетесь втиснуть двоичный поиск на доску.

Независимо от того, какой язык вы используете, полезно упомянуть работы на других языках.Антипаттерн, который компании отбирают, — это люди, знающие только один язык. Если вы знаете только один язык, вам придется полагаться на свои силы в этом языке. Но если вы работали или работали над дополнительными проектами на нескольких языках, не забудьте упомянуть об этом во время беседы с интервьюерами. Если вы работали с низкоуровневыми языками, такими как C, C ++, Go или Rust, разговор об этом особенно поможет.

Java, C # и PHP — проблемный случай. Как мы описали в нашем последнем сообщении в блоге, мы обнаружили предвзятое отношение к этим языкам в стартапах.У нас есть данные, свидетельствующие о том, что программисты, использующие эти языки на собеседовании, сдают меньше баллов. Это несправедливо, но это правда. Если у вас есть другие варианты, я рекомендую не использовать эти языки в интервью со стартапами.

7. Практика, практика, практика

Вы можете стать лучше на собеседовании, если научитесь отвечать на вопросы. Это правда, потому что собеседования сопряжены со стрессом, но стресс вредит производительности. Решение — практика. Интервью становится менее стрессовым с разоблачением.Это происходит естественно с опытом. Мы обнаруживаем, что даже в рамках единственного поиска работы кандидаты часто не проходят первоначальные собеседования, а затем сдают больше по мере роста их уверенности. Если вы боретесь со стрессом, я рекомендую вам начать этот процесс с практики стресса на собеседовании. Получите список вопросов для собеседования (книга Cracking the Coding Interview — хороший источник) и решите их. Установите 20-минутный таймер на каждый вопрос и спешите ответить. Потренируйтесь писать ответы на доске (не все компании требуют этого, но это худший случай, поэтому вам следует практиковаться).Ручка на бумаге — неплохая имитация доски. Если у вас есть друзья, которые могут помочь вам подготовиться, по очереди брать интервью у друг друга — это здорово. Чтение большого количества вопросов на собеседовании дает дополнительное преимущество, так как дает вам идеи, которые можно использовать на реальных собеседованиях. Поразительное количество вопросов используется повторно (полностью или частично).

От этого выиграют даже опытные (и не испытывающие стресса) кандидаты. Собеседование — это навык, который в корне отличается от работы программистом, и он может атрофироваться.Но опытные программисты часто (разумно) считают, что им не нужно готовиться к собеседованию. Они меньше учатся. Вот почему младшие кандидаты часто лучше справляются с вопросами на собеседовании, чем опытные кандидаты. Компании знают об этом, и, как это ни парадоксально, некоторые говорят нам, что они устанавливают более низкие планки на вопросы программирования для опытных кандидатов.

8. Укажите учетные данные

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

9. Линейные предложения

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

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

Заключение

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

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

Спасибо Джареду Фридману, Эммету Ширу, Гарри Тану, Алексису Оганяну и Дэниелу Гаклу за чтение черновиков этого документа.

Footnotes:

[1] Это не означает, что результативность собеседования не коррелирует с навыками программирования. Оно делает. Но корреляция намного слабее, чем думает большинство компаний, и большую часть дисперсии интервью объясняют не только навыки программирования, но и другие факторы.↩

Более 100 вопросов на собеседовании по программированию для программистов | by javinpaul

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

image_credit- Coderust 3.0: Ускоренная подготовка к собеседованию с интерактивными задачами и визуализацией

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

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

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

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

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

В этой статье я собираюсь поделиться с вами топ-100 задач собеседования по кодированию из собеседований по программированию, которые должен знать каждый программист.

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

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

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

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

Одна из основных проблем с кодированием заключается в том, что на собеседованиях встречаются сотни и тысячи проблем с кодированием, есть даже такие сайты, как LeetCode, HackerRank, Codewars, Topcoder, freeCodeCamp, HackerEarth, которые обучают программистов программированию на собеседованиях с множеством сложных вопросов. , что иногда просто ошеломляет новичка, ищущего работу.

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

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

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

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

И, если вы предпочитаете книги, нет ничего лучше, чем Cracking The Coding Interview , Гейл Лаакманн МакДауэлл , где представлены 189+ вопросы и решения по программированию. Хорошая книга для подготовки к программированию собеседований в короткие сроки. Кстати, я также заработаю немного денег, если вы купите любой из этих ресурсов, упомянутых здесь.

  1. Нет лучшего способа преуспеть на собеседовании по кодированию, чем практиковать как можно больше задач кодирования. Это не только научит ваш разум распознавать алгоритмические шаблоны в задачах, но и придаст вам столь необходимую уверенность в решении проблемы, которую вы никогда раньше не видели.
  2. Мои вторые советы — узнать как можно больше структур данных и алгоритмов.Это продолжение предыдущего совета, но оно также включает в себя чтение, а не просто практику. Например, если вы знаете о хэш-таблице, вы также можете легко решить множество проблем с массивами и счетчиками. То же самое и с деревьями и графами.
  3. Выбор правильной структуры данных — очень важная часть собеседования по разработке программного обеспечения и кодированию, и до тех пор, пока вы не узнаете их, вы не сможете выбирать.
  4. Самостоятельно рассчитывайте время — кандидаты, которые решают задачи собеседования в срок и быстро, с большей вероятностью преуспеют на собеседовании, поэтому вам также следует рассчитывать время самостоятельно.
  5. Подумайте о крайних случаях и прогоните свой код через них. Некоторыми хорошими крайними случаями могут быть пустой ввод, какой-то странный ввод или действительно большой ввод для проверки граничных условий и ограничений.
  6. Решив проблему, попробуйте объяснить ее другу или коллегам, как вас также интересуют проблемы с кодированием. Это покажет вам, действительно ли вы поняли проблему или нет. Если вы можете легко объяснить, значит, вы поняли . Кроме того, обсуждение заставляет ваш разум работать, и вы можете предложить альтернативное решение и найти некоторые недостатки в существующих алгоритмах.
  7. Еще один полезный совет, который поможет преуспеть в собеседовании по кодированию: должно появиться на собеседовании по кодированию и во многих других. Вы почувствуете, что после каждого собеседования вам станет лучше, и это также поможет вам получить несколько предложений, что в дальнейшем позволит вам лучше вести переговоры и получить те дополнительные 30-50 тысяч, которые вы обычно оставляете на столе, если у вас есть только одно предложение.
  8. Кстати, если вы готовы к собеседованию по программированию, вы также можете пройти тест TripleByte и перейти непосредственно к финальному раунду собеседований с ведущими технологическими компаниями, такими как Coursera, Adobe Acrobat, Dropbox, Grammarly, Uber, Quora, Evernote, Twitch. и многое другое.Раньше я не знал о Triplebyte, но они предоставляют отличный сервис для соискателей. Большое им спасибо.

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

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

  1. Как реализуется алгоритм пузырьковой сортировки? ( решение )
  2. Как реализуется алгоритм сортировки слиянием? ( решение )
  3. Как вы подсчитываете появление данного символа в строке? ( решение )
  4. Как вывести первый неповторяющийся символ из строки? ( решение )
  5. Как преобразовать заданную строку в int, например atoi () ? ( решение )
  6. Как реализовать алгоритм сортировки по сегментам? ( решение )
  7. Как реализовать алгоритм счетной сортировки? ( решение )
  8. Как удалить дубликаты из массива на месте? ( решение )
  9. Как в Java перевернуть массив на месте? ( решение )
  10. Как дубликаты удаляются из массива без использования какой-либо библиотеки? ( решение )
  11. Как реализован алгоритм сортировки по основанию? ( решение )
  12. Как поменять местами два числа без использования третьей переменной? ( решение )
  13. Как проверить, перекрываются ли два прямоугольника друг с другом? ( решение )
  14. Как спроектировать торговый автомат? ( решение )
  15. Как найти недостающее число в заданном целочисленном массиве от 1 до 100? ( решение )
  16. Как найти повторяющееся число в заданном целочисленном массиве? ( решение )
  17. Как найти повторяющиеся числа в массиве, если он содержит несколько дубликатов? ( решение )
  18. Разница между стабильным и нестабильным алгоритмом сортировки? (ответ)
  19. Как реализуется итеративный алгоритм быстрой сортировки? ( решение )
  20. Как найти наибольшее и наименьшее число в несортированном целочисленном массиве? ( решение )
  21. Как отменить связанный список на месте? (решение)
  22. Как добавить элемент в середину связанного списка? (решение)
  23. Как отсортировать связанный список в Java? ( решение )
  24. Как найти все пары целочисленного массива, сумма которых равна заданному числу? ( решение )
  25. Как реализовать алгоритм сортировки вставкой? ( решение )
  26. Как в Java удаляются дубликаты из заданного массива? ( решение )
  27. как удалить повторяющийся символ из строки? ( решение )
  28. Как найти максимальный встречающийся символ в данной строке? ( решение )
  29. Как целочисленный массив сортируется на месте с помощью алгоритма быстрой сортировки? ( решение )
  30. Как перевернуть данную строку на месте? ( решение )
  31. Как вы печатаете повторяющиеся символы из строки? ( решение )
  32. Как проверить, являются ли две строки анаграммами друг друга? ( решение )
  33. Как найти все перестановки строки? ( решение )
  34. Как можно обратить данную строку с помощью рекурсии? ( решение )
  35. Как проверить, является ли данная строка палиндромом? ( решение )
  36. Как найти длину самой длинной подстроки без повторяющихся символов? (решение)
  37. Для данной строки str, как найти самую длинную палиндромную подстроку в str? (решение)
  38. Как проверить, содержит ли строка только цифры? ( решение )
  39. Как удалить N-й узел из конца связанного списка? ( решение )
  40. Как объединить два отсортированных связных списка? (решение)
  41. Как преобразовать отсортированный список в двоичное дерево поиска? ( решение )
  42. Как найти повторяющиеся символы в заданной строке? ( решение )
  43. Как подсчитать количество гласных и согласных в заданной строке? ( решение )
  44. Как перевернуть слова в заданном предложении без использования какого-либо библиотечного метода? ( решение )
  45. Как проверить, вращаются ли две струны друг относительно друга? ( решение )
  46. Как преобразовать массив байтов в строку? ( решение )
  47. Как удалить данный символ из String? ( решение )
  48. Как найти средний элемент односвязного списка за один проход? ( решение )
  49. Как проверить, содержит ли данный связанный список цикл? Как найти начальный узел цикла? ( решение )
  50. Как перевернуть связанный список? ( решение )
  51. Как изменить односвязный список без рекурсии? ( решение )
  52. Как удаляются повторяющиеся узлы в несортированном связном списке? ( решение )
  53. Как определить длину односвязного списка? ( решение )
  54. Как найти третий узел с конца в односвязном списке? ( решение )
  55. Как найти сумму двух связанных списков с помощью Stack? ( решение )
  56. В чем разница между массивом и связанным списком? ( ответ )
  57. Как удалить дубликаты из отсортированного связного списка? ( решение )
  58. Как найти узел, в котором начинается пересечение двух односвязных списков.( решение )
  59. Учитывая связанный список и значение x , разделите его так, чтобы все узлы меньше x располагались перед узлами, большими или равными x . ( решение )
  60. Как проверить, является ли данный связанный список палиндромом? (решение)
  61. Как удалить все элементы из связанного списка целых чисел, которые соответствуют заданному значению? (решение)
  62. Как реализовано двоичное дерево поиска? ( решение )
  63. Как выполнить обход перед порядком в данном двоичном дереве? ( решение )
  64. Как пройти по заданному двоичному дереву в предварительном порядке без рекурсии? ( решение )
  65. Как выполнить обход в заданном двоичном дереве? ( решение )
  66. Как распечатать все узлы данного двоичного дерева, используя обход по порядку без рекурсии? ( решение )
  67. Как реализовать алгоритм обхода постпорядка? ( решение )
  68. Как пройти по бинарному дереву без рекурсии при обходе после порядка? ( решение )
  69. Как печатаются все листья двоичного дерева поиска? ( решение )
  70. Как подсчитать количество конечных узлов в данном двоичном дереве? ( решение )
  71. Как выполнить двоичный поиск в заданном массиве? ( решение )
  72. Как поменять местами два числа без использования третьей переменной? ( решение )
  73. Как проверить, не перекрываются ли два прямоугольника друг с другом? ( решение )
  74. Как спроектировать торговый автомат? ( решение )
  75. Как реализовать кэш LRU на вашем любимом языке программирования? ( решение )
  76. Как проверить, является ли данное число палиндромом? ( решение )
  77. Как проверить, является ли данное число числом Армстронга? ( решение )
  78. Как найти все простые множители заданного числа? ( решение )
  79. Как проверить, является ли данное число положительным или отрицательным в Java? ( решение )
  80. Как найти наибольший простой множитель заданного целого числа? ( решение )
  81. Как напечатать все простые числа до заданного числа? ( решение )
  82. Как напечатать треугольник Флойда? ( решение )
  83. Как напечатать треугольник Паскаля? ( решение )
  84. Как вычислить квадратный корень из заданного числа? ( решение )
  85. Как проверить, является ли данное число простым? ( решение )
  86. Как сложить два числа без использования оператора плюс в Java? ( решение )
  87. Как проверить, является ли данное число четным / нечетным без использования арифметического оператора? ( решение )
  88. Как напечатать данную структуру пирамиды? ( решение )
  89. Как найти самый высокий повторяющийся мир из заданного файла в Java? ( решение )
  90. Как отменить заданное целое число в Java? ( решение )
  91. Как преобразовать десятичное число в двоичное в Java? ( решение )
  92. Как проверить, является ли данный год високосным в Java? ( решение )
  93. Можете ли вы реализовать алгоритм двоичного поиска без рекурсии? ( решение )
  94. Разница между стабильным и нестабильным алгоритмом сортировки? ( ответ )
  95. Что такое алгоритм поиска в глубину для двоичного дерева? (решение)
  96. Как реализуется итеративный алгоритм быстрой сортировки? ( решение )
  97. Как реализовать алгоритм сортировки вставкой? ( решение )
  98. Как реализуется алгоритм сортировки слиянием? ( решение )
  99. В чем разница между сравнительными и несравненными алгоритмами сортировки? ( ответ )
  100. Как реализовать алгоритмы решета Эратосфена для простых чисел? ( решение )

Этого количества вопросов должно быть достаточно, но если вам нужно больше таких вопросов по кодированию, вы можете воспользоваться помощью таких книг, как Cracking The Code Interview , Gayle Laakmann McDowell который представляет 189+ Вопросы и решения по программированию. Хорошая книга для подготовки к программированию собеседований в короткие сроки.

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

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

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

Если вы ищете работу по программированию или разработке программного обеспечения в 2019 году, вы можете начать свою подготовку с этого списка вопросов по кодированию, и если вы готовы к собеседованию, вы также можете пройти тест TripleByte и сразу перейти к финальному раунду интервью с ведущими технологическими компаниями, такими как Coursera, Adobe, Dropbox, Grammarly и многими другими.

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

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

Дальнейшее обучение
Структуры данных и алгоритмы: углубленное изучение Java
10 книг для подготовки собеседований по техническому программированию / кодированию
10 книг по алгоритмам, которые должен прочитать каждый программист
5 лучших книг по структуре данных и алгоритмам для разработчиков Java
От 0 до 1: Структуры данных и алгоритмы в Java
Анализ структуры данных и алгоритмов — собеседование
20+ проблем кодирования на основе строк из интервью
20+ проблем связанных списков из интервью
20+ задач на основе базовых алгоритмов из интервью

Заключительные замечания

Спасибо , Вы дошли до конца статьи … Удачи вам с собеседованием по программированию! Конечно, это будет непросто, но, следуя этим вопросам алгоритма поиска и сортировки, вы становитесь на шаг ближе, чем другие.Кстати, чем больше вопросов вы решите на практике, тем лучше будет ваша подготовка.

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

Всего наилучшего для собеседования по программированию.

Другие статьи , которые могут вам понравиться:

Как взять интервью у программиста

Как взять интервью у программиста

Билла Веннерса

24 февраля 2003 г.


Сводка

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

I В январе 2003 года я посетил саммит «Написание лучшего кода» в Портленде, штат Орегон, организованный Скоттом Мейерсом и Брюсом Экелем. На трехдневном саммите собрались 15 человек, чтобы обсудить качество кода и способы его улучшения. На протяжении всего обсуждения была ясна одна тема: хороший код пишут хорошие программисты.Следовательно, лучший способ улучшить качество кода в организации — нанять лучших программистов. Проблема в том, что найти хорошего программиста среди соискателей непросто.

Найти хороших программистов сложно, потому что хорошее программирование зависит от гораздо большего, чем просто знание синтаксиса языка программирования. Вам нужен кто-то, кто, несмотря на то, что носит полосатые брюки с рубашкой в ​​горошек, имеет хорошее чувство вкуса в объектно-ориентированном дизайне. Вам нужен кто-то, кто достаточно креативен, чтобы находить новаторские решения проблем, но при этом достаточно запоминающийся, чтобы всегда выстраивать свои фигурные скобки.Вам нужен кто-то, кто достаточно скромен, чтобы быть открытым для предложений по улучшению, но достаточно высокомерен, чтобы стоять твердо и обеспечивать руководство, когда он лучший человек для этого. Как можно все это рассказать о незнакомце, проведя с ним 30 минут в конференц-зале?

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

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

Дэйв Томас : Наймите таланты. Одна из самых больших ошибок компаний — это набирать сотрудников из списка покупок: мне нужен программист с шестилетним опытом работы на Java, трехлетним Oracle и двухлетним EJB. Мир меняется, поэтому вам нужно нанимать людей, которые меняются вместе с ним. Ищите людей, которые разбираются в в вычислениях , не обязательно в узких нишах. Они не только лучше адаптируются в будущем, но и с большей вероятностью будут проявлять новаторский подход в настоящем.

Крис Селлс : Чтобы определить, насколько хороши кандидаты технически, я позволяю им выбирать область, в которой, по их мнению, они обладают опытом. Мне нужно, чтобы они что-то хорошо знали, и я их об этом спрашиваю. Я их спрашиваю, почему. Я хочу, чтобы они знали, почему что-то в их области знаний работает именно так. Я не обязательно ищу специалиста в нужной мне области. Если они узнали почему в прошлом, я уверен, они узнают почему в будущем.

Другой метод связан с важностью создания диалога с кандидатом.Чтобы узнать о талантах и ​​личности кандидата, вы не можете просто задавать вопросы, на которые есть краткие фактические ответы. Вы должны найти способ завязать разговор. Чтобы стимулировать диалог, вы можете попросить кандидата критиковать какую-либо технологию:

Джош Блох : Я прошу кандидатов критиковать систему или платформу, которые у нас обоих общие, предпочтительно то, что они будут использовать в работе. Например, я могу спросить: «Какие части Java вам не нравятся и почему?»

Пит МакБрин : Я даю кандидатам образцы нашего текущего кода и прошу их объяснить и критиковать его.Это дает мне представление об их навыках, но также дает им понять, на что они могут рассчитывать.

Еще один способ стимулировать открытый диалог — попросить кандидата выполнить задание: решить проблему или создать дизайн. Хотя все участники встречи, казалось, согласились с тем, что это важный и полезный метод, он также вызвал большое беспокойство. Люди считали, что просить кандидата решать головоломки и задачи нужно с осторожностью:

Джош Блох : Мне нравится просить кандидата решить небольшую задачу дизайна, упражнения для пальцев, чтобы увидеть, как они думают и каков их процесс: «Как бы вы написали функцию, которая сообщает мне, является ли ее аргумент степень двойки? » Я не ищу оптимального решения для битового тиддлинга ((n & -n) == n) .Я хочу посмотреть, правильно ли они понимают сигнатуру метода, думают ли они о граничных случаях, разумен ли их алгоритм и могут ли они объяснить его работу, и могут ли они улучшить свою первую попытку.

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

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

Мэтт Герранс : Мне не нравится, когда меня просят написать программу, которая выполняет X на листе бумаги.Не просите кандидата написать программу на бумаге. Это пустая трата времени и пота. Люди не пишут программное обеспечение на бумаге, они делают это с помощью компьютеров, используя автозаполнение, макросы, проиндексированную документацию API и контекстно-зависимую справку. Они думают об этом, реорганизуют и даже переписывают. Если вы хотите увидеть работу человека, попросите его написать небольшой модуль или реализовать какой-нибудь интерфейс до интервью и принести код на ноутбуке или на бумажном носителе. Затем вы можете просмотреть его и обсудить дизайн, стиль кодирования и принятые решения.Это даст вам более реалистичную и полезную оценку работы и стиля человека.

Кевлин Хенни : Мне нравятся вопросы диалога о дизайне, на которые нет единого фиксированного ответа. Таким образом, они задают мне вопросы, и это вызывает дискуссию. Хорошо иметь в комнате доску. Диалог позволяет интервьюеру увидеть, как работает собеседник, тогда как вопрос факта таков: он отлично подходит для телешоу викторин, но не говорит вам, как кто-то будет работать и подходить к делу со временем.Вопрос-головоломка требует знания трюка, который, по сути, является чем-то известным или неизвестным. Я не люблю вопросы-головоломки, потому что они не требуют диалога.

Джош Блох : Правильный вопрос во многом зависит от опыта и зрелости кандидата.

Дэйв Томас : Я ищу людей с любопытством. Настоящие проблемы, а не головоломки.

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

Джош Блох : Я хочу увидеть их код. Вы увидите, что они выбирают. Вы узнаете, что они ценят. Вы узнаете, как они общаются.

Несколько человек указали, что они спрашивают кандидатов о книгах по программированию, которые они читают, чтобы узнать, заинтересован ли программист в улучшении собственных навыков программирования:

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

Рэнди Стаффорд : Я узнал, какие книги они читают, потому что для меня важно, чтобы они занимались самообразованием.

Личность так же важна, как и технические способности, или, возможно, еще важнее. Насколько хорошо кандидат подошел бы команде? Насколько хорошо они впишутся в рабочую среду? Люди использовали различные методы оценки личности:

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

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

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

Кевлин Хенни : Я пытаюсь представить, если бы я пошел в паб и поговорил с ними, не связанные с технологиями, — не если они мне нравятся, а могу ли я с ними поладить. Они доступны для публикации? Могу я поговорить с ними вне офиса?

Дон МакГи : Самый симпатичный человек часто не самый лучший человек.

Дэйв Томас : Я думаю, что каждой команде определенного размера нужна профессиональная заноза в заднице, потому что команды успокаиваются и фиксируются на своем пути. Время от времени им нужно выходить из зоны комфорта, чтобы они могли взглянуть на проблемы с другой точки зрения. Есть два вида головной боли: надоедливый хам, которого следует избегать во всех командах, и человек, который никогда не узнал, что взрослые не должны спрашивать «Почему?». все время. Последнее — сокровище.

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

Чак Эллисон : Я с ними разговариваю. Я их чувствую. Я всегда спрашиваю, что они сделали. Я обнаружил, что, обнаружив, чем человек увлечен технически, вы можете узнать о нем много важного.Раньше я просил людей описать проект, который был им особенно интересен или сложным и успешным. Иногда я спрашивал, чем они больше всего гордятся. Обычно это показывает глубину понимания и мастерства. Это также заставляет их включать пожарный шланг устно, а вы можете расслабиться и получить большинство нужных вам ответов.

Randy Stafford : Я смотрю на прошлые проекты, перечисленные в их резюме, и прошу их рассказать об этих проектах — как была организована команда, какие технологии и архитектуры использовались, было ли программное обеспечение успешным в производстве и т. Д.В их ответах я прислушиваюсь к тому, какие уроки они извлекли из этого опыта, и совпадают ли эти уроки с уроками, которые я извлек из своего опыта и из профессиональной литературы. Я получаю представление о том, как они воспринимают себя по отношению к окружающему миру. Некоторые выглядят высокомерными, некоторые невежественными, некоторые беспомощными. Другие кажутся скромными, умными и целеустремленными. Я часто спрашиваю их, какую литературу по разработке программного обеспечения они читают. Для меня очень важно непрерывное образование.

Анжелика Лангер : В Германии найм — это как выйти замуж. Это «пока смерть не разлучит нас» — брак без черного развода, потому что нельзя увольнять сотрудников. Единственный шанс уволить кого-то — это испытательный срок от трех до шести месяцев или когда компания обанкротится.

Основная фильтрация проводится за до собеседования на основе биографических данных (CV) и представленных документов, таких как оценки от бывших работодателей.(В Германии работодатели должны предоставить каждому сотруднику письменную оценку, когда они покидают компанию.) Само собеседование обычно бывает кратким. Основным инструментом фильтрации является тщательная проверка резюме и документов; 98 процентов всех претендентов дисквалифицируются на этом этапе. Собеседование должно подтвердить впечатление, которое вы получите от документов заявителя, и позволит вам почувствовать его личность. После этого счастливый победитель проходит испытательный срок.

Испытательный срок определенно не заменяет фильтрацию; он просто держит последний выход открытым до тех пор, пока вам действительно не придется совершить фиксацию.

Энди Хант : Мы наняли людей, которые хорошо прошли собеседование, но они плохо справлялись с работой. Если возможно, наймите их на испытательный срок.

Дон МакГи : Вы также можете пригласить кандидатов на полдня и заставить их делать то, что они делали бы на работе.

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

У вас есть мнение о методах, упомянутых в этой статье? У вас есть инструмент или методика, с помощью которой вы можете найти хороших программистов? Поделитесь своими идеями в теме форума «Новости и идеи»: «Как взять интервью у программиста».

Чак Эллисон — профессор информатики в Государственном колледже Юта Вэлли в Ореме, Юта. Он имеет ученую степень по математике и профессионально занимался разработкой программного обеспечения с 1978 по 2001 год, работая на подрядчиков оборонной промышленности и другие крупные корпорации. Он провел большую часть 1990-х годов в качестве члена Комитета по стандартам C ++ и разработал стандартный класс битовых наборов. Он был обозревателем журнала C / C ++ Users Journal (C ++ и Java) и редактором с 1992 года, а сейчас является старшим редактором журнала.Он является автором C & C ++ Code Capsules (Prentice Hall) и соавтором с Брюсом Экелем книги Thinking in C ++, Volume 2 (Prentice Hall). Он широко преподавал C ++ и Java в США и доступен для обучения и консультаций с мая по август:
http://www.freshsources.com/

Джош Блох — архитектор в группе Core Java Platform Group компании Sun Microsystem. Он разработал значительные усовершенствования API и языка Java, в частности API коллекций Java и java.математический пакет. Совсем недавно он возглавлял группы экспертов, которые определяли средства утверждения и предпочтения Java. В своей книге 2001 года « Эффективное руководство по языку программирования Java » (Addison Wesley) Джош сформулировал свою мудрость в 57 конкретных руководящих принципах по разработке и реализации программ Java:
http://java.sun.com/docs/books/ef fective /

Алистер Кокберн — основатель компаний Humans and Technology и Cockburn and Associates. Алистер всемирно известен своей работой в области объектно-ориентированной разработки программного обеспечения.Алистер занимается техническим содействием, проектированием процессов и организации, настройкой проекта, сбором требований и ОО-дизайном:
http://alistair.cockburn.us/

Брюс Экель является автором Thinking in Java (Prentice Hall), компакт-диска с практическим семинаром по Java, Thinking in C ++ (Prentice Hall) и C ++ Inside and Out (McGraw Hill), среди прочего. Он провел сотни презентаций по всему миру, опубликовал более 150 статей в многочисленных журналах, был одним из основателей комитета ANSI / ISO C ++ и регулярно выступает на конференциях.Он проводит публичные и частные семинары и консультирует по проектированию на C ++ и Java:
http://www.mindview.net/

Jack Ganssle помогает разработчикам быстрее создавать улучшенные встроенные системы. Он основал, разработал и продал три электронные компании; включая одного из ведущих мировых производителей встроенных средств разработки. Джек — технический редактор Embedded Systems Programming , а также ежемесячный обозреватель журнала «Breakpoints». Он опубликовал более 300 статей по различным аспектам разработки встроенных систем, а также две книги ( The Art of Designing Embedded Systems и The Art of Programming Embedded Systems , обе опубликованные Newnes) по этой теме.В Интернете он ведет еженедельную колонку «Embedded Pulse» на сайте embedded.com и является редактором The Embedded Muse , бесплатного двухнедельного информационного бюллетеня по электронной почте:
http://www.ganssle.com/index.htm

Мэтт Герранс начал свою профессиональную деятельность в качестве инженера-электронщика, но быстро увидел свет и переключился на разработку программного обеспечения. Сейчас у него более 12 лет профессиональной разработки программного обеспечения, включая работу над C ++, Java, Python и, да, даже JavaScript. Он ведет обозреватель C # в Artima.ком:
http://www.cyclethere.com/

Кевлин Хенни — независимый консультант и инструктор из Великобритании. До того, как стать директором-основателем Curbralan Limited, он был главным технологом QA Training. Он разработал и предоставил учебные материалы и консультации по многим аспектам объектно-ориентированной разработки, которые он практиковал в ряде областей более десяти лет:
http://www.curbralan.com

Энди Хант и Дэйв Томас — «программисты-прагматики», признанные во всем мире как эксперты, разрабатывающие высококачественное программное обеспечение — точные и очень гибкие системы.Они помогли написать теперь известный Agile Manifesto и регулярно рассказывают о новых способах создания программного обеспечения. Их бестселлер The Pragmatic Programmer (Addison Wesley) описывает их передовой опыт разработки программного обеспечения. Их совокупный опыт работы в отрасли составляет более 40 лет. Они знают практическую разработку программного обеспечения:
http://www.pragmaticprogrammer.com/

Анжелика Лангер работает независимым тренером-фрилансером, наставником и консультантом с собственной учебной программой.Ее текущая работа опирается на более чем десятилетний опыт работы инженером-программистом в компаниях Германии и США, а также несколько лет в качестве тренера и консультанта. Ей нравится выступать на конференциях по всему миру. Ее консалтинговые и наставнические задания сосредоточены на проверке кодов, аудитах, оценке проектов, специализированных семинарах и многом другом. Вместе с Клаусом Крефтом она написала авторитетную книгу Standard C ++ IOStreams and Locales (Addison Wesley) http: //www.langer.camelot.de / iostreams.htm. Анжелика также работала в качестве обозревателя в C ++ Report http://www.langer.camelot.de/Articles/Articles.htm#C++ Report и C / C ++ Users Journal http://www.langer.camelot.de /Articles/Articles.htm#CUJ в течение многих лет, а в настоящее время ведет колонку под названием «Эффективная Java» http://www.langer.camelot.de/Articles/Articles.htm#JavaSpektrum для немецкого журнала JavaSPEKTRUM :
http://www.langer.camelot.de/

Пит МакБрин — автор книг Software Craftsmanship и Questioning Extreme Programming (оба написаны Аддисоном Уэсли).Он независимый консультант, которому нравится писать и поставлять программное обеспечение. Несмотря на то, что он тратит много времени на написание, обучение и наставничество, он делает все возможное, чтобы каждый год выполнять практическое программирование в реальном проекте. Пит специализируется на поиске творческих решений проблем, с которыми сталкиваются разработчики программного обеспечения:
http://www.mcbreen.ab.ca/

Дон МакГи — бизнес-консультант и поверенный. Раньше она работала ведущим аналитиком в Underdog Ventures, LLC в Нью-Йорке и Global Partners, LLC в Напе, Калифорния, уделяя особое внимание инвестированию в компании, оказывающие большое социальное влияние.Г-жа МакГи предоставляет клиентам юридические и бизнес-консультации по вопросам запуска, обзору бизнес-планов, созданию бизнеса, венчурному финансированию, соглашениям о разработке технологий, лицензионным соглашениям, защите интеллектуальной собственности, частным размещениям, соглашениям о совместных предприятиях, вопросам недвижимости и планированию недвижимости. и преемственность бизнеса. Она часто выступает по вопросам ангельского инвестирования, венчурного финансирования и женского предпринимательства. С ней можно связаться по адресу:
[email protected]

Скотт Мейерс — один из ведущих мировых экспертов в области разработки программного обеспечения на C ++.Он написал бестселлер Effective C ++ серии ( Effective C ++ , Effective C ++ и Effective STL (все Addison Wesley)), написал и разработал инновационный Effective C ++ CD , является редактором-консультантом для Аддисон Уэсли разработал серию «Эффективная разработка программного обеспечения» и является членом консультативного совета журнала « Разработка программного обеспечения ». Он также входит в состав технических консультативных советов нескольких начинающих компаний.Программист с 1972 года, имеет степень магистра наук. получил степень доктора компьютерных наук в Стэнфордском университете и получил степень доктора философии. из Университета Брауна. Скотт предлагает консультационные и обучающие услуги клиентам по всему миру:
http://www.aristeia.com/

Крис Селлс — консультант, автор, спикер и специалист в области технологий. Он специализируется на компонентных и распределенных системах в среде Windows, включая .Net, веб-службы, COM, C ++, ATL и Win32:
http://www.sellsbrothers.com/

Рэнди Стаффорд — профессиональный разработчик программного обеспечения и главный архитектор IQNavigator, Inc.Он хотел бы, чтобы у него было больше времени для написания статей о разработке программного обеспечения, но недавно он внес главы в книги Мартина Фаулера «Шаблоны архитектуры корпоративных приложений » (Аддисон Уэсли) и Флойда Маринеску «Шаблоны проектирования EJB » (John Wiley & Sons). Он разрабатывал корпоративные приложения на Smalltalk или Java в течение 15 лет в правительственном и коммерческом секторах, для больших и малых компаний. Его домашняя страница в Wiki Wiki Web Уорда Каннингема, где он был давним членом сообщества,:
http: // c2.com / cgi / wiki? RandyStafford

Дэйв Томас и Энди Хант — «программисты-прагматики», признанные во всем мире как эксперты, разрабатывающие высококачественное программное обеспечение — точные и очень гибкие системы. Они помогли написать теперь известный Agile Manifesto и регулярно рассказывают о новых способах создания программного обеспечения. Их бестселлер The Pragmatic Programmer (Addison Wesley) описывает их передовой опыт разработки программного обеспечения. Их совокупный опыт работы в отрасли составляет более 40 лет.Они знают практическую разработку программного обеспечения:
http://www.pragmaticprogrammer.com/

Ответь!

Есть мнение? Читатели уже оставили 42 комментария к этой статье. Почему бы не добавить свой?

Об авторе

Счет
Веннерс — президент Artima Software, Inc. и
Главный редактор Artima.com. Он является автором книги Inside the Java Virtual.
Машина
(Computing McGraw-Hill), ориентированная на программиста
обзор архитектуры и внутреннего устройства платформы Java. Его
популярные статьи в журнале JavaWorld посвящены внутреннему устройству Java, объектно-ориентированному дизайну и Jini. Билл был активен в
Сообщество Джини с момента его
зарождение. Он руководил проектом ServiceUI сообщества Jini, чей
ServiceUI API стал де-факто стандартом для связывания пользователей
интерфейсы к сервисам Jini.Билл также является избранным
член первоначального технического надзора сообщества Jini
Комитет (ТОС), и в этой роли помог определить управление
процесс для сообщества.

.

Добавить комментарий

Ваш адрес email не будет опубликован.