Ak je funkcia logHello napísaná ako šípka a je volaná cez fn.call(this, ...args) vo vnútri runOnce, čo sa stane s kontextom this? Čo je potrebné zmeniť vo funkcii logHello, aby sa kontext správne preniesol?
Frontend
Napíšte funkciu na konverziu reťazca z camelCase na snake_case. Nesmú sa používať regulárne výrazy, kódy znakov alebo pevne stanovený zoznam symbolov; riešenie musí byť univerzálne. Vyhodnoťte časovú a priestorovú zložitosť.
Prečo pri dvoch volaniach sleep(2000) a sleep(1000) sa najskôr zobrazí log o 1 sekundu a potom o 2? Vysvetlite fungovanie Event Loop, mikro- a makro-úloh.
Znalosť databáz a práca s API
/* Máme sadu lístkov v nasledovnom formáte: [ { from: 'Londýn', to: ' Moskva' }, { from: 'NY', to: 'Londýn' }, { from: 'Moskva', to: 'Sankt Peterburg' }, ... ] Z týchto lístkov je možné zostaviť jedinú, neprerušenú trasu. V trase nie sú žiadne slučky ani opakovania. Je potrebné napísať program, ktorý vráti tieto isté objekty lístkov v poradí podľa trasy. */ function getRoute(tickets = [], startCity) { // váš kód tu } console.clear() console.log(getRoute([ { from: 'Londýn', to: 'Moskva' }, { from: 'NY', to: 'Londýn' }, { from: 'Moskva', to: 'Sankt Peterburg' }, ], 'NY')); /* [ { from: 'NY', to: 'Londýn' }, { from: 'Londýn', to: 'Moskva' }, { from: 'Moskva', to: 'Sankt Peterburg' }, ] */
/** * Funkcia `asyncAuth(callback)` prijíma callback, do ktorého * môže byť odovzdaná chyba (ako prvý argument) a údaje * zo backendu (ako druhý argument). * asyncAuth((error, data) => {}); * * Musíte implementovať funkciu `auth()`, * ktorá volá `asyncAuth()`, ale vracia Promise. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * Funkcia `tryAuth()` používa `auth()` a v prípade chyby, * robí N ďalších pokusov. * Ak všetky zlyhajú, vráti poslednú chybu. * * @returns {Promise} */ function tryAuth(n) { }
/* Je potrebné napísať polyfill pre Array.prototype.some Parametre - callback - funkcia, ktorá kontroluje každý prvok, prijíma tri argumenty: - element - Aktuálny spracovávaný prvok v poli. - index (Nepovinné) - Index aktuálne spracovávaného prvku. - array (Nepovinné) - Pole, na ktorom sa vykonáva iterácia. - thisArg (Nepovinné) - Hodnota, ktorá sa používa ako this pri volaní callback funkcie. Vrátená hodnota true, ak funkcia kontroly vráti pravdivú hodnotu pre aspoň jeden prvok poľa. Inak false. */ Array.prototype.some = function (callback, thisArgs) { const array = this; for (let i = 0; i < array.length; i++) { if (!(i in array)) continue; const result = callback.call(thisArgs, array[i], i, array); if (result) return true; } return false; }
/** * Funkcia 'asyncAuth(callback)' prijíma callback, do ktorého * môže byť odovzdaná chyba (ako prvý argument) a údaje * zo servera (ako druhý argument). * asyncAuth((error, data) => {}); * * Musíte implementovať funkciu 'auth()', * ktorá volá 'asyncAuth()', ale vráti Promise. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * Funkcia 'tryAuth()' používa 'auth()' a v prípade chyby * robí N ďalších pokusov. * Ak všetky zlyhajú, vráti poslednú chybu. * * @returns {Promise} */ function tryAuth(n) { return new Promise((resolve, reject) => { function attempt(attemptsLeft) { auth().then(resolve).catch((error) => { if (attemptsLeft <= 0) { reject(error); } else { attempt(attemptsLeft - 1); } }); } attempt(n); }); }
Ak máme brať do úvahy desatinné čísla, čo treba dopísať do metódy times?
Na čom ste ešte museli písať vo svojej obchodnej skúsenosti, okrem TypeScript a JavaScript?
V akom tíme pracujete a na akom projekte?
Je možné vyriešiť úlohu sčítania promise bez použitia statických metód Promise? Čo sa bude líšiť od vykonávania promise v cykle od Promise.all — paralelne alebo sekvenčne?
/** * Implementujte funkciu runOnce, ktorá prijíma * funkciu a vracia novú funkciu. Nová * funkcia môže byť volaná iba raz, všetky ďalšie * volania vracajú undefined. * * Obalená funkcia môže prijímať argumenty * a vracať výsledok. */ function runOnce(fn) { // váš kód } const logHello = (name) => { console.log(`ahoj, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'ahoj, Oleg!' logHelloOnce('Olga'); // undefined
Určite poradie výstupu do konzoly a hodnoty nameraného času v príklade so sleep, časovačmi, Promise a frontami úloh; vysvetlite, prečo môže byť skutočné oneskorenie väčšie ako nastavené.
Na strome sedia veverice a vrany. Je potrebné napísať funkciu, ktorá nájde všetky veverice na strome a vráti ich mená. Očakávaný výsledok: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
Čo je vhodnejšie na ukladanie údajov podľa kľúča: Map alebo obyčajný objekt? Aké sú výhody Map?
Implementujte dekorátor callLimit(fn, limit, callback), ktorý obmedzuje počet volaní funkcie. Prijíma: funkciu na dekorovanie, maximálny počet volaní, callback, ktorý sa volá pri poslednom volaní (voliteľné). Vrátaná funkcia by mala mať metódu reset na obnovenie čítača do počiatočného stavu.
Čo sa vám páči a čo sa vám nepáči na práci v spoločnosti?
Rozšírte Array.prototype metódou, ktorá skupinuje prvky poľa podľa kľúča vypočítaného zadanou funkciou, a vráti objekt, kde každému kľúču zodpovedá pole prvkov. Vysvetlite, čo sa stane, ak funkcia výpočtu kľúča vráti niečo, čo nie je reťazec alebo číslo.
/** * Je potrebné napísať asynchrónnu funkciu, * ktorá bude "spať" zadaný počet milisekúnd, * a potom úspešne ukončí */ function sleep(duration) { } // Príklad const startTime = Date.now(); console.log("Začínam spať..."); sleep(2000).then(() => { console.log("Prebudil sa po 2 sekundách!"); console.log("Uplynulý čas: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("Prebudil sa po 1 sekunde!"); console.log("Uplynulý čas: ", Date.now() - startTime); });