რის ფორმატში გწერენ დავალებებს? რა დონის დამოუკიდებლობა გაქვთ?
Frontend
რომელი ძირითადი HTML ტეგები იცით?
მოგვითხრით ცოტა საკუთარ შესახებ და თქვენი ყველაზე საინტერესო გამოცდილების შესახებ.
შეასრულეთ კლასი 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: handler-ი წაშალეთ } 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; }
რატომ მიაღწიეთ დასკვნამდე, რომ საჭიროა პერსონალიზებული UI-კიტი, და არა უბრალოდ მზად UI ელემენტების გამოყენება?
ვირტუალური სია (Virtual List) განახორციელეთ: არსებობს გრძელი შეტყობინებების სია, და მხოლოდ ხილული ელემენტები უნდა გამოიტანოს 300 პიქსელის სიმაღლის ფიქსირებული კონტეინერის შიგნით. ერთი სართულის სიმაღლეა 30 პიქსელი.
გთხოვთ, თქვენი შესაბამისი სამუშაო გამოცდილების შესახებ ისაუბროთ.