День добрый! Приветствую сообщество программистов! Это моё первое сообщение на этом форуме, хочу тут поселиться надолго Где-то полгода не особо активно натаскиваю себя на вакансию веб-разработчика. Живу я в Москве. Оказался на первом профильном собеседовании. Там мне без лишних разговоров был предложен тест. К сожалению, у меня не сохранились вопросы, но некоторые моменты, которые я не понял, сохранились в памяти. Наверное, они совершенно ламерские. 1) Код (Text): echo print(1) + print(2) + print(3) Разумеется, я тут ответил... Код (Text): 123 что совершенно неверно, как я узнал впоследствии. Объясните, пожалуйста, почему правильный ответ Код (Text): 3321 Почитав про print, не нашёл ответа на этот вопрос. И нужно ли вообще это знать? Используется ли данный фрагмент знаний у девелоперов? 2) Код (Text): $a = 1; $a += $a++ + ++$a И при том же $a Код (Text): $a += ++$a + $a-- Напишите, пожалуйста, на пальцах, как тут правильно считать.. Я ошибся.. Про пост и преинкремент я знаю, что пост сначала возвращает значение, потом инкрементирует, а пре инкрементирует, потом возвращает. Но как в данном примере работает += ? 3) Код (Text): $a = array ("a", "b", "c"); echo (array) $a; Что здесь означает (array)? 4) Если мой текущий уровень познаний позволяет создать кроссбраузерный сайт с нуля в нотепаде с применением html+css+photoshop+javascript(jquery), а в php знания ограничены только созданием гостевой книги с использованием MySQL, как посредством процедурного, так и объектно-ориентированного (ну ещё делал простейший интернет-магазин) подхода, на какую зарплату мне стоит претендовать? другими словами, сколько указывать в резюме, чтобы это было более-менее адекватно? Как вспомню, что ещё заинтересовало на собеседовании, укажу... И посоветуйте, пожалуйста, кто знает, где можно найти типовые вопросы на данных собеседованиях... гуглом я умею пользоваться, но может Вы сможете дать хорошую ссылку, по которой сами всё нашли
Благодарю за комментарий)) с трудоустройством повременю, подтяну себя. Со статикой я работаю куда увереннее, пару сайтов создал. Перед тем как выложить этот нубопост, я почитал тот же мануал, по поводу print http://php.ru/manual/function.print.html там я не нашёл ответа на свой вопрос, к сожалению..
В каждом учебнике написано про отличие print от echo. Print после печати возвращает единицу, 1 + 1 + 1 = 3. приведение к типу как php-кодер ты ноль, а вот как дизайнер, если наизусть знаешь HTML, реально тонко знаешь CSS, быстро разбираешься с плагинами jQuery и умеешь немного рисовать в фотошопе, то как дизайнер-верстальщик можешь работать очень хорошо.
Спасибо! Но т.к. я ноль, не понимаю, откуда берётся Код (Text): echo print(1)+print(2)+print(3) здесь 3321... откуда аж 4 цифры...
Сперва выполняется первый принт. Он должен будет напечатать сумму Код (PHP): (1) + print(2) + print(3) Но он не печатает результат сразу, поскольку слагаемое print(2) + print(3) - ещё не вычислено. Начинает вычисляться второй принт, который должен напечатать Код (PHP): (2) + print(3) Но он тоже не может напечатать результат, поскольку слагаемое print(3) - ещё не вычислено. Начинает вычисляться третий принт, который печатает на экран число 3 и возвращает значение 1. Эта единица возвращается во второй принт, который печатает Код (PHP): (2) + 1 = 3 Так на экране оказываются две тройки. Этот второй принт - тоже вернул единицу, которую и получил первый принт, в результате он печатает Код (PHP): (1) + 1 = 2 Так на экране оказывается число 2. После чего первый принт - также возвращает единицу, которую и выводит echo. И в результате мы видим на экране 3321. Добавлено спустя 4 минуты 41 секунду: Первая тройка - это третий принт Вторая тройка - это второй принт Двойка - это первый принт Единица - это эхо.
Даже не рассчитывал получить столь развёрнутый ответ! Написано так, что не остаётся ничего, кроме как понять и переварить, большое спасибо. Тем не менее мой нулёвый phpкодерский мозг сломан пару раз перечитаю, точно переварю))
Код (PHP): $a = 1; $a += $a++ + ++$a; Изначально, $a = 1. У операции += самый низкий приоритет (таблица приоритетов операторов: http://php.ru/manual/language.operators.precedence.html), по этому она выполнится последней. $a++ возвращает единицу, но $a при этом становится равен 2. ++$a возвращает 3, поскольку на момент его выполнения, $a уже равен 2. После его выполнения $a становится равен 3. Оператор сложения возвращает 4 (1 + 3) На момент выполнения оператора +=, переменная $a уже равна 3, и этот оператор прибавляет к ней ещё 4 (результат сложения). В итоге $a становится равна 7. Добавлено спустя 5 минут 1 секунду: Расставил скобочки, возможно, они помогут понять, в какой последовательности там всё выполняется: Код (PHP): echo(print(1 + print(2 + print(3))));
Предельно понятно написано, ещё раз спасибо! Я вот тут (c $a) лажанул в том, что ... к результату сложения 1+3 прибавлял первоначальное значение a, т.е. 1, а не 3.. Очень обидно, т.к. на тесте думал, что хоть здесь был прав Кстати очень интересный вид "собеседования" был. Секретарша влепила мне тест на 3 страницы, дала сколько угодно времени, но я за 20 минут с ним закончил, т.к. с mysql (а по нему там 40% вопросов) могу работать только с 1-2 таблицами, сейчас активно штурмую базы данных. Далее она забрала у меня тест, не проверяла его, задала пару общих вопросов и всё... Сказала, возможно, позвонят. Оригинальное "собеседование"! И, быть может, чертовски правильное. Зачем гуру тратить время на всяких быдлокодеров, которые не знают элементарных вещей! Я так понимаю, любой php-программист, с опытом хотя бы полгода, не задумываясь, ответил бы верно?
Естественно. Ты говоришь, что пишешь сайты в блокноте. Вот когда ты сможешь так же легко писать php-код в блокноте в таких же объемах, тогда ты junior. Потом запомнишь пару десятков приемов программирования, это и будет средний уровень. Добавлено спустя 4 минуты: Посмотри код в разделе http://php.ru/forum/viewforum.php?f=27 Там сейчас много оффтопа, лучше сразу на пятую страницу идти и смотреть решения разных задач. Средний php-программист поймет большинство из них.
дибильные задания. радуйтесь что вас не взяли в эту контору. если они соискателей мучают этим бредом - значит о остальной рабочий процесс и отношение к людям там соответствующее. знать такие вещи конечно желательно, но к повседневной разработке это не имеет никакого отношения.и скорее всего никогда не пригодится. боле того. за такой код в реальном проекте - увольняют. это типичный говнокод. он интересен лишь с академической точки зрения, ну ни как не как проверка для соискателя. я бы тоже наверное на 100% таких вопросов не ответил) да и большинство думаю не ответит
наоборот - правильно поставленная работа. спецы не отвлекаются от основных задач до того момента когда они необходимы (в данном случае - второй или третий этап собеседования). первоначальный отсев вполне способна провести секретарша, рабочее время которой в разы дешевле.
Shumomer, какой смысл отбирать соискателей умеющих складывать между собой результат print() ? они в реальности будут этим заниматься потом? сомневаюсь. думаю работа будет банальная, шаблонизаторы, фреймворки, библиотеки... вот и нужно спрашивать знание этих инструментов. чтобы новый сотрудник максимально быстро включился в рабочий процесс и начал приносить пользу. контора явно попутала цели - найти олимпиадника или хорошего сотрудника. ps к тому, давно известно, что к подобным испытаниям можно "натаскаться". в сети даже были сборники подобных вопросов и ответов. тоесть если человек прошел удачно собеседование - это всеголишь означает что он натаскался. и совсем не факт что он сможет также быстро и эффективно решить реальную задачу.
Хочу заметить, что, по-моему, не было в тесте "нормальных" вопросов. Одни подставы и несуразности (для ламера видимо) Самый первый был.. Какой тип данных отсутствует в PHP: object, null, указатель, resource. Ответ-то ясен. Но раз уж Вы столь скрупулёзны в своих вопросах, спросите, что отсутствует в PHP5 После "собеседования" остался осадок, что я могу, допустим, с применением объектно-ориентированного подхода, создать гостевую книгу, систему регистрации-авторизации, по книге реализовывал простейший интернет-магазин и ещё с десяток учебных задач. В общем, как мне казалось, основы языка, в том числе ООП, я худо-бедно знаю. Какой там! Всё это улетело в утиль этим тестом на колкости. Ни одного вопроса, который бы мне реально приходилось применять в своей мало-мальской практике! И это ведь пришёл соискатель на 25-30к - почти самую низкую зп на этой позиции в городе. Зачем его этим мучить. Дайте вы практическую задачку, ну хотя бы, написать функцию, которая отберёт все емэйлы из произвольной строки. Хотя, конечно, нет предела совершенству, думаю знать это не помешает и развиваться следует всегда... или выбрать другую сферу деятельности)
конечно нет предела. и очень похвально когда программер знает все 100500 хаков и особенностей языка. это полезно и достойно уважения. но в коммерческом проекте он это все применять не имеет права все равно. при первом же коде-ревью его закидают тухлыми помидорами и поместят на доску позора.
Ответы на ТАКИЕ вопросы показывают насколько человек ПОНИМАЕТ язык. Не знает, а именно понимает. По фреймворкам и прочему - это второй этап. Для тех, кто прошел 1й. Решение практической задачи (только не "отберёт все емэйлы", а того что даст хоть какое-то представление об умениях кандидата, например та-же гостевая, с динамикой на jquery, тут, сейчас, на бумажке [для терминатора: скажи честно - способен?]) - это третий этап. Его надо проверять. И с этим "секретарша" не справится. Придется тратить время (оплаченное время!) специалиста. Просто не рационально. Случайно отсеется хороший кандидат? Да и фиг с ним. Вы поймите правильно - пхп-кодеров - дофигища. Нет проблемы найти. Есть проблема выбрать.
я могу придумать такие вопросы, на которые вы правильно ответить не сможете, пока не запустите код. хотя возможно- вы неплохой программер и могли бы легко справится с типовыми заданиями которые будут в реальной работе в этой конторе. ну и толку от этого "первого этапа"? он отсеет большинство ПОДХОДЯЩИХ программистов. те тех кто реально подходит к РАБОТЕ, но не смог, по какимто причинам, правильно ответить на эти странные вопросы. можно навертеть такого, что и вы не сможете в уме все это скомпилить, и я не смогу... ну или в целом сможем, но ошибемся, и результат будет неправильный, хоть и близкий. для первоначального отсеивания нужны вопросы совсем не такие. а знать все невозможно. для этого есть мануал и гугл. я по работе, каждый день узнаю чтото новое для себя. хотя опыт веб программинга уже больше 10 лет. и досконально знать ВСЕ особенности поведения КАЖДОЙ функции ОПРЕДЕЛЕННОГО языка - почти нереально. такие люди если и есть, но стоят они очень дорого , и не они ходят на собеседования, а конторы сами за ними охотятся.