Программания 2008

4 октября 2008 года прошел очередной конкурс “Программания” от компании (экс Validio) Global Logic. Это был 13 по счету конкурс, проходил он в здании Харьковского театра оперы и балета – народу было очень много. Стоит отметить, что в этом году конкурс проходил не только в Харькове, а еще в Киеве и Львове. Призы были стандартные (много было мониторов), главный приз – MacBook Pro 🙂
В этом году вопросы мне понравились – отвечал на темы PHP, Dynamic HTML, AJAX, XML, Основы SQL, English ну и совсем чуть чуть .NET.
Количество граблей было достаточным. Каждый второй вопрос, естественно, был с подвохом. Поделюсь с вами этими каверзными вопросами.

Dynamic HTML

1. Как будет выглядеть блок? (какой будет вид bordera?)

И как вы думаете?
Ответ: на самом деле блок будет иметь ЖЕЛТУЮ рамку, т.к. CSS класс “yellow” был определен последним в секции style (а порядок задания классов в элементе не имеет значения).

2. Вопрос по поводу приведения типов в javascript:

Каким будет значение переменной a?

Ответ: 33
Javascript изначально выполнит сложение целых чисел, а потом произведет конкатенацию со строкой.

3. Подвох при работе со строками в javascript (replace)

Каким будет значение переменной s?

На первый взгляд, хочется сказать, что результирующая строка будет выглядеть так: “111,777,111,777”.
Но в действительности метод replace предназначен для работы с регулярными выражениями. В данном случае первый параметр – строка “000” рассматривается как регулярное выражение и результатом будет строка “111,777,000,777” (перестановка выполнится при первом нахождении подстроки “000”).
Если же вам нужно заменить подстроку в строке javascript, то следует добавить в регулярное выражение модификатор g (global):

Здесь уже выполнится замена всех вхождений подстроки и результатом будет “111,777,111,777”.

4. Добавление комментария в div средствами DOM.

В принципе, ничего сложного. Просто никогда не пользовался – да и вообще не пойму кому такое нужно?
Например, есть div:

Добавление комментария:

ИМХО, этот вопрос был включен с мыслью о том, что никто не использует это на практике. document.createComment встречается гораздо реже чем document.createElement 🙂

По PHP граблей было куда меньше, так что эти вопросы рассматривать не буду. Пожалуй, единственное, что было новым для меня – один момент относительно обработки исключительных ситуаций. Информацию эту узнал в тот же день, когда пошел на очередную пару по JAVA (я теперь каждую субботу еще и на JAVA хожу :).
Момент заключается в следующем: если у нас есть наследники класса Exception (например, MyException) и если в блоке try возможен выброс исключений родительского класса и класса наследника, то отлавливать их нужно в порядке от наследника до родителя. Следующий пример показывает корректный вариант следования блоков catch:

Данный пример выводит строку “MyException” – попытка обработать исключение типа MyException удалась.
Но если поменять порядок блоков catch:

В этом случае сработает первый блок catch и результатом будет строка “Exception (base)”

Вот еще вспомнил вопрос, подвох в котором был касательно ссылок в PHP.

Значение переменной $b будет равно 1. Ссылка дает возможность переменным указывать на одно и то же содержание. Это не значит, что $b указывает на $a, поэтому значение $b по прежнему 1.

Пожалуй это все что хотел написать по данной теме.

  • kseniya

    Позновательно.

  • admin

    Ксюш, обязательно приходи на конкурс в следующем году 🙂

  • the

    Я тоже был на этом конкурсе, очень понравилось. Теперь ждем результатов… 🙂

  • Не знал вообще, что можно писать больше одного класса – class=“red yellow blue“ 🙂

  • @Скрипт – я тоже не знал и решыл проверить – в Опере никакого результата =(