Блог разработчиков

Трудный вопрос на собеседовании #7

Скакунов Александр
Опубликовано 14.07.2008 в Учеба

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

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

Задача #0 — тест на педикулёз

Написать “Hello, world” на PHP (задается устно, ибо кода не много). При всей кажущейся тривиальности здесь есть где развернуться:

  1. Ставим знак < — это единственная железобетонная часть программы, дальше возможны варианты.
  2. Пишем ?, ?php или % — взависимости от настроек в php.ini и Code Standard, принятому в компании (плюс кандидиту, если слышал и про то, и про другое).
  3. Рассказываем, какие бывает команды вывода и чем отлючаются: например, echo, print и = .
  4. Объясняем, в каких кавычках мы написали “Hello, world” и почему — в одинарных выполняется быстрее, зато в двойных могут быть переменные.
  5. Ставим точку с запятой или нет — в конце скрипта это не обязательно.
  6. Пишем ли закрывающий PHP-тэг? Если дальше нет HTML-кода, то лучше опустить, чтобы потом не заморачиваться с поиском лишних переносов строк, вылетевших в output раньше, чем мы думали.

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

$a = 'true';
if( 0 == $a || $a )
{
  echo 'yes';
}

Задача #1 — на знание синтаксиса

Чем отличается смысл этих строк (либо “Найдите ошибку;) ):

$a =& $b;
$a &= $b;

Задача #2 — на внимательность

Что будет выведено в результате работы скрипта (задают такое кажется в Яндексе):

$a = 10;
echo $a-- - - - - - - - - - - --$a;

Возможен вариант с плюсиками или с комбинацией плюсов-минусов.

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

top of hotblogs.org.ua
1 звезда2 звезды3 звезды4 звезды5 звезд (11 голосов, средний: 1.36 из 5)
Загрузка ... Загрузка ...

Понравилась статья? Подпишись на обновления по RSS/E-mail

Подписаться, не оставляя комментарий

Все комментарии (23) к “Трудный вопрос на собеседовании #7”

  1. Всеволод Соловьёв говорит:

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

  2. дима говорит:

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

  3. F говорит:

    $a &= $b; - а так, адрес переменной в C++ не взять, наверное, и в PHP тоже

  4. Скакунов Александр говорит:

    $a &= $b; - а так, адрес переменной в C++ не взять, наверное, и в PHP тоже

    Всё проще, ответ из другой области. В РНР это работает, в С++, наверное, тоже.

  5. Sergoff говорит:

    Фигасе у Вас задачки :)

  6. silent говорит:

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

    на самом деле возможны варианты и до “железобетонной части” программы :о)…
    Например, плохой редактор не покажет что до “железобетонной части” есть “нечто” в 2-х случаях ниже:

    1 - проблем нет (ну почти нет, обычно такое проходит незаметно):

    # printf "10" code_OK | php -a

    2 - а вот здесь будут проблемы:

    # printf "10" code_FAIL | php -a

    (листинги подразумевают что PHP собран с поддержкой cli)

  7. silent говорит:

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

    clear && php -r ‘printf(”%s\n”, base64_decode(”cHJpbnRmICJcMDEwPD9waHAgcHJpbnQoJyVzJyAuIGNocigweEEpKTs/PiIgY29kZV9PSyB8IHBocCAtYQ==”));’

    соответственно для второго:

    clear && php -r ‘printf(”%s\n”, base64_decode(”cHJpbnRmICJcMDEwPD9waHAgaGVhZGVyKCdDb25uZWN0aW9uOiBjbG9zZScpO3ByaW50KCclcycgLiBjaHIoMHhBKSk7Pz4iIGNvZGVfRkFJTCB8IHBocCAtYQ==”));’

    ну и конечно подразумевается что PHP собран с поддержкой cli…

  8. Anton Naumov говорит:

    Яндекс это конечно хорошо, Sun еще лучше, но вопрос #2 — мертворожденное порождение апологетов знания языка. за такой код в продакшине я лично обещаю посадить автора за конфлюенс, выделить ему отдельную страницу и заставить 100 раз написать фразу “я никогда больше не буду писать wright-only говнокода”. при написании виновный не имеет права использовать копи-паст.
    если говорить более серьезно, то действительно вопрос #2 проверяет знание языка. вопрос только нужно ли кому-нибудь такое знание? мой личный ответ — нет, не нужно. но задачи ++а–b++c—-d++s >> k << z встречаются довольно часто. и единственный вопрос, который беспокоит меня до сих пор, так это зачем?

  9. _Oleg_ говорит:

    Полностью согласен с Anton Naumov. +1.

  10. Vadim Voituk говорит:

    Anton Naumov:
    +1 насчет отрывание рук за такой код
    Но вот для проверки понимания приоритета операций и умения не теряться в таком г#вне - задачка может быть полезной.
    Ато потом будешь потом за таким кандидатом вылавливать баги, связанные с приоритетом и постфиксно-префиксной нотацией.

  11. MadMachine говорит:

    а вот мне очень даже интересно просто почитать ответы, варианты решений… просветите пжалста:)

  12. Anton Naumov говорит:

    2Vadim Voituk, приоритет операций — да, вещь полезная. на практике заменяется скобками практически всегда. причем даже код-генираторами. у меня IDEA подсвечивает, где нужно лишние скобки убрать. иногда я с ней не соглашаюсь. опять-таки, приоритет операций можно (и как правило должно) знать на высоком уровне. иначе говоря, ++ имеет бОльший вес, чем * и так далее. понимание, а тем более быстрое понимание той отфонарщины, которую я привел выше — хорошо. но не обязательно. это с одной стороны. с другой стороны, человек способный написать hashCode = 31 * result + intField >> 2. и понимающий, что получится в результате, однозначно не станет писать мою отфонарщину — он уже минимум один раз написал сто раз фразу “я никогда больше не буду писать wright-only говнокода”. прошу прощения за тавтологию. итого ценность быстрого понимания такого рода кода стремится к нулю. разумеется, если мы не говорим о программировании на Perl. там ИМХО бОльшая часть кода wright-only. но то язык такой или мне примеры попадались плохие. :)

  13. Anton Naumov говорит:

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

  14. Скакунов Александр говорит:

    да, и еще — вопрос #0 гениален

    Ну вот, сразу бы так, а то “говнокод-говнокод” ;)
    Вопрос #0 узнал от Кирилла Климакова (EPAM).

  15. Anton Naumov говорит:

    2MadMachine, наченем с того, что я не PHP-программист, хотя синтаксис знаю. попробую ответить на очевидные вещи:
    #0.2 декларация, насколько я помню, может быть вообще любой. посему определяется Code Standard и вносится в php.ini. по-умолчанию АФАИР , как в JSP, но насчет умолчания уже могу путать.
    #0.3 ничего конкретного сказать не могу. по логике вещей = — оператор записи в стандартный поток вывода, который обрабатывается интепретатором в качестве оператора по-умолчанию. следовательно это вызов write уже существующего output-потока, и должен быть самой быстрой операцией. нет?
    #0.4 опять-таки чистая догадка — в двойных кавычках инициализируется объект String, в одинарных — единый литерал, значение строки. иначе говоря “” — передается ссылка, ” — передается значение.
    #0.5, #0.6 — понятия не имею.
    #0.задачка — ответ: будет напечатно yes. потому что 0 == $a - false, но $a == true, а true || false = true. разумеется в том случае, если в PHP конструкция $a = ‘true’ означает инициализацию булевой переменной.
    #1 $a =& $b — понятия не имею, чистая ПХПшная заморочка, по принципу ===.
    $a &= $b - побитовое И для переменных а и b, с записью результата в а.
    #2 действительно 18. потому что 10 минусов в итоге дают один плюс, операции выполняются слева направо, поэтому конструкция упрощается к (а + (а - 1) - 1 = 18.

  16. Anton Naumov говорит:

    гыгы, в последней строчке скобку забыл (a + (a - 1)) - 1 = 18 разумеется. не возьмут меня в Яндекс :)

  17. Скакунов Александр говорит:

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

    #1 $a =& $b — понятия не имею, чистая ПХПшная заморочка, по принципу ===.
    $a &= $b - побитовое И для переменных а и b, с записью результата в а.

    Типичный ход мысли не-PHPшника. Народ, кто кодит на PHP, так часто видит первое и так редко сталкивается со вторым, что порой опытные перцы зависают.

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

  18. Щетинин Сергей говорит:

    Антон, пишется “write-only”

  19. Anton Naumov говорит:

    2Щетинин Сергей, что Вы говорите? :) ай-ай-ай, кто бы это мог быть? (с) спасибо конечно, что поправили, жаль что поздно :)
    2Скакунов Александр,
    конечно позволю, затем и писались ответы, чтобы услышать мнение со стороны.
    что касатеся операций побитового И, я их использовал за 12 лет раза два или три. всего. это большей частью математика и шифрование. но на мой взгляд этот вопрос на знание операторов лучше вопроса #2. хотя на вкус и цвет все фломастеры разные (с) :)
    если говорить о собеседовании, то есть масса различных подходов. и эти вопросы позволяют отсеить совсем нулевых разработчиков, чтобы просто не тратить время даром. так что толк есть, я просто хотел услышать мнение, отличное от моего, относительно вопроса #2 :)

  20. chook говорит:

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

  21. AntonShevchuk говорит:

    Cсылка в тему - как я провожу собеседование PHP разработчиков: http://anton.shevchuk.name/php/php-interview/

  22. Сергей Волошин говорит:

    http://www.corp.mamba.ru/test/
    Я — хороший PHP-программист :)

  23. Щетинин Сергей говорит:

    Понравилась в тесте картинка “PHP вместо мозгов“. Жестко но справедливо.

Оставить комментарий

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

Архив

Вакансии rss icon

Все вакансии

Комментарии