Образовательный портал GeekBrains подготовил подборку вопросов, не зависящих от языка программирования и вашего опыта.
Классическое собеседование состоит из предварительного разговора HR и соискателя, выполнения тестового задания, личного диалога с менеджером по подбору персонала и далее – с техническим специалистом. Во время предварительного разговора вас спросят об опыте работы, попросят прислать портфолио, узнают про ваши амбиции, цели, возможность переехать в другой город. Далее, если вы должным образом отнесётесь к выполнению тестового задания, а ваше резюме устроит менеджеров, вы приедете в офис компании и почти наверняка услышите многое из следующих вопросов.
Категория общих вопросов
В прошлом десятилетии вы могли прийти на собеседование и услышать вопрос: «Что такое программирование?» Трудно представить человека, который в этот момент не растеряется, а многие ещё и разочаруются в будущем работодателе. Однако сегодня подобного непрофессионализма среди HR мало, но пространных вопросов по-прежнему хватает. О них речи не пойдёт, сразу перейдём к тем, которые имеют очевидные ответы:
- Что такое высокоуровневый и низкоуровневый язык программирования?
- Что такое полнота языка по Тьюрингу?
- Какие есть операторы цикла в вашем языке и методы организации цикла без операторов?
- Что такое компилятор и интерпретатор?
- Какие бывают типы констант?
- Дайте определение императивным, функциональным и процедурным языкам программирования. Приведите по 2-3 примера каждого.
- Что такое методология программирования? Что представляет из себя Agile.
- Жизненный цикл программы – опишите или изобразите его.
- Что такое модульное программирование, в чём его плюсы и минусы.
- Когда вышла последняя версия вашего языка, какие основные изменения и нововведения?
Подобного рода вопросы направлены на выявление не только хорошо обученных программистов, но и тех, кто живёт темой кодинга, интересуется деталями и трендами.
Методы сортировки
Знание разных методов сортировки и их применяемости позволяет разработчику эффективнее обрабатывать данные. HR-менеджеры, в свою очередь, любят эти вопросы просто потому, что очень многие новички в мире программирования знают лишь пузырьковый метод, да и то теряются, когда слышат это название. А ведь есть ещё несколько подходов. Взгляните, сможете ли вы ответить на все эти вопросы:
- Изобразите алгоритм сортировки методом пузырька.
- Изобразите алгоритм быстрой сортировки.
- Изобразите алгоритм сортировки методом вставки.
- Изобразите алгоритм сортировки методом слияния.
- Изобразите алгоритм поразрядной сортировки.
Алгоритмы поиска и замены
Так как в современном мире огромный акцент делается на работу с большим числом данных, то современный разработчик просто обязан знать несколько алгоритмов поиска и замены в массивах чисел и символов. Многие из них перекликаются с вопросами сортировки, но неплохо бы иметь решения и без её использования. Вот что вам могут спросить по этой теме:
- Напишите программу поиска минимума и максимума в массиве из 100 чисел.
- Напишите программу поиска пропущенного значения в массиве целых чисел от 1 до 100. Текущий размер массива – 99 чисел, рассмотрите варианты, когда он уже отсортирован или ещё нет.
- Напишите программу поиска повторяющихся значений в массиве целых чисел от 1 до 100. Текущий размер массива – 101 число, рассмотрите варианты, когда он уже отсортирован или ещё нет.
- Напишите программу «разворота» массива целых чисел. То есть первое и последнее меняются местами, второе – с предпоследним и так далее. Без использования специальных библиотек.
- Напишите программу вставки пропущенного или удаления дублированного значения в массиве целых чисел от 1 до 100 без использования специальных библиотек.
Сами по себе описанные задания для написания программ далеки от понятия «сложные». Однако подготовленный HR или технический специалист может попросить вас всё подробно объяснить и поискать несколько способов решения. Часто – тот, который нравится собеседующему больше всего. Надо быть к этому готовым, и, если что-то не вспомнили, не паниковать, а спокойно начать рассуждать вслух, показав ход мысли.
Работа со строками
Несмотря на простоту, новички часто допускают ошибки именно в работе со строками: то неправильно отсчитают номер символа из-за незнания основ, то сравнят значение со ссылкой, то вообще запутаются с совместимостью типов. Добавим сюда немного алгоритмов и получим следующие вопросы:
- Напишите программу, проверяющую являются ли две строки анаграммами друг друга.
- Напишите программу проверки строки на проверку наличия только символов или только цифр.
- Напишите программу, подсчитывающую количество гласных и согласных в строке.
- Напишите программу, которая вытаскивает из резюме основные данные (ФИО, профессия, город, возраст, стаж работы) и передаёт их в соответствующие массивы для дальнейшей работы. Подсказка: необходимо не только разбить текст, но и удалить недопустимые символы, лишние пробелы, присвоить нужный тип.
- Покажите несколько методов конкатенации строк и объясните различия в исполнении кода.
Также популярностью пользуются вопросы, аналогичные «массивным»: про поиск дублированных символов, в частности, пробелов, задачки на переворот символов без использования библиотек
В данной статье мы целенаправленно не стали писать ответы на вопросы (на некоторые это и невозможно). Во-первых, чтобы не растягивать текст на 5 частей для повышения читабельности. Во-вторых, чтобы при подготовке к собеседованию вы ориентировались на несколько источников и, как следствие, куда больше бы понимали, чем зубрили. Ведь в конце концов именно это, а не знание ответов на все базовые вопросы, является отличием готового разработчика от того, кто только хочет им стать.
Какие бывают типы констант?
Постоянные и такие "ну я вся такая постоянная"
Дайте определение императивным, функциональным и процедурным языкам
Это языки выражаемые через императивы, функции и процедурки
программирования.
Приведите по 2-3 примера каждого.
Садись!
Садиться это сгибать колени прижопливая зад к горизонтальной поверхности....
Посадка это сгибания колен, прижопливание зада.
Что такое методология программирования?
Это когда пацаны решают что хаос разработки надо обсуздать и придумывают много маленьких под-хаосов.
Что представляет из себя Agile.
Гибкий хаос.
Жизненный цикл программы – опишите или изобразите его.
Съедается бабло. Оно попадает внутрь компании-организма. Бабло переваривается с помощью фермента времени. А потом тугая колбаса продукта выталкивается из билд сервера компании обрубаясь сжимающимся кольцом дедлайна.
Что такое модульное программирование, в чём его плюсы и минусы.
Это когда компания вместо офиса покупает контейнер-бытовку, набивает туда 10 программистов и заставляет их работать за еду. Это модуль. Из плюсов - бизнес маштабируется добавлением контейнеров. Из минусов, стопку больше 5ти в высоту ставить нельзя, нижние заминаются.
Когда вышла последняя версия вашего языка, какие основные изменения и нововведения?
в 2016 вышел хотфикс моего языка. У слова "кофе" появился средний род, а "йОгурт" стал "йогУртом".
А потом тугая колбаса продукта выталкивается из билд сервера компании обрубаясь сжимающимся кольцом дедлайна.
Гениально.
До чего же потешная метафора про сфинктер дедлайна, ставлю леголаса этому комменту. Статью не читал.
HRы такого нигде не спрашивают, разве что HRом является бывший разработчик.
Но и дурацкие вопросы про Тьюринг-полноту и сортировку вставкой на технических интервью сейчас нечасто встретишь, в основном потому что сами интервьюеры их не знают.
Современный разработчик никогда не будет писать кода для вставки и замены буков и слов в тексте, для этого уже написаны тысячи библиотек.
В общем какие-то глупости.
Комментарий удален
Очень странно ещё и то, что авторство статьи - за GeekBrains.
Платформа тратит огромные средства на агрессивный маркетинг, организовывает продвижение где только не.
А ресурсов на то, чтобы написать достойную статью на, вобщем то, банальную тему - не нашлось.
Некоторым шиномонтажкам пора прекращать спрашивать у автослесарей, что такое цикл Карно и чем отличается бензиновый от дизельного двигателя. А то ты такой вдохновленный вопросами про подвеску Мак-Ферсона приходишь на работу, а тебе ржавые гайки дают крутить.
Какую-то лютую дичь прочитал. Более того, если такую херню у меня бы начали спрашивать на собеседовании, я просто встал бы и ушёл. Особенно это касается вопросов из первого раздела.
Что за бред? Как хр могут задавать вопросы, ответов на которые они сами не знают?
У них обычно на листочках под вопросами есть правильный ответ, и им надо сопоставлять ответы кандидата с тем, что написано у них. Сам по телефону проходил такое пару раз.
Ну коммон. Дополните тогда хотя бы заголовок - "25 вопросов, которые задают программистам". Какой то кликбейт. Если я например дизайнер или маркетолог, зачем мне эта статья про узкопрофильные вопросы?
"Подобного рода вопросы направлены на выявление не только хорошо обученных программистов, но и тех, кто живёт темой кодинга, интересуется деталями и трендами."
Т.е. знание agile или тьюринговой полноты делает меня хорошо обученным программистом? Вот из таких пассажей и проистекает определенное отношение к гуманитариям в плохом смысле слова (ничего не имею против гуманитарных специальностей, только против некомпетентности).
"Знание разных методов сортировки и их применяемости позволяет разработчику эффективнее обрабатывать данные."
Вполне хватит и кружки кофе.
Статья ради статьи. Напомнило написание дипломных работ, такое же послевкусие.
ха-ха-ха. открываете Седжуика. читаете часть, посвещённую алгоритмам сортировки. для каждого из 5-10 основных алгоритмов он приводит больше десятка модификаций. вот вам и алгооитм, изобретённый 50 лет назад
Ну и это далеко от истины. Вопросы по алгоритмам и структурам данных слишком легкие, а вопросов касательно языков и фреймворков нет вообще. И в реальности HR спрашивает больше про прошлый опыт, проф интересы и тд, передает программистам, а они уже проводят собеседование касательно технологий теории и тд
то что речь о языко-незавитсимых впросах = в заголовке написано
по алгоритмам задачи лёгкие, вроде да. а теперь возьмите самую сложную из них для вас лично и запрограммируйте на бумаге. ппрям сейцчас. проверьте что точно нет ошибок. засеките время. если улодитесь в 20 минут, то по алгоритмической части вы в большиство компаний пройдёте. фишка в том что алгоритмы то понятны, но вот запрогить это всё, да волнуясь на интервью, да на бумаге и без ошибок, да уложиться в 20 минут - большинству не по силам. и вам скорей всего тоже
почему 20 минут? интервью час, отличный кандидат за это время должен решить две такие простые задачи или одну более сложную, плюс время на допразговоры - т.е. на сами задачи отводится минут 40
Да я как бы занимаюсь подготовкой к интервью и до этого олимпиадным программированием занимался. Могу и BFS и Дейкстру и heapsort и КМП написать на листике. Да и многие могут. А вот HR это проверить не может тк о программировании знать вообще не должен. Об алгоритмах уж точно. И проверять вызубренный непосредственно алгоритм тоже смысла нет. Важнее проверить его знание прикладной задачей(нужно и понять какие алгоритмы нужны и уметь реализовать их на листике)
в этом плане они дичь написали, это список всего что на интервью проходит, а не того что порверяет сам HR
Поэтому я и написал комментарий. Хотя статья А) не соответствует действительности Б) не компетентна В) не подходит по тематике ресурса , а следовательно должна была бы быть люто заминусована, у неё положительный рейтинг. А значит каких то облей вводит в заблуждение и наносит вред. Какой нибудь джуниор в итоге заявится на собеседование с такими знаниями и ударится о действительность
если кто-то по одной статье будет готовиться к интервью, то ему в любом случае лучше сделать харакири. а на ресурсе тусуется много программисстов (я вот), потому и плюсуют. хотя статья в стиле "выжмем 1% из МакДауэл" вызывает только смех
и ксати, если готовитесь к алгоинтевью - идите на leetcode и его аналоги. ещё советую cracking the code interview. ну и затем к примеру http://blog.interviewing.io/exactly-what-to-say-when-recruiters-ask-you-to-name-the-first-number/ :)
по большому счёту у вас перебор знаний. у меня в бэкграунде хаскел/алгоритмы, поступил в яндекс.теч и то ничего сложнее medium level leetcode задач не было. важнее научиться быстро писать всё это на бумажке, чтобы даже волнение не помешало. и зазубрить стандартные приёмы - деление пополам, слияние списков и т.п. тут не столько думать приходилось, сколько аккуратно всё реализовывать. хотя я может слишком аккуратен был, меня после всего этого спорсили - а быстро работать когда надо ты готов? ))
Ну так я на leetcode и сижу) ещё topcoder и база школьных олимпиад(дэйкстру мы ещё там учились писать). А слишком или нет, ну мне вот кажется что далеко нет, друзья и знакомые работающие в big4 и крупных рос банках знают куда больше(кто то о ML, кто то о компиляторах и ассемблере, а кто то просто о очень сложной математике)
это две большие разницы. ваши CS знания - это фундамент для работы. конечно, они необходимы для серьёзных проектов, и их надо наращивать всю жизнь
навыки для прохорждения интервью, а конкретно решения задачек за 20-40 минут на бумажке (включая порверку того как алгоритм работает) - это то, что вы естественным образом не получите, и поэтому этот скилл надо прокачать отдельно, лучше ближе к самим интервью. это вы и получите на литкодах. хотя и просто для решения алгозадачек он тоже полезеен, даже бех кодирования. есди вы будете придумывать алгоритм для большинство задач hard и порграммировать весь ответ для большинства medium за 40 минут - то что я проходил в яндексе, вы проскочите как нож масло. результат - буду работать в команде, которая программирует распределённое хранилище всех янлексовским данных
ну разумеется, само по себе умение реализовывать алгоритмы на интервью - это ещё не гарантия получения работы, скорее фильтр типа порверки IQ
Мда, ну и вопросы. C - это высокоуровневый или низкоуровневый язык программирования? Очень хотелось бы услышать ответ HR на это :D
Изобразите алгоритм поразрядной сортировки.
для начала станцуйте ваш оффер
собеседовался в янлекс. помимо задач на алгоритмы и дизайн, спрашивали
- расскажите про meltdown
- какие контейнеры есть в C++ и сложность основных операций над ними
- что мне не нравится в C++
- и ещё была дискуссия о выборе инструментов для реализации многопотоночтис в C++
разговоры с HR были в стиле "похвали себя". ну и минимум одна из них имела прогерское в/о
Это список вопросов от плохого эйчара. Хороший просто смотрит на адекватность человека, узнаёт про его опыт работы и что-нибудь о себе в общих чертах и затем, если человек устраивает, передаёт его технарям, которые уже и узнают, подходит ли по уровню человек для задач, которые придётся ему решать.
Всё.
Нахера здесь эта статья?
Мне тут понравилось не то, что кто эти вопросы должен задавать, а сами вопросы. Это такой список вопросов, ответы на которые должен знать хороший кодер, на мой взгляд - опытный мидл / пресиньер.
А я бы сказал что джуниор. Либо именно кодер. Это явно не вопросы мидл+ уровня для инженера.
Ну суть в том, что есть куча джунов, которые знают синтаксис языка, умеют кодить, думают логически и тд. Но минимум половины описанного - не знают. Это касается людей, которые пришли в разработку из других отраслей, и не учились кодить в вузе.
Это список вопросов от крайне некомпетентного тимлида. Вот именно что джун еще может на них ответить - потому что он это совсем недавно проходил в институте. А на деле - ничего общего с теми вопросами которые приходиться решать в жизни (исключение - специфичные проекты).
Мидлу и сеньору задают вопросы касательно его языка программирования. Конкретные классы, интерфейсы, реализации, паттерны, библиотеки для работы с сетью, бд и прочее.
Это само собой, но статья просто на заметку - описано самое нужное, что должен знать чел до того, как начнут углубляться в спецификации конкретного языка.
Может знать, может и не знать. И при этом быть одинаково отличным специалистом. Какая реальная задача решается знанием определения тьюринговой полноты или гибкой методологии? Первое возможно поможет в создании компилятора (а это несколько другой уровень и там этот вопрос тоже не к месту), второе вообще в ведении тимлида/манагера, а спецу достаточно помнить о времени стендапа и где прочитать список текущих задач.
тьюринг - видимо проверка на знание CS в целом. меня например спросили про meltdown - считай проверка на то что человек следит за новостями плюс насколько глубоко он в тему влез
агиль сейчас вероятно тоже в вузах изучают
Согласен. Ещё нужно спрашивать простейшие вещи: сколько будет 2 в 8-й степени, а в 10-й?
Я на полном серьёзе. Удивляюсь, что многие программеры этого не знают
наверно зависит от. в huawei research и яндексе почти не спрашивали. в первом уже толком не помню, а в яндексе было в общей сложности 7 алг. задач, часовая задача на дизайн, ну и свободные вопросы типа "что вы хотели бы изменить в C++?"
Комментарий удален
Комментарий удален
Вообще бред, такое только могут спрашивать у нас в Рашке, уровень дна. Лучше бы спросили про знание библиотек то что используется на практике)
ага. 10% времени работы вы будете искать нужную вам функциональность в npm, и 90% времени работы вы будете реаолизовывать оставшиеся 10% функциональности
поэтому и тестируют как вы умеете сами писать код, а не как вы умеете искать
Жизненный цикл программы – опишите или изобразите его.
1 стадия – Отрицание (человек отказывается принимать то, что с ним случилось);
2 стадия – Гнев (на этом этапе проявляется агрессия ко всему окружающему миру);
3 стадия – Торг (появляются мысли о том, чтобы договориться о более лучшей участи);
4 стадия – Депрессия (на данном этапе человек может круглые сутки находится в депрессивном состоянии);
5 стадия – Принятие (согласие с неизбежной участью).
Комментарии