Питання на співбесіді з Svelte з відповідями
Svelte 5 і руни ($state, $derived, $effect, $props), шаблони та сніпети, реактивність без віртуального DOM, SvelteKit: роутинг, load, form actions і SSR.
226 запитань для співбесіди з теми Svelte з відповідями й поясненнями - рівні Junior, Middle і Senior. Приклади запитань, онлайн-тести й задачі на код.
- Runes
- Reactivity
- Snippets
- SvelteKit
- SSR
Запитання за рівнями
Junior
Базові поняття та синтаксис · 50 запитань
Middle
Практика, нюанси й оптимізація · 50 запитань
Senior
Архітектура, внутрішня будова, edge cases · 50 запитань
Приклади запитань
Кілька запитань із кожного рівня з правильною відповіддю й поясненням.
Svelte · Junior
- Що таке Svelte?
Правильна відповідь: UI-фреймворк, який здебільшого є компілятором: компоненти перетворюються на JavaScript, що напряму оновлює DOM
Svelte виконує більшу частину роботи під час збирання. На виході - компактний код, який змінює саме ті DOM-вузли, що залежать від зміненого стану, без віртуального DOM.
- Що таке SvelteKit?
Правильна відповідь: Офіційний фреймворк застосунків для Svelte: роутинг, завантаження даних, SSR, форми й адаптери для деплою, побудований на Vite
Svelte - шар компонентів, а SvelteKit додає все, що потрібно повноцінному застосунку, приблизно як Next.js для React або Nuxt для Vue.
- Як рекомендують створювати новий проєкт SvelteKit?
Правильна відповідь:
npx sv create my-appsv- офіційний CLI Svelte. Він створює проєкт і вміє додавати інтеграції: TypeScript, ESLint, Vitest, Playwright. - Що може містити файл
.svelte?Правильна відповідь: Блок
<script>, розмітку й блок<style>, причому все необов'язковеКомпонент може мати кілька елементів верхнього рівня. Є ще
<script module>, який виконується один раз під час завантаження модуля, а не для кожного екземпляра.
Svelte · Middle
- Чим
$effectвідрізняється від$effect.pre?Правильна відповідь:
$effect.preвиконується до оновлення DOM (наприклад, щоб зберегти позицію прокручування);$effect- після$effect.preзамінюєbeforeUpdateзі Svelte 4, а$effect-afterUpdate. - Чому
items.set(k, v)не оновлює UI, якщоitems- звичайнийMapу$state?Правильна відповідь:
$stateпроксує лише звичайні об'єкти й масиви; використовуйтеSvelteMapзsvelte/reactivityУ
svelte/reactivityє такожSvelteSet,SvelteDate,SvelteURL,SvelteURLSearchParamsіMediaQuery. Їхні значення не стають глибоко реактивними. - Чим допомагає
$inspect.trace()?Правильна відповідь: Якщо поставити його першим рядком
$effectабо$derived.by, він логує, яка залежність спричинила перезапускКорисно, коли щось оновлюється занадто часто чи не оновлюється взагалі. Як і
$inspect, у продакшені нічого не робить. - У чому перевага сніпетів над слотами Svelte 4?
Правильна відповідь: Це значення: їм можна передавати параметри, передавати їх пропсами, типізувати через
Snippet<[T]>і перевикористовувати в тому самому компонентіНа сніпети верхнього рівня можна посилатися навіть у
<script>, а експортувати їх з<script module>, якщо вони не використовують стан компонента.
Svelte · Senior
- На якій моделі ґрунтується реактивність Svelte 5?
Правильна відповідь: На сигналах: читання стану всередині ефекту чи derived реєструє залежність, запис планує лише зачеплені ефекти
Вирази шаблону - теж ефекти. Руни - синтаксис поверх цього рантайму; Svelte 4 натомість покладався на інструментування присвоєнь компілятором.
- Чому Svelte 5 перейшов від реактивності
let, інструментованої компілятором, до рун?Правильна відповідь: Реактивність Svelte 4 працювала лише на верхньому рівні компонентів і була складною для розуміння; руни роблять її явною й працюють у
.svelte.jsта класахЗалежності
$:визначалися статично й лише під час компіляції; руни відстежують їх під час виконання, зокрема через виклики функцій. - Як обчислюються значення
$derived?Правильна відповідь: Ліниво й з мемоізацією: перераховуються лише під час читання після зміни залежності, а якщо результат не змінився, подальші оновлення пропускаються
Svelte використовує push-pull реактивність: зміни позначають залежних як застарілих (push), значення перераховуються під час читання (pull). Рівні результати не поширюються.
- Скільки коштують глибокі проксі
$stateі як це контролювати?Правильна відповідь: Кожне звернення до властивості йде через проксі, вкладені об'єкти обгортаються ліниво; для великих незмінних даних використовуйте
$state.rawабо звичайні змінніВикористовуйте
$stateлише для значень, від яких залежать ефекти, derived чи шаблон. Нереактивні дані можуть лишатися звичайними змінними.
Збірні тести з цією темою
Запитання з кількох тем одразу - як на співбесіді на конкретну вакансію.
Задачі на код
Напишіть рішення просто в браузері - тести перевірять його одразу. Класика співбесід: debounce, throttle, deepClone, Promise.all, EventEmitter, LRU-кеш та інші.
Відкрити задачі →