V jakém formátu ti přicházejí úkoly? Jaká je tvoje míra samostatnosti?
Frontend
Jaké základní HTML tagy znáte?
Pověz mi něco o sobě a o svých nejzajímavějších zkušenostech.
Implementujte funkci debounce(fn, delay), která odkládá volání funkce do uplynutí zadaného času ticha.
Pověz mi o sobě a své pracovní zkušenosti.
Implementujte třídu podle vzoru Observer (Observer / Event Emitter): ukládání odběratelů, přihlášení k události, odhlášení od události, oznámení odběratelů.
Zmínil jste testy — psal jste testy v [společnost] a na posledním místě práce?
Implementujte třídu EventEmitter: metoda subscribe(event, handler) pro přihlášení k události a metoda emit(event, data) pro volání všech odběratelů. Také implementujte metodu unsubscribe.
Jak jste řešili problém soužití nového stacku a Legacy kódu v jednom projektu? Zvažovali jste mikrofrontendy nebo webové komponenty?
Implementovat funkci debounce.
Máš zkušenosti s migrací z Vue 2 na Vue 3 — co přesně jsi sám dělal?
Implementace virtuálního posouvání: existuje dlouhý seznam zpráv (10 000 prvků), je třeba renderovat pouze viditelné prvky uvnitř kontejneru s pevnou výškou 300px, s výškou řádku 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: odeberte obslužného programu } function emit(event, payload) { // TODO: zavolejte všechny předplatitele události } 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);
V jakém formátu ti přicházejí úkoly? Máš vysokou míru samostatnosti?
Máš zkušenosti s psaním testů? Jaké testy jsi psal a v jakém rozsahu?
Praktický úkol: práce se dvěma poli objektů — porovnání podle klíče pomocí struktur Map a průchod dvěma cykly
Implementujte virtuální seznam (Virtual List): je zde dlouhý seznam zpráv a je třeba renderovat pouze viditelné prvky uvnitř kontejneru s pevnou výškou 300 pixelů. Výška jednoho řádku je 30 pixelů.
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) => { // írd meg a kódot ide return fn(...args); }; // és ide return wrapped; }
Proč jste dospěli k závěru, že je potřeba vlastní UI-kit, a ne jen použít prvky hotového UI?
Pověz mi o své relevantní pracovní zkušenosti.