Pytania rekrutacyjne Next.js z odpowiedziami
App Router, Server i Client Components, renderowanie, cache, Server Actions, Next.js 16.
225 pytań na rozmowę rekrutacyjną z tematu Next.js z odpowiedziami i wyjaśnieniami - poziomy Junior, Middle i Senior. Przykładowe pytania, testy online i zadania z kodu.
- App Router
- RSC
- Caching
- Server Actions
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.
Next.js · Junior
- Czym jest kolokacja (colocation) w App Router?
Poprawna odpowiedź: Trzymaniem komponentów i narzędzi obok tras wewnątrz
app/Pliki w
app/stają się publiczne tylko przezpagelubroute. Dlatego komponenty, hooki, style i testy trasy można bezpiecznie trzymać obok jejpage.tsx. Dla przejrzystości używa się prywatnych folderów_componentslub trzyma wspólny kod wsrc/pozaapp. - Czym jest Next.js?
Poprawna odpowiedź: Frameworkiem React z routingiem, renderowaniem serwerowym i optymalizacjami
Next.js jest zbudowany na React i dodaje to, czego brakuje bibliotece: routing oparty na plikach, renderowanie serwerowe i statyczne, Server Components i Server Functions, optymalizację obrazków i fontów, budowanie i wdrażanie. Komponenty pisze się w zwykłym React.
- Jak utworzyć stronę pod adresem
/aboutw App Router?Poprawna odpowiedź: Utworzyć
app/about/page.tsxz komponentem eksportowanym domyślnieTrasę wyznacza folder, a plik
page.tsx(lub.js) czyni ją publiczną stroną. Bezpagefolder jest niedostępny pod adresem URL - można w nim trzymać komponenty (kolokacja). Wnext.confignie ma konfiguracji tras. Plikpages/about.tsxto konwencja starego Pages Router. - Czym
layout.tsxróżni się odpage.tsx?Poprawna odpowiedź: Layout opakowuje strony i zachowuje stan podczas nawigacji
Layout dostaje
childreni zawiera UI wspólny dla zagnieżdżonych tras (nagłówek, sidebar). Przy przejściach między stronami potomnymi layout nie montuje się ponownie: jego stan i DOM są zachowane, a renderuje się tylko zmieniona część. Zarówno layout, jak i strona to domyślnie Server Components.
Next.js · Middle
- Czym jest Server Function (Server Action) w Next.js?
Poprawna odpowiedź: Funkcją async oznaczoną
'use server', którą można wywołać z klientaDyrektywa
'use server'zamienia funkcję w serwerową, a Next.js tworzy dla niej endpoint. Można ją przekazać do<form action>lub wywołać z klienckiego handlera. Wywołanie to żądanie POST. Server Actions to Server Functions używane do mutacji, często z późniejszą rewalidacją cache. - Co daje
<form action={createPost}>z Server Action w porównaniu zonSubmit+fetch?Poprawna odpowiedź: Formularz działa nawet przed załadowaniem JS (progressive enhancement), bez trasy API
Server Action dostaje
FormDatabezpośrednio, więc nie potrzebujesz Route Handlera ani klienckiegofetch. Jeśli formularz renderuje komponent serwerowy, wysyła się nawet przed hydratacją. Walidację nadal piszesz sam (np. przez Zod). Stan wysyłania pokazuje się przezuseActionStatelubuseFormStatus. - Co robi
revalidatePath('/blog')po mutacji?Poprawna odpowiedź: Oznacza zcache'owane dane i UI trasy
/blogjako nieaktualneNastępne żądanie do
/blogdostanie świeże dane. Przy wywołaniu w Server Action zaktualizowany UI wraca od razu w odpowiedzi akcji. Do punktowego unieważniania danych używanych na wielu stronach wygodniejsze są tagi (cacheTag+revalidateTag/updateTag). - Czym
updateTagróżni się odrevalidateTagw Next.js 16?Poprawna odpowiedź:
updateTagod razu unieważnia cache (read-your-writes),revalidateTagto stale-while-revalidateupdateTagjest dostępny tylko w Server Actions: użytkownik, który zmienił dane, od razu widzi zmiany.revalidateTag(tag, 'max')oznacza dane jako nieaktualne: odwiedzający widzą starą wersję, a nowa jest przygotowywana w tle - dobre dla blogów i katalogów. W Next.js 16revalidateTagwymaga drugiego argumentu - profilucacheLife.
Next.js · Senior
- Czym jest RSC payload?
Poprawna odpowiedź: Zserializowanym wynikiem renderu Server Components z referencjami do klienckich
Payload zawiera wyrenderowane drzewo komponentów serwerowych, miejsca na komponenty klienckie z referencjami do ich chunków JS oraz ich propsy. Przy pierwszym ładowaniu jest osadzony w HTML (dla hydratacji); przy nawigacji po stronie klienta pobiera się go osobno. Kod komponentów serwerowych nigdy nie trafia do przeglądarki.
- Co dzieje się przy nawigacji po stronie klienta przez
<Link>w App Router?Poprawna odpowiedź: Ładowany jest RSC payload nowego segmentu, a React aktualizuje tylko zmienione części
Router pobiera payload (lub bierze wcześniej załadowany z klienckiego cache) i uzgadnia go z bieżącym drzewem: wspólne layouty są zachowane, a stan kliencki nie przepada. Jeśli segment wciąż się ładuje, pokazywany jest
loading.tsx. Nie ma pełnego przeładowania dokumentu. - Przy
cacheComponents: truedev overlay pokazuje „blocking route”. Co to oznacza?Poprawna odpowiedź: Niezcache'owane dane są czytane poza
<Suspense>i blokują statyczną powłokęPrzy Cache Components każda asynchroniczna praca musi być albo zcache'owana przez
'use cache'(trafia do powłoki), albo opakowana w<Suspense>(strumieniuje się w czasie żądania). Inaczej cała strona czekałaby na dane. Ta zasada jest sprawdzana w trybie deweloperskim i podczas budowania. - Czym
'use cache: remote'różni się od'use cache'?Poprawna odpowiedź: Przechowuje wynik w zdalnym handlerze wspólnym dla wszystkich instancji, kosztem opóźnienia sieci
Zwykłe
'use cache'domyślnie przechowuje wpisy w pamięci procesu (LRU), więc w serverless i przy wielu instancjach cache jest krótkotrwały i niewspółdzielony.remoteużywa handlera zcacheHandlers(Redis, KV platformy) - pewniej, ale drożej. Dostęp do danych żądania daje'use cache: private', a nieremote.
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 →