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


Оглавление (нажмите, чтобы открыть):

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

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

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

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

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

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

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

Часть I: проверяем свои предположения

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

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

«Всё написанное в резюме — ложь, пока не доказано обратное».

Если в резюме написано: «Эксперт в такой-то технологии», про себя я думаю, что это означает «знаю название этой технологии». Если в резюме написано «Работал над созданием многопоточной торговой площадки», про себя я замечаю, что это означает «участвовал в выборе цвета фона».

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

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

Как? Очень просто: задать на собеседовании коварные вопросы о каждом указанном навыке или проекте.

Разрабатывал систему реального времени в качестве курсовой работы.

Коварные вопросы: Сколько человек работало с вами в группе? 15? А над чем конкретно работали вы? Над очередью сообщений? Здорово! А расскажите, что происходит, когда высокоприоритетная задача посылает сообщение низкоприоритетной задаче?

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

Коварные вопросы: Сколько человек было в команде? Только вы? Ого! И как проходил процесс тестирования? Вы использовали RTP?

Чинил баги в XYZEngine.

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

Часть II: определяем реальный опыт кандидата

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

Но не каждый опыт одинаково полезен!

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

Узнать о начале карьеры

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

Как вы попали в сферу разработки ПО?

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

Плотность опыта

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

Работа в малых командах/группах;

Работа в большом количестве проектов;

Подробные знания о разных уровнях проекта;

Опыт внесения основного вклада в развитие проекта.

Часть III: подтверждаем опыт соискателя

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

Конкретные темы зависят от требований к должности. Темами для беседы могут быть:

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

объекты и наследование, паттерны разработки;

компиляция и исполнение программ.

Каждая тема включает в себя некоторые базовые вопросы (например, «Что такое семафор?»). Эти вопросы должны быть настолько общими, что каждый, кто хотя бы немного работал в этой сфере, сможет ответить. Помимо общих вопросов нужно задать подробные более узкие вопросы. Что-то не так, если вы просите опытного программиста встроенных систем перевести 0х4с в двоичный код, а он пишет: 4 х 16 + 12.

Тест по программированию

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

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

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

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

Порядок вопросов имеет значение

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

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

Не замыкайтесь на одном языке

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

Выходим за рамки

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

Данная схема предполагает построение гипотез и использование интуиции. Вам нужно определить, какими чертами должен обладать крутой разработчик. Поэтому вопрос, на который вы отвечаете сам себе, звучит так: «С какой вероятностью ответ кандидата на тот или иной вопрос подтверждает, что он на самом деле прекрасный программист?». 100%-ной вероятности вы не достигнете, но правильно подобранные вопросы помогут вам подобраться к истине немного ближе.

Перевод: Люся Ширшова. По материалам блога Steve Hanov.

Логические задачи на собеседовании тестировщика

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

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

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

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

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

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

#1 Фишки

Предположим, вы выиграли в казино стопку фишек высотой с Empire State Building. Все фишки достоинством в пять долларов. Поместятся ли все фишки в телефонной будке?

Решение. Прежде всего стоит оценить высоту Empire State Building. Она составляет примерно 100 этажей, а значит больше высоты обычной комнаты в 100 раз. Представим, что мы разделили фишки на 100 равных по высоте стопок высотой в один этаж. Таким образом, получилась матрица 10 на 10. Возможно ли разместить ее в телефонной будке? Легко!

#2 Задача от Microsoft

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

Решение. Так как стаканы помечены неверно, ни в одном из них не лежит то, что написано. Значит стоит начать с пометки смесь (С). Достанем ягоду – черника? Значит этот стакан с черникой. Остается два стакана с пометкой черника (Ч) и земляника (З). В стакане (З) может быть черника или смесь. Но так как чернику мы уже нашли, то в стакане с пометкой (З) может быть только смесь. И в последнем стакане с пометкой (Ч) останется земляника.

#3 Лампочки

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

Решение. Включим первый выключатель и подождем некоторое время, чтобы лампочка нагрелась (если она включилась). Затем выключаем первый и включаем второй выключатель. Поднимаемся на чердак: если лампочка горит – исправен второй выключатель, если не горит и теплая – верным был первый выключатель, ну а если ни то, ни другое – нужный нам выключатель был третьим.

#4 Задача от Adobe

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

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

#5 Драже

Почему глазурь на драже идеально гладкая?

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

#6 Дождь и солнце (напоследок самая легкая задача)

Сейчас два часа ночи. За окном моросит дождь. Насколько велика вероятность того, что через 71 час будет солнечная погода?

Решение. Так как через 71 час также будет ночь, вероятность составит 0%.

Как можно подготовиться?

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

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

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

В завершение

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

Рассуждайте, ищите новые идеи и должность QA-инженера точно станет вашей!

Логические задачи на собеседовании программиста

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

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

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

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

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

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

  1. В стакан положили бактерии. Каждую секунду бактерии увеличиваются в 2 раза. Известно, что стакан заполняется полностью за минуту. За какое время стакан наполнится наполовину?
  2. Представьте себе, что земной шар обмотали веревкой по экватору. Потом веревку увеличили на 1 метр и расположили так, что любая точка экватора равноудалена от веревки. Сможет ли между веревками пролезть мышь?
  3. На склад привезли 100 кг огурцов. Содержание воды в огурцах 99%. Через месяц огурцы подсохли, и содержание воды в них уменьшилось до 98%. Сколько килограммов огурцов на складе?
  4. Жили 1000 репликонов, каждый репликон иммет уникальный возраст. У репликонов было золото и они решили его поделить. Условие дележки: если половина или более репликонов согласна поделить, то золото делят между всеми поровну, если меньше половины согласно на раздел то самого младшего репликона исключают из претендентов на золото и процес повторяется. Вопрос на сколько репликонов поделят золото.
  5. Даны два фитиля. Известно, что полностью они сгорают за час каждая, но горят неравномерно. Нужно отмерить с помощью этих фитилей 45 минут.
  6. Виктор, выходя с работы и заходя в метро, всегда находился в раздумьях, куда ему ехать – домой или к девушке. Домой ехать в одну сторону, к девушке – в противоположную. Поезда и туда, и обратно ходят каждые пять минут. И вот Виктор принял решение по приходу просто садится в первый приехавший поезд. Через месяц выяснилось, что к девушке он попадал в четыре раза чаще, чем домой. Почему?
  7. Есть два ведра – одно 5 литров, второе 3. Есть неиссякаемый источник воды в виде реки. Нужно с помощью ведер отмерить ровно четыре литра. Ведра имеют конусообразную форму.
  8. Есть три мешка, в одном из них красные шарики, в другом только белые, в третьем – они перемешаны. На мешках этикетку наклеены неправильно. Как достав всего один шар из одного мешка, определить какие шарики в каких мешках? Смотреть внутрь мешка нельзя.
  9. Вы находитесь в комнате с тремя выключателями. Из этой комнаты есть дверь в соседнюю, там находятся три лампочки, которые включаются этими выключателями. Дверь между комнатами закрыта и вы не видите какой выключатель включает каждую лампочку. Как определить, какой выключатель включит свою лампочку, если в комнату с лампами можно зайти всего один раз.

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

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

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

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

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

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

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

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

Мастер Йода рекомендует:  Как сделать описание картинки в HTML

Бывает, что при составлении резюме, разработчик ориентируется на технического специалиста. Например, такое описание опыта разработчика драйверов под операционную систему 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.

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

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

Сергей Дмитриченко, основатель 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.

Список вопросов и задач при собеседовании PHP программиста

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

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

Основное

Что такое PHP?

PHP — это скриптовый язык программирования для создания сайтов и веб-приложений. PHP унаследовал синтаксис языков программирования C, Perl, Java.

Какие знаешь версии PHP?

Есть следующие версии PHP:

  • PHP 2, PHP 3, PHP 4 старые и не поддерживаемые версии
  • PHP 5 >= используется в большинстве проектов, преимущественно обладает версия 5.6
  • PHP 7 актуальная версия с новыми возможностями и улучшениями

Синтаксис PHP

Что такое short tags и как его использовать в PHP?

Для обработки скрипта все содержимое кода необходимо заключать в открывающие и закрывающие теги и ?> , которые определяют начало и конец обработки. short tags — это короткий синтаксис позволяющий использовать echo использовать = (ровно) Например:

Как изолировать PHP код от HTML? Для чего это нужно?

Изолирование кода необходимо для использования смешанного содержимого скрипта: php, javascript, css и т.п. Изолирование обеспечивает удобство и простоту понимания содержимого скрипта.

Как использовать комментарии в коде PHP?

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

Однострочные комментарии записываются до конца строки или текущего блока PHP-кода после символов // или # Многострочные комментарии запитываются внутри символов /* и */ Например:

Что такое $this и self в PHP?

$this — является ссылкой на текущий объект. self — является ссылкой на текущий класс.

В чем разница между одинарными и двойными кавычками в PHP?

В отличии от одинарных, данные в двойных кавычках парсятся.Например, при использовании двойных кавычек результат выведет Hello, а одинарные кавычки выведут переменную как текст, а не ее значение:

Типы данных PHP

Сколько в PHP типов данных? Какие это типы данных?

В PHP есть 8 базовых типов данных

4 скалярных типа:

  • boolean — логический тип true/false
  • integer — целочисленный тип
  • float — числовой тип с плавающей точкой, содержащий целые и дробные числа
  • string — строковый тип

2 составных типа:

  • array — массив с упорядоченным списком элементов
  • object — объект

2 специальных типа:

  • resource — ссылка на внешний (абстрактный) ресурс.
  • NULL — пустой тип, без значения

Какой тип типизации данных в PHP?

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

Что такое переменная и как ее использовать?

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

Что такое область видимости переменной?

Область видимости переменной, это место в котором переменная определена. Например, внутри функции или за ее пределом.

Что такое переменные извне?

Переменные извне — это данные полученные из формы с помощью GET и POST, данные полученные из COOKIE.

В чем разница между GET и POST?

GET передает данных из адресной строки в виде строки с параметрами. POST передает данные используя HTTP тело запроса (например, обычно через html форму). GET может передавать только данные объемом 1024 символов. POST может отправлять данные большого размера, который обычно установлен в настройках сервера.

Константы

Что такое константы? Как их использовать?

Константы — это уникальное имя, которое содержит какие-то данные. Константы можно использовать двумя способами:

Что такое волшебные константы?

Волшебные константы — это список предопределенных в PHP констант. Существуют следующие волшебные константы

Текущий номер строки в файле.

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

Директория файла. Внутри подключаемого файла возвращается директория этого файла.

Имя функции или в случае анонимной функции.

Имя класса, содержит название пространства имен, в котором класс был объявлен (например, Block\Aside).

Имя трейта, содержит название пространства имен, в котором трейт был объявлен (например, Block\Aside).

Имя метода класса.

Имя текущего пространства имен.

Полное имя класса (с указанием пространства имен).

Операторы PHP

Что такое оператор?

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

Какие существуют операторы?

В PHP есть следующие виды операторов:

  • оператор присваивания
  • арифметические операторы
  • логические операторы
  • побитовые операторы
  • операторы сравнения
  • оператор управления ошибками
  • операторы инкремента и декремента
  • строковые операторы
  • операторы массивов
  • оператор проверки типа

Что такое арифметические операторы?

Арифметические операторы это простейшие математические операции: идентичность, отрицание, сложение, вычитание, умножение, деление, деление по модулю, возведение в степень.

Что такое логические операторы?

Логические операторы используются для проверки истинности или ложности каких-либо действий или условий. Есть следующие логические операторы:

Что такое оператор присваивания?

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

Что такое побитовые операторы?

Побитовые операторы это операции производимые над цепочкой битов.

Что такое операторы сравнения?

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

Тождественно не равно

Больше или равно

Космический корабль (spaceship)

Что такое оператор управления ошибками?

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

Что такое операторы исполнения?

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

Что такое операторы инкремента и декремента?

Операторы инкремента и декремента позволяют увеличить и уменьшить значение переменной на 1 (единицу). PHP поддерживает префиксные и постфиксные операторы инкремента и декремента в стиле C.Например:

Увеличивает $a на единицу, затем возвращает значение $a.

Возвращает значение $a, затем увеличивает $a на единицу.

Уменьшает $a на единицу, затем возвращает значение $a.

Возвращает значение $a, затем уменьшает $a на единицу.

Что работает быстрей: преинкремент или постинкремент?

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

Что такое строковые операторы?

Строковые операторы позволяют работать с текстом. Оператор конкатенации (‘.’) соединяет в строку левый и правый аргументы. Оператор присваивания с конкатенацией (‘.=’), соединяет в строку правый аргумент к левому.

Что делает оператор проверки типа?

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

Управляющие конструкции

Обязательно ли использовать закрывающий тег ?> в конце файла?

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

В чем разница между require(), require_once(), include(), include_once()?

  • require() просто подключает в текущий файл указанный
  • require_once() подлключает указанный файл в текущий только в том случает, если он не был ранее подключен
  • include() работает также как и require(), подключает файл и в случае ошибки возвращает WARNING, в то время как require() возвращает FATAL ERROR
  • include_once() работает также как и require_once(), подключает файл если он не был ранее подключен и возвращает WARNING, в то время как require_once() возвращает FATAL ERROR.

В чем отличие цикла while от do while?

Тело цикла do-while выполнится хотя бы один раз, так как условие проверяется в конце цикла, в то время как в цикле while условие проходит проверку вначале.

Что такое goto и как он работает?

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

В чем различия между операторами break и continue?

Оператор break прерывает выполнение инструкций for, foreach, while, do-while или switch, а опратор continue пропускает часть итерации внутри цикла.

Как прервать выполнение for, foreach, while, do-while или switch?

Прервать выполнение инструкций for, foreach, while, do-while или switch возможно с помощью оператора break .

Как пропустить часть интерации цикла внутри for, foreach, while, do-while или switch?

Пропустить часть интерации цикла внутри for, foreach, while, do-while или switch возможно с помощью оператора continue .

Что такое declare?

Оператор declare производит установку директив исполнения для блока кода.

Почему в declare нельзя использовать переменные и константы?


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

Что такое альтернативный синтаксис?

Альтернативный синтаксис используется для операторов if, while, for, foreach и switch и позволяет изменить запись выражения, использовав вместо открывающей фигурной скобки двоеточие (:), а вместо закрывающей скобки endif;, endwhile;, endfor;, endforeach; или endswitch;

Строки

Есть ли разница между одинарными и двойными кавычками?

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

В чем различия между echo и print?

Оба оператора используются для вывода текста. echo() является конструкцией, которая может принимать несколько аргументов и выводить их на экран. print() не совсем функция и может принимать только 1 аргумент, а также писаться без скобок.

Дана строка «Hello world!». Как перевернуть строку?

Чтобы перевернуть строку, можно использовать функцию strrev()

Массивы

Как удалить переменную или элемент из массива?

Для удаления переменной или элемента из массива надо использовать функцию unset(). Например:

Дан массив [1,2,3,4,5,6,7]. Как перевернуть его и получить [7,6,5,4,3,2,1]?

Чтобы перевернуть массив, можно использовать функцию array_reverse()

Как получить максимальное значение элемента массива [1,2,3,4,5,10,20,30,40,50,70,100, 10, 30, 50]?

Для получения максимального значения массива можно использовать функцию max() .

Либо сделать это через цикл:

Функции

Что такое функция?

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

Что такое аргументы функции?

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

Какие существуют способы передачи аргументов в функцию?

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

Как просиходит передача аргументов в функцию по значению?

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

Как происходит передача аргументов в функцию по ссылке?

Передача аргументов в функцию по ссылке происходит с помощью указания амперсанда ( & ) перед именем аргумента в описании функции.

Как для функции просиходит установка значений по умолчанию?

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

Какой оператор производит возврат результата функции?

Возрат результата функции производится с помощью оператора return .

Как происходит обращение к функциям через переменные?

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

Что такое ананимные функции?

Анонимная функция, или по другому, замыкания (closures), представляет собой функцию не имеющую имени и используемую для значений callback-параметров.

Что такое static функция?

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

Что такое рекурсия?

Рекурсия — это вызов функции из самой себя.

Классы и объекты

Что такое объектно-ориентированное программирование?

Объектно-ориентированное программирование — это парадигма программирования с использованием объектов и классов.

Что такое MVC?

MVC (Model-View-Controller) схема шаблона проектирования, разделенный на три компонента для работы с базой данных, интерфейсом отображения данных, взаимосвязью приложения с пользователем. Модель отвечает за работу с информацией из базы данных. Представление отвечает за отображение полученной информации на экран. Контроллер отвечает за взаимодействие между данными и отображением.

Что такое конструктор?

Конструктор это метод _constructor(), который вызывается при создании экземпляра класса с помощью ключевого слова new.

Как в PHP сделать множественное наследование?

В PHP нельзя сделать множественное наследование. У класса может быть только один родитель. Для эмуляции множественного наследования можно использовать функцию _call() или трейты (traits). Трейт позволяет группировать и повторно использовать наборы методов в нескольких классах.

Назовите основные концепции объектно-ориентированного программирования

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

Мастер Йода рекомендует:  MVC что это такое и какое отношение имеет к пользовательскому интерфейсу

Что такое виртуальный метод?

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

Что такое класс?

Класс это модель еще не существующего объекта, описывающая устройство бъекта — его методы и свойства.

Что такое объект?

Объект это данные и методы для их обработки.

Что такое члены класса?

Членами класса называют данные и методы объекта.

В чем отличие класса от объекта?

Объект является экземпляром типа класса. Класс является типом данных.

Что такое область видимости переменной?

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

Есть несколько типов определяемых область видимости методов и переменных:

  • public — переменная доступна из любого места
  • protected — защищенная переменная доступна только внутри класса, в котором была объявлена и из производных классов
  • private — закрытые методы и переменные доступны только внутри класса

В чем отличие локальной переменной от глобальной переменной?

Локальные переменные доступны только в конкретном методе, а глобальные во всей программе.

Что такое абстрактный класс?

Абстрактный класс в объектно-ориентированном программировании — это базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может содержать (и не содержать) абстрактные методы и свойства.

В чем разница между абстрактным классом и интерфейсом?

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

Зачем интерфейс, когда есть абстрактный класс?

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

Пространства имен

Что такое пространства имен?

Пространства имен — это объединение элементов (классов) с уникальными названиями в одну группу и их защита от внешнего вмешательства (инкапсулирование) внутри единого пространства с указанным именем.

Какие проблемы решает пространство имен?

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

Как объявляются пространства имен?

Пространства имен объявляются с помощью ключевого слова namespace .

Как получить название пространства имен?

Получить название пространства имен можно с помощью магической константы __NAMESPACE__ .

Что такое use?

Ключевое слово use позволяет импортировать файл или каталог.

Что такое псевдоним имени?

Псевдоним имени — это указание короткого имени для импортируемого пути к файлу или каталогу.

Исключения

Что такое исключения?

Исключения позволяют сделать обработку ошибок в PHP: сгенерировать или поймать.

Генераторы

Что такое генераторы?

Генератор — это простая функция обозначаемая как yield (похожа на простые итераторы) и вместо возращения значения, как это делает return , будет перебирать все значения.

Что такое yield?

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

Ссылки

Что такое ссылка?

Ссылка — это доступ к переменной под разными именами.

Что делают ссылки?

Ссылки обеспечивают выполнение следующих операций: присвоение по ссылке, передачу по ссылке и возврат по ссылке.

Что не делают ссылки?

Ссылки не являются указателями на данные.

Cookie

Что такое Cookie и зачем они используются?

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

Что нельзя хранить в Cookie и почему?

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

Какие есть типы cookie?

Есть следующие типы cookie: сессионные, постоянные, защищенные, HTTP-only. Сессионные (временные) — существуют только когда пользователь зашел на сайт, а при закрытии браузера уничтожаются. Постоянные — существуют все время и удаляются только в установленную дату или промежуток времени. Защищенные — куки могут быть переданы только через шифрованное HTTPS соединение. HTTP-only — к кукам нельзя обращаться из браузера через JavaScript, что устраняет их кражу через кросс-сайтового скриптинга (XSS).

Сессии

Что такое сессии и зачем они используются?

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

Вопросы MySQL

Где и как нужно хранить пароли пользователей сайта?

Пароли пользователей сайта необходимо хранить в базе данных в защищенном виде хэшировав их с помощью: sha1(), crypt(), password_hash().

Как получить одинаковые значения в поле MySQL?

Есть таблица product . Необходимо получить все одинаковые значения из поля vendor .

Тестовое задание перед собеседованием на php-программиста, развод?

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

PS лучшую из своих работ (на данный момент) я получил именно благодаря тестовому заданию.

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

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

DevMan, да, согласна с другим комментатором насчет экономии времени только для работодателя. Сейчас ищу работу, и мне в одном месте скинули примитивное тестовое сразу с приглашением, то есть до собеседования, на пару-тройку часов работы, но с макетом абы как, что еще надо со слоями в нем разбираться, в другом месте тестовое дали уже после собеседования и сроком на две недели, для него надо изучить два фреймворка, чтобы его выполнить, в третьем месте неограниченное по времени тестовое, для которого еще один фреймворк изучить, чтобы выполнить, ну вот еще и с 4-го места до собеседования дали тестовое, которое тоже делать не быстро. В итоге вместо поисков работы я буду делать одни тестовые, в лучшем случае, чтобы меня послали потому что кого-то уже нашли пока я их выполняла. Не знаю, кто как, но мне нравится практика нескольких собеседований как в крупных компаниях, тестовые там дают обычно на втором собеседовании. Зачем мне тратить время на верстку примитивной шапки для показа своего кода, приехав домой, если я могу ее сверстать при том, кто будет меня собеседовать? Так и ход мыслей, и то как я работаю, и как я пишу код, увидеть можно сразу, и сделать свои выводы, причем не обязательно верстать весь макет, все итак будет видно. Плюс в некоторых компаниях собеседования включают в себя беседу с решением задачек, где сразу видны теоретические, практические знания и навыки соискателя вместе с образом его мышления и т.д. Как по мне вот это экономит время обоим, а не только работодателю. Насчет «не надо отпрашиваться с работы», то здесь выполнять тестовое будет некогда также, когда ты работаешь, потому что после работы времени не останется, а в выходные. если тебе дали его в пн, то будет странно говорить, что сдашь его только в след пн, потому что сможешь выполнить только в выходные ибо работаешь. Скорее всего найдут кого-то другого быстрее, чем наступят эти выходные.

P.S. Кстати, из всех этих тестовых именно те два, что требуют изучения фреймворков мне и понравились, хоть они и сложнее и объемнее. Во-первых, потому что возьмут меня в одно из тех мест или нет, но я получу новые знания, новый опыт, в последствие выберу один из этих фреймворков и буду дальше с ним работать, ибо мне давно надо было их изучить, да не было времени никак начать. Во-вторых, задачки интересные, и что-то новое всегда интересно само по себе. А вот выполнять тестовые из рубрики «делал 1000 раз» как раз-таки очень скучно, и это просто надо заставлять себя их делать. Но это проблема уже тех, кто составляет тестовые. Даже примитивные задачи для начального уровня скиллов можно делать интересными и увлекательными, даже если они на каких-то 5-10 мин, чтобы на их примере можно было узнать больше о кандидате, чем «как он пишет код», а не из рубрики «на автопилоте под музыку и не надо думать головой».

Я много таких делал, честно говоря.

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

Мне вот последнее недавно прислали — вывести двумерный массив в виде таблицы с учетом нескольких параметров. Все. Просто и со вкусом.


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

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

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

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

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

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

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

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

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

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

Вопросы на собеседовании программиста: чего ожидать

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

Как проходит собеседование? В большинстве случаев оно делится на 3 этапа:

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

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

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

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

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

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

  • логику выстраивания ответа;
  • ход мыслей;
  • умение справляться с нестандартной ситуацией.

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

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

План подготовки

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

Вы так же будете бежать на новую работу, если хорошенько подготовитесь к собеседованию

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

Начните с прохождения двух курсов:

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

Для любого сотрудника IT-индустрии знание английского языка на уровне Upper-Intermediate — обязательное условие.

Закрепляем и оттачиваем навыки программирования при помощи ресурсов HackerRank и HackerEarth. Здесь собрано огромное количество задач с примерами решения и без.

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

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

Кстати! Для наших читателей сейчас действует скидка 10% на любой вид работы

Создание портфолио

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

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

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

Проекты в портфолио советуем разделить: личные — отдельно, проекты с хакатонов — отдельно, вливания в проекты с открытым кодом — отдельно.

Не опускайте руки, даже если предстоит изучить тонны информации

Еще один вариант интересного портфолио — GitHub. Это место может сослужить хорошую службу: не только хранить ваш код, но и демонстрировать его работу.

Если хотите «убить наповал», то сделайте своим web-проектом собственный сайт-резюме. Только не забудьте сделать это качественно, стильно и эффектно.

Подытожим

Как видите, подготовка к собеседованию программиста — процесс долгий и трудоемкий. Всегда держите в голове, что приложенные усилия не уходят в никуда. Они в любом случае работают на вас, от собеседования к собеседованию (рекомендуется менять работу раз в 3-5 лет).

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

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

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

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

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

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

1. Массивы

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

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

Мастер Йода рекомендует:  Интерфейсы в PHP контракты для классов

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

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

  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 вопросов.

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

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

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

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

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

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

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

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

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

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 вопросов по программированию для прохождения собеседований по телефону; закрепить навыки можно с помощью вот этих подборок книг и курсов.

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

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

Собеседования – неотъемлемая часть жизни любого соискателя работы. Много раз был на них – где-то успешно, где-то нет. В одном месте я понимал что работать здесь мне будет неинтересно. В другом просто-напросто не “удовлетворял” (ну вы поняли меня) требованиям работодателя и т.д. Но я никогда не был по другую сторону стола, где сидят люди, которым ты пытаешься понравиться (как в профессиональном плане так и в психологическом, ну и еще в каких то там других….). И вот спустя время я оказался там…

Скажу вам так – подобрать достойного программиста 1с – то еще себе занятие. Конечно это будет не ГУРУ 1с, со всевозможными сертификатами специалиста, который выдает тонну качественного кода в день или решает проблемы оптимально быстро, прекрасно ладит с пользователями или бизнес аналитиком и т.д. Такие обычно не часто ходят по собеседованиям, а сидят в стабильно работающих компаниях и получают за это соответствующие деньги.

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

Так вот, подобрать даже такого программиста сейчас совсем непросто.

Перед самым первым своим кандидатом (это было собеседование не в организацию “рога и копыта”, а в крупную и известную фирму, на зарплату выше средней (смотри 125 000 тыс. рублей) по рынку Москвы), я решил хорошо подготовиться: накидал простенькие вопросы по теории, так же очень простые практические задачки, ну и серию стандартных вопросов: “с чем работали”, “какие проекты делали” – ну и тому подобную чушь. Я думал что с такими вопросами меня сейчас засмеют и уйдут раньше окончания собеседования, но тут начинается самое интересно.

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

Реально тупые. 60%.

Эти люди просто-напросто вообще не понимают как они оказались в мире программирования 1с и что они там делают. Большую часть здесь преобладает молодое поколение, но и люди 30, 40 летного возраста так же показывают здесь абсолютно уникальные знания. Скорее всего эти индивидуумы работали на какой-то совсем слабой поддержки, и кроме как добавлением текста на форму справочника или документа больше вообще ничем не занимались и не хотели ничего изучать. Хоть они и имеют стаж работы 4-5 лет (и резюме у них более или менее нормально), но за эти годы они явно так и не поняли – что такое разработка в 1с. Да возможно они и могут написать код, который будет более или менее рабочим, но это скорее всего будет навозная куча с воткнутыми в неё палками. Ниже приведены примеры вопросов, на которые они начинают нести такую чушь, что я хочу просто встать и выйти в окно из 9 этажа офиса прям при них:

6 нестандартных задач на собеседовании (с решениями)

Периодически интервьюеры задают различные задачи, слабо относящиеся к вашей будущей работе. Особенно этим грешат в больших компаниях. Именно там, где каждый большой или маленький начальник думает не о том, что нужно будет делать работнику, а о том, как бы проверить одно из его логических качеств, которые, возможно никогда и не пригодятся в работе. Хотя многие говорят, что интересует не решение этих задач, которые дают на собеседовании, а то, как их решает соискатель.
На собеседовании могут задать несколько типов задач, чтобы посмотреть креативность, широту взглядов и “незашоренность” Часто такие задачи не имеют единственно правильного решения и интерьвьюеру интересен путь по которому кандидат идет, например, “Посчитайте сколько заправок в стране “. Но есть и задачи, которые имеют решение. Это как раз на логику. Здесь представлено несколько логических задач у которых есть правильное решение, нужно только чуть-чуть подумать.

Задача первая: котлеты на сковородке

У вас есть три котлеты и две сковороды. Каждая сторона котлеты жарится одну минуту. На одну сковороду одновременно помещается лишь одна котлета. За какое наименьшее время можно пожарить все котлеты с обеих сторон?

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

Теперь начинаем думать креативно. У нас есть ресурс – две сковородки. Они могут жарить одновременно. Если мы начнем с двух котлет, то займем ресурс полностью, однако, половина ресурса будет простаивать, когда будет жариться третья. Т.е. для сокращения времени нужно задействовать вторую сковородку, все время. Как это сделать? У нас есть возможность разделить жарку на обжаривание с одной стороны и с другой. Т.е. все время жарки будет 3 котлеты умножить на 2 стороны = 6 этапов. Если есть шесть этапов, которые занимают 6 минут и есть две сковородки на которых эти этапы нужно выполнить, то получается, что реально можно пожарить за три минуты, вопрос только в алгоритме. Тут и приходит решение. После одной минуты, когда пожарилась первая сторона, нужно одну котлету, наполовину пожаренную, снять и положить на ее место сырую. А на третьей минуте, уже пожаренную снять и дожарить оставшуюся на свободной сковородке.

Задача вторая: горючие веревки

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

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

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

Задача третья: комната с лампочками

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

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

Интересный вариант решения нашел на одном из форумов. У нас есть два состояния горит-не горит и два состояния выключателя вкл-выкл, при этом лампочек три. Было бы две, то сложностей – никаких, одну включили, вторую выключили и пошли посмотрели. Значит одна лампочка должна быть включена, вторая выключена, а что делать с третьей? Предложили к третьему выключателю подвести 380 вольт, от которых лампочка перегорает(у ламп накаливания, хорошо видна спираль, если она перегорела, то это видно). Т.е. предложение добавить еще одно состояние исправна-не исправна. Т.е. лампочка теперь может быть в трех состояниях горит/ не горит и исправна/ не горит и неисправна. Поразмыслив над третьим состоянием можно вспомнить, что когда лампочка включена, она нагревается, а если ее выключить, то какое-то время она остается теплой, т.е. получаем разделение не горящих лампочек по теплая-холодная. Следовательно для решения задачи включаем два выключателя на некоторое время, потом выключаем один и идем смотреть. Видим одну горящую лампочку, и две не горящих, одна из которых теплее другой, что указывает на тот выключатель, который только что выключили.

Задача четвертая: золотая цепочка

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

Чтобы шесть звеньев разъединить и итоге осталось по одному звену, явно не получится распилить одно звено, поскольку колец 6, а соединений 5 то чтобы их разъединить все по одному, нужно как минимум три разреза (5/2 округляем до целого, получается 3).

Здесь что-то не так, начинаем думать креативно. Здесь есть понятие “оплата”, т.е. по условиям задачи нет требования, чтобы постоялец передавал хозяину по одному звену , есть требование, чтобы каждый день у хозяина становилось больше на одно звено. Теперь подходим к самой главной мысли, что хозяин и постоялец могут меняться, или, к примеру, хозяин может давать сдачу. Тогда все тривиально. Пилим одно звено – третье, чтобы была разменная монета 1, 2 и 3 звена, и в первый день турист дает хозяину одно звено, во второй меняет своих два на одно вчерашнее, в третий день может поменять два на три и т.д. Каждый день у хозяина на одно звено больше.

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

Начинаем с первого попавшегося алгоритма. Берем первые две монеты и кладем на противоположные чашки весов, если одна легче, то фальшивка найдена, если вес одинаков, то берем следующую пару. Проблема в том, что пар у нас четыре т.е. в самом неудачном случае, нам понадобится четыре взвешивания. Программисты, прочитав это решение, должны были хитро усмехнуться и сказать, “но есть же двоичный поиск, совсем не обязательно взвешивать все пары”.
Для тех, кто далек от программирования вот пример двоичного поиска: Чтобы поймать льва в пустыне нужно поделить пустыню пополам, посмотреть в какой половине лев, затем поделить эту половину пополам, а затем еще пополам, до тех пор пока лев не окажется в клетке. Теперь делим наши восемь монет пополам, кладем по четыре монеты с каждой стороны весов. Монеты с той стороны, которая тяжелее убираем(там нет фальшивки) и делим оставшиеся пополам, получается по две на каждую сторону, теперь осталось всего две монеты для последнего взвешивания. В итоге мы получили три взвешивания. Ура! мы победили! И тут для программистов – холодный душ. Оказывается можно решить задачу всего за два взвешивания. Придется думать…

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

Задача шестая: как разделить торт

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

Вот здесь сразу можно поставить человека в тупик, ведь на первый взгляд нужно четыре разреза, ведь частей 8. Но если посмотреть на это креативнее…

Решение простое, и можно дать как минимум два. Для начала поймем, что реально разрезать один торт на восемь равных частей тремя разрезами нельзя, по крайней мере так, как мы это себе представляем: открыли коробку с тортом и начали резать. Так не пойдет, для восьми частей, нужно четыре разреза. Но их можно сократить, если представить себе торт не как плоский круг, а привлечь пространственное мышление. Сначала делаем два разреза крест на крест, получаем четыре куска. Теперь нужно придумать, как за один раз порезать все четыре куска ровно пополам. Если вспомнить, что никто не ограничивает нас в перестановке уже отрезанных кусков, то просто складываем куски стопкой и режем все вместе – это первый вариант. А если все-таки вспомнить, что торт имеет определенную толщину, то последний разрез делаем не сверху как первых два, а поперек всех кусков посередине торта, отделяя верх от низа, но так, чтобы было ровно. Правда в этом случае половина гостей получит кусок без глазури, но ради науки чем-то нужно жертвовать.

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