Pytania rekrutacyjne Angular z odpowiedziami
Komponenty, szablony i control flow, sygnały, DI, RxJS, routing, formularze, change detection, SSR i NgRx.
225 pytań na rozmowę rekrutacyjną z tematu Angular z odpowiedziami i wyjaśnieniami - poziomy Junior, Middle i Senior. Przykładowe pytania, testy online i zadania z kodu.
- Signals
- RxJS
- DI
- Router
- Forms
- NgRx
Pytania według poziomu
Junior
Podstawowe pojęcia i składnia · 50 pytań
Middle
Praktyka, niuanse i optymalizacja · 50 pytań
Senior
Architektura, mechanizmy wewnętrzne, przypadki brzegowe · 50 pytań
Przykładowe pytania
Kilka pytań z każdego poziomu z poprawną odpowiedzią i wyjaśnieniem.
Angular · Junior
- Czym jest Angular?
Poprawna odpowiedź: Pełnym frameworkiem TypeScript od Google z komponentami, DI, routingiem, formularzami i HTTP w zestawie
Angular to framework „wszystko w zestawie”: router, formularze, klient HTTP, DI, narzędzia testowe i CLI utrzymuje zespół Angulara. React to z kolei biblioteka renderująca, wokół której stos składa się samodzielnie.
- Które polecenie tworzy nowy projekt Angular?
Poprawna odpowiedź:
ng new my-appAngular CLI (
npm install -g @angular/cli) tworzy projekt przezng new, uruchamia serwer deweloperski przezng serve, generuje kod przezng generate component namei buduje przezng build. - Co oznacza
standalonedla komponentu Angular?Poprawna odpowiedź: Komponent sam deklaruje zależności w
imports, zamiast należeć do NgModuleKomponenty standalone wymieniają używane komponenty, dyrektywy i pipe'y w
imports. Od Angulara 19 komponenty są domyślnie standalone; NgModule nadal są wspierane, ale nie są już wymagane. - Jak uruchamia się aplikację Angular w trybie standalone?
Poprawna odpowiedź:
bootstrapApplication(App, appConfig)wmain.tsbootstrapApplicationrenderuje komponent główny i przyjmujeApplicationConfigzproviders, np.provideRouter(routes)iprovideHttpClient().bootstrapModuleto starszy sposób oparty na NgModule.
Angular · Middle
- Co się zmienia, gdy komponent używa
ChangeDetectionStrategy.OnPush?Poprawna odpowiedź: Angular sprawdza go tylko wtedy, gdy jest oznaczony: zmieniła się referencja wejścia, on lub potomek obsłużył zdarzenie, zmienił się odczytany sygnał lub
asyncdostarczył wartośćPrzy strategii domyślnej każdy komponent jest sprawdzany przy każdym uruchomieniu change detection. OnPush pomija całe poddrzewa, które nie zostały oznaczone - to główna optymalizacja wydajności w aplikacjach opartych na Zone.js.
- Kiedy potrzebny jest
ChangeDetectorRef.markForCheck()?Poprawna odpowiedź: W komponencie OnPush, gdy stan zmienia się bez wiedzy Angulara, np. ręczny
subscribeprzypisuje zwykłe polemarkForCheckoznacza komponent i jego przodków, by zostali sprawdzeni przy następnym uruchomieniu. Pipeasynci sygnały robią to automatycznie, dlatego są lepsze od ręcznych subskrypcji. - Co oznacza
ExpressionChangedAfterItHasBeenCheckedError?Poprawna odpowiedź: Powiązana wartość zmieniła się w tym samym przebiegu change detection po jej sprawdzeniu (wykrywane tylko w trybie deweloperskim)
W trybie deweloperskim Angular wykonuje drugie sprawdzenie, by upewnić się, że dane płyną w jedną stronę. Zwykle przyczyną jest zmiana stanu rodzica w
ngAfterViewInitpotomka lub gettery zwracające za każdym razem nowe wartości. Napraw przepływ danych zamiast ukrywać błąd przezsetTimeout. - Jak sygnały usprawniają change detection w porównaniu ze zwykłymi polami?
Poprawna odpowiedź: Angular wie dokładnie, które szablony czytają zmieniony sygnał, i oznacza do odświeżenia tylko te komponenty
Sygnał odczytany w szablonie rejestruje widok jako konsumenta. Gdy sygnał się zmienia, ten widok zostaje oznaczony jako brudny - nawet w komponencie OnPush - bez polegania na tym, że Zone.js zgadnie, że coś mogło się zmienić.
Angular · Senior
- Jak Zone.js informuje Angulara, kiedy uruchomić change detection?
Poprawna odpowiedź: Patchuje asynchroniczne API przeglądarki (zdarzenia, timery, promise'y, XHR) i powiadamia Angulara o zakończeniu zadania, co wywołuje
ApplicationRef.tick()Zone.js nie wie, *co* się zmieniło, tylko że zakończyła się praca asynchroniczna, więc Angular sprawdza drzewo od korzenia (pomijając nieoznaczone poddrzewa OnPush). To proste, ale może powodować wiele niepotrzebnych sprawdzeń.
- Jak włączyć zoneless change detection?
Poprawna odpowiedź: Dodać
provideZonelessChangeDetection()do providerów aplikacji i usunąćzone.jsz polyfillsW najnowszych wersjach Angulara nowe projekty są domyślnie tworzone jako zoneless. Usunięcie Zone.js zmniejsza bundle, upraszcza stack trace'y i eliminuje zbędne sprawdzenia.
- Które z poniższych w aplikacji zoneless NIE planuje change detection?
Poprawna odpowiedź: Callback
setTimeoutprzypisujący nową wartość zwykłemu polu klasyBez Zone.js Angular polega na jawnych powiadomieniach: zmianach sygnałów,
markForCheck()(używanym też przezasync),ComponentRef.setInput, listenerach szablonu/hosta i dołączaniu brudnych widoków. Zmiana zwykłego pola w timerze jest niewidoczna. - Który styl komponentów jest już zgodny z zoneless change detection?
Poprawna odpowiedź: Komponenty OnPush, których stan żyje w sygnałach lub przechodzi przez
async/markForCheckJeśli komponent działa poprawnie z OnPush, najpewniej jest gotowy na zoneless. API takie jak
NgZone.onStable/onMicrotaskEmptybez Zone.js nie emitują i należy je zastąpićafterNextRenderlub sygnałami.
Testy łączone z tym tematem
Pytania z kilku tematów naraz - jak na rozmowie rekrutacyjnej na konkretne stanowisko.
Zadania z kodu
Napisz rozwiązanie prosto w przeglądarce, a testy od razu je sprawdzą. Klasyka rozmów rekrutacyjnych: debounce, throttle, deepClone, Promise.all, EventEmitter, cache LRU i inne.
Otwórz zadania →