Se la funzione logHello è scritta come arrow function e viene chiamata tramite fn.call(this, ...args) all'interno di runOnce, cosa succederà con il contesto this? Cosa bisogna modificare nella funzione logHello affinché il contesto venga trasmesso correttamente?
Frontend
Scrivi una funzione per convertire una stringa da camelCase a snake_case. Non devono essere usate espressioni regolari, codici di carattere o elenchi di simboli predefiniti; la soluzione deve essere universale. Valuta la complessità temporale e spaziale.
Perché, quando si chiamano sleep(2000) e sleep(1000), prima viene visualizzato il log di 1 secondo e poi quello di 2? Spiega come funziona l'Event Loop, le microtask e le macrotask.
/* Abbiamo un insieme di biglietti nel seguente formato: [ { from: 'Londra', to: 'Mosca' }, { from: 'NY', to: 'Londra' }, { from: 'Mosca', to: 'San Pietroburgo' }, ... ] Da questi biglietti si può costruire un unico percorso continuo. Non ci sono cicli o ripetizioni nel percorso. Devi scrivere un programma che restituisca questi stessi oggetti di biglietti in ordine di percorso. */ function getRoute(tickets = [], startCity) { // il tuo codice qui } console.clear() console.log(getRoute([ { from: 'Londra', to: 'Mosca' }, { from: 'NY', to: 'Londra' }, { from: 'Mosca', to: 'San Pietroburgo' }, ], 'NY')); /* [ { from: 'NY', to: 'Londra' }, { from: 'Londra', to: 'Mosca' }, { from: 'Mosca', to: 'San Pietroburgo' }, ] */
Conoscenza di database e lavoro con API
/** * La funzione `asyncAuth(callback)` accetta un callback, nel quale * può essere passata un errore (come primo argomento) e dati * dal backend (come secondo argomento). * asyncAuth((error, data) => {}); * * Devi implementare la funzione `auth()`, * che chiama `asyncAuth()`, ma restituisce una Promise. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * La funzione `tryAuth()` utilizza `auth()` e, in caso di errore, * effettua N tentativi aggiuntivi. * Se tutti falliscono, restituisce l'ultimo errore. * * @returns {Promise} */ function tryAuth(n) { }
/** * La funzione 'asyncAuth(callback)' accetta un callback, nel quale * può essere passata un errore (come primo argomento) e dati * dal backend (come secondo argomento). * asyncAuth((error, data) => {}); * * Devi implementare la funzione 'auth()', * che chiama 'asyncAuth()', ma restituisce una Promise. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * La funzione 'tryAuth()' utilizza 'auth()' e, in caso di errore, * effettua N tentativi aggiuntivi. * Se tutti falliscono, restituisce l'ultimo errore. * * @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); }); }
Su cosa altro hai dovuto scrivere nella tua esperienza commerciale, oltre a TypeScript e JavaScript?
/* È necessario scrivere un polyfill per Array.prototype.some Parametri - callback - funzione che verifica ogni elemento, accetta tre argomenti: - element - L'elemento attualmente elaborato nell'array. - index (Opzionale) - L'indice dell'elemento attualmente elaborato. - array (Opzionale) - L'array su cui si effettua l'iterazione. - thisArg (Opzionale) - Valore usato come this durante l'esecuzione della funzione callback. Valore di ritorno true, se la funzione di verifica restituisce un valore truthy per almeno un elemento dell'array. Altrimenti, 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; }
Cosa dobbiamo aggiungere al metodo times se dobbiamo considerare numeri frazionari?
In quale team lavori e a quale progetto?
È possibile risolvere un compito di somma di promesse senza utilizzare metodi statici di Promise? In che modo l'esecuzione delle promesse all'interno di un ciclo si differenzierà da Promise.all — in parallelo o in sequenza?
C'è un albero su cui siedono scoiattoli e corvi. È necessario scrivere una funzione che trovi tutti gli scoiattoli sull'albero e ne restituisca i nomi. Risultato atteso: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
Implementare un decoratore callLimit(fn, limit, callback), che limita il numero di chiamate di una funzione. Accetta: una funzione da decorare, il numero massimo di chiamate, un callback, chiamato all'ultima chiamata (opzionale). La funzione restituita deve avere un metodo reset per riavviare il contatore allo stato iniziale.
Cosa è preferibile usare per memorizzare dati per chiave: Map o un oggetto normale? Quali sono i vantaggi di Map?
Determina l'ordine di output nella console e i valori del tempo misurato nell'esempio con sleep, timer, Promise e code di task; spiega perché il ritardo effettivo può essere maggiore di quello impostato.
/** * È necessario scrivere una funzione asincrona, * che "dorma" per il numero di millisecondi specificato, * e poi si completi con successo */ function sleep(duration) { } // Esempio const startTime = Date.now(); console.log("Inizio del sonno..."); sleep(2000).then(() => { console.log("Svegliato dopo 2 secondi!"); console.log("Tempo trascorso: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("Svegliato dopo 1 secondo!"); console.log("Tempo trascorso: ", Date.now() - startTime); });
Cosa ti piace e cosa non ti piace del tuo lavoro in azienda?
Estendi Array.prototype con un metodo che raggruppa gli elementi dell'array per una chiave calcolata tramite una funzione passata, e restituisce un oggetto in cui ogni chiave corrisponde a un array di elementi. Spiega cosa succederà se la funzione di calcolo della chiave restituisce qualcosa che non sia una stringa o un numero.
// Ti viene fornita una stringa composta da lettere latine, spazi e segni di punteggiatura. // Una stringa si chiama pangramma se contiene almeno una volta ciascuna delle 26 lettere. Determina se la stringa è un pangramma. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // il tuo codice qui } console.log(isPangram(`A pangram or holoalphabetic sentence is a using every letter of a given alphabet at least once.`)); // => console.log(isPangram('Waltz, bad nymph, for quick jigs vex.'))