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

hell0w0rd

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

iceman

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

HraKK

Мудак
Команда форума
:confused:фейспалм, что вы прицепились к этому вопросу? Его никто не задавал и не будет, это бессмысленно. Это вопрос из презентации моей по внутренней работе пхп.

Вообще для собеседования надо быть хорошим психологом и иметь большой опыт работы в команде) Все остальное от лукавого.
 

scorpion-ds

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

Задача была написать функцию которая выполняет "определенную работу" (вполне конкретная задача), через несколько минут я показываю первый вариант, мне говорят, что неверно, я подумал еще немного, написал немного по другому, мне снова говорят подумай еще, я подумал немного оптимизировал код, показываю, мне не глядя говорят, что я невнимательно выслушал задачу, попросили повторить вопрос, ..., в итоге оказалось, что моя ошибка была в том, что я свой алгоритм не заключил в тело функции ( function name() { ... } ), а вопрос звучал именно как написать функцию. На это ушло минут 20-30, я разволновался и потом вообще стал тупить, да и после еще пары "хитрых" вопросов пропало желание общаться.
 

HraKK

Мудак
Команда форума
йопть, о чем тут говорить, я 90% собеседований проваливал в веб-студии, и что)

Но истинный дзен тогда когда тебя не собеседуют вообще по технике. Уже на 4 последних фирмах где я работал(ю) мне не задавали тех вопросов вообще.
 

AnrDaemon

Продвинутый новичок
Да там читать-то нечего:) Все банально, внутренний диалог такой:
- все в PHP по умолчанию копируется. Да, объекты тоже копируются.
- А почему тогда если что-то изменить в копии - оно меняется и в оригинале?
- Потому что объект - это не скаляр, и внутри PHP он хранится по другому, есть число, по нему можно найти объект, копируется как раз это число.
И все) На мой (зеленый) взгляд такого должно быть достаточно, если человек знает больше - хорошо, но не обязательно)
Да объект то понятно. Переменная объекта - ссылка, об этом в документации написано английским по белому.
Но если в коде
PHP:
<?php
$A = array();
$A[0] = 5;
$b = &$A[0];
$C = $A;
$C[0] = 10;
print $A[0];
поменять 3 и 4 строки местами, результат будет разный. Я понимаю, что результат меняется при переносе конкретно строки "$b = &$A[0];", но не понимаю, как такое вообще возможно. Почему создание ссылки на переменную внутри массива переводит массив в разряд объектов? (I.e. он перестаёт копироваться при присвоении.)
Или рефкаунты копируются вместе с массивом? :confused:

Читаю. Но это займёт какое-то время. Работа...
 

Тугай

Новичок
Да объект то понятно. Переменная объекта - ссылка, об этом в документации написано английским по белому.
... но не понимаю, как такое вообще возможно. Почему создание ссылки на переменную внутри массива переводит массив в разряд объектов? (I.e. он перестаёт копироваться при присвоении.)
Или рефкаунты копируются вместе с массивом? :confused:
Массив в разряд объектов не переходит.

$b = &$A[0]; - Z_VAL элемента массива становится ссылкой (is_ref=1, ref_count = 2).
$C = $A - у Z_VAL всех элеметов ref_count++, т.е у $b, $A[0], $С[0]: Z_VAL (is_ref=1, ref_count = 3)

Т.е. $С[0] - ссылка на тот же Z_VAL что и $A[0] и $b

Код:
$A = array();
$A[0] = 5;
$A[1] = 100;
$b = &$A[0];
$C = $A;
$C[0] = 10;
$C[1] = 200;
echo $A[0], ' ', $A[1];  // 10 100
$C[1] - не ссылка, $A[1] - не изменится
 
Сверху