Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Тестовые задания по JavaScript (https://javascript.ru/forum/offtopic/18537-testovye-zadaniya-po-javascript.html)

Илья Кантор 05.07.2011 18:37

Тестовые задания по JavaScript
 
Поделитесь интересными тестовыми заданиями и ссылками на них ;)
Ну там, которые на собеседованиях...

tenshi 05.07.2011 19:33

готовишь новый раздел "ответы на тестовые задания, трудоустройтесь куда захотите"? х)

monolithed 05.07.2011 19:52

Хоть и не тесты но фишки, о которых как оказалось знают далеко не все http://code.google.com/p/jslibs/wiki/JavascriptTips

mycoding 06.07.2011 00:03

Кроме тестовых заданий Яндекса больше никаких не встречал.
http://company.yandex.ru/job/vacancies/

Это очень хорошо, что Вы об этом спрашиваете.
На сайте javascript.ru очень не хватает фишек, которые реально используются и нужны.

К тестовым заданиям могу добавить вот это.
1 - Написать все известные Вам методики реализации ООП.
2 - JSONP.

B~Vladi 06.07.2011 11:09

Из личного опыты:
1. У вас книжный магазин. Внутри стоят 10 полок с книгами, одна за другой. Первая полка с книгами находится прям напротив входа. Каждый день поступают новые книги, что-то покупается. Как вы их расположите по полкам?
казалось бы, причем тут JavaScript...

2. Из мейла.ру. Создать средствами HTML и CSS квадрат, равномерно залитый 4 разными цветами. Границы цветов расположены по диагонали.

Ещё было одно тестовое задание от конторки, название которой я уже не помню. Суть была в том, что бы сверстать и запрограмировать интерфейс, включающий в себя модальное окно, табы и ещё некую структуру данных. Т.е. с нуля отдать им рабочую страницу. Когда пришло т.з., к нему прилагались скрины какой-то виндовой программки. Ну т.к. это тестовое задание, с интерфейсом особо не заморачивался и сделал по-своему. После отправки готового решения приходит ответ, типа того: "Вы сделали по своему дизайну, вот вам наш (уже psd, проработанный как надо) дизайн. Будте добры, заверстайте как надо".
В общем, они были посланы нах :-E

B~Vladi 06.07.2011 11:10

Цитата:

Сообщение от mycoding
Написать все известные Вам методики реализации ООП

Я один не понял вопроса?!

monolithed 06.07.2011 11:14

Цитата:

Сообщение от B~Vladi
Я один не понял вопроса?!

вероятно, варианты полиморфизма, инкапсуляции, создание объектов

mycoding 06.07.2011 11:20

Цитата:

Сообщение от B~Vladi (Сообщение 111984)
Я один не понял вопроса?!

Есть три "класса"
Transport, Car, SuperCar

Car наследует Transport.
SuperCar наследует Car.

Реализовать наследование как можно большим количеством
способов.

Kolyaj 06.07.2011 11:38

Цитата:

Сообщение от mycoding
Реализовать наследование как можно большим количеством
способов.

Способ существует один, если не считать mixins, которые не есть наследование. Просто каждый придумывает разные буковки для записи этого способа.

B~Vladi 06.07.2011 11:45

Цитата:

Сообщение от mycoding
Реализовать наследование как можно большим количеством способов.

Цитата:

Сообщение от Kolyaj
Способ существует один

Аха, тупой вопрос.

Цитата:

Сообщение от monolithed
варианты полиморфизма, инкапсуляции, создание объектов

Хм, понятно.

mycoding 06.07.2011 11:45

Цитата:

Сообщение от Kolyaj (Сообщение 111988)
Способ существует один, если не считать mixins, которые не есть наследование. Просто каждый придумывает разные буковки для записи этого способа.

Вот как можно больше буковок и надо написать ;)
Меня это просили сделать.
А я в то время не был готов к этому вопросу.
Впрочем как и сейчас.
Так как использую готовую функцию extend в ExtJS.

tenshi 06.07.2011 21:38

> Написать все известные Вам методики реализации ООП.
а так ооп-а типа нет? х) если речь о методах определения, инстанцирования и наследования, то их не меньше десятка..

tenshi 06.07.2011 21:42

> mixins, которые не есть наследование
и чем же они являются как не наследованием?

mycoding 06.07.2011 21:46

Цитата:

Сообщение от tenshi (Сообщение 112093)
> Написать все известные Вам методики реализации ООП.
а так ооп-а типа нет? х) если речь о методах определения, инстанцирования и наследования, то их не меньше десятка..

Вот их и спрашивали)))

Prototype chaining,Temporary constructor, Deep copy,
Parasitic inheritance и прочее.

tenshi 06.07.2011 22:12

вопрос из разряда: выпишите наибольшее число простых чисел

monolithed 06.07.2011 22:42

Цитата:

Сообщение от mycoding
Prototype chaining,Temporary constructor, Deep copy,
Parasitic inheritance и прочее.

По мне, просто игра слов не более. Или мне одному так кажется?

PS: Parasitic inheritance

B~Vladi 06.07.2011 23:41

:lol:
crockford instanceof Guru;//<- false :haha:

Riim 07.07.2011 03:39

Цитата:

Сообщение от Kolyaj
Способ существует один

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

FINoM 07.07.2011 05:11

Цитата:

Сообщение от B~Vladi
1. У вас книжный магазин. Внутри стоят 10 полок с книгами, одна за другой. Первая полка с книгами находится прям напротив входа. Каждый день поступают новые книги, что-то покупается. Как вы их расположите по полкам?

Ну, наверное, те что лучше покупаются на переднюю полку.
Цитата:

Сообщение от B~Vladi
Из мейла.ру. Создать средствами HTML и CSS квадрат, равномерно залитый 4 разными цветами. Границы цветов расположены по диагонали.

В смысле градиент?
Цитата:

Сообщение от monolithed
о которых как оказалось знают далеко не все

Прям-таки странно. Там половина не работает в последней версии хрома.

FINoM 07.07.2011 05:12

Цитата:

Сообщение от tenshi
выпишите наибольшее число простых чисел

То есть число простых чисел может варьироваться? 0_o

monolithed 07.07.2011 08:28

Цитата:

Сообщение от FINoM
Прям-таки странно. Там половина не работает в последней версии хрома.

Не удивительно, диалект JavaScript как таковой реализован только в движках Mozilla Firefox, Gecko, SpiderMonkey и Rhino поэтому в Chrome это появится не раньше чем выйдет ES6.

B~Vladi 07.07.2011 08:42

Цитата:

Сообщение от FINoM
Ну, наверное, те что лучше покупаются на переднюю полку.

Когда приходят новые книги, откуда ты знаешь как они продаются, если не продавались ещё?
Цитата:

Сообщение от FINoM
В смысле градиент?

Нет, сплошные цвета.

monolithed 07.07.2011 08:52

Цитата:

Сообщение от B~Vladi
Когда приходят новые книги, откуда ты знаешь как они продаются, если не продавались ещё?

согласен, с книгами на порядок все сложней чем с продуктовыми товарами.

melky 07.07.2011 10:40

Цитата:

Сообщение от FINoM (Сообщение 112132)
Цитата:

Создать средствами HTML и CSS квадрат, равномерно залитый 4 разными цветами. Границы цветов расположены по диагонали.
В смысле градиент?

в смысле бордюр :)


только странно, при чем тут джяваскрипт
<style>
div {
   border : 70px black solid;
   border-color: red yellow gray blue;
   width : 1px;

}
</style>

<div></div>

tenshi 07.07.2011 10:48

Цитата:

Сообщение от FINoM (Сообщение 112133)
То есть число простых чисел может варьироваться? 0_o

простые числа надо выписывать, а не их число

mycoding 07.07.2011 11:15

Цитата:

Сообщение от monolithed (Сообщение 112118)
По мне, просто игра слов не более. Или мне одному так кажется?

PS: Parasitic inheritance

А всё таки это интересно

Вот небольшой пример - очень некрасивой реализации ООП.
function Transport(config){
	var config = config || {};
	this.type = "Транспорт";
	this.wheel = 0;
	this.maxVelocity = 0;
	this.velocity=0;
	this.deltaVelocity=0;
	for(var p in config){
		this[p]=config[p];
	}
}

Transport.prototype = {
	engine: 'никакой',
	isDrive:false,
	faster:function(){
		if(this.isDrive){
			if(this.velocity<this.maxVelocity){
				this.velocity+=this.deltaVelocity;
			}
			else{
				console.log(this.type+" быстрее ехать не может");
			}
		}
		else{
			console.log("Необходимо завести машину");
		}
	},
	slower:function(){
		if(this.velocity>0){
			this.velocity-=this.deltaVelocity;
		}
		else{
			console.log("Медленее ехать нельзя");
		}
	},
	drive:function(insideInvoke){
		var me = this; 
		if(!insideInvoke && me.isDrive){
			return;
		} 
		if(!insideInvoke){
			console.log(me.type+" заведена");
			me.isDrive = true;
		}
		if(me.isDrive){
			console.log('Едит '+me.type+' на '+me.wheel+' колесах. Скорость '+me.velocity+'...');
			setTimeout(function(){
				me.drive(true);
			},1000);
		}
	},
	stop:function(){
		this.isDrive = false;
	}
};

//var t = new Transport();
//t.drive();

function Car(config){
	var config = config || {};
	this.type = "Машина";
	this.wheel = 4;
	this.maxVelocity = 60;
	for(var p in config){
		this[p]=config[p];
	}
	Car.superclass.constructor.call(this);
}

Car.prototype = new Transport();
Car.superclass = Transport.prototype;
Car.prototype.deltaVelocity=10;

//var c = new Car();

function SuperCar(config){
	var config = config || {};
	this.type = "СуперМашина";
	this.wheel = 4;
	this.maxVelocity = 100;
	for(var p in config){
		this[p]=config[p];
	}
	Car.superclass.constructor.call(this);
}

SuperCar.prototype = new Car();
SuperCar.superclass = Car.prototype;
SuperCar.prototype.deltaVelocity=20;

var sc = new SuperCar();


Если не лень. Скопируйте и запустите.
Поуправляйте Супер Машиной в консоле
через
sc.drive();
sc.faster();
sc.slower();


А потом, просто для себя попробуйте реализовать
функцию extend - без подсказок из интернета(на собеседовании же не будет возможности пользоваться инетом).
для вот такого наследования
Заметка - вообще полностью весь код надо придумать самому.
Поэтому это итак очень большая подсказка.

У Вас есть три объекта A,B,C
B наследует A, ну а C наследует B.

C = extend(B,{
	constructor: function(config){
		applyIf(config,{
			h:6
		});
		B.superclass.constructor.call(this, config);
	},
	b:4,
	c:5
});

function applyIf(o, c){
	if(o){
		for(var p in c){
			if(!isDefined(o[p])){
				o[p] = c[p];
            }
        }
    }
    return o;
}

function isDefined(v){
	return typeof v !== 'undefined';
}


В итоге при вызове
console.log(new C({b:8,h:5}));

Должен получиться объект
{
   b:8,
   h:5,
   c:5
}


Не надо меня спрашивать подробности, это я так набросал.
Пример и реализацию на собеседовании Вам нужно сделать самому.

Сразу скажу, что я не сделал это.

mycoding 07.07.2011 12:01

Цитата:

Сообщение от tenshi (Сообщение 112106)
вопрос из разряда: выпишите наибольшее число простых чисел

А как это сделать?
Смотрю на
Number.MAX_VALUE и думаю...

vflash 07.07.2011 13:50

имхо extend() должен копировать только собственные свойства обьекта.

melky 07.07.2011 14:00

Цитата:

Сообщение от mycoding (Сообщение 112154)
А как это сделать?
Смотрю на
Number.MAX_VALUE и думаю...

а мне кажется, что бесконечность :)
alert ( Number.MAX_VALUE < Number.POSITIVE_INFINITY )

dmitriymar 07.07.2011 16:06

Цитата:

Сообщение от FINoM
Ну, наверное, те что лучше покупаются на переднюю полку.

те что лучше и новые в самый конец. чтоб основная масса покупателей, идя к полке с ними ,видела и остальные товары. вопрос по маркетингу это был но не по скрипту. те что самые старые и хуже всего продаются в центр-поскольку это примерно то место где покупатель ,уже отошел от улицы(переадаптировался чуть,настроился) но ещё не устал просматривать книги

FINoM 07.07.2011 19:32

Цитата:

Сообщение от monolithed
Не удивительно, диалект JavaScript как таковой реализован только в движках Mozilla Firefox, Gecko, SpiderMonkey и Rhino поэтому в Chrome это появится не раньше чем выйдет ES6.

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

melky, fuck yeah, я бы не догадался как это сделать.
Цитата:

Сообщение от tenshi
простые числа надо выписывать, а не их число

Мот я туплю, но решето Эратосфена вроде знает каждый. Так количество выведенных чисел может быть, если я не ошибаюсь, в промежутке 1..2^32. Если нужно больше, понадобится арифметика больших чисел и детерменированый либо вероятностный тест на простоту с большим числом раундов. Тут всё ограничивается только временем.

tenshi 07.07.2011 21:37

на бумажке, без компьютера..

trikadin 07.07.2011 21:43

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

FINoM 07.07.2011 22:01

Цитата:

Сообщение от tenshi
на бумажке, без компьютера

Ёпта, вот что значит заработался.

Heisenberg 05.11.2013 00:29

Собеседование в DataArt
 
Ребята, кто был на собеседовании в DataArt? Говорят, что там задание на 4-5 часов, это правда? Поделитесь пожалуйста, что ж такое за тестовое, которое можно делать на собеседовании в течении 4 часов? :blink:

Shaci 05.11.2013 02:38

Цитата:

Сообщение от Heisenberg
Ребята, кто был на собеседовании в DataArt? Говорят, что там задание на 4-5 часов, это правда? Поделитесь пожалуйста, что ж такое за тестовое, которое можно делать на собеседовании в течении 4 часов?

хз, какая разница какое там задание?)
если интересно, сходите и узнайте

The_Nobody 17.11.2013 12:58

Господа, добрый день, что на это скажете?
Я не могу понять, как подобное реализовать, уже запутался сам, кто поможет может?
Спасибо за помощь и ваше драгоценное время.
/*
Есть REST service предприятия, со следующими URIs:
    a) [url]www.megafirm-catalog.com/employees[/url] - возаращает массив id всех сотрудников
    b) www.megafirm-catalog.com/employee/{id}, где {id} - id сотрудника. Возаращает: name, bossId, departmentId
    c) www.megafirm-catalog.com/department/{id}, где {id} - id отдела. Возвращает: name, employeesCount

Условия:
    У каждого сотрудника есть босс (кроме одного сотрудника, который является самым большим боссом).

Задание:
    а) Разработать структуру данных для описания предприятия, его отделов и сотрудников работающах там. (Применить принцип инкапсуляции)
    b) Разработать структуру данных (систему классов) предприятия.
    с) Заполнить структуру данных предприятия, исспользуя REST service.
    d) Вывести на экран всех сотрудников предприятия отсортированных по названиям (name) отделов в которых они работают.
    e) Реализовать возможность увольнения и перевода сотрудника в подчинение другому боссу (наиболее оптимальным способом)
    f) Вывести на экран всех сотрудников предприятия в иерархическом порядке (начиная с самого большого босса, далее его непосредственных подчиненных, потом подчиненных подчинненных и т.д. по иерархии)
*/

kobezzza 17.11.2013 17:00

Вы просите готовый скрипт с нуля.

Это работа, и за нее обычно платят деньги.
Для таких сообщений предназначен раздел форума "Работа".

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

The_Nobody 17.11.2013 21:41

Цитата:

Сообщение от kobezzza (Сообщение 281543)
Вы просите готовый скрипт с нуля.

Это работа, и за нее обычно платят деньги.
Для таких сообщений предназначен раздел форума "Работа".

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

Так у меня собственно вопрос: с чего начать, я знаю, как REST работает, но как расписать данную структуру не могу понять... Можно пример или что-то подобное? Буду очень признателен.

kobezzza 18.11.2013 09:22

У тебя в задании всё описано, но ок, для начала стучишься по своим урлам и принимаешь данные которые они тебе отдают, затем придумываешь как лучше эти данные хранить в памяти ну дальше начинаешь писать код.


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