Я искал новую работу. Обновил профиль на hh. И вдруг, через неделю, меня пригласили в яндекс! На вакансию разработчик интерфейсов внутренних сервисов.
Требования мне подходили, единственное разочарование было в знании XSLT. Поговорив с hr, узнал что должность касается разработки админки на шаблонизаторе-велосипеде от яндекса. Что же, подумал я, минус большой, но терпимый. Серьёзная контора, интересные задачи. Что же, вполне возможно меня возьмут под свое уютное гнездышко!
Получив ссыль на задание, я приступил выполнять его через неделю. Да, у меня были дела поважнее 😉
1.Напишите функцию, принимающую в качестве аргумента массив числовых значений и возвращающую уникальные элементы этого массива.
Хм. Подумал я, садясь за Dev-tools. Написал обычную функцию, ничего лишнего.
function uniq(){
var c=[],
e,
d,
b = this.length;
for( e = 0; e < b; e++ ) {
for( d = e + 1; d < b; d++ ) {
if( this[e] === this[d] ) {
d =++ e;
}
}
c.push( this[e] );
}
return c
}
Итог. Я не сделал ограничение на вхождение числовых значений, т.е. в массив можно добавить также любые другие типы, включая строки. Первый фейл.
2. Изменится ли внешняя переменная someFlag? Объясните результат.
var someFlag = 0;
function foo() {
if (true) {
someFlag = 1;
} else {
var someFlag = -1;
}
return someFlag;
}
foo();
Итог. Вот это ЭПИК Фейл! Вообще не думая, я тупо копирнул код в консоль, получив в итоге ответ 1. Всякое бывает.
3. Напишите функцию перемножения чисел, которая вызывается следующим образом: multiply(a)(b).
Придя в мир web-dev’a от десктопных C# проектов, я сначала подумал, что это будет очень сложно. Сразу вспоминались делегаты и пр. К счастью, js это ещё и функциональный язык и я вовремя вспомнил что в нём можно возвращать результат в виде функции.
function multyply(a) {
return function temp(b) {
return a * b;
}
}
Итог. Вот это по-настоящему задание мне понравилось. Но как видно, я опять забыл добавить проверку на число. Фейл.
4. Какие способы передачи данных без перезагрузки страницы вы знаете?
Для меня знакомы лишь 3 технологии: ajax, websocket, webrtc. Но чтение документации socket.io показало мне еще пару-тройку устаревших механизмов, вроде long-pooling и comet.
5. Задание для верстальщиков
Это самое сложное задание. Здесь без Photoshop’a никуда. Откуда ещё копировать CSS-ый код?
5.1. Сверстайте контрол оценки и показа рейтинга
http://jsfiddle.net/hr8wK/
Итог. Нет обработки кликов на js, семантически неверная разметка.
5.2. Сверстайте прогресс-бар
http://jsfiddle.net/rCSBu/3
Итог. Пытаясь добавить все префиксы браузеров я забыл добавить w3c свойство!
5.3. Сверстайте кнопку
http://jsfiddle.net/CJmhU/1
Итог. Нет EventListener’a.
5.4. Сверстайте список из иконок
Тут нет нареканий
5.5. Сверстайте текст
http://jsfiddle.net/r3VkB/2
Итог. Еле победил свой перфекционизм. Сверстал через таблицы. Кое-где выбрал неправильный полуторный пробел.
Общий итог: Epic fail.
От себя добавлю — никогда не публикуйте свои задания в 12 часов вечера! Подождите до середины дня. Покажите код своему знакомому прогеру, или скиньте на форум — пускай поругают. Не торопитесь и все будет ок. Читайте-перечитывайте задания. Делайте чуть больше написанного. И тогда вас возьмут. Наверное…