Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Вопросы на собеседованиях (https://javascript.ru/forum/offtopic/31131-voprosy-na-sobesedovaniyakh.html)

PashPP 28.08.2012 03:20

Вопросы на собеседованиях
 
Собственно, наткнулся случайно на задачки одного человека, которые он задавал на собеседованиях:
без запинки написать функцию add которая складывает a и b и вызывается так: add(a)(b)

и
Write the result of these expressions: 
 6 / «3» 
 «2» * «3» 
 4 + 5 + «px» 
 «$» + 4 + 5 
 «4» — 2 
 «4px» — 2 
 7 / 0 
 typeof null 
 typeof {}[0] 
 typeof («4px» — 2) 
 parseInt(«09») 
 5 && 2 
 2 && 5 
 5 || 0 
 0 || 5


Задачки, в принципе, не такие и уникальные. Тут в статьях, кажись, все это рассматривается (и забывается), но все равно интересно.

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

PashPP 28.08.2012 04:11

Maxmaxmахimus,
Там парсер пожрал символы.
Корректно все вот так:
console.log(6/'3')
 console.log('2'*'3')
 console.log(4+5+'px') 
 console.log('$'+4+5)
 console.log('4' - 2) 
 console.log('4px' -2)
 console.log(7 / 0) 
 console.log(typeof NaN )
 console.log(typeof {}[0] )
 console.log(typeof ('4px' - 2) )
 console.log(parseInt('09'))
 console.log(5 && 2 )
 console.log(2 && 5 )
 console.log(5 || 0 )
 console.log(0 || 5)


alert( !![] + ![] - 1  ) // ???

Эм. [] - что-то. Двойное отрицание чего-то, значит первый элемент тру, второй фолс.
Предполагаю, не глядя, что там будет или НаН или 1+0-1 = 0

Aetae 28.08.2012 04:12

function add(a){
	return function(b){ 
		return a+b
	}
}
alert([
add(2)(3) //5
,6 / "3" //2
,"2" * "3" //6
,4 + 5 + "px" //'9px'
,"$" + 4 + 5 //'$45'
,"4" - 2 //2
,"4px" - 2 //NaN
,7 / 0 //Infinity
,typeof null //object
,typeof {}[0] //undefined
,typeof ("4px" - 2) //number
,parseInt("09") //хз
,5 && 2 //2
,2 && 5 //5
,5 || 0 //5
].join('\n'))


C parseInt("09") пока не проверишь не узнаешь. Понятно что с нуля - восьмеричная, но как он будет интропретировать такие некорректные данные - хз. Может быть и 9, и NaN, и 0, и 10. Не зная наизусть спецификацию или не проверив на деле - не ответишь.

Gozar 28.08.2012 10:18

Цитата:

Сообщение от PashPP
без запинки

Я тоже иногда люблю позадротничать и погнобить других, особенно если хочу потешить ЧСВ.

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

PashPP 28.08.2012 11:27

Gozar,
Тем не менее, судя по отзывам, часто и гнобят и проекты смотрят.

Gozar 28.08.2012 11:42

PashPP,
Мне по барабану. Если бы я хотел нанять js интерпретатор, то я бы задавал именно такие вопросы. Эти вопросы абсолютно бесполезны, если человек не может писать сложные приложения или проектировать интерфейсы. Хотя тут, как я и сказал, все зависит от того, кого нужно нанять. Если интерпретатор, то лучших вопросов не найти.

Даже если не знаешь ответа, консоль тебе их даст за секунды.

А примеры на сложение вообще смешно рассматривать, достаточно поставить скобки:
alert([(4 + 5) + "px", "px" + (4 + 5)])


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

- писать комментарии (нормальную документацию)
- писать расширяемый код
- писать код, который можно читать
- знание ООП, базовое и паттерны
- знание фреймворков
- знание хотябы чуть чуть серверной части


Лично меня уже давно перестало интересовать, что там получиться в 4+4+'px' ;)

Gozar 28.08.2012 11:45

зы: Иногда пишут, умение оценивать время на разработку, что для меня например гораздо важней, чем все приведенные выше примеры. + адекватность :)

PashPP 28.08.2012 11:54

Gozar,
Да чегож так к примерам и пикселям этим прицепились.
Тема о всяких проверках, а не подобных топикстартовым.

Gozar 28.08.2012 17:24

Цитата:

Сообщение от PashPP
чегож так к примерам и пикселям этим прицепились

Наверное потому что они не могут:
Цитата:

Сообщение от PashPP
охарактеризовать глубину понимания отвечающего.

Заявление: - Я использую GCC (Google Closuer Compiler), - для меня имеет больше смысла, чем пачка базовых вопросов.

Юзайте поиск по форуму, найдете огромное количество задачек, подобных вашим. Эта тема повторяется уже неоднократно.

PashPP 28.08.2012 17:43

Видел только просто задачки для... Развлечения.
А спросил о более узконаправленном. Хоть одно другому и не мешает.

Цитата:

Сообщение от Gozar
Я использую GCC (Google Closuer Compiler), - для меня имеет больше смысла

Эм. И какой именно смысл оно имеет?

Gozar 28.08.2012 19:07

Цитата:

Сообщение от PashPP
И какой именно смысл оно имеет?

Попробуй - узнаешь.

nerv_ 28.08.2012 21:19

http://learn.javascript.ru/javascript-quiz

Shaci 30.08.2012 11:22

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 201587)
О неет, я не выучил язык и не разбираюсь в его синтаксисе и не понимаю как он работает, но то рабское дееело, я более абстрактен и виртуаален, я работаю на более выском уровне, я работаю с моделями со зданиями, а кирпичи класть это не мое дело... Главное результаат а не то как ты его добился.. Зачееееем мне знать как работает движок? Код же не я просчитываю а браузер!11 Где ошибка будет так он сразу сообщит! Я не должен отвлекаться на подобные мелочи отвлекающие меня от истинного предназначения!! главное это медленно и стремительно погружаться в мир абстракций, обмазываться высокоуровнивыми реалиями реализаций дизайн паттернов и дрочить.... А однажды я погрузился в мир где все состояло из абстракций, даже солнце, даже небо, даже аллах.

фигня, гозар прав полностью

bes 30.08.2012 11:47

:lol:
Цитата:

Сообщение от Maxmaxmахimus
я работаю на более выском уровне, я работаю с моделями со зданиями, а кирпичи класть это не мое дело.

тут надо понимать, кого берут - руководителя или чернорабочего: руководитель может и не знать, но руководить уметь обязан

melky 30.08.2012 13:14

Цитата:

Сообщение от Maxmaxmахimus
тут я пошел!11

на кой чёрт лелеять JS Core? лучше потеребили бы DOM - спросили бы, как определить ширину элемента в IE 7-8, или спросили бы, что такое hasLayout, или про шаблоны (паттерны).... <продолжать дальше>

по-моему, лучше знать всё-таки то, как лучше писать - сюда входит оперирование паттернами, изящество кода, и его продуманность.

но никак не обфускация руками.

Цитата:

Сообщение от Aetae
Не зная наизусть спецификацию или не проверив на деле - не ответишь.

в разных браузерах по-разному. где восьмеричная, где десятеричная :)


Цитата:

Сообщение от Gozar
Заявление: - Я использую GCC (Google Closuer Compiler), - для меня имеет больше смысла, чем пачка базовых вопросов.

... а все прутся сейчас по UglifyJS.

Gozar 30.08.2012 13:17

Цитата:

Сообщение от Maxmaxmахimus
И почему этот человек считает что если он научился прогарммировать на высоких абстракциях то он должен забывать элементарные особенности языка и внутреннее его устройства.

Разговор разве об этом? Я где-то сказал, что нужно всё забыть?

Я сказал, что это не важно. Для меня это не важно на 99.9%. Подобные ошибки имеют простейший уровень нахождения и избежания. Скобки решают их легко и упрощают визуальное чтение кода. Гораздо важнее для меня как построить приложение так, чтобы через полгода написания оно не превратилось в то, что легче переписать, нежели продолжать расширять.

Как мне определить с помощью теста, состоящего из простейших примеров и одного паттерна, в начале темы загнет мне программист проект через полгода или нет?

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

nerv_ 30.08.2012 13:31

Цитата:

Сообщение от Gozar
Гораздо важнее для меня как построить приложение так, чтобы через полгода написания оно не превратилось в то, что легче переписать, нежели продолжать расширять.

бинго. Периодически приходится сталкиваться с задачами типа "да у меня все есть, только здесь немного поправить". А по факту, чтобы поправить это "немного" надо переписать все. Потому, что имеет место быть
Цитата:

Сообщение от melky
обфускация руками

или ошибки проектирования/его отсутствия (в котором по большому счету я пока не шарю).

Разумеется, сам грешен, если пишу на скорую руку. Причем, грешен серьезно :D

Thekostya 20.11.2012 11:44

1. Что такое closures ("Замыкания") и для чего используются? Приведите пример.
2. Что такое регулярное выражение и для чего используется? Приведите пример.
3. Что такое ООП?
4. Что такое MVC?
5. Что такое Template ("Шаблон")? Какие Шаблонизаторы вы использовали?
6. Что такое Cookies и зачем они нужны?

Ну и по JS погонять слегка.
1. Есть переменная propertyName, которая содержит имя параметра в объекте obj. Как получить значение этого параметра.
2. Как навесить событие на элемент?
3. В чем различие:
var obj1 = new Object();
var obj2 = new Object;
var obj3 = {};

4. Зачем нужен prototype?
5. В чем различие:
var x=3;
x=3;

6. В чем различие:
alert(sum(3, 4));
function sum(arg1, arg2) {
    return arg1 + arg2;
}
 
alert(sum2(3, 4));
var sum2 = function(arg1, arg2) {
    return arg1 + arg2;
};

7.
“1” + 2 + 3 = ?
1 + 2 + “3” = ?



Но на первую часть больше уделяю внимание, т.к. нюансы js можно посмотреть по справочнику.

Лучше знать принципы построения кода, чем вызубрить интерпретатор.

Gozar 20.11.2012 12:14

Thekostya,
Может ты заодно и ответы напишешь? Мне просто интересно, ты сам то ответы знаешь?

Thekostya 20.11.2012 12:38

Тебе про что написать, просто мне влом про это все писать. Например про closures я ожидаю от кандидата слова про то, что можно создавать параметризированные функции и про изолирование кода.
Про регулярные выражения кандидат должен иметь представление о синтаксисе и написать в подтверждение простой пример, например валидации денег.
Про ООП мне как минимум хочется услышать про классы, объекты, наследование. Не обязательно академическим и заученным ответом, своими словами вполне достаточно. Лучше будет если человек объяснит еще например принципы инкапсуляции, что нужно скрывать реализацию, и использовать только доступные методы. Я не требую что бы человек был фанатом ООП можно даже если он будет против, но его принципы знать нужно, и обосновывать почему именно против.
Про MVC хочу услышать что это принцип разделения архитектуры на модель данных, отображение/представление, и логику этих данных/поведение. Хочу услышать зачем это делается, что бы изменение одного компонента минимально затрагивало изменение других.
Про шаблоны хочется услышать что это используя одни и те же данные меняем представление этих данных, т.е. отделяем содержимое от визуальнго представления.

По js остальное отвечать не вижу смысла, там интерпретаторские знания.

Tim 20.11.2012 13:36

Цитата:

Про ООП мне как минимум хочется услышать про классы
мне тоже хочется услышать про классы в JS ООП.

Цитата:

Тебе про что написать, просто мне влом про это все писать.
вот про это можешь написать

Thekostya 20.11.2012 14:21

Не надо тут устраивать подколы.
Вопрос звучал "Что такое ООП?". Я уже писал что хочу проверить знание принцыпов, а уже как тот или иной язык выкручивается и реализует ооп, это уже другой вопрос.
В perl 5 например тоже родного ООП нет, но принципы то применяют.

deivan 20.11.2012 14:26

мне как-то дали в качестве теста вот это, до сих пор в замешательстве, что это:

Цитата:

Напишите код, который реализует следующее поведение:
var a = new Someting, b = new Someting;

Someting.prototype.my_name = 'Jack';

a === b && a.constructor === Someting && b.constructor === Someting && b.my_name == 'Jack'


Thekostya 20.11.2012 14:26

Цитата:

Сообщение от Tim (Сообщение 216870)
мне тоже хочется услышать про классы в JS ООП.


вот про это можешь написать


Можешь покритиковать статью на этом сайте, там тоже про классы пишут.

Наследование на классах

Thekostya 20.11.2012 14:33

Deivan, помоему под такие условия подходит Синглетон.

Shaci 20.11.2012 14:34

Цитата:

Сообщение от Thekostya (Сообщение 216881)
Можешь покритиковать статью на этом сайте, там тоже про классы пишут.

Наследование на классах

слово классы всегда в кавычках, в данном случае их просто не поставили;)

Thekostya 20.11.2012 14:42

Цитата:

Сообщение от deivan (Сообщение 216880)
мне как-то дали в качестве теста вот это, до сих пор в замешательстве, что это:

Как то так
function Something() {
   if (!Something._inst)
      Something._inst=this;
   return Something._inst;
}


И Someting исправлено на Something

Thekostya 20.11.2012 14:43

Цитата:

Сообщение от Shaci (Сообщение 216885)
слово классы всегда в кавычках, в данном случае их просто не поставили;)

Ну я то не критикую, это меня покритиковали. :0)

deivan 20.11.2012 14:49

Цитата:

Сообщение от Thekostya (Сообщение 216888)
Как то так
function Something() {
   if (!Something._inst)
      Something._inst=this;
   return Something._inst;
}

И Someting исправлено на Something

благодарю, а могли бы пояснить логику этого процесса, так сказать, "на пальцах"?..

Thekostya 20.11.2012 15:11

Цитата:

Сообщение от deivan (Сообщение 216892)
благодарю, а могли бы пояснить логику этого процесса, так сказать, "на пальцах"?..

Если на пальцах то так:
Имеем твои условия:
var a = new Someting, b = new Someting;
 
Someting.prototype.my_name = 'Jack';
 
a === b && a.constructor === Someting && b.constructor === Someting && b.my_name == 'Jack'


Читаем описание === для сравнения объектов и отсюда делаем вывод что в результате a и b должны ссылаться на один объект. Нам нужен конструктор, который все время выдает один и тот же объект. Это и есть паттерн Singleton.

function Something() {
   if (!Something._inst)
      Something._inst=this;
   return Something._inst;
}


Как он работает - проверяем переменную "класса" :) _inst, если пустая, то значит это первый запуск конструктора, присваиваем ей текущий экземпляр this. Если она не пустая то уже хранит ранее созданный, который мы и возвращаем. Таким образом мы создаем 1 экземпляр и в дальнейшем возвращаем всегда его.

Thekostya 20.11.2012 15:16

И вообще нефиг ко мне придираться я не JS программер, просто мимо проходил посмотреть вопросы на собеседование, т.к. скоро придет пара кандидатов. :о)

Gozar 20.11.2012 15:37

Цитата:

Сообщение от Thekostya
нефиг ко мне придираться

Я не придирался. Считаю правильным публиковать к вопросам - ответы. Иначе эта тема превратиться в мусор.

А так и для обучающихся полезно и себе разминка.

Tim 20.11.2012 18:22

Цитата:

И вообще нефиг ко мне придираться я не JS программер
если бы сразу об этом узнать то и придирок бы не было

Aetae 21.11.2012 06:57

Цитата:

Сообщение от Thekostya (Сообщение 216898)
Если на пальцах то так:
Имеем твои условия:
var a = new Someting, b = new Someting;
 
Someting.prototype.my_name = 'Jack';
 
a === b && a.constructor === Someting && b.constructor === Someting && b.my_name == 'Jack'


Читаем описание === для сравнения объектов и отсюда делаем вывод что в результате a и b должны ссылаться на один объект. Нам нужен конструктор, который все время выдает один и тот же объект. Это и есть паттерн Singleton.

function Something() {
   if (!Something._inst)
      Something._inst=this;
   return Something._inst;
}


Как он работает - проверяем переменную "класса" :) _inst, если пустая, то значит это первый запуск конструктора, присваиваем ей текущий экземпляр this. Если она не пустая то уже хранит ранее созданный, который мы и возвращаем. Таким образом мы создаем 1 экземпляр и в дальнейшем возвращаем всегда его.

Это конечно мило, но только a всё равно никогда не будет === b, ибо new - это таки new.

melky 21.11.2012 10:21

Цитата:

Сообщение от Aetae
Это конечно мило, но только a всё равно никогда не будет === b, ибо new - это таки new.

будет. сли в рез-те вызова с new возвращается другой объект, то он будет использоваться вместо новосозданного

Aetae 21.11.2012 17:20

Цитата:

Сообщение от melky (Сообщение 217021)
будет. сли в рез-те вызова с new возвращается другой объект, то он будет использоваться вместо новосозданного

Show me your moves!©

melky 21.11.2012 18:08

Цитата:

Сообщение от Aetae (Сообщение 217129)
Show me your moves!©

function A () {

    var created = this;

    A = function () {
        return created;
    };

}


a = new A();
b = new A();

alert( a === b );

Thekostya 22.11.2012 13:12

Цитата:

Сообщение от Aetae (Сообщение 216990)
Это конечно мило, но только a всё равно никогда не будет === b, ибо new - это таки new.

В этом и есть фишка синглетона, и а и б при этом будут ссылками на один и тот же объект.

monolithed 22.11.2012 23:10

Цитата:

Сообщение от Aetae
Это конечно мило, но только a всё равно никогда не будет === b, ибо new - это таки new.


var Foo = function() {
   return this.constructor; // или Foo, встроенные конструкторы (Array, Date...) и т.д.
};

var a = new Foo;
var b = new Foo;

alert(a === b);

nerv_ 22.11.2012 23:39

Цитата:

Сообщение от monolithed
// или Foo, встроенные объекты (Array, Date...) и т.д.

DOM ...


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