Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Тестовое задание Yandex (https://javascript.ru/forum/offtopic/18474-testovoe-zadanie-yandex.html)

DrStrangelove 02.07.2011 20:06

Цитата:

Сообщение от mycoding (Сообщение 111492)
Про ВО ни разу не спросили.
Хотя в вакансиях пишут, что желательно.

Вообще, если есть знания и без ВО можно работать.
Например V~Vladi вроде без ВО, а работает в очень серьезной фирме :)

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

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

Про собеседование:
Я общался с Федором Голубевым и еще одним человеком.
Вопросы были вроде тех, что вот здесь
http://company.yandex.ru/job/vacanci..._developer.xml
http://company.yandex.ru/job/vacanci...dia_search.xml

Мне на собеседовании очень понравилось)))
Длилось где-то два часа.

Я не помню уже всего о чем спрашивали.
Вот что запомнилось
1 - Что такое JSONP
2 - Реализации ООП в js(примеры)
3 - Про замыкания, классический пример с массивом
Больше ничего не запомнилось)))

Собеседование проходило в кабинете с надписью "Пятая колонна"
Было очень дружелюбно.
На прощанье дали папочку с надписью "Яндекс")))

Понятно, спасибо!
Не подскажешь как правильно ответить на этот вопрос:
Дан код:
var rx1 = RegExp(/regular/ + /expression/);
var rx2 = /regularexpression/;

Что нужно добавить в начало программы, чтобы rx1 и rx2 стали идентичными? Сами строчки трогать нельзя.

mycoding 02.07.2011 20:09

Цитата:

Сообщение от DrStrangelove (Сообщение 111506)
Понятно, спасибо!
Не подскажешь как правильно ответить на этот вопрос:
Дан код:
var rx1 = RegExp(/regular/ + /expression/);
var rx2 = /regularexpression/;

Что нужно добавить в начало программы, чтобы rx1 и rx2 стали идентичными? Сами строчки трогать нельзя.


Вот этот пример я до сих пор не знаю как правильно сделать)))
Это же для Яндекс бар, возможно там что-то из EcmaScript 5, вроде
use strict.

DrStrangelove 02.07.2011 20:30

Цитата:

Сообщение от mycoding (Сообщение 111509)
Вот этот пример я до сих пор не знаю как правильно сделать)))
Это же для Яндекс бар, возможно там что-то из EcmaScript 5, вроде
use strict.

Яндекс потом не раскрывает правильных ответов для соискателей??

B@rmaley.e><e 02.07.2011 20:32

Скажем, это:
// OLD
var rx1 = RegExp(/regular/ + /expression/); 
var rx2 = /regularexpression/;
alert([rx1, rx2])
alert([rx1.test('regularexpression'), rx2.test('regularexpression')]) // false, true T_T

// NEW
var oldToString = RegExp.prototype.toString;
RegExp.prototype.toString = function(){
    var value = oldToString.call(this);
    return value.replace(/\//g, '')
}

var rx1 = RegExp(/regular/ + /expression/); 
var rx2 = /regularexpression/;
alert([rx1, rx2])
alert([rx1.test('regularexpression'), rx2.test('regularexpression')]) // true, true! ^_^

mycoding 02.07.2011 20:37

Я просто привел пример, что спрашивают.
Т.е. все, что есть в примерах вакансий со страницы http://company.yandex.ru/job/vacancies/

Да особо и раскрывать то нечего.

Думаю, чтобы пройти собеседование, надо прочитать книги
http://oreilly.com/catalog/9780596805531
http://oreilly.com/catalog/9780596806767
И всё.
Знаний будет достаточно.

tenshi 02.07.2011 21:13

http://javascript.ru/blog/tenshi/yavascriptovoe-dao

tenshi 02.07.2011 21:14

B@rmaley.e><e, у регекспов есть замечательное свойство source

B@rmaley.e><e 02.07.2011 21:20

tenshi, спасибо, забыл о существовании такового. Лучше, конечно, использовать его, чем костыль с toString.

DrStrangelove 02.07.2011 21:46

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 111515)
// NEW
var oldToString = RegExp.prototype.toString;
RegExp.prototype.toString = function(){
var value = oldToString.call(this);
return value.replace(/\//g, '')
}

Поясни, плиз, к чему применяется oldToString.call(this); и что попадает в
value??

B@rmaley.e><e 02.07.2011 21:54

Переопределяется метод toString для регэкспов, который вызывается, например, в случае /regexp1/ + /regexp2/, так, чтобы возвращать свое значение не в виде /regexp/flags (флаги в текущей версии не предусмотрены), а просто в виде regexp. Тогда конкатенация /regexp1/ + /regexp2/ даст regexp1regexp2, которая, будучи переданной аргументом RegExp, станет /regexp1regexp2/.

oldToString используется для получения строкового представления регэкспа. В value попадает как раз содержание регэкспа.

Но с учетом поправки, корректный код будет выглядеть так:
// OLD
var rx1 = RegExp(/regular/ + /expression/); 
var rx2 = /regularexpression/;
alert([rx1, rx2])
alert([rx1.test('regularexpression'), rx2.test('regularexpression')]) // false, true T_T

// NEW
RegExp.prototype.toString = function(){
    return this.source;
}

var rx1 = RegExp(/regular/ + /expression/); 
var rx2 = /regularexpression/;
alert([rx1, rx2])
alert([rx1.test('regularexpression'), rx2.test('regularexpression')]) // true, true! ^_^


Часовой пояс GMT +3, время: 17:20.