Pytania rekrutacyjne Vue z odpowiedziami
Composition API i reaktywność, komponenty i sloty, composables, Vue Router, Pinia, SSR i wydajność.
225 pytań na rozmowę rekrutacyjną z tematu Vue z odpowiedziami i wyjaśnieniami - poziomy Junior, Middle i Senior. Przykładowe pytania, testy online i zadania z kodu.
- Composition API
- Reactivity
- Pinia
- Vue Router
- SFC
- Nuxt
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.
Vue · Junior
- Czym jest Vue?
Poprawna odpowiedź: Progresywnym frameworkiem JavaScript do budowania interfejsów, który można wdrażać stopniowo
„Progresywny” oznacza, że można zacząć od ulepszenia jednej strony i dojść do pełnego SPA z routingiem (Vue Router), zarządzaniem stanem (Pinia) i SSR (Nuxt). Rdzeń biblioteki skupia się na warstwie widoku i reaktywności.
- Jaki jest zalecany sposób utworzenia nowego projektu Vue?
Poprawna odpowiedź:
npm create vue@latestcreate-vuetworzy projekt oparty na Vite i opcjonalnie dodaje TypeScript, Vue Router, Pinia, Vitest, ESLint oraz testy end-to-end. Stary Vue CLI (oparty na webpacku) jest w trybie utrzymania. - Czym różni się Options API od Composition API?
Poprawna odpowiedź: Options API grupuje kod według typu opcji (
data,methods); Composition API - według funkcjonalności, przez importowane funkcjeOba są wspierane w Vue 3. Composition API (zwykle przez
<script setup>) ułatwia ponowne użycie logiki przez composables i wnioskowanie typów TypeScript; Options API nadal sprawdza się w prostszych komponentach. - Co robi
{{ message }}w szablonie Vue?Poprawna odpowiedź: Interpolacja tekstu: wyświetla wartość jako escapowany tekst i aktualizuje ją przy zmianie
Składnia „wąsów” wyświetla zwykły tekst, więc jest chroniona przed XSS. Do wyświetlenia HTML potrzebny jest
v-html, któremu nigdy nie wolno przekazywać niezaufanej treści.
Vue · Middle
- Czym
watchEffectróżni się odwatch?Poprawna odpowiedź:
watchEffecturuchamia się od razu i śledzi wszystko, co czyta;watchjest leniwy, ma jawne źródła i daje starą oraz nową wartośćwatchEffectjest zwięzły, gdy efekt używa tego samego stanu, od którego zależy.watchdaje precyzyjną kontrolę: wyzwalają go tylko wskazane źródła i może byćimmediatelubonce. - Co robi
{ deep: true }w watcherze?Poprawna odpowiedź: Wywołuje callback przy zagnieżdżonych mutacjach wewnątrz obserwowanego obiektu, kosztem jego przechodzenia
Bezpośrednie obserwowanie obiektu
reactivejest domyślnie głębokie; obserwowanie gettera - nie. Głębokie obserwowanie dużych struktur jest kosztowne - w 3.5 można przekazać liczbę, by ograniczyć głębokość. - Kiedy
shallowRefjest lepszy niżref?Poprawna odpowiedź: Dla dużych niemutowalnych danych (np. dużych odpowiedzi API), gdzie aktualizacje powinna wywoływać tylko zamiana
.valuerefczyni zagnieżdżone obiekty głęboko reaktywnymi przez Proxy, co kosztuje czas przy ogromnych strukturach.shallowRefśledzi tylko zamianę.value; użyjtriggerRef, jeśli mutujesz i musisz wymusić aktualizację. - Dlaczego mutowanie stanu w getterze computed to błąd?
Poprawna odpowiedź: Gettery computed muszą być czyste; efekty uboczne czynią aktualizacje nieprzewidywalnymi i mogą powodować nieskończone pętle
Vue może wywołać getter w dowolnym momencie (albo wcale, jeśli nikt go nie czyta). Do efektów ubocznych używaj watchera, a computed niech będzie czysto pochodny.
Vue · Senior
- Jak Vue 3 śledzi zależności reaktywne?
Poprawna odpowiedź: Pułapki Proxy
getzapisują wykonujący się efekt jako subskrybenta (track); pułapkisetpowiadamiają subskrybentów (trigger)Efekty (funkcje renderujące, computed, watchery) rejestrują się podczas wykonania. Proxy wyłapują też dodawanie/usuwanie właściwości i zmiany indeksów tablic, czego nie potrafiły gettery/settery Vue 2.
- Dlaczego
reactive(obj) === objjest fałszem i dlaczego to ważne?Poprawna odpowiedź:
reactivezwraca Proxy; mutowanie oryginalnego obiektu omija śledzenie, więc UI się nie aktualizujeZawsze pracuj z proxy. Ponowne wywołanie
reactivena tym samym obiekcie zwraca ten sam proxy, atoRaw(proxy)oddaje oryginał, gdy potrzebny jest dostęp bez śledzenia. - Dlaczego 100 zmian stanu w jednym handlerze daje tylko jeden ponowny render?
Poprawna odpowiedź: Aktualizacje komponentów trafiają do kolejki schedulera i są wykonywane raz w mikrozadaniu
Każda mutacja wyzwala efekty, ale zadania renderowania są deduplikowane w kolejce.
nextTick()zwraca promise tego opróżnienia kolejki. - Co się dzieje od Vue 3.4, gdy computed przelicza się do tej samej wartości?
Poprawna odpowiedź: Zależne elementy nie są wyzwalane, bo wartości computed są porównywane przed powiadomieniem
const isEven = computed(() => count.value % 2 === 0)nie uruchamia już dalszych efektów, gdycountzmienia się z 2 na 4. Zwracanie za każdym razem nowego obiektu nadal to niweczy.
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 →