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

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

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


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

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

Все программисты знают, что средний элемент в LinkedList несложно найти, определив длину списка, последовательно пройдя все его узлы, пока не дойдёшь до NULL в первом проходе. А затем, пройдя половину из них во втором проходе. Когда же их просят решить эту задачу за один проход, многие теряются.

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

[spoiler title=’Решение’ style=’default’ collapse_link=’true’]

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

Исходный код решения

[spoiler title=’Исходный код’ style=’default’ collapse_link=’true’]

[spoiler title=’Решение’ style=’default’ collapse_link=’true’]

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

Уже знаете ответ?

[spoiler title=’Решение’ style=’default’ collapse_link=’true’]
Можно использовать ту же схему решения. Первый указатель показывает на первый узел в связанном списке, второй на i-тый сначала. Когда второй указатель достигнет конца списка (дойдёт до NULL), первый будет указывать на i-тый элемент с конца.

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

[spoiler title=’Решение’ style=’default’ collapse_link=’true’]

  1. Считаем сумму всех чисел от 1 до 100 любым удобным для Вас методом.
  2. Считаем сумму элементов массива.
  3. Вычитаем первое из второго. Получаем… Правильно, получаем значение дублирующегося элемента.
  4. Если надо, находим номера искомых элементов в массиве.

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

[spoiler title=’Исходный код’ style=’default’ collapse_link=’true’]

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

Решить это можно так:

[spoiler title=’Исходный код’ style=’default’ collapse_link=’true’]

[spoiler title=’Решение’ style=’default’ collapse_link=’true’]

Задавая такие вопросы, ваш собеседник, понятное дело, хочет услышать не заученное определение из учебника или получить ссылку из Википедии, а оценить ваше собственное понимание различия этих двух типов структур данных.
Стек и очередь похожи отсутствием свободного доступа ко всем элементам структуры данных. Главное же отличие заключается в том, что стек – это структура типа LIFO(Last In First Out), где свободный доступ возможен только к последнему добавленному элементу, а при его удалении методом «pop» к элементу, добавленному перед ним. Когда же в стек добавляется новый элемент, доступен становится только он.
Очередь относится к типу FIFO(First In First Out), то есть доступен в ней только первый добавленный элемент. В случае его удаления доступен второй и т.д.

Читайте также:  Как отключить мастер пароль в яндекс браузере

[spoiler title=’Решение’ style=’default’ collapse_link=’true’]

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

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

[spoiler title=’Решение’ style=’default’ collapse_link=’true’]
В обоих списках узлы связаны посредством указателей. Только в односвязном списке указатель от каждого узла ведёт исключительно к следующему, и переход возможен только к нему, то есть исключительно в одном направлении. А в двусвязном от каждого узла, кроме первого и последнего, есть возможность перейти как к следующему, так и к предыдущему узлу, то есть двигаться в обоих направлениях.

Если вдруг кто-то не знает, числа Фибоначчи – это последовательность, где каждое следующее число после 1 является суммой двух ему предшествующих. То есть ряд чисел Фибоначчи выглядит так: 1,1, 2, 3, 5, 8, 13, 21…

Решить эту задачу можно так:

[spoiler title=’Исходный код’ style=’default’ collapse_link=’true’]

Палиндром – это набор знаков (слово, число, фраза), в котором все знаки при прямом прочтении полностью совпадают со знаками при обратном прочтении.
То есть палиндромами являются числа 66, 13431, 789987 и т.д.

[spoiler title=’Решение’ style=’default’ collapse_link=’true’]

  1. Для определения значения каждого символа в числе можно использовать оператор /. Например: 66/10 вернёт 6.
  2. А для нахождения последнего символа в числе оператор %.
    66%10=6
    123%10=3
  3. Сравниваем полученные значения и делаем выводы.

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

А после этого дописать этот код так, чтобы он сравнивал полученные цифры.

Задача, в принципе, аналогичная предыдущей, но с существенным отличием — использовать операторы / и % не получится.
Используем рекурсию и получим простое и красивое решение:

[spoiler title=’Исходный код’ style=’default’ collapse_link=’true’]

[spoiler title=’Решение’ style=’default’ collapse_link=’true’]

Бинарное, или двоичное дерево поиска – это структура данных, каждый узел в которой может иметь от 1 до 2 подузлов (детей) или не иметь их вовсе.

Расположение данных в бинарном дереве имеет ряд ограничений:

  1. Как и во всех деревьях, любой узел бинарного дерева не может иметь более одного родителя.
  2. Данные в дереве распределяются в зависимости от их значений. Если значение подузла (ребёнка) меньше, чем значение узла (родителя), этот подузел становиться левым или ребёнком левого подузла, если левый подузел уже существует. Соответственно, если значение подузла больше значения узла, то он становится правым или ребёнком правого.
Читайте также:  Приложение для экшн камеры digma

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

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

Ещё один пример очень популярного вопроса. Есть много способов изменения порядка элементов в связанном списке. В следующей статье я рассчитываю подробно осветить их все.
Ждите! Или пишите свои варианты этой программы, не заглядывая в «авторскую версию»!

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

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

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

Вы ответили на 0 из 11

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

0.1% пользователей прошли тест точно так же как Вы!

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

6% пользователей прошли тест точно так же как Вы!

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

0.5% пользователей прошли тест точно так же как Вы!

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

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

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

Читайте также:  Pilot tone что такое

1.4% пользователей прошли тест точно так же как Вы

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

1.3% пользователей прошли тест точно так же как Вы!

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

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

0.1% пользователей прошли тест точно так же как Вы!

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

4.4% пользователей прошли тест точно так же как Вы!

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

4.4% пользователей прошли тест точно так же как Вы!

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

1.1% пользователей прошли тест точно так же как Вы!

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

1.6% пользователей прошли тест точно так же как Вы!

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

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

0.1% пользователей прошли тест точно так же как Вы!

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

0.2% пользователей прошли тест точно так же как Вы!

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

1.1% пользователей прошли тест точно так же как Вы!

Итоги теста

Профессия програмист популярная, и поэтому вопрос не праздный можно ли, сложно ли стать программистом. Тест отвечает на этот вопрос лично вам.

Допустим, вы способны. А стоит ли становиться именно программистом? Вдруг вы способны к чему-то ещё, возможно более подходящему для вас. А если и становиться программистом, то каким именно? Их много есть разных видов.

Ещё один важный вопрос — реально ли стать программистом. И реально ли им стать в 30 или в 40 лет?

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

Ссылка на основную публикацию
Adblock detector