В какъв формат ти идват задачите? Колко си самостоятелен?
Frontend
Кои са основните HTML тагове, които знаете?
Разкажи малко за себе си и най-интересния си опит.
Реализирайте клас според патърна Observer (Observer / Event Emitter): съхранение на абонати, абониране за събитие, отписване от събитие, уведомяване на абонатите.
Реализирайте функцията debounce(fn, delay), която отлага извикването на функцията до изтичане на посоченото време на тишина.
Разкажи за себе си и своя професионален опит.
Споменахте тестове — писахте тестове в [компания] и на последното си работно място?
Реализирайте класа EventEmitter: метода subscribe(event, handler) за абониране за събитие и метода emit(event, data) за извикване на всички абонати. Също така реализирайте метода unsubscribe.
Как решихте проблема с съжителството на нов стек и Legacy код в един проект? Разглеждахте ли микрофронтенд или уеб компоненти?
Реализирайте функцията debounce.
В какъв формат получаваш задачите? Имаш ли висок степен на самостоятелност?
Имаш ли опит с миграцията от Vue 2 към Vue 3 — какво точно си правил сам?
Реализирайте виртуално превъртане: има дълъг списък с съобщения (10 000 елемента), трябва да рендерирате само видимите елементи вътре в контейнер с фиксирана височина 300px, с височина на реда 30px.
function createEmitter() { const events = new Map(); function on(event, handler) { if(!events.has(event)) { events.set(event, [handler]) return } events.get(event).push(handler) } function off(event, handler) { // TODO: изтрийте обработчика } function emit(event, payload) { // TODO: извикайте всички абонати на събитието } return { on, off, emit }; } const bus = createEmitter(); const unsub1 = bus.on("order:created", (payload) => { console.log("handler1:", payload.id); }); const handler2 = (payload) => { console.log("handler2:", payload.id); } bus.on("order:created", handler2);
Практическо задание: работа с два масива от обекти — сравнение по ключ с използване на Map структури и обхождане с два цикъла
Имаш ли опит в писането на тестове? Какви тестове си писал и в какъв обем?
function memoize(fn, options = {}) { const { maxSize = 1000, keyOf = (...a) => JSON.stringify(a), lruTouch = true, } = options; let hits = 0; let misses = 0; const cache = new Map(); const getKey = (...args) => keyOf(...args); const wrapped = (...args) => { // напиши код тут return fn(...args); }; // и тут return wrapped; }
Реализирайте виртуален списък (Virtual List): има дълъг списък с съобщения, трябва да рендерирате само видимите елементи вътре в контейнер с фиксирана височина 300 пиксела. Височината на един ред е 30 пиксела.
Защо стигнахте до извода, че е необходим персонализиран UI-кит, а не просто да използвате елементи от готов UI?
Разкажи за своя релевантен опит в работата.