Dobre pytanie o JavaScript powinno ujawniać model myślowy, a nie nagradzać wyuczone zdanie. Korzystaj z tych grup pytań, aby ćwiczyć wyjaśnianie, co się dzieje, dlaczego i jak to zweryfikować.
Działanie języka
- Jak zakres leksykalny i łańcuch zakresów wpływają na domknięcie?
- Kiedy `this` zależy od miejsca wywołania, a kiedy nie?
- Jakie błędy może powodować niejawna konwersja typów?
- W jaki sposób prototypy wspierają delegację?
- Co się zmienia, gdy moduł jest wykonywany więcej niż raz?
- Jak deskryptory właściwości wpływają na API?
- Kiedy symbol byłby przydatny?
- Jak płytkie i głębokie kopie różnią się?
- Kiedy dwie wartości są równe według różnych operacji porównania?
- Jak wyjaśnisz temporal dead zone?
Asynchroniczny JavaScript i przeglądarka
- Opisz jeden cykl pętli zdarzeń obejmujący zadanie i oczekujące mikrozadania.
- Jak interfejs powinien anulować żądanie, które nie jest już potrzebne?
- Co powoduje nieobsłużone odrzucenie Promise?
- Jak ograniczysz współbieżność dla grupy żądań?
- Jak dwa wywołania mogą współdzielić jedno trwające żądanie?
- Kiedy 'Promise.allSettled' jest bardziej przydatne niż 'Promise.all'?
- Jak zapobiec zastępowaniu świeżych danych przez nieaktualne odpowiedzi?
- Co powinno się stać z wpisem w pamięci podręcznej, gdy funkcja pobierająca dane odrzuci żądanie?
- Jak timery zachowują się w nieaktywnej karcie?
- Gdzie w systemie frontendowym może wystąpić backpressure, czyli ograniczanie napływu danych przy przeciążeniu odbiorcy?
Implementacja i weryfikacja
- Zaimplementuj debounce z możliwością anulowania.
- Zaimplementuj throttle i wyjaśnij zachowanie na początku oraz na końcu przedziału czasu.
- Utwórz emiter zdarzeń z obsługą anulowania subskrypcji.
- Zbuduj pamięć podręczną żądań z TTL i deduplikacją trwających żądań.
- Spłaszcz zagnieżdżone dane bez modyfikowania danych wejściowych.
- Napisz funkcję pomocniczą do ponawiania prób z jawną regułą zatrzymania.
- Zaimplementuj prosty harmonogram zadań z limitem współbieżności.
- Znormalizuj dane z serwera do mapy encji.
- Utwórz funkcję pomocniczą do memoizacji i opisz ograniczenia unieważniania wyników.
- Zaprojektuj testy funkcji zależnej od czasu.
Dyskusja na poziomie senior
- Gdzie powinna znajdować się walidacja w czasie wykonania w typowanym frontendzie?
- Jak rozwijać wspólne API klienta bez psucia kodu, który z niego korzysta?
- Co powinno być obserwowalne w warstwie żądań?
- Jak zbadasz długie zadanie w środowisku produkcyjnym?
- Kiedy użycie Web Workera jest uzasadnione?
- Jak granice pakietów kodu wpływają na zachowanie w czasie wykonania?
- Jak zaprojektujesz łagodne ograniczanie funkcjonalności w razie problemów?
- Jakie założenia dotyczące bezpieczeństwa nie powinny nigdy żyć tylko w kodzie klienta?
- Jak sprawić, by obsługa błędów była spójna bez ukrywania kontekstu?
- Jakie ograniczenia przeglądarki zmieniłyby twoją architekturę?
Jak ćwiczyć odpowiedzi na pytania
- Odpowiedz w trzech krokach: mechanizm, konkretny przykład i kompromis.
- Pisz kod dopiero po określeniu kontraktu i ważnych przypadków brzegowych.
- Zweryfikuj jeden przypadek sukcesu, jeden przypadek graniczny i jedną ścieżkę porażki.
- Nagrywaj słabe wyjaśnienia jako tematy praktyki zamiast zapamiętywania dłuższych skryptów.
- Zakończ nazywaniem dowodów, które zmienią twoją decyzję.
Źródła pierwotne
Przegląd redakcyjny
Twierdzenia dotyczące produktu sprawdzono względem jego bieżącego działania. Zauważono problem? Wyślij korektę.