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ć.

01

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?
02

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?
03

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.
04

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ę?
05

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ę.
Odniesienia

Ź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ę.