Что спросить у программиста

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

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

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

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

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

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

Ключевые темы

О себе. Прошлый опыт.

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

На этом этапе будьте готовы ответить на следующие вопросы:

Задачи

Задачки на эврику или воображение

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

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

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

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

Задачки на логику

Это другой тип задач. Они имеют вполне конкретные ответы и опираются на формальную логику. Например:

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

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

Алгоритмы и структуры данных

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

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

Операционные системы и сети

Сюда входит огромный перечень тем, например, владение командной строкой, понимание tcp/ip, http, dns, event loop и многое другое.

Как правило, эти вопросы не задают напрямую. В основном придумывают различные истории или ситуации. Примеры вопросов:

Операции с числами

Популярные задачи на системы счисления и битовые операции.

Problem-Solving задачи

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

Написание кода

Чем меньше у вас опыта, тем выше вероятность того, что вас попросят написать код. Обычно просят написать его на листочке или в среде подобной repl.it. На задачу дают 10-20 минут. Пара примеров:

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

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

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

Прикладные знания

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

Общие

Специфичные

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

Источник

35 вопросов о программировании, на которые вы должны знать ответ

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

1. Что такое программирование?

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

2. Как работает программный код?

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

3. Что такое отладка?

Отладка – это процесс поиска и устранения ошибок в программе.

4. Назовите типы ошибок, которые могут возникнуть в программе

5. Расскажите о синтаксических ошибках

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

6. Расскажите об ошибке времени выполнения

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

7. Расскажите о логических ошибках

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

8. Что такое блок-схема?

Блок-схема – это графическое представление программы. Блок-схема помогает понять логику работы программы или ее части при проектировании.

9. Что такое алгоритм?

Алгоритм – это конечный набор шагов, которые при следовании им решают какую-то задачу.

10. Что по вашему значит «Поддерживать и обновлять программу»?

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

11. Что такое переменные?

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

12. Что такое зарезервированные слова в программировании?

Зарезервированные или ключевые слова – это слова и выражения, которые имеют предопределенные значения и не могут использоваться при написании кода для иных целей, например, для именования переменных. Примеры распространенных ключевых слов в языках программирования – это конструкции if/then/else или различные варианты циклов. Вроде for и while.

13. Что такое цикл?

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

14. Назовите разные виды циклов

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

15. Чем отличаются for и while?

For использует счетчик и полезен при выполнении заранее определенного количества итераций.

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

16. Что такое вложенный цикл?

Цикл, который выполняется в теле другого цикла, является вложенным.

17. Что такое документация?

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

18. Что делает компилятор?

Компилятор «читает» код, написанный на определенном языке программирования, и преобразует описанные команды и конструкции языка в исполняемый машинный код.

19. Что такое двоичный код?

Двоичный код – это бинарная форма представления кода определенного языка программирования.

20. Что такое константа?

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

Числовые константы могут содержать целые, числа с одинарной и двойной точностью.

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

21. Что такое операторы?

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

22. Что такое массив?

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

23. Что такое подпрограмма?

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

24. Когда применяют арифметические операторы?

Арифметические операторы применяются для выполнения арифметических операций над значениями.

25. Реляционные операторы

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

26. Для чего нужны логические операторы?

Логические операторы объединяют простые условия для построения более сложных (под условием мы имеем в виду выражение, оценивающее истинность).

27. Зачем нужны операторы присваивания?

Оператор присваивания используется для сохранения значений в переменной.

28. Что значит «низкоуровневый язык программирования»?

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

29. Высокоуровневый язык программирования

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

30. Что такое машинный код?

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

31. Объясните термин «надежность ПО»

Надежность – это гарантированная правильная работа программы в течение определенного времени.

32. Что такое тестирование ПО?

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

33. Что такое бета-версия?

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

34. Что значит «анализировать программу»?

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

35. Как работает алгоритм?

Каждый алгоритм в программировании реализует по крайней мере три шага:

Источник

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

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

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

Собеседование в мировую it компанию

Пример Яндекс, Гугл, Майкрософт, Амазон
Количество кандидатов сотни (тысячи)
Тип собеседования вступление в армию
Ожидаемые вопросы алгоритмические задачи

Многие программисты хотят попасть в такие компании, потому что там сухо и тепло (и корпоративные ипотеки под низкие проценты). Поэтому компании просто завалены резюме от кандидатов со всех концов страны (или мира). Чтобы хоть как-то отбирать кандидатов, компании приходят к фильтру по алгоритмическим задачам.

Резюмируем

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

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

Собеседование в аутсорсную компанию

Пример Епам, Люксофт
Количество кандидатов десятки
Тип собеседования отбор дойной коровы
Ожидаемые вопросы справочные материалы и чуть-чуть задачек

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

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

Резюмируем

«А насколько вы — выгодное вложение для перепродажи?» — хищно смотрит на вас контора. Ну а мы же не лыком шиты, да? Хитро улыбаемся в ответ, зубрим все определения перед собеседованием, решаем несколько простейших алгоритмических задачек (обход дерева в ширину, ага), а потом заламываем хорошую цену за свой будущий труд. И возможно, с грустным лицом, компания согласится отдавать вам не меньшую, а большую часть ваших заработанных непосильным трудом денег.

Собеседование в небольшую компанию

Пример смотри вакансии в своем городе
Количество кандидатов единицы (десятки)
Тип собеседования отбор для дела (или души)
Ожидаемые вопросы всегда по-разному

В небольших и средних компаниях, которые выпускают свой продукт или занимаются автоматизацией на заказ, обычно нет общих для всех правил отбора новых кандидатов.
Всё зависит от конкретных людей, проблем, фазы луны. Где-то вас попросят решать задачки (потому что так делает Гугл), где-то будет тестирование на знание всех методов библиотек (потому что так делает Люксофт). А где-то вам предложат разобрать ваш код, поспрашивают о ваших предыдущих проектах, и вообще, вы мило побеседуете обо всем на свете на 2 часа, а потом эти ребята станут вашими лучшими коллегами на много лет вперед (слезы умиления).

Резюмируем

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

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

Источник

15 задач на собеседовании для программиста

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


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

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

1. Как найти средний элемент в LinkedList за один проход?

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

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

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

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

Успешно справились с этим вопросом? Получите следующий.

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

2. А если LinkedList зациклен?

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

3. Этот вопрос может модифицироваться в «Как найти в LinkedList i-тый элемент с конца за один проход?»

Можно использовать ту же схему решения. Первый указатель показывает на первый узел в связанном списке, второй на i-тый сначала. Когда второй указатель достигнет конца списка (дойдёт до NULL), первый будет указывать на i-тый элемент с конца.

4.Как определить дублированный элемент в массиве, в котором содержатся элементы типа int от 1 до 100, при условии, что в массиве дублируется только один элемент?

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

5.Как изменить порядок элементов в строке на обратный без использования вспомогательных классов?

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

6.Напишите программу для сортировки массива, использующую метод пузырька.

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

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

7. В чём разница между стеком (Stack) и очередью (Queue)?

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

8. Как найти продублированные элементы в массиве, если их больше одного?

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

9. В чём разница между двусвязным и односвязным списком?

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

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

10. Напишите программу для вывода чисел Фибоначчи

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

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

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

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

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

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

12. Напишите программу, которая проверит, является ли заданное слово палиндромом

13. Что такое бинарное дерево поиска?

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

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

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

14. Напишите программу для реализации структуры данных Stack.

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

15. Как развернуть LinkedList, используя рекурсию и итерацию?

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

В заключение

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

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • Что спросить у программиста на собеседовании
  • что спрашивают на собеседовании программиста java
  • Что спрашивают на собеседовании программист 1с
  • Что спрашивают на собеседовании при приеме на работу программистом
  • Что сохранить перед переустановкой windows

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии