Бул билеттерден бир гана үзгүлтүксүз маршрут курууга болот. Маршрутта циклдер жана кайталануулар жок. Сиз ушул эле билет объекттерин маршрут боюнча тартипте кайтарган программа жазышыңыз керек. ```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
Сиз системанын жүктөмүн RPS менен аныктадыңызбы? Канча болду? Техникалык этаптарды лайв-коддоо форматында өтүү тажрыйбаңыз барбы?
Колдонмонун, коддун же кызматтын коопсуздугуна кайсы бир убакта кам көрдүңүз беле?
Биздин чат тиркемебиз серверден келген жаңы билдирүүлөрдү мүмкүн болушунча тезирээк көрсөтүшү керек. Билдирүүнүн форматы: interface Message { id: number text: string } Биринчи билдирүүнүн ID саны 1, жана кийинки бардык билдирүүлөрдүн ID саны мурдагыдан 1 чоң. Биз билдирүүлөрдү туура тартипте көрсөтүшүбүз керек, бирок сервер жөнөтүлгөн билдирүүлөрдүн туура тартибин кепилдебейт. Убакыт сызыгы: // (келип жатат) [телефон] // (сүрөттөйбүз) . 1 2 3 . . 4 5 6 7 8 Билдирүүлөрдү көрсөтүү үчүн render функциясын колдонуңуз: render(message)
Node.js менен тажрыйбаңыз тууралуу бир долбоордун мисалы менен айтып бериңиз, аны эмне үчүн иштеп чыктыңыз?
/** * Мындай асинхрондуу функция жазуу керек, * ал белгиленген миллисекунддарда "уйку" керек, * жана андан кийин ийгиликтүү аяктоо керек */
JavaScript жөнүндө жалпы түшүнүк: параметрлерди өткөрүү, асинхрондүүлүк, прототиптер, каталарды иштетүү
// Мушкилоти чечимин эки кызматта текшерүү үчүн чакырыңыз: // 1. checkResult(url1, solution) // 2. checkResult(url2, solution) // // checkResult: (url: string, solution: string | number) => Promise<boolean>; // // - Эгер эки суроо да true кайтарса - console.log()да success деп көрсөтүңүз // - Эгер бирөө false кайтарса - console.log()да fail деп көрсөтүңүз // - Эгер бирөө жооп бербесе - console.log()да error деп көрсөтүңүз // - Эгер бирөө 1 секунддан ашык жооп берсе - console.log()да timeout деп көрсөтүңүз
Ролдор боюнча, менеджментке же техникалык багытка баргыңыз келеби?
Atvintтеги иш тажрыйбаңыз жөнүндө айтып бериңиз: долбоорлор, жоопкерчиликтер, команда, процесстер.
/** * Берилген массив. Тең эмес сандарды мааниси боюнча өсүүчү тартипте сорттоо керек, * ал эми туташ сандар өз орнында калсын * / export function oddSort(numbers) { // сиздин кодуңуз бул жерде } 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] // Маселе чечимин эки сервисте текшерүү керек, чакырып: // 1. checkResult(url1, solution) // 2. checkResult(url2, solution) // // checkResult: (url: string, solution: string | number) => Promise<boolean>; // // - Эки суроо да true кайтарса, success деп чыгарыңыз // - Экиден бири false кайтарса, fail деп чыгарыңыз // - Экиден бири жооп бербесе, error деп чыгарыңыз // - Экиден бири 1 секунддан ашык жооп берсе, 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); }
Үч бөлүмдөн турган код берилген. Ар бир 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); // ??
API долбоорлоого катыштыңызбы?
// Array'лердин стандарттык ыкмаларын кеңейтүүчү groupBy ыкмасын ишке ашыруу керек. // Бул ыкма массивтин топтолгон версиясын кайтару керек – объект, // анда ар бир ачкыч – fn(arr[i]) функциясынын ишке ашырылышынын жыйынтыгы, // жана ар бир мааниси – ошол ачкыч менен оригинал массивдин бардык элементтерин камтыган массив.
Колдонуучулардын колдонмолорун жайгаштыруу, CI/CD, орнотуу менен иштедиңизби?
/** * Берилген массив нүктөлөрдүн бүтүн координаттары (x, y). * Түз сызыктын бар-жогун аныктоо, * ал нүктөлөрдү ошол сызыкка салыштырмалуу симметриялуу эки топко бөлөт. * Эскертүү: ыңгайлуулук үчүн, нукта массив катары эмес, {x, y} объекти катары көрсөтүлүшү мүмкүн. */ isVertSym([[0, 0], [0, 0], [1, 1], [2, 2], [3, 1], [4, 0], [4, 0]]) // чын isVertSym([[0, 0], [0, 0], [1, 1], [2, 2], [3, 1], [4, 0]]) // жалган isVertSym([]) // чын isVertSym([[0, 0]]) // чын isVertSym([[0, 0], [10, 0]]) // чын isVertSym([[0, 0], [11, 1]]) // жалган isVertSym([[0, 0], [1, 0], [3, 0]]) // жалган function isVertSym(list) { // код ушул жерде }
/** * `asyncAuth(callback)` функциясы callback кабыл алат, анын ичинде * ката (биринчи аргумент катары) жана маалыматтар * backendтен (экинчи аргумент катары) өткөрүлүшү мүмкүн. * asyncAuth((error, data) => {}); * * Сиз `auth()` функциясын ишке ашырышыңыз керек, * ал `asyncAuth()` чакырып, бирок Promise кайтарат. * * @returns {Promise} */ export function auth() { // asyncAuth((error, data) => {}); }
/** * `tryAuth()` функциясы `auth()` колдонуп, ката болсо, * N кошумча аракет кылат. * Бардык аракеттер ийгиликсиз болсо, акыркы катаны чыгарат. * * @returns {Promise} */ export function tryAuth(n) { }
Акыркы долбоордо сиздин өз ара аракеттешүүңүз кандайча уюштурулду? Agile аркылуубы же башкачабы?
Кайсы өзүнчө чечим же жакшыртуу менен сыймыктанасыз? Мүмкүн, өтө кыйын же маанилүү тапшырма?