- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
//сервер сайд (из colors.php)
$colors = [
'banana' => 'yellow',
'orange' => 'orange',
'cucumber' => 'green'
];
echo $colors[$_GET['fruit']];
//клиент сайд (js)
var fruits = ['banana', 'orange', 'cucumber']
for (var i in fruits) {
var fruit = fruits[i]
$.get('colors.php?fruit='+fruit, function(color){
document.write(fruit +' is '+ color +'<br/>')
})
}
Этот код показывают и задают вопрос почти на любом собеседовании на должность web-программита:
Что здесь неверно и как это исправить?
krypt 02.03.2013 14:41 # +1
a) Синхронный запрос. Надо асинхронно
б) Поштучный запрос. Надо всей толпой, чтобы снизить нагрузку и увеличить скорость работы.
в) передача имени объекта. Я бы передавал id
г) Общая бредовость конструкции
д) Отсутствие ";" в js-коде (по вкусу)
Какой ответ считается правильным?
krypt 02.03.2013 15:15 # 0
anonimb84a2f6fd141 04.03.2013 11:28 # +1
Тогда document.write() весь документ навернет. :)
krypt 02.03.2013 15:47 # 0
scriptin 02.03.2013 19:01 # +4
б) Экономия на спичках. Мимо.
в) Экономия на спичках.
г) Вполне нормальный синтетический код для вопроса на собеседовании
д) Поддерживаю, но это не приводит к ошибке.
Ошибка заключается в том, что, поскольку запрос асинхронный, во всех трех запросах fruit == 'cucumber' - замыкается последнее значение, определенное в цикле. Это стандартное поведение замыканий в JS.
Исправление соответствующее:
Поскольку выглядит ужасно, лучше использовать http://api.jquery.com/jQuery.each/:
krypt 02.03.2013 19:45 # 0
Про б) не соглашусь - это экономия на спичках, пока у вас нормальный интернет, а когда вам попадает в руки 3G свисток с откликом в секунду, ситуация резко меняется.
в) Ну так и тест-то синтетический.
г) Бредовость в том, что запрос к серверу можно вообще убрать, побавив данные в страницу :)
scriptin 02.03.2013 20:16 # −1
г) Согласен. Тут все зависит от цели проведения теста. Я бы тоже убрал, чтобы в тесте остался только JS, чтобы тест не требовал дополнительной внимательности при поиске ошибки. А для проверки внимательности я бы использовал больший отрывок кода.
myzone 03.03.2013 01:31 # 0
bormand 03.03.2013 08:27 # 0
deep 03.03.2013 08:16 # −2
http://img13.imageshost.ru/img/2013/03/03/image_5132dede01b38.png
bormand 03.03.2013 08:26 # 0
deep 03.03.2013 09:08 # 0
guest 02.03.2013 15:56 # +1
krypt 02.03.2013 16:54 # −2
guest 02.03.2013 17:32 # +4
Подобное наркоманство под Node выводит 3 строчки вида "cucumber is цвет<br/>":
wvxvw 02.03.2013 16:14 # −1
Еще из плохих вещей: для аргументов в жквери есть специальная функция, чтобы не писать самому амперсанды и вопросительные знаки, плюс она же там чего-то экранирует, хотя тут это не принципиально.
document.write - плохая идея вообще всегда, но тут же высосаный из пальца пример, так что хер знает...
Кроме того, если уж использовали жквери для того, чтобы отрпавить запрос, так уже и циклы делали бы по жквери, а то как-то не с руки...
krypt 02.03.2013 16:56 # 0
Мистер Хэнки 02.03.2013 17:27 # +3
Lowezar 02.03.2013 21:37 # −1
...У нас на 5.3 только с этого года, накоенц, отважились... По случайности: забыли новому человеку сказать что у нас 5.2, и не проследили чем 2 месяца занимался - не переписывать же теперь заново... И то теперь всякую мистику отлавливаем. :)
scriptin 02.03.2013 22:42 # 0
wvxvw 03.03.2013 01:33 # −2
scriptin 03.03.2013 16:13 # 0
Переход на другой язык при наличии legacy-кода в количестве более 1 приложения и более одного разработчика может стать непосильной задачей.
В любом случае желаю удачи.
wvxvw 03.03.2013 21:27 # 0
С mssql будет жалко расставаться, а все остальное выбросить - это облегчение, наоборот.
wvxvw 02.03.2013 18:00 # 0
absolut 02.03.2013 21:44 # +4
bormand 02.03.2013 21:58 # +3
LispGovno 02.03.2013 22:29 # +3
На самом деле ответ на вопрос
Что здесь неверно и как это исправить?
должен был быть такой:
Массив fruits (фрукты) содержит cucumber (овощ) и banana (ягоду). Раз я этого не обнаружил, то у меня проблемы с логикой. Как это исправить они не ответили, но зато сказали что они мне не подходят.
wvxvw 02.03.2013 22:35 # 0
scriptin 02.03.2013 22:46 # +1
krypt 02.03.2013 23:49 # +2
LispGovno 03.03.2013 11:38 # 0
krypt 03.03.2013 11:46 # +1
Тут такая концентрация лажи на квадратный символ, что становится просто не до именования. И на программерсом тесте, вообще, принято код писать/проверять, а не психологические задачки решать.
А если ещё после полного описания того почему код-говно, проверяющего ответ не устроил, то он либо hh, либо долбоёб.
Но всё это выглядит слишком сюрреалистично, поэтому я остановлюсь на варианте, что это такая шутка с вашей стороны :)
krypt 03.03.2013 11:47 # +1
bormand 03.03.2013 14:06 # +3
absolut 03.03.2013 15:48 # 0
http://youtu.be/QKmgL-gp5z8
scriptin 03.03.2013 16:19 # +1
edible, food, vegetarianMenu, grocery, arr1, massivOvoschiFrukty...
eth0 04.03.2013 19:54 # 0
Водка. Всё остальное безалкогольное. Как вариант - вода, потому что всё остальное калорийное.
absolut 04.03.2013 20:15 # 0
bormand 04.03.2013 20:45 # 0
scriptin 04.03.2013 21:11 # 0
Смотря какой сок.
wvxvw 03.03.2013 01:38 # +1
Ха-ха-ха. Вобщем, огурец - тоже ягода. Я как-то даже это подозревал, т.как знал, что арбуз, технически считается ягодой. Так что... не катит :)
eth0 03.03.2013 11:03 # +1
bormand 03.03.2013 11:26 # +1
LispGovno 03.03.2013 11:36 # +2
krypt 03.03.2013 12:22 # +4
absolut 03.03.2013 13:58 # 0
bormand 03.03.2013 12:37 # +2
LispGovno 03.03.2013 13:00 # 0
absolut 03.03.2013 14:02 # +4
отдыхать надо в других местах
LispGovno 03.03.2013 21:28 # −1
krypt 03.03.2013 22:22 # +2
Abbath 09.03.2013 00:13 # 0
defecate-plusplus 04.03.2013 10:02 # +1
LispGovno 04.03.2013 10:08 # +1
defecate-plusplus 04.03.2013 10:11 # 0
absolut 04.03.2013 11:20 # +2
defecate-plusplus 04.03.2013 12:28 # +2
roman-kashitsyn 04.03.2013 12:59 # +3
defecate-plusplus 04.03.2013 13:13 # 0
absolut 04.03.2013 14:17 # +3
А еще мосты. Но вот строители такие же.
P.S. Мы ведь о паттернах говорим?
defecate-plusplus 04.03.2013 14:29 # +4
absolut 04.03.2013 14:44 # 0
eth0 04.03.2013 19:59 # 0
absolut 04.03.2013 20:16 # +1
defecate-plusplus 04.03.2013 21:12 # +1
krypt 04.03.2013 23:51 # 0
absolut 04.03.2013 14:20 # +3
а в Москве бывает очень даже цветный
defecate-plusplus 04.03.2013 14:22 # 0
absolut 04.03.2013 14:47 # 0
defecate-plusplus 04.03.2013 14:55 # 0
bormand 04.03.2013 15:30 # +1
Есть друг у которого можно перекантоваться месяц-другой, а это, имхо, немаловажно.
roman-kashitsyn 03.03.2013 12:26 # +2
bormand 03.03.2013 12:45 # +2
Пакмен! Четыре привидения, таблетки которые постоянно глотает протагонист, непонятный и страшный лабиринт... Чем не хоррор.
bormand 03.03.2013 12:55 # +1
roman-kashitsyn 03.03.2013 14:19 # +1
И до кучи скрестить с сапёром, показывая в уголках тайлика цифру - кол-во врагов вокруг него.
bormand 03.03.2013 14:54 # 0
Soul_re@ver 03.03.2013 17:40 # +1
Пруф: http://dictionary.reference.com/browse/fruit?s=t
Первая же запись: «any product of plant growth useful to humans or animals.»
EDIT: Далее там же: « To a botanist, apples, peaches, peppers, tomatoes, pea pods, cucumbers, and winged maple seeds are all fruits.»
Lure Of Chaos 03.03.2013 13:42 # +1
оифг....
1. пыхомассив, как ни прискорбно, обьявляется через псевдофункцию array.
2. нет проверки на существование параметра fruit.
3. нет проверки существования ключа $colors.
4. массивы fruits и $colors определены несогласованно
5. fruit будет неверен (как уже заметили)
6. нет обработчика ошибок, что приведет к тому, что не все цвета будут напечатаны и мы об этом не узнаем
7.асинхронность запросов приведет к беспорядочному выводу
это то, что бросилось в глаза сходу. в реальном, не синтетическом коде засад было бы еще больше, а тут уж ладно...
scriptin 03.03.2013 16:26 # +1
PHP 5.4 же! Сказали уже.
>5. fruit будет неверен
Особенно банан.
Stallman 03.03.2013 19:47 # +3
Lure Of Chaos 03.03.2013 21:05 # +3
я знаю несколько случаев появления багов только из-за названия свойства disabled вместо enabled.
guest 15.03.2013 06:58 # +1
С помощью можно единоразово загрузить всю таблицу соответствия и использовать уже ее. Из-за кучи запросов, оригинал будет работать очень медленно, если ping до сервера большой. Да и вообще, трафик в моем случае экономится в разы, т.к. в оригинале отношение объема заголовков HTTP и протоколов низших уровней к объему полезной информации составят более 90%. В результате при большом разнообразии фруктов снижаем нагрузку на канал в 10 раз.