/** * Реализирайте функцията isMonotonic, която приема * масив от числа и определя дали е * монотонен (не нарастващ или не намаляващ). * * @param {Array<number>} numbers - масив от числа * @return {boolean} - true, ако масивът е монотонен, иначе false */ function isMonotonic(numbers) { // вашият код тук }
Frontend
/** * Необходимо да напишете асинхронна функция, * която ще "спи" зададеното количество милисекунди, * и след това успешно ще завърши * / function sleep(duration) { } // Пример const startTime = Date.now(); console.log("започване на съня..."); sleep(2000).then(() => { console.log("Събудих се след 2 секунди!"); console.log("Изминало време: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("Събудих се след 1 секунда!"); console.log("Изминало време: ", Date.now() - startTime); });
Има ли проблеми с добавянето на нови методи към прототипите на вградените обекти?
Защо може да е необходим методът apply в решението runOnce?
/** * Реализирайте функцията sumPromises, която приема * обещания като аргументи и връща сумата * на техните резултати. * * Функцията може да приема всякакъв брой аргументи. * Може да използвате всяко Promise API. */ // Код тук // Пример за използване const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); sumPromises(promise1, promise2).then(console.log); // 3
/** * Функцията `asyncAuth(callback)` приема callback, в който могат * да бъдат предадени грешка (като първи аргумент) и данни * от бекенда (като втори аргумент). * asyncAuth((error, data) => {}); * * Трябва да реализирате функцията `auth()`, * която извиква `asyncAuth()`, но връща Promise. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * Функцията `tryAuth()` използва `auth()` и, в случай на грешка, * прави N допълнителни опита. * Ако всички се провалят, връща последната грешка. * * @returns {Promise} */ function tryAuth(n) { }
[име] попита: Колко време отне реализирането на MVP версията на плеъра?
/* Необходимо е да напишете функция за изчисляване на сумата на всички числови стойности в масив. Валидните числови стойности също са низове, които започват с цифри. В този случай трябва да използвате тази начална последователност от цифри като числова стойност. Масивът може да съдържа всякакви типове данни и да не е плосък. **Не трябва да използвате вградени методи като .flat, .flatMap** */ function sum(arr) { // ... } console.log(sum([1, 'x', '2x', ['3', ['x2', '5']]]));
/** * Реализирайте функцията runOnce, която приема * функция и връща нова функция. Новата * функция може да бъде извикана само веднъж, всички * следващи извиквания връщат undefined. * * Обвитата функция може да приема аргументи * и да връща резултат. */ function runOnce(fn) { // вашият код } const logHello = (name) => { console.log(`здравей, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'здравей, Oleg!' logHelloOnce('Olga'); // undefined
Как да преобразуваме arguments в масив по стария начин (ES5), без Array.from и spread-оператора?
Какви нововъведения от стандарта ES6 се използват в написания код? Какво е обектът arguments и как се различава от rest-параметрите?
/** * Три секции код са дадени. Необходимо е да напишете резултата от всяко console.log. */ var n = 1; function F(n) { n = 3; } F(n); console.log(n); var obj = { a: 1 }; function F1(o) { o.a = 5; } F1(obj); console.log(obj); var obj = { a: 1 }; function F2(o) { o = { hello: 1 }; } F2(obj); console.log(obj);
Можете ли да разкажете за архитектурните подходи, които сте използвали в проекта? Познавате ли Feature-Sliced Design (FSD)?
Реализирайте функцията asyncAuth с callback интерфейс, която връща Promise. След това реализирайте функцията tryAuth(n), която използва asyncAuth и в случай на грешка прави n допълнителни опита. Ако всички опити се провалят, връща последната грешка.
[име] попита: Как обикновено се организира работата по конкретна задача: кой я носеше и подготвяше, как протичаше процесът на одобрение, какви въпроси възникваха по време на изпълнението и как ги решавахте?
Реализирайте функцията withTimeout, която приема функция и време (милисекунди) и връща нова функция. Ако оригиналната функция не се изпълни за зададеното време, обещанието трябва да бъде отхвърлено.
/** * Функцията `asyncAuth(callback)` приема callback, в който * може да бъде предадена грешка (като първи аргумент) и данни * от бекенда (като втори аргумент). * asyncAuth((error, data) => {}); * * Трябва да реализирате функцията `auth()`, * която извиква `asyncAuth()`, но връща Promise. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * Функцията `tryAuth()` използва `auth()` и, в случай на грешка, * прави N допълнителни опита. * Ако всички се провалят, връща последната грешка. * * @returns {Promise} */ function tryAuth(n) { }
Какво ще се случи, ако не почистите таймаута след успешно изпълнение на функцията? Как да го поправите и кой метод на обещание ще е подходящ за почистване на таймаута във всеки случай (и при успех, и при грешка)?
[име] попита: Какъв тестов рамка беше използвана?
[име] попита: Работили ли сте някога по оптимизацията на скоростните метрики на услугите?