Тёмный

Мок-интервью для джуна-фронтендера: собеседование с лайвкодингом 

Хекслет
Подписаться 108 тыс.
Просмотров 32 тыс.
50% 1

Опубликовано:

 

30 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 117   
@kirillsundaen8810
@kirillsundaen8810 Год назад
Никита мега крутой собеседователь, респект за терпение и всяческую возможность вытянуть соискателя
@charliebrown5554
@charliebrown5554 Год назад
Круто, спасибо Никите и Виталию за такую увлекательную вьюху! 😊 Кстати, Виталий не раз помогал мне в чате Хекслета, крутой парень, надеюсь он в ближайшее время сможет устроиться) Желаю успехов! 🎉
@СергейЦыбульский-ч3е
Немного удивило, что никто не упомянул, что алгоритм решения задачи с get НЕверен. Там не нужно делать перебор по ключам, так как алгоритм будет отдавать значения по несуществующим путям. Например: get({ b: { b: 5 } }, 'a.b') вернёт 5 Решение: удалить цикл и взять token как первый элемент tokens function get(obj, path) { const tokens = path.split('.'); if (tokens.length === 1) { return obj[path] } const token = tokens[0] if(typeof obj[token] === 'object'){ return get(obj[token], tokens.slice(1).join('.')) } }
@СергейЦыбульский-ч3е
Не душнила, просто факт ) А так крутой формат, собеседующий - профессионал. Спокойно, чётко выполняет свою роль.
@m-fusion
@m-fusion Год назад
Да ее можно еще проще решить, даже без рекурсии. На самом Хекслет же есть эта задачка.
@Script696
@Script696 Год назад
Можно так решить const paths = path.split(“.”) return paths.reduce((acc,path)=> acc[path], obj)
@antonmas3451
@antonmas3451 Год назад
прежде чем умничить и дучшнить, неплохо бы убедиться что ты действительно имеешь скилл и умение... код не оптимальный, создание лишних массивов
@Sigrun-er8jn
@Sigrun-er8jn 9 месяцев назад
Спасибо за лайвкодинг, не часто такое видел в записанных интервью
@GMAIREPMaire
@GMAIREPMaire Год назад
Супер! Спасибо за это мок-интервью! Очень ценно. Аплодисменты и интервьюируемому и интервьюеру! Удачи в поиске и получению работы мечты!
@pyxorel
@pyxorel 4 месяца назад
задача с get const get = (obj, path) => { var list = (function* gen() { yield* path.split("."); })(); const f = (obj) => { for (var i of list) return obj[i] ? f(obj[i]) : undefined; return obj; }; return f(obj); };
@inqvisitor3722
@inqvisitor3722 Год назад
гуглить - это конечно круто. Я бы время поиска бы учитывал. Бывает просто синтаксис подзабыл, а бывает что полностью не знаешь/не понимаешь. На собесе как-то задачку с расчетом фибаначи не решил. Ну забыл как решается, хотя помнил принцип самой последовательности. Зашквар? Терпеть не могу такие задачи на алгоритмы. При решении реальных задач ни разу не пригодились. Было бы классно, найти весь список таких задачек, чтобы сразу разобраться и запомнить, чтобы не позорится на собеседованиях
@daniyarzhanakhmetov7741
@daniyarzhanakhmetov7741 Год назад
Виталий пройдет еще 10 таких собесов и на 11 будет топовое собеседование!
@radist126
@radist126 Год назад
Афигенски интересно. Спасибо❤
@HurtFeelings-no
@HurtFeelings-no 2 месяца назад
класс! собес супер! я бы прошел)
@dionusios05
@dionusios05 Год назад
25:27, А так можно написать? function get(obj, path) { const keys = path.split('.'); let current = obj; for(let key of keys) { if(!current[key]) { return undefined; } current = current[key]; } return current; }
@eugenemolotov1782
@eugenemolotov1782 Год назад
Да, рабочее решение. Можно еще докрутить и будет: const get = (obj, path) => path.split('.').reduce((result, node) => result ? result[node] : undefined, obj)
@evgenstepanov6319
@evgenstepanov6319 Год назад
А в чем смысл присваивания объекта в current? Если вы хотели добиться копии, то это у вас не получилось
@eugenemolotov1782
@eugenemolotov1782 Год назад
@@evgenstepanov6319 Допустим есть исходный объект var obj = {a: {b: {c: true}}}. В цикле идет перебор ключей (например для пути 'a.b.c' будут последовательно перебирать a, b, c), и чтобы эти ключи обращались к нужным объектам и сделано присвоение current'у. Без присвоения, после первой итерации будет обращение current['b'], но при таком обращении вернется undefined, т.к. в исходном объекте (оbj), на который сейчас ссылается current нет ключа b. Здесь не нужна глубокая копия объекта, так что решение рабочие.
@evgenstepanov6319
@evgenstepanov6319 Год назад
@@eugenemolotov1782 да, увидел. Тригернулся на присваивание объекта. Невнимательность наше всё)
@arslan5919
@arslan5919 Год назад
​@@evgenstepanov6319 У вас тоже видимо кое что не получилось)
@Sergo4672
@Sergo4672 Год назад
Функция, создающая случайный цвет в hex формате: const randomColor = () => { let resColor = "#"; for (let i = 0; i < 3; i++) { const hex = Math.floor(Math.random() * 256).toString(16) if (hex.length === 1) { resColor += 0; } resColor += hex; } return resColor; }
@Sergo4672
@Sergo4672 Год назад
Вот ещё есть такой вариант: const randomColor = () => { let hex = Math.floor(Math.random() * 16777216).toString(16); const len = 6 - hex.length; for (let i = 0; i < len; i++) { hex = 0 + hex; } hex = "#" + hex; return hex; }
@chikenmacnugget
@chikenmacnugget Год назад
@@Sergo4672 чел, это все в строку можно написать чейнингом без странных, магических цифр
@Demon59901
@Demon59901 7 месяцев назад
Вместо if можно дописать .padStart(2, 0)
@АнтонПашев-ъ5ы
@АнтонПашев-ъ5ы Год назад
Небольшой совет погромче, а то плоховато слышно, а в целом круто!
@TheLevius
@TheLevius Год назад
Никита крутой собеседующий. Дает классные советы (особенно хорош с оптимизацией рандомного цвета), правда в конце задушнил с lch и Ситником (это ж каттинг эдж). Вопросы не от балды из интернетов, а с концепцией, выявляют глубину познаний. А малютке не мешало бы поверстать побольше (кто придумал эту отмазку про гриды, мол они не подходят или редко нужны, когда весь веб дизайн и css-фреймворки реализуют 12-колочный грид). Хотя понимание сетки это на стыке дизайна и верстки, нельзя так пренебрегать гридами. Короче, хорошо получилось!
@mmorpglasg
@mmorpglasg Год назад
Не совсем понял, какие UI-киты используют grid? В Bootstrap и MUI сетка использует flex.
@TheLevius
@TheLevius Год назад
@@mmorpglasg они реализуют грид/сетку (как концепцию) с помощью flex. Получается своего рода костыль, хотя существует специальная одноименная технология для этого. Вероятно для большей обратной совместимости
@topsy_kreds
@topsy_kreds Год назад
В современных реалиях это не джун, разве что стажер и то с вопросом...
@moonchild5769
@moonchild5769 Год назад
мое решение функции get function get(obj, path) { let arr = path.split("."); if (obj === undefined) { return undefined; } if (arr.length === 1) { return obj[arr[0]]; } obj = obj[arr[0]]; return get(obj, arr.splice(1).join(".")); }
@ramblercriw7469
@ramblercriw7469 Год назад
хорошее интервью.
@AlexiCult
@AlexiCult Год назад
Не уверен что генерация цвета через HEX будет проще чем это: function randomColor() { return `rgb(${Math.floor(Math.random()*256)}, ${Math.floor(Math.random()*256)}, ${Math.floor(Math.random()*256)})` }
@spllit9212
@spllit9212 Год назад
принцип DRY изобрели в 1970 году люди до 1970:
@AlexiCult
@AlexiCult Год назад
@@spllit9212 а как в данном случае не повторяться? Заключить повторяющееся выражение в функцию где-то снаружи и вызывать её там где сейчас выражения? По-моему, это только создаст излишний код, который будет чуть сложнее прочитать. Да и вызывать также придётся три раза подряд одну и ту же функцию, тоже наверное DRY не будет соблюдаться. Как здесь переписать соблюдая DRY?
@spllit9212
@spllit9212 Год назад
@@AlexiCult а если тебе понадобится изменить работу этой функции ты будешь бегать по коду и везде вносить изменения вместо того, чтобы поместить функцию допустим в переменную и вызывать где понадобится? Если ты функцию сохранишь в переменную она у тебя будет занимать, условно говоря, одну ячейку памяти и ссылка на нее сохранится в переменную. И вызывать ты ее будешь по ссылке вместо того чтобы засорять память одним и тем же.
@AlexiCult
@AlexiCult Год назад
@@spllit9212 так как надо данный код переписать то? Я пока не понял аргументов.
@spllit9212
@spllit9212 Год назад
@@AlexiCult например так: function randomColor() { const random = () => Math.floor(Math.random()*256) return `rgb(${random()}, ${random()}, ${random()})` }
@annieleonhart-f3x
@annieleonhart-f3x Год назад
очень классно что можно гуглить, я напрогал уже несколько сайтов, vue, js, ts, а лайвкодинг просто нулёвый, я просто гуглю каждый момент который только можно нагуглить и просто копирую код построчно -_-
@antonnevskiy3027
@antonnevskiy3027 Год назад
Я благодарен за контен, спасибо. Если говорить о фидбеке, интервьюер очень душный и некомфортный, имхо.
@CamperFAQ
@CamperFAQ Год назад
Добрый день. Я так понимаю, выпускник закончил курс по фронту и получает такие задачи на пробном-собеседовании. Подскажите, насколько возможно, что такие задачи будут на реальных собеседованиях ?
@daniyarzhanakhmetov7741
@daniyarzhanakhmetov7741 Год назад
Может быть легче, может быть сложнее.
@МистерШмистер
@МистерШмистер Год назад
Вы шутите?
@daniyarzhanakhmetov7741
@daniyarzhanakhmetov7741 Год назад
@@МистерШмистер нет
@chikenmacnugget
@chikenmacnugget Год назад
@@МистерШмистер задачи на видео абсолютно базовые, типовые и сверх простые...
@МихаилБаталов-ь5н
​@@chikenmacnuggetи как все задачи впринципе )
@wickedtorpedo75
@wickedtorpedo75 9 месяцев назад
поднял самоуверенность, а считал что я даже на джуна не гожусь
@Илья-ж8ч8о
@Илья-ж8ч8о Год назад
Функцую при проверке typeof вернёт function оба оговорились, думаю уровень программирования достаточный , надо вёрстку подучить получше , сверстать пару сайтиков, про тестирование курсы на юдеми , фронт тяжко тестить вообще , но чёт пишут )))
@sEnigmus
@sEnigmus Год назад
насколько плохо такое решение? function get(obj, path){ if (path === '') return obj; const ar = path.split('.'); for(let i = 0; i < ar.length; i++){ obj = obj[ar[i]]; if(!obj) return obj; } return obj; }
@artishoo
@artishoo Год назад
Не считая нейминга - один кейс не обработал. Если длина пути будет больше чем количество вложенных объектов. В остальном хорошо.
@savchenkoilliya9131
@savchenkoilliya9131 Год назад
Это уровень trainee, не джуна
@B_G_V
@B_G_V Год назад
Изичный собес. Если бы все собесы были такие :)
@fazliddinalimov6993
@fazliddinalimov6993 Год назад
function get(obj, path) { const paths = path.split('.') let ci = 0 let resValue = obj; while (ci < paths.length){ resValue = resValue?.[paths[ci]] ci++ } return resValue } Легко же ?!
@alexmarch
@alexmarch Год назад
в целом не плохо
@arthurm2423
@arthurm2423 Год назад
А что если Random от 0 до 16777215 как макс hex и приводить его к hex формату. Тогда random будет только один раз вызван
@ArtyukhovBogdan
@ArtyukhovBogdan Год назад
Там буквы нужны
@Sergo4672
@Sergo4672 Год назад
const get = (obj, path) => { if (!obj || !path) { return obj; } const keys = path.split("."); for (const key of keys) { if (typeof obj[key] === "object" && key !== keys[keys.length - 1]) { obj = obj[key]; } else { return obj[key]; } } }
@Sergo4672
@Sergo4672 Год назад
Вот решение после рекомендаций рекрутёра: const get = (obj, path) => { if (!obj || !path) { return obj; } const keys = path.split("."); for (const key of keys) { if (obj[key] !== undefined) { //тут ещё можно вот такое извращение написать if (!!obj[key]) { или if (obj[key]||false) { obj = obj[key]; } else{ return undefined; } } return obj; } Если будет массив, и если ключ будет в виде числа то выведется элемент массива под индексом, равным этому числу.
@baileysli6235
@baileysli6235 Год назад
А как поучаствовать в таком?
@HexletOrg
@HexletOrg Год назад
Напишите нам на саппорт или в комьюнити в ТГ
@pkorneev5226
@pkorneev5226 Год назад
про css модули оочень не согласен, css in js сильно сильнее имхо, но да ладно
@DH-yv8um
@DH-yv8um Год назад
Микрофон кушать не надо
@CoppaChoppa
@CoppaChoppa 10 месяцев назад
неужели я такой же позорник...
@kaifaty
@kaifaty Год назад
как раз с Math.floor мы сделаем вероятность более НЕправильной, потому что будем получать 254 на всем промежутке от 254 < 255.
@КууларАйлан-э8е
Можно просто написать 256
@kaifaty
@kaifaty Год назад
@@КууларАйлан-э8е в этом случае вероятность при floor 255 будет чаще
@ooblako212
@ooblako212 Год назад
а почему не назвать это : имитация собеседования для младшего разработчика с программированием в живую... или как то по другому, но понятно?
@seosspro9686
@seosspro9686 Год назад
написано ведь - мок-интервью...
@daniyarzhanakhmetov7741
@daniyarzhanakhmetov7741 Год назад
а зачем так заморачиваться?)
@DK-creator97
@DK-creator97 Год назад
согласен. интерн-джун попросту не знает что такое мок и не найдёт это видео.
@true227
@true227 Год назад
@@DK-creator97 интерн джун сейчас должен знать на уровне мидла, по крайней мере так заявляют в вакансиях, так что найти видео труда не составит:)
@the_inalienable_dreamless
@the_inalienable_dreamless Год назад
"аксесебилити" "это что-то из ооп?" я ненавижу это интервью
@user-uniq-id
@user-uniq-id Год назад
Для чего джуну знать как работает браузер?
@artishoo
@artishoo Год назад
Он пишет программы для браузера
@user-uniq-id
@user-uniq-id Год назад
@@artishoo нет. Джуну это не нужно. Ты никуда не воткнешь эти знания о браузере.
@artishoo
@artishoo Год назад
@@user-uniq-id ясно, опять полодим кодеров, которые как макаки клепают код со стековерфлоу, без малейшего понимая контекста исполнения их кода. Сам то давно перестал быть джуном, с таким то отношением?
@user-uniq-id
@user-uniq-id Год назад
@@artishoo скажи, как я могу использовать информацию о том, как работает браузер?
@artishoo
@artishoo Год назад
@@user-uniq-id какую? Как работает отправка запроса? Или как работает рендер? Если ты н когда не сталкивался с проблемами оптимизации чего-то, зависимого от платформы, то это твой промах, а не человека, который повышает экспертизу в своем деле.
@xotamxudoyberganov5847
@xotamxudoyberganov5847 Год назад
//get([{a:{b:2}}], '$0.a.b') function get(obj, path) { if (!obj || !path) { return obj; } const fields = path.split('.'); const tok = fields.shift(); let tmp; if (tok.startsWith('$') && Array.isArray(obj)) { const index = tok.slice(1); tmp = obj[index]; } else { tmp = obj[tok]; } for (const field of fields) { if (tmp == undefined) { return tmp; } if (field.startsWith('$') && Array.isArray(tmp)) { const index = field.slice(1); tmp = tmp[index]; } else { tmp = tmp[field]; } } return tmp; }
@zerodoubler
@zerodoubler Год назад
Похоже тут do { } while () цикл зайдет чтобы не копипастить блок if (tok.startsWith('$') ... два раза
@xotamxudoyberganov5847
@xotamxudoyberganov5847 Год назад
@@zerodoubler тут пример кода его надо оптимизировать
@whalecoding
@whalecoding Год назад
Нах такое решение ?
@xotamxudoyberganov5847
@xotamxudoyberganov5847 Год назад
@@whalecoding подумай
@whalecoding
@whalecoding Год назад
@@xotamxudoyberganov5847 оно ужасное
@chikenmacnugget
@chikenmacnugget Год назад
Чел жостко оверинженирит и не понимает структуры данных и как с ними работать. UPD: JS тоже не понимает, просто заученный синтаксис повторяет. UPD: верстка тоже слабая UPD: вот и разница между ребятами с института и ребятами с курсов видна, парень вообще слабо понимает что он делает и для чего....
@flowder73
@flowder73 Год назад
Смысле как заученный синтаксис?
@АндрейБочарников-х5ъ
с института, ахахах, видимо ты учился в крутом учебном заведении, в котором действительно дают хороший актуальный материал, а таких просто оооочень мало, единицы из сотен тысяч
@chikenmacnugget
@chikenmacnugget Год назад
@@АндрейБочарников-х5ъ плохому танцору и пол мешает. Если ты думаешь, что за тебя подумают и в рот тебе разжеванное положат, то увы и ах.
@АндрейБочарников-х5ъ
@@chikenmacnugget а когда о структурах данных тебе дают лишь то что есть массив и есть обьект, разница между ними в названии (условно), а ты потом сиди и сам бери инфу из разных источников, но не из учебного заведения. Ты умничаешь, но не понимаешь, что универы у всех разные и большинство годовых курсов будут полезнее чем нынешнее профильное IT образование, но главное про ебучее прожовывание сказать и поговорку про яйца
@chikenmacnugget
@chikenmacnugget Год назад
@@АндрейБочарников-х5ъ ну что и требовалось доказать. Самому почитать - трагедия. После прочтения подойти и спросить у препода уточнения и т.д. - неаозможно. Рот ведь нитками зашит. Должны дать все и сразу и желательно разжевать. Ничего удивительного в том что у людей плохое образование и не понимании сути происходящего, когда они как чайки сидят «дай дай дай дай должен должен должен дай дай дай». Я тебе секрет наверное открою, но такая модель образования практически везде, особенно в западных странах она очень развита. Если ты сам не интересуешься и к преподавателю не подходишь с вопросами и т.д., то и ждать от других нечего. Никто бегать за вами и в попку целовать не обязан. А вот вы проявить интерес к своей профессии и собственному развитию, если не обязаны, то хотя бы от вас это ожидается в ВУЗах. ВУЗ в первую очередь это доступ к возможности взаимодействия с человеком квалификация которого больше твоей. А когда ты этого не делаешь, потом прибегаешь в комментарии с пеной у рта доказывать: «все говно, все пропало». Если ты для себя и вокруг себя мир построить не можешь, то почему кто-то должен его строить за тебя и для тебя. Поговорка есть такая: «под лежачий камень вода не течет». Вот помозгуй её и вывод сделай.
@Ramosok
@Ramosok 8 месяцев назад
const get = (obj: any, key: string): string => { const keyList = key.split('.'); if (!keyList.length) { return ''; } return keyList.reduce((acc, cur) => { if (obj[cur]) { return obj[cur]; } return acc[cur]; }, ''); };
@xotamxudoyberganov5847
@xotamxudoyberganov5847 Год назад
function randomRgba(alpha = 1.0) { if (alpha < 0.1 || alpha > 1.0) { alpha = 1.0; } const rndRgb = Array(3) .fill(0) .map(() => Math.round(Math.random() * 255)); return `rgba(${rndRgb.join(',')},${alpha})`; }
@zerodoubler
@zerodoubler Год назад
И пусть все кому попадет такой код на поддержку в команде охренеют. Осознают как ловко автор использует возможности языка. Телочки текут, быдло уважает 🎉
@xotamxudoyberganov5847
@xotamxudoyberganov5847 Год назад
@@zerodoubler это был сарказм?🤔
@zerodoubler
@zerodoubler Год назад
​@@xotamxudoyberganov5847 это от команды зависит на самом деле. Если там все молодые и шутливые, включая тимлида, и хотят показать удаль молодецкую, то не сарказм. А если мемберы уже столько кода отсмотрели, что их не прет от разбора этих конструкций то думаю им лучше зайдет что то типа как написал чел в видео return 'rgb('+randColor()+','+randColor()+','+randColor()+')';
@xotamxudoyberganov5847
@xotamxudoyberganov5847 Год назад
@@zerodoubler Ну такое решение зачем это надо когда можно попроще это сделать?
@SP-hb6dd
@SP-hb6dd Год назад
return '#' + Math.floor(0x1000000*Math.random()).toString(16).padStart(6, 0)
@Demon59901
@Demon59901 7 месяцев назад
0x1000000 - это FFFFFF? Прикольно
@SP-hb6dd
@SP-hb6dd 7 месяцев назад
@@Demon59901 на единицу больше, чем FFFFFF, но мы умножаем на случайное число от 0 до 1, которое всегда меньше чем 1
@sergeykhairulin
@sergeykhairulin Год назад
const get = (o, p) => p.split('.').reduce((a,e)=>a?a[e]:a,o)
@evgenykoval3056
@evgenykoval3056 Год назад
Классно и читаемо, в лучших традициях ниндзя-кода😅
@РустамХудайбергенов-ы1и
если в o не будет части из p, то будет ошибка, а должен быть undefined
@РустамХудайбергенов-ы1и
const getValue = (obj, path) => path.split('.') .reduce((acc, i) => acc && Object.keys(acc).includes(i) ? acc[i] : undefined , obj)
@sergeykhairulin
@sergeykhairulin 10 месяцев назад
@@РустамХудайбергенов-ы1и почему будет ошибка? Если обратится хотя бы раз по несуществующему пути, то все время будет возвращать undefined
@sergeykhairulin
@sergeykhairulin 10 месяцев назад
@@РустамХудайбергенов-ы1и если у acc нет i, то acc[i] и так вернёт undefined
Далее
🤍ПОЮ для ВАС ВЖИВУЮ🖤
3:04:40
Просмотров 1,3 млн
Когда Долго В Рейсе)))
00:16
Просмотров 178 тыс.
🤍ПОЮ для ВАС ВЖИВУЮ🖤
3:04:40
Просмотров 1,3 млн