Sobes.tech

Frontend

Dla każdego z trzech fragmentów kodu JavaScript określ, co zostanie wyświetlone w konsoli i wyjaśnij różnice w zachowaniu prymitywów, obiektów i ponownego przypisywania referencji.

141

/** * Należy napisać asynchroniczną funkcję, * która będzie "spać" określoną liczbę milisekund, * a następnie pomyślnie się zakończy * / function sleep(duration) { } // Przykład const startTime = Date.now(); console.log("rozpoczynam sen..."); sleep(2000).then(() => { console.log("Obudziłem się po 2 sekundach!"); console.log("Czas upłynął: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("Obudziłem się po 1 sekundzie!"); console.log("Czas upłynął: ", Date.now() - startTime); });

141

Dana jest funkcja synchroniczna i czas w milisekundach. Należy zwrócić nową wersję tej funkcji, której wykonanie będzie ograniczone określonym czasem. Jeśli funkcja wykona się w wyznaczonym czasie — promesa zostanie rozwiązana z uzyskanymi danymi. Jeśli nie, promesa zostanie odrzucona z tekstem 'time limit exceeded'.

141

/** * Zaimplementuj funkcję sumPromises, która przyjmuje * obietnice jako argumenty i zwraca sumę * ich wyników. * * Funkcja może przyjąć dowolną liczbę argumentów. * Możesz używać dowolnego API obietnic. */ // Kod tutaj // Przykład użycia const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); sumPromises(promise1, promise2).then(console.log); // 3

140

/** * Zaimplementuj funkcję opakowującą runOnce, która przyjmuje * funkcję i zwraca nową funkcję. Nowa funkcja * może być wywołana tylko raz, wszystkie kolejne * wywołania zwracają undefined. * * Opakowana funkcja może przyjmować argumenty * i zwracać wynik. */ function runOnce(fn) { // twój kod } const logHello = (name) => { console.log(`cześć, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'cześć, Oleg!' logHelloOnce('Olga'); // undefined

140

/* Należy napisać funkcję do obliczania sumy wszystkich wartości numerycznych w tablicy. Wartości numeryczne są również łańcuchami, które zaczynają się od cyfr. W takim przypadku należy użyć tej początkowej sekwencji cyfr jako wartości numerycznej. Tablica może zawierać dowolne typy danych i nie musi być płaska. **Nie można używać wbudowanych metod typu .flat, .flatMap** */ function sum(arr) { // ... } console.log(sum([1, 'x', '2x', ['3', ['x2', '5']]]));

140

Czy dodawanie nowych metod do prototypów wbudowanych obiektów sprawia jakieś problemy?

139

[imię] zapytał: Ile czasu zajęła implementacja wersji MVP odtwarzacza?

137

/** * Funkcja `asyncAuth(callback)` przyjmuje callback, do którego można * przekazać błąd (pierwszy argument) i dane * z backendu (drugi argument). * asyncAuth((error, data) => {}); * * Musisz zaimplementować funkcję `auth()`, * która wywołuje `asyncAuth()`, ale zwraca Promise. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * Funkcja `tryAuth()` używa `auth()` i, w przypadku błędu, * wykonuje N dodatkowych prób. * Jeśli wszystkie zawiodą, zwraca ostatni błąd. * * @returns {Promise} */ function tryAuth(n) { }

135

Jak zamienić arguments na tablicę w stary sposób (ES5), bez Array.from i spread-operatora?

134

Jakie nowości standardu ES6 są używane w napisanym kodzie? Czym jest obiekt arguments i czym różni się od parametrów rest?

134

/** * Podane są trzy sekcje kodu. Należy napisać wynik każdego 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);

133

Czy może opowiedzieć o podejściach architektonicznych, które stosował w projekcie? Czy zna Feature-Sliced Design (FSD)?

133

[imię] zapytał: Czy kiedykolwiek pracowałeś nad optymalizacją metryk prędkości usług?

130

[imię] zapytał: Czy kiedykolwiek sam napisałeś dodatkowe zadania w pipeline?

130

[imię] zapytał: Jak w ogóle organizowano pracę nad konkretnym zadaniem: kto je przynosił i przygotowywał, jak przebiegał proces zatwierdzania, jakie pytania się pojawiały podczas realizacji i jak je rozwiązywałeś?

128

Co się stanie, jeśli nie wyczyścimy timeout po pomyślnym wykonaniu funkcji? Jak to naprawić i która metoda obietnicy będzie odpowiednia do wyczyszczenia timeout w każdym przypadku (sukces i błąd)?

128

Zaimplementuj funkcję withTimeout, która przyjmuje funkcję i czas (milisekundy) i zwraca nową funkcję. Jeśli funkcja źródłowa nie zostanie wykonana w wyznaczonym czasie, obietnica powinna zostać odrzucona.

128

Zaimplementuj funkcję asyncAuth z interfejsem callback, która zwraca Promise. Następnie zaimplementuj funkcję tryAuth(n), która korzysta z asyncAuth i w przypadku błędu wykonuje n dodatkowych prób. Jeśli wszystkie próby zawiodą, zwraca ostatni błąd.

128

/** * Funkcja `asyncAuth(callback)` przyjmuje callback, do którego * można przekazać błąd (pierwszy argument) i dane * z backendu (drugi argument). * asyncAuth((error, data) => {}); * * Musisz zaimplementować funkcję `auth()`, * która wywołuje `asyncAuth()`, ale zwraca Promise. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * Funkcja `tryAuth()` używa `auth()` i, w przypadku błędu, * wykonuje N dodatkowych prób. * Jeśli wszystkie się nie powiodą, zwraca ostatni błąd. * * @returns {Promise} */ function tryAuth(n) { }

128
/7