În ce format îți sosesc sarcinile? Cât de independent ești?
Frontend
Ce etichete HTML principale cunoști?
Spune-mi puțin despre tine și experiența ta cea mai interesantă.
Spune-mi despre tine și experiența ta de muncă.
Implementați funcția debounce(fn, delay), care întârzie apelarea funcției până când timpul de tăcere specificat expiră.
Implementați o clasă conform pattern-ului Observer (Emitter de evenimente): stocarea abonaților, abonarea la evenimente, dezabonarea de la evenimente, notificarea abonaților.
Ai menționat testele — ai scris teste la [companie] și la ultimul loc de muncă?
Implementați clasa EventEmitter: metoda subscribe(event, handler) pentru abonarea la eveniment și metoda emit(event, data) pentru apelarea tuturor abonaților. De asemenea, implementați metoda unsubscribe.
Cum ați rezolvat problema coexistentei între un nou stack și codul legacy într-un proiect? Ați luat în considerare micro-frontend-uri sau componente web?
Ai experiență în participarea la migrația de la Vue 2 la Vue 3 — ce ai făcut exact tu însuți?
Implementați funcția debounce.
Implementați derularea virtuală: există o listă lungă de mesaje (10.000 de elemente), trebuie să redați doar elementele vizibile din interiorul unui container cu înălțimea fixă de 300px, cu o înălțime a liniei de 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: elimina handler } function emit(event, payload) { // TODO: apelează toți abonații evenimentului } 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);
În ce format primești sarcinile? Ai un nivel ridicat de autonomie?
Sarcină practică: lucrul cu două array-uri de obiecte — compararea după cheie folosind structuri Map și parcurgerea cu două bucle
Ai experiență în scrierea testelor? Ce tipuri de teste ai scris și în ce volum?
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) => { // scrie codul aici return fn(...args); }; // si aici return wrapped; }
Implementați o listă virtuală (Virtual List): există o listă lungă de mesaje, și trebuie să redați doar elementele vizibile din interiorul unui container cu înălțimea fixă de 300 de pixeli. Înălțimea unui rând este de 30 de pixeli.
De ce ați ajuns la concluzia că este nevoie de un kit UI personalizat, și nu doar să folosiți elemente dintr-un UI gata făcut?
Vorbește despre experiența ta relevantă de muncă.