- 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-программита:
Что здесь неверно и как это исправить?
a) Синхронный запрос. Надо асинхронно
б) Поштучный запрос. Надо всей толпой, чтобы снизить нагрузку и увеличить скорость работы.
в) передача имени объекта. Я бы передавал id
г) Общая бредовость конструкции
д) Отсутствие ";" в js-коде (по вкусу)
Какой ответ считается правильным?
Тогда document.write() весь документ навернет. :)
б) Экономия на спичках. Мимо.
в) Экономия на спичках.
г) Вполне нормальный синтетический код для вопроса на собеседовании
д) Поддерживаю, но это не приводит к ошибке.
Ошибка заключается в том, что, поскольку запрос асинхронный, во всех трех запросах fruit == 'cucumber' - замыкается последнее значение, определенное в цикле. Это стандартное поведение замыканий в JS.
Исправление соответствующее:
Поскольку выглядит ужасно, лучше использовать http://api.jquery.com/jQuery.each/:
Про б) не соглашусь - это экономия на спичках, пока у вас нормальный интернет, а когда вам попадает в руки 3G свисток с откликом в секунду, ситуация резко меняется.
в) Ну так и тест-то синтетический.
г) Бредовость в том, что запрос к серверу можно вообще убрать, побавив данные в страницу :)
г) Согласен. Тут все зависит от цели проведения теста. Я бы тоже убрал, чтобы в тесте остался только JS, чтобы тест не требовал дополнительной внимательности при поиске ошибки. А для проверки внимательности я бы использовал больший отрывок кода.
http://img13.imageshost.ru/img/2013/03/03/image_5132dede01b38.png
Подобное наркоманство под Node выводит 3 строчки вида "cucumber is цвет<br/>":
Еще из плохих вещей: для аргументов в жквери есть специальная функция, чтобы не писать самому амперсанды и вопросительные знаки, плюс она же там чего-то экранирует, хотя тут это не принципиально.
document.write - плохая идея вообще всегда, но тут же высосаный из пальца пример, так что хер знает...
Кроме того, если уж использовали жквери для того, чтобы отрпавить запрос, так уже и циклы делали бы по жквери, а то как-то не с руки...
...У нас на 5.3 только с этого года, накоенц, отважились... По случайности: забыли новому человеку сказать что у нас 5.2, и не проследили чем 2 месяца занимался - не переписывать же теперь заново... И то теперь всякую мистику отлавливаем. :)
Переход на другой язык при наличии legacy-кода в количестве более 1 приложения и более одного разработчика может стать непосильной задачей.
В любом случае желаю удачи.
С mssql будет жалко расставаться, а все остальное выбросить - это облегчение, наоборот.
На самом деле ответ на вопрос
Что здесь неверно и как это исправить?
должен был быть такой:
Массив fruits (фрукты) содержит cucumber (овощ) и banana (ягоду). Раз я этого не обнаружил, то у меня проблемы с логикой. Как это исправить они не ответили, но зато сказали что они мне не подходят.
Тут такая концентрация лажи на квадратный символ, что становится просто не до именования. И на программерсом тесте, вообще, принято код писать/проверять, а не психологические задачки решать.
А если ещё после полного описания того почему код-говно, проверяющего ответ не устроил, то он либо hh, либо долбоёб.
Но всё это выглядит слишком сюрреалистично, поэтому я остановлюсь на варианте, что это такая шутка с вашей стороны :)
http://youtu.be/QKmgL-gp5z8
edible, food, vegetarianMenu, grocery, arr1, massivOvoschiFrukty...
Водка. Всё остальное безалкогольное. Как вариант - вода, потому что всё остальное калорийное.
Смотря какой сок.
Ха-ха-ха. Вобщем, огурец - тоже ягода. Я как-то даже это подозревал, т.как знал, что арбуз, технически считается ягодой. Так что... не катит :)
отдыхать надо в других местах
А еще мосты. Но вот строители такие же.
P.S. Мы ведь о паттернах говорим?
а в Москве бывает очень даже цветный
Есть друг у которого можно перекантоваться месяц-другой, а это, имхо, немаловажно.
Пакмен! Четыре привидения, таблетки которые постоянно глотает протагонист, непонятный и страшный лабиринт... Чем не хоррор.
И до кучи скрестить с сапёром, показывая в уголках тайлика цифру - кол-во врагов вокруг него.
Пруф: 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.»
оифг....
1. пыхомассив, как ни прискорбно, обьявляется через псевдофункцию array.
2. нет проверки на существование параметра fruit.
3. нет проверки существования ключа $colors.
4. массивы fruits и $colors определены несогласованно
5. fruit будет неверен (как уже заметили)
6. нет обработчика ошибок, что приведет к тому, что не все цвета будут напечатаны и мы об этом не узнаем
7.асинхронность запросов приведет к беспорядочному выводу
это то, что бросилось в глаза сходу. в реальном, не синтетическом коде засад было бы еще больше, а тут уж ладно...
PHP 5.4 же! Сказали уже.
>5. fruit будет неверен
Особенно банан.
я знаю несколько случаев появления багов только из-за названия свойства disabled вместо enabled.
С помощью можно единоразово загрузить всю таблицу соответствия и использовать уже ее. Из-за кучи запросов, оригинал будет работать очень медленно, если ping до сервера большой. Да и вообще, трафик в моем случае экономится в разы, т.к. в оригинале отношение объема заголовков HTTP и протоколов низших уровней к объему полезной информации составят более 90%. В результате при большом разнообразии фруктов снижаем нагрузку на канал в 10 раз.