Din aceste bilete se poate construi o singură rută continuă. Nu există bucle sau repetiții în rută. Trebuie să scrii un program care returnează aceleași obiecte de bilete în ordinea traseului. ```javascript function getRoute(tickets = []) { const cities = new Map(); for (const ticket of tickets) { cities.set(ticket.from, ticket); } const result = []; let currentCity = startcity; while (cities.has(currentCity)) { const next = cities.get(currentCity); result.push(next); currentCity = next.to; } return result; } console.clear() console.log(getRoute([ { from: 'London', to: 'Moscow' }, { from: 'NY', to: 'London' }, { from: 'Moscow', to: 'Spb' }, ])); ```
Frontend
Ai determinat încărcătura sistemului în RPS? Care a fost cantitatea? Ai experiență în parcurgerea etapelor tehnice în format de live-coding?
Ați fost nevoit să vă ocupați de securitatea aplicației, codului sau serviciului?
Aplicația noastră de chat trebuie să afișeze cele mai noi mesaje care sosesc de la server cât mai rapid posibil. Mesajul are următorul format: interface Message { id: number text: string } Id-ul primului mesaj este 1, iar id-ul fiecărui mesaj următor este cu 1 mai mare decât cel anterior. Trebuie să afișăm mesajele în ordinea corectă, însă serverul nu garantează ordinea corectă a mesajelor trimise către aplicația noastră. Cronologia: // (sosește) [telefon] // (desenăm) . 1 2 3 . . 4 5 6 7 8 Pentru a afișa mesajele, folosiți funcția render: render(message)
Vorbește despre experiența ta cu Node.js, folosind ca exemplu un proiect la care ai lucrat, ce anume ai dezvoltat în el.
/** * Este necesar să scrieți o funcție asincronă, * care să "doarmă" timpul specificat în milisecunde, * și apoi să se încheie cu succes */
Înțelegere generală a JavaScript: transmiterea parametrilor, asincronie, prototipuri, gestionarea erorilor
// Este este necesar să verificați soluția problemei pe două servicii, apelând: // 1. checkResult(url1, solution) // 2. checkResult(url2, solution) // // checkResult: (url: string, solution: string | number) => Promise<boolean>; // // - Dacă ambele solicitări returnează true - afișați în console.log() success // - Dacă cel puțin una returnează false - afișați în console.log() fail // - Dacă cel puțin una nu răspunde - afișați în console.log() error // - Dacă cel puțin una răspunde mai mult de 1 secundă - afișați în console.log() timeout
În ceea ce privește rolurile, ai prefera să mergi spre management sau spre domeniul tehnic?
Vorbește despre experiența ta de muncă la Atvint: proiecte, responsabilități, echipă, procese.
A participat la proiectarea API-ului?
/** * Se oferă un array. Este necesar să sortăm numerele impare în ordine crescătoare, * iar cele pare să rămână pe pozițiile lor * / export function oddSort(numbers) { // codul tău aici } console.log(oddSort([2, 3, 7, 4, 6, 1, 5, 8, 9])); // [2, 1, 3, 4, 6, 5, 7, 8, 9] console.log(oddSort([2, 4, 6, 8])); // [2, 4, 6, 8] console.log(oddSort([3, 7, 1, 5, 9])); // [1, 3, 5, 7, 9] // Este necesar să verificăm soluția problemei pe două servicii, apelând: // 1. checkResult(url1, solution) // 2. checkResult(url2, solution) // // checkResult: (url: string, solution: string | number) => Promise<boolean>; // // - Dacă ambele cereri returnează true, afișează success // - Dacă cel puțin una returnează false, afișează fail // - Dacă cel puțin una nu răspunde, afișează error // - Dacă cel puțin una răspunde mai mult de 1 secundă, afișează timeout import { checkResult } from '...'; export async function checkResults() { const solution = 'Any answer'; const url1 = 'yandex.ru'; const url2 = 'google.com'; checkResult(url1, solution); checkResult(url2, solution); }
Ai experiență cu deployment-ul aplicațiilor, CI/CD, configurare?
// Este necesar să implementați metoda groupBy, care extinde metodele standard ale array-urilor. // Metoda trebuie să returneze o versiune grupată a array-ului – un obiect, // în care fiecare cheie este rezultatul executării funcției fn(arr[i]), // iar fiecare valoare este un array care conține toate elementele array-ului original cu această cheie.
/** * Se presupune un array de puncte cu coordonate întregi (x, y). * Determinați dacă există o linie verticală, * care împarte punctele în două seturi simetrice față de această linie. * Notă: Pentru comoditate, punctul poate fi reprezentat nu ca un array [x, y], ci ca un obiect {x, y}. */ isVertSym([[0, 0], [0, 0], [1, 1], [2, 2], [3, 1], [4, 0], [4, 0]]) // true isVertSym([[0, 0], [0, 0], [1, 1], [2, 2], [3, 1], [4, 0]]) // false isVertSym([]) // true isVertSym([[0, 0]]) // true isVertSym([[0, 0], [10, 0]]) // true isVertSym([[0, 0], [11, 1]]) // false isVertSym([[0, 0], [1, 0], [3, 0]]) // false function isVertSym(list) { // cod aici }
/** * Funcția `asyncAuth(callback)` acceptă un callback, în care * poate fi transmisă o eroare (primul argument) și date * din backend (al doilea argument). * asyncAuth((error, data) => {}); * * Trebuie să implementați funcția `auth()`, * care apelează `asyncAuth()`, dar returnează o Promisiune. * * @returns {Promise} */ export function auth() { // asyncAuth((error, data) => {}); }
Se oferă trei secțiuni de cod. Este necesar să scrieți rezultatul fiecărui console.log. var n = 1; function f(n) { n = 3; } f(n); console.log(n); // ?? // ------------------ var obj = { a: 1 }; function f1(o) { o.a = 5; } f1(obj); console.log(obj); // ?? // ------------------ var obj = { a: 1 }; function f2(o) { o = { hello: 1 }; } f2(obj); console.log(obj); // ??
/** * Funcția `tryAuth()` utilizează `auth()` și, în caz de eroare, * face N încercări suplimentare. * Dacă toate încercările eșuează, aruncă ultima eroare. * * @returns {Promise} */ export function tryAuth(n) { }
Cum a fost construită interacțiunea în ultimul proiect? Prin Agile sau altfel?
De ce decizie sau îmbunătățire autonomă ești mândru? Poate o sarcină foarte dificilă sau importantă?