Frontend
Задача: реализирайте функцията sumSquares, която сумира квадратите на числата от масив, използвайки персонализирана функция reduce. Може да се променя само функцията sumSquares.
Какво е Feature-Sliced Design (FSD)? Разкажи ми за опита ти с FSD.
Изпраща ли се заявката OPTIONS във всеки случай при крос-доменна заявка или само когато е необходимо? Каква е разликата между простите и сложните заявки в този контекст?
Ще има ли обектът, върнат от хука (`data`, `loading`, `error`), същата референция между рендерите, ако стойностите не се променят? Защо? Как да запазим стабилна референция към обекта?
Как да преобразуваме arguments в масив по стария начин (ES5), без Array.from и spread-оператора?
Използвали ли сте някое споразумение за писане на комити?
Мислено изпълнете показаната функция: какво ще се изведе при първия й вик и защо? Как да коригирате кода, за да получите последователност от числа?
Нуждае ли се от отделна функция toggleLoading или може без нея?
Дайте пример за принципа Отворен/Затворен в фронтенд разработката, например чрез render props.
Имаш ли опит с миграцията от Vue 2 към Vue 3 — какво точно си правил сам?
Какви методи за свързване на контекста знаеш?
Разкажи ми за E2E тестовете с Playwright: как беше организирана системата за тестове, как се изпълняваше, как взаимодействат с бекенда, как постигат възпроизводимост на тестовите данни?
В резюмето е написано, че си разработвал с Next.js — това правилно ли е? Това беше Next.js с App Router или Pages Router?
Разкажи ми за useState в React: какво е, как работи, синхронен ли е или асинхронен hook?
Живеете постоянно в Италия? Колко време?
Как си с TypeScript? Има тип Foo с полета a: string, b: number, c: null, d: boolean. Трябва да създадеш тип FooKeys въз основа на Foo, за да съдържа всички ключове от Foo.
Представете си опашка от макро задачи с пет `setTimeout`, а микро задачите безкрайно добавят нови микро задачи, например чрез рекурсивен `Promise.resolve().then()`. Какво ще се случи с интерфейса и дали някога тези пет таймаута ще се изпълнят? Защо?
#React формуляр за регистрацију 1. Објасните како ради StateProvider, поделите своје мисли са интервјуером. 2. Погледајте /src/api/mock, објасните како ради. 3. Проверите боју SubmitButton и исправите је. 4. Имплементирајте валидацију формулара на страни клијента у компоненту Signup. (\*) Имајте у виду задатак број 9. Правила: - Поља Корисничко име, Емаил, Лозинка и Поново Лозинка треба да имају најмање 6 карактера; - Лозинка треба да одговара Поново Лозинка; - Валидација треба да се изврши након клика на "SignUp" дугме; - Поља са неважећим вредностима треба да буду означена (props error и helperText); 6. Одговор API може имати грешку која треба да се прикаже кориснику у близини одговарајућег поља. 7. Уверите се да компонентa UserName приказује ново корисничко име након успешног слања. 8. Имплементирајте нову компонету SignupSuccess. Она треба да се приказује уместо формулара за регистрацију. 9. Имплементирајте серверску валидацију за одговарајућа поља. --- Код из mock.ts: ```typescript const fakeResponse = (userName) => ({ code: 200, user: { id: 42, userName, }, }); let a = 0; const api = { '/signup': function (userName: string, email: string, password: string) { a++; return new Promise((resolve, reject) => { setTimeout(() => { if (a % 2 === 0) { return resolve(fakeResponse(userName)); } else { return reject( new Error( `Korisničko ime "${userName}" je već zauzeto. Molimo pokušajte s drugim.` ) ); } }, 500); }); }, }; export default api; ```
Има динамично маршрутизиране: трябва да отворите страницата на потребителя, и самата страница може да се променя (например, id в параметрите на заявката). Как може да се напише метод за проследяване на промените в маршрутизирането за зареждане на съответните данни?
Можете ли да обясните Event Loop: в какъв ред се изпълняват синхронният код, микротаските и макротаските?