Вопросы на собеседованиях 
		
		
		
		Собственно, наткнулся случайно на задачки одного человека, которые он задавал на собеседованиях:  
	без запинки написать функцию 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
Задачки, в принципе, не такие и уникальные. Тут в статьях, кажись, все это рассматривается (и забывается), но все равно интересно. Ради собственного развития и знания, что меня ожидает там впереди, кидайте сюда условия и задания, которые вам задавали/вы задавали на собеседованиях и т.д? Которые могут охарактеризовать глубину понимания отвечающего.  | 
	
		
 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  | 
	
		
 
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, 
	Тем не менее, судя по отзывам, часто и гнобят и проекты смотрят.  | 
	
		
 PashPP, 
	Мне по барабану. Если бы я хотел нанять js интерпретатор, то я бы задавал именно такие вопросы. Эти вопросы абсолютно бесполезны, если человек не может писать сложные приложения или проектировать интерфейсы. Хотя тут, как я и сказал, все зависит от того, кого нужно нанять. Если интерпретатор, то лучших вопросов не найти. Даже если не знаешь ответа, консоль тебе их даст за секунды. А примеры на сложение вообще смешно рассматривать, достаточно поставить скобки: alert([(4 + 5) + "px", "px" + (4 + 5)]) Если проверять начальный уровень знания, то такие примеры могут подойти, а если нужен программист, то почитай требования на работу: - писать комментарии (нормальную документацию) - писать расширяемый код - писать код, который можно читать - знание ООП, базовое и паттерны - знание фреймворков - знание хотябы чуть чуть серверной части Лично меня уже давно перестало интересовать, что там получиться в 4+4+'px' ;)  | 
	
		
 зы: Иногда пишут, умение оценивать время на разработку, что для меня например гораздо важней, чем все приведенные выше примеры. + адекватность :) 
	 | 
	
		
 Gozar, 
	Да чегож так к примерам и пикселям этим прицепились. Тема о всяких проверках, а не подобных топикстартовым.  | 
	
		
 Цитата: 
	
 Цитата: 
	
 Юзайте поиск по форуму, найдете огромное количество задачек, подобных вашим. Эта тема повторяется уже неоднократно.  | 
	
		
 Видел только просто задачки для... Развлечения. 
	А спросил о более узконаправленном. Хоть одно другому и не мешает. Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
  | 
	
		
 Цитата: 
	
  | 
	
		
 :lol:  
	Цитата: 
	
  | 
	
		
 Цитата: 
	
 по-моему, лучше знать всё-таки то, как лучше писать - сюда входит оперирование паттернами, изящество кода, и его продуманность. но никак не обфускация руками. Цитата: 
	
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 Я сказал, что это не важно. Для меня это не важно на 99.9%. Подобные ошибки имеют простейший уровень нахождения и избежания. Скобки решают их легко и упрощают визуальное чтение кода. Гораздо важнее для меня как построить приложение так, чтобы через полгода написания оно не превратилось в то, что легче переписать, нежели продолжать расширять. Как мне определить с помощью теста, состоящего из простейших примеров и одного паттерна, в начале темы загнет мне программист проект через полгода или нет? Конечно если я захочу взять обезьяну на месячный проект - сдал и забыл, то лучшего теста я не видел.  | 
	
		
 Цитата: 
	
 Цитата: 
	
 Разумеется, сам грешен, если пишу на скорую руку. Причем, грешен серьезно :D  | 
	
		
 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 можно посмотреть по справочнику. Лучше знать принципы построения кода, чем вызубрить интерпретатор.  | 
	
		
 Thekostya, 
	Может ты заодно и ответы напишешь? Мне просто интересно, ты сам то ответы знаешь?  | 
	
		
 Тебе про что написать, просто мне влом про это все писать. Например про closures  я ожидаю от кандидата слова про то, что можно создавать параметризированные функции и про изолирование кода. 
	Про регулярные выражения кандидат должен иметь представление о синтаксисе и написать в подтверждение простой пример, например валидации денег. Про ООП мне как минимум хочется услышать про классы, объекты, наследование. Не обязательно академическим и заученным ответом, своими словами вполне достаточно. Лучше будет если человек объяснит еще например принципы инкапсуляции, что нужно скрывать реализацию, и использовать только доступные методы. Я не требую что бы человек был фанатом ООП можно даже если он будет против, но его принципы знать нужно, и обосновывать почему именно против. Про MVC хочу услышать что это принцип разделения архитектуры на модель данных, отображение/представление, и логику этих данных/поведение. Хочу услышать зачем это делается, что бы изменение одного компонента минимально затрагивало изменение других. Про шаблоны хочется услышать что это используя одни и те же данные меняем представление этих данных, т.е. отделяем содержимое от визуальнго представления. По js остальное отвечать не вижу смысла, там интерпретаторские знания.  | 
	
		
 Цитата: 
	
 Цитата: 
	
  | 
	
		
 Не надо тут устраивать подколы.  
	Вопрос звучал "Что такое ООП?". Я уже писал что хочу проверить знание принцыпов, а уже как тот или иной язык выкручивается и реализует ооп, это уже другой вопрос. В perl 5 например тоже родного ООП нет, но принципы то применяют.  | 
	
		
 мне как-то дали в качестве теста вот это, до сих пор в замешательстве, что это: 
	Цитата: 
	
  | 
	
		
 Цитата: 
	
 Можешь покритиковать статью на этом сайте, там тоже про классы пишут. Наследование на классах  | 
	
		
 Deivan, помоему под такие условия подходит Синглетон. 
	 | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 
function Something() {
   if (!Something._inst)
      Something._inst=this;
   return Something._inst;
}
И Someting исправлено на Something  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 Имеем твои условия: 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 экземпляр и в дальнейшем возвращаем всегда его.  | 
	
		
 И вообще нефиг ко мне придираться я не JS программер, просто мимо проходил посмотреть вопросы на собеседование, т.к. скоро придет пара кандидатов. :о) 
	 | 
	
		
 Цитата: 
	
 А так и для обучающихся полезно и себе разминка.  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 
function A () {
    var created = this;
    A = function () {
        return created;
    };
}
a = new A();
b = new A();
alert( a === b );
 | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 
var Foo = function() {
   return this.constructor; // или Foo, встроенные конструкторы (Array, Date...) и т.д.
};
var a = new Foo;
var b = new Foo;
alert(a === b);
 | 
	
		
 Цитата: 
	
  | 
| Часовой пояс GMT +3, время: 12:55. |