Javascript-форум (https://javascript.ru/forum/)
-   Работа (https://javascript.ru/forum/job/)
-   -   собеседование (https://javascript.ru/forum/job/25783-sobesedovanie.html)

monolithed 15.02.2012 21:29

Вообщем, кому не терпется узнать напишите в ЛС (с кармой 1000+)

Snipe 16.02.2012 00:12

Или я сам себе придумываю ограничения или у меня пробелы в знаниях, но я не придумал варианта сделать переменные доступными во вне foo без вызова foo.

poorking 16.02.2012 00:27

Snipe,
я тоже :( Есть возможность узнать ответ, но хочется самому догадаться :(

Nekromancer 16.02.2012 01:15

Snipe,
Я придумал, правда оказалось, что вызывать его всё же можно.
Ограничений никаких нет, кроме self, window, parent, top.

Octane 16.02.2012 01:22

[hidden]вроде и не писали, что вызывать нельзя, хотя есть дурацкий вариант без вызова, если придраться к слову "дописать")[/hidden]

poorking 16.02.2012 01:27

Цитата:

Сообщение от Nekromancer
Ограничений никаких нет, кроме self, window, parent, top.

Ну если только этими словами пользоваться нельзя, тогда нет проблем никаких, меня почему то переклинило, что нельзя вызывать, а monolithed к тому же сказал, что они (a и b) должны быть уже доступны до инициализации foo o_O
Цитата:

Сообщение от poorking
А ссылки должны быть доступны вне foo после ее вызова или прямо после инициализации?

Цитата:

Сообщение от monolithed
До инициализации

В исходных данных они (a и b) создаются и инициализируются внутри foo. А раз они должны быть доступны вне foo ДО её инициализации, то у меня разрыв шаблона, я спать

Octane 16.02.2012 01:38

[hidden]Инициализация переменной foo и вызов анонимной функции - разные вещи[/hidden]

Gozar 16.02.2012 01:41

Мне почему-то вспомнилась история: Измерение высоты здания с помощью барометра

poorking 16.02.2012 01:42

Octane,
Да это понятно. Я про то, если не вызывать ничего. Если вызывать foo можно, то решение очевидно.

Ну короче ладно, я просто с самого начала все не так понял

PS: И вообще, думаю уже нет смысла скрывать решение, раз уж monolithed задачу задал, то было бы здорово если бы он опубликовал правильные решения, и с его позволения другие участники опубликовали бы свои другие решения.

PPS: Существуют ли какие нибудь, эм.. задачники что-ли, с такими задачами? Где можно взять подобные задания для саморазвития/самопроверки?

Nekromancer 16.02.2012 01:50

poorking,
Да, меня тоже смутило высказывание про инициализацию и я решил, что нельзя вызывать функцию. По этому придумал такое вот решение.

FINoM 16.02.2012 06:52

Я предлагаю своеобразную игру: один здешний человек собеседует другого, за этим могут наблюдать (слушать) другие люди, конечно это всё бесплатно. Результат: обоснованное ЧСВ собеседуемого или указание на ошибки и недостатки.

monolithed 16.02.2012 09:11

Подведем итоги:

Пойдем от самого очевидного и не спортивного :)

Самое очевидное решение, заключается в том, что я случайно забыл упомянуть this (думаю что это решение не в счет).

1.
var foo = function () {
    var a = 1;

    function b() {
        return 2;
    }

    this.a = a;
    this.b = b;

}();

alert([a, b()]) //1, 2


Это то что должно прийти в голову вторым (простая перестановка):
2.
var foo = function () {
    var a = 1;

    function b() {
        return 2;
    }
    c = a;
    d = b;
}();

a = c;
b = d;

alert([a, b()]);


Это уже более грамотный ответ, т.к. не создаются глобальные переменные (хотя b и указывает на window):
3.
var foo = function () {
    var a = 1;

    function b() {
        return 2;
    }
    return {
        a : a,
        b : b
    };
}();

a = foo.a;
b = foo.b;

alert([a, b()]);


Незнаю почему, но только один человек догадался использовать toString/toSource, ведь это очевидно, вспомните тесты Яндекса
4.
var foo = function () {
    var a = 1;

    function b() {
        return 2;
    }
};

eval(foo.toString().match(/{([\s\S]+)}/)[1])

alert([a, b()]) //1,2

5.
Эталонное и самое неочевидное решение, использовать - Multiple-value returns из JavaScript 1.7 (работает начиная с Firefox 2).

var foo = function () {
    var a = 1;

    function b() {
        return 2;
    }
    return [a, b];
};

[a, b] = foo();

alert([a, b()]); //1, 2


Объсню почему последнее решение было взято за эталон.
А дело в том, то Multiple-value returns включены в будущий стандарт ES6, спецификация которого уже давно лежит на офсайте. Тем более те кто писал на Python или расширения для FF должны были это как-никак вспомнить.

Ну а так как товарищ vflash сказал, что общение с ним за 10к/час полезней всяких конференций (на которых уже второй год эту тему мусолят), последний вариант, самое то.

Появился стимул к прочтению нового стандарта? :)

vflash 16.02.2012 09:34

monolithed,
гениально, браво. monolithed в презеденты

// как из мухи сделать слона
var муха = 'слон';

monolithed 16.02.2012 09:54

Цитата:

Сообщение от vflash
как из мухи сделать слона

Обращайтесь :)

Gozar 16.02.2012 10:36

Можно я прокомментирую(так сказать разбор полетов), хотел вчера, но форум трет сообщения, а второй раз набивать лень. Думаю, все могут прокомментировать решения тоже.

Скажу честно мне пришли в голову первые 4 варианта. Первые два я послал monolithed. Третий не стал посылать, хотя в голову он пришел первым, потому что разговор шел про функции, мне и первый то казался не совсем правильным.

По поводу четвертого: Это "блин уродство" мне пришло в голову, но было отброшено из-за его некрасивости что ли :)

Пятый конечно в голову не пришёл, т.к. Стандартная мысль - кроссбраузерность.

Я например никогда не буду не брать человека, только потому, что он не пройдет подобный тест или ответит на вопрос не правильно типа:
Цитата:

Сообщение от vflash (Сообщение 157690)
за неправильный ответ на (typeof null) шансы пройти собеседование стремиться к нулю.

Лично моё мнение: тесты должны быть на добровольной основе и только ради интереса - как игра, но ни как не показатель качеств человека. Для проверки человека существует понятие: Портфолио.

devote 16.02.2012 10:47

Ну я отправил в личку monolithed первый вариант, хотя второй мне тоже пришел в голову но не стал его отправлять из-за бональности, слишком уж он мне бональным показался. Остальные варианты и не продумывал, то есть далее я уже не стал сидеть придумывать что-то.

По поводу пятого я и не знал что так вообще можно делать, ибо так же как и Gozar, думаю в первую очередь о кроссбраузерности. А еще не дописанные стандарты я никогда не читаю, предпочитаю читать их после финального выхода.

Цитата:

Сообщение от Gozar
Я например никогда не буду не брать человека, только потому, что он не пройдет подобный тест или ответит на вопрос не правильно типа:

Согласен.

Kolyaj 16.02.2012 12:05

monolithed,
в чём смысл задачи? Что можно узнать о кандидате, дав ему эту задачу? Какие знания проверить?

Pavel M. 16.02.2012 12:41

Цитата:

Сообщение от Kolyaj
Что можно узнать о кандидате, дав ему эту задачу? Какие знания проверить?

узнать
читает ли он регулярно javascript.ru/forum

monolithed 16.02.2012 13:20

Цитата:

Сообщение от Kolyaj
в чём смысл задачи?

Цитата:

Сообщение от monolithed
Если уж пошел такой разговор, и дабы развеять сомнения о вашей компетентности для соискателей, могли бы вы решить такое простое задание?:

Как я понял, на собеседованиях бывают задачи разного уровня, а т.к. vflash берет на себя роль экзаменатора виртуального работодателя, то в его базе знаний должны быть ответы и на такие задачи.

Собственно в уровне компетенции vflash не сомневаюсь, но вот выставленный тариф должен как-то подтверждать его уровень знаний.

Gozar 16.02.2012 13:40

Цитата:

Сообщение от monolithed (Сообщение 157843)
выставленный тариф должен как-то подтверждать его уровень знаний.

Логично. Его уровень знаний остался загадочным. :)

vflash 16.02.2012 14:10

Цитата:

Сообщение от monolithed
, то в его базе знаний должны быть ответы и на такие задачи.

ответ на поставленный вопрос был дан верно. то что вы ошиблись в формулировки вашей мысли это ваша проблема.


Цитата:

Сообщение от monolithed
но вот выставленный тариф должен как-то подтверждать его уровень знаний.

господа, это рынок. не нравиться не покупай.

Gozar 16.02.2012 14:32

Цитата:

Сообщение от vflash (Сообщение 157849)
не нравиться не покупай.

Да поняли мы, поняли. Мы тут в "кроссворды" играем.

Подобных задач на разминку действительно не хватает, выпустить бы сборничек. :)

Octane 16.02.2012 17:20

Я думал, под неспортивным вариантом имел ввиду дописать 2 фигурные скобочки

Nekromancer 16.02.2012 17:25

Octane,
Таким был мой вариант без вызова функции :write:

12345c 19.02.2012 05:20

Nekromancer,
и 7-й вариант: поставить "}" в конце первой строчки функции и закомментировать последнюю строчки функции (всего 3 символа дописать).
(То, что задача некорректно была поставлена - полностью согласен.)

x-yuri 20.02.2012 12:13

Цитата:

Сообщение от monolithed
Ответ [про typeof null] очевидно знают все, но почему именно так, не многие. Для того чтобы в свое время узнать ответ мне пришлось зарыться в рассылку TC-39

а почему?

monolithed 20.02.2012 13:08

Цитата:

Сообщение от x-yuri
а почему?

Вот что пишет B. E.

x-yuri 20.02.2012 15:04

м, там нету ответа на вопрос, почему typeof null == 'object'. Поле объекта может содержать значение примитивного типа.

yura_remnev 02.04.2012 10:14

А кто поделится вопросами, которые ему задавали на собеседовании на должность, связанную с javascript? И упомянет масштабы компании (или даже название)

Kolyaj 02.04.2012 12:22

Цитата:

Сообщение от yura_remnev
А кто поделится вопросами, которые ему задавали на собеседовании на должность, связанную с javascript?

Да какая разница? Почему многие относятся к собеседованию, как к экзамену? К собеседованию нельзя подготовиться, можно подходить на определённую должность, а можно не подходить. То, что вы выучите ответы на какие-то вопросы, ничего не изменит.


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