Тёмный

Собеседование на старшего разработчика react | react native 

Кирилл Макаров (Программирование)
Просмотров 20 тыс.
50% 1

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

 

28 окт 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 98   
@Maratreason
@Maratreason Год назад
Всегда приятно и полезно смотреть собеседования. Узнаешь столько нового. Спасибо вам ребята.
@DmitryKorovin-rr9hl
@DmitryKorovin-rr9hl Год назад
спасибо за видео, собесы RN прям редкость. Записывай еще )
@muhammadxojarustamxojayev7678
Ребята я конечно понимаю что вы сейчас все говорите что задачи были простыми и для уровня джуна. Но решать такие задачи когда ты волнуешся и у тебя ограниченное время и решать задачи когда ты проста смотришь все это с дивана, это совсем другое. Я гарантирию что люди которые говорили что это задача была простой, в реальном интервью они даже не смогли бы решить даже вторую задачу)))
@AdletAbdiyev
@AdletAbdiyev Год назад
Хз, как можно волноваться, если ты хорош в чем-то? Если ты подготовлен, то ты уверен в себе, у меня так лично
@kawaikaino5277
@kawaikaino5277 Год назад
@@AdletAbdiyev ты мал и глуп, синдром Даннига Крюгера тебе в помощь)
@grolland-cr
@grolland-cr 11 месяцев назад
ты угораешь, он вообще не волновался причём он на сеньёра идёт и он такую базу не отвечал
@alergeo1
@alergeo1 11 месяцев назад
@@AdletAbdiyev пфф легко, но если ты собесы часто проходишь то наверно да, волнения почти не будет
@AdletAbdiyev
@AdletAbdiyev 11 месяцев назад
@@alergeo1 тут больше от психологии человека зависит, кто как настроен, если я хорошо подготовился, то я лично не волнуюсь вообще
@dbgog
@dbgog Год назад
про гонку имелось ввиду из доки реакт, один из вариантов "Обратите внимание на переменную ignore, которая инициализируется значением false и устанавливается в значение true во время очистки. Это гарантирует, что ваш код не будет страдать от «состояний гонки»: ответы сети могут приходить в другом порядке, чем вы их отправили." export default function Page() { const [person, setPerson] = useState('Alice'); const [bio, setBio] = useState(null); useEffect(() => { let ignore = false; setBio(null); fetchBio(person).then(result => { if (!ignore) { setBio(result); } }); return () => { ignore = true; }; }, [person]);
@ericborder5996
@ericborder5996 11 месяцев назад
Не совсем понял этого момента. Если компонент размонтировался, мы всё равно будем ждать ответа на запрос?
@olegivanov80
@olegivanov80 11 месяцев назад
да@@ericborder5996
@Boortwint
@Boortwint 11 месяцев назад
данный вариант не решает проблему с гонкой запросов. Он решает только проблему с резолвом запроса на компоненте, который уже размонтировался. Но при выборе пользователя компонент с биографией просто перерендеривается, `() => ignore = true` не сработает в этом случае. export default function Page() { const [person, setPerson] = useState('Alice'); const [bio, setBio] = useState(null); const abortRef = useRef(null); if (abortRef.current) { abortRef.current.abort(); abortRef.current = null; } useEffect(() => { const abortCtrl = abortRef.current = new AbortController(); fetchBio(person, { signal: abortCtrl.signal }).then(result => { setBio(result); }) .catch(e => {}); return () => { abortCtrl.abort() }; }, [person]); Вот одно из решений с использованием API браузера. fetch-запросы будут отменяться и при размонтировании, и при выборе нового пользователя.
@olegaks4121
@olegaks4121 10 месяцев назад
@@Boortwint первый пример сработает, все запросы выполнятся, но запишется только результат последнего в доке по реакту - "Additionally, if a component renders multiple times (as they typically do), the previous effect is cleaned up before executing the next effect."
@Wolf_and_Fox
@Wolf_and_Fox Год назад
классный вопрос с отменой запроса, но на практике не использовал, надо попробовать будет
@ПавелПриступа
@ПавелПриступа Год назад
Если я правильно понял, выводили на AbortController
@mobile4developer
@mobile4developer Год назад
Интервьювер спрашивает правильные вопросы. Они в основном не про Реакт, а про опыт решения проблем. Увидительно, что автор, например, ни разу не встречал ситуацию с тем, что два одинаковых запроса могут вернуться в неопределённом порядке. Это вообще в любой асинхронной среде случается, что мобилки, что браузер.
@barrelblur
@barrelblur Год назад
Это в целом называется состоянием «гонки», когда такая асинхронщина начинается
@ножикМакс
@ножикМакс 11 месяцев назад
90% об этом не думают. и судя по списку вопросов это собес на джуна.
@galo4ka336
@galo4ka336 7 месяцев назад
Привет, Кирилл! Учусь сейчас на первом курсе в строительного после медицинского колледжа и твои видео-уроки это просто какое-то спасение! Спасибо тебе большое за них🙏🏻 В своих старых видео ты говорил о том, что можешь помочь на контрольной по высшей математике за денежку. Я хотела бы узнать у тебя, занимаешься ли ты на данный момент таким или может можешь кого-нибудь посоветовать?
@victorhytrop
@victorhytrop 11 месяцев назад
Спасибо за видео!
@АртемГоловко-м9щ
@АртемГоловко-м9щ 11 месяцев назад
В случае с компонентой, он настойчиво намекает на прерывание запроса
@ADFrozz
@ADFrozz Год назад
Дьявол кроется в деталях.
@ArtemMindsurfer
@ArtemMindsurfer 8 месяцев назад
че там в итоге на 43:22 какой ответ правильный? мне пришло в голову что надо из юзЭффекта сделать return () => res.reject() чтоб при размонтировке промис не крутился. Верно?
@rasfront
@rasfront 18 дней назад
AbortController позволяет отменять запросы, не допуская таких ситуаций. Его прокидывают в запрос и в нужный момент вызывают abort (обычно при unmount или же при повторном запросе). В данном случае можно хранить этот controller в ref, таким образом избегая ререндеров ненужных.
@nvdedmz
@nvdedmz Год назад
Поплыл совсем на последней задаче. Я собесился в сбер на мидла там такая задача была
@makarov.1996
@makarov.1996 Год назад
да я впервые это реализовывал главное что смог с подсказками решить)
@ddflruc
@ddflruc 10 месяцев назад
Крутой контент и годный собес!!!
@valentinboba
@valentinboba Год назад
Задачи оч легкие.. пора начать ходить на собесы
@tnsaturday
@tnsaturday Год назад
Собес как будто на джуна, причем года так из 2019
@spadar1602
@spadar1602 Год назад
Если тебе дают такие задачи то вакансия на Джуна скорее всего, у мидла+ такое стыдно спрашивать. Просто задачи в вакууме, ни для чего и никак не влияющие на работу
@tnsaturday
@tnsaturday Год назад
@@spadar1602 задачи просто на самые основы, миддлу нужно давать уже примеры с Promise.all хотя бы
@ШамильДжакеев
@ШамильДжакеев Год назад
согласен, вопросы уж слишком наталкивающике на ответ, и это на старшего разраба, удивительно
@ericborder5996
@ericborder5996 11 месяцев назад
Спасибо, за интервью! А не секрет работа удалёнка или офис МСК\СПБ?
@alexeyfedorovich9769
@alexeyfedorovich9769 Год назад
Возможно ты дал в конце видео ответ, но как я понял в задаче с Твитттером интервьюер просил тебя просто добавить ещё один жизненный цикл компонента componentWillUnmount, вернув fetch функцию в useEffect
@VitalArekhau
@VitalArekhau 10 месяцев назад
там используется не стандартный фетч, а функция из библиотеки. Не понятно, есть ли у неё дестрой вообще.
@astkh4381
@astkh4381 6 месяцев назад
Какая вообще максимальная планка зп у фронтов ? Например в беке могут хоть миллион платить , если ты senior golang
@indristwetrust
@indristwetrust 3 месяца назад
Когда ты говоришь про максимальную зп, не имеет уже значения фронт ты или бек или еще кто, ты уже и жнец и на дуде игрец, тебе без разницы на чем писать и что делать, имхо, а так макс что я лично видел для фронта в топах 300-350к, если не тимлид, на руки, без премий А средняя мб 150-180к, сильно зависит от компании и их грейда, а не даже от твоего скила, где то сеньор сидит на 200к, а где-то мидл, такое повсеместно, имхо опять же ну и мульон это не зп программиста в рф на компанию из рф, в России, это уже ближе к тимлидам-руководителям, да и то, что частный случай, где столько платят гошникам?
@astkh4381
@astkh4381 3 месяца назад
@@indristwetrust видел в паре вакансий западных где зп была 10.000$, в России видел 5-6К. В целом ты прав.
@alergeo1
@alergeo1 11 месяцев назад
В коментах одни топовые спецы )))
@ridge_crm
@ridge_crm 10 месяцев назад
это точно за 300к собес?
@xxxxPomaHxxxx
@xxxxPomaHxxxx 10 месяцев назад
Дык а результат то какой, оффер был не?
@АндрейСорокин-ь6ъ
@АндрейСорокин-ь6ъ 9 месяцев назад
нахрена вы везде var пишете??? вы юзайте тогда только es5. Иначе в чем логика??
@tnsaturday
@tnsaturday Год назад
21:53 "строчка кажется странной - переменной присваиваем функцию, никогда не видел такого" (с) кандидат на Senior React, 2023 год. В принципе на этом собеседование можно было закончить =) Ответ был дан правильный, но сам факт удивления и неуверенности в ответе не оставляет сомнения.
@tnsaturday
@tnsaturday Год назад
@@maratfaizer давно сениором стал? Расскажи, как контекст образуется
@maratfaizer
@maratfaizer Год назад
@@tnsaturday "где и кто тебя короновал?") прости, не хочу тебе что-то доказывать
@tnsaturday
@tnsaturday Год назад
@@maratfaizer слив засчитан, развивайся
@maratfaizer
@maratfaizer Год назад
@@tnsaturday спасибо за совет, кэп)
@pavelnenashev4353
@pavelnenashev4353 11 месяцев назад
@@maratfaizer значит огромные пробелы были в изучении JavaScript, если такое в 2023 называется Senior, то я, пожалуй, принципал😂
@alexvappi
@alexvappi Год назад
1:01:00 - поставить счетчик? разве нельзя было запихивать в массив просто с помощью push? Со счетчиком код нагруженнее + лишняя переменная. Спасибо за видео
@Furamy
@Furamy Год назад
ну в таком случае просто мог быть случай, когда у тебя будет непрапвильный порядок в массиве результатов, так как b выполнится раньше чем a
@alexvappi
@alexvappi Год назад
@@Furamy А, если порядок должен сохраняться, тогда понял
@SochnayaShaurma
@SochnayaShaurma Год назад
офера, как я понимаю, не поступило?
@inqvisitor3722
@inqvisitor3722 11 месяцев назад
300 000? серьезно? это же все примеры с хабра уровня джуна. Пример с реактом ничего такой, но это мидл максимум
@Boortwint
@Boortwint 11 месяцев назад
Возможно, моя экспертиза не отражает суть вещей, но это даже и близко не уровень мидла. Я решил эту задачу вообще не имея опыта с реактом в продакшене. У меня за плечами только лишь самостоятельное изучение этой библиотеки и прохождение курса в далёком 2018 году, после чего я возвращался к React для своих пет-проектов время от времени.
@alekseypavlov2539
@alekseypavlov2539 10 месяцев назад
Задача parallel async function parallel(funcArray: ((callbackFunction: (s: string) => void) => void)[], doneAll:Function) { const results:string[] = [] for (const func of funcArray) { await new Promise((resolve) => { func((result:string) => resolve(results.push(result))) }) } doneAll(results) } var a = function (done:(s: string) => void) { setTimeout(function () { done('result a') }, 300) } var b = function (done:(s: string) => void) { setTimeout(function () { done('result b') }, 200) } parallel([a, b], function (results:string[]) { console.log(results) })
@xxxxPomaHxxxx
@xxxxPomaHxxxx 10 месяцев назад
Ну там 100% сразу бы попросили не юзать ни промисы ни асинк, не просто же так на колбеках всё, проверяют что ты их тоже понимаешь.
@NeverGTI
@NeverGTI Год назад
Задача про таймер в неактивном табе решается воркерами без всяких библиотек, за предложенные решения с сохранение в стор я бы по рукам бил даже джуна.
@ТёмаКоролёв-к6ф
@ТёмаКоролёв-к6ф 11 месяцев назад
тут речь больше про решение для бизнес задачи. Условно сделать сейчас или отправить джуна на изучение воркеров и только после этого приступить к задаче.
@NeverGTI
@NeverGTI 11 месяцев назад
@@ТёмаКоролёв-к6ф что там изучать то ))) На mdn раздел про воркеры читается минут за 10. Примеров там тьма. Главное по красоте освободить память, больше там никакой магии я не припомню )
@undefinidd
@undefinidd Год назад
Ну вот чел тех лид, зарабатывает больше чем старший разработчик, но нормальное микро не может купить...
@sergey7144
@sergey7144 Год назад
так а оффер то дали по итогу?)
@makarov.1996
@makarov.1996 Год назад
да дали через 3-4 дня
@kulakofft4
@kulakofft4 Год назад
компонент Твиттер не будет работать с динамическим userName в варианте как ты сделал - будет всегда только первый userName
@grolland-cr
@grolland-cr 11 месяцев назад
Бля как это работает, ты на старшего разраба устраиваешься и по собеседованию я знаю больше тебя я и на 1 месяце работы
@romanwednesday4401
@romanwednesday4401 11 месяцев назад
Тут все просто, если ценишь свое время - идешь в синьора, потом поднабравшись опыта в разных задачах и ситуациях - в лида. Не всегда имеет смысл горбатиться 1 год джуном и 3 миддлом, если твои знания достаточно обширны
@grolland-cr
@grolland-cr 11 месяцев назад
@@romanwednesday4401 хаахахахах, что за несёшь, кто тебя сеньёром без опыта возьмёт
@romanwednesday4401
@romanwednesday4401 11 месяцев назад
@@grolland-cr Сразу видно - ребенок в чате. Работай джуном, малой, пока не поймешь что можно было пойти по короткому пути)
@grolland-cr
@grolland-cr 11 месяцев назад
@@romanwednesday4401 по короткому пути? Ты тоесть сразу пойдёшь сеньёром откликаться? Кому ты нужен без опыта работы
@liganshow
@liganshow Год назад
Это собес на джуна)
@makarov.1996
@makarov.1996 Год назад
согласен задачи были не трудные, но тем не менее опыта просили от 6 лет так что думаю что это точно не джун
@tnsaturday
@tnsaturday Год назад
@@makarov.1996 Иногда 6 лет опыта - это 1 год опыта, повторенный 6 раз =)
@АНДРЕЙОХОТА-ж1з
@АНДРЕЙОХОТА-ж1з 11 месяцев назад
Не на друга а на стажёра
@web_chaos
@web_chaos Год назад
34:44 нашли друг друга, конечно же код будет работать, будет перерендер всего компонента при смене значения
@Boortwint
@Boortwint 11 месяцев назад
Перерендер-то будет. Только вот fetch запрос с новым именем не отправится. Будут всегда отображаться данные с пользователем, с именем которого компонент примонтировался.
@DubinArtur
@DubinArtur Год назад
Кто кого собеседовал?))
@makarov.1996
@makarov.1996 Год назад
Не совсем понял ))
@demanfox1
@demanfox1 Год назад
Нифига не понял как на видео решалась задача, но поставил на паузу и попробовал решить сам, вышло 35 минут и такое решение: function done(text) { return text; } var a = function(done) { setTimeout(() => { done("result a") }, 300); } var b = function(done) { setTimeout(() => { done("result b") }, 200); } async function parallel (funcArr, callback){ const p1 = new Promise(resolve => a(resolve)) const p2 = new Promise(resolve => b(resolve)) const [...funcs] = arguments[0] const promArr = [] funcs.forEach(el => { promArr.push(new Promise(resolve => el(resolve))) }); const data = await Promise.all(promArr).then((res) => res) callback(data) } parallel ([a,b], (res) => { console.log(res) }) p.s сам не работаю как разраб на сейчас, к сожалению, но какие то рабочие задачи решаю
@RomanTchekashov
@RomanTchekashov Год назад
const parallel = (funs, callback) => { Promise.all(funs.map(f => new Promise(r => f(r)))).then(callback) }; Но по задаче нужно создать свой Promise.all: const parallel = (funcArray, doneAll) => { let results = []; funcArray.map(f => new Promise(resolve => f(resolve)).then(r => results.push(r))); new Promise(resolve => { const keyInterval = setInterval(() => { if (results.length === funcArray.length) { clearInterval(keyInterval); resolve(results); } }, 0); }).then(doneAll); } Для подготовки лучше использовать bigfrontend.dev
@Boortwint
@Boortwint 11 месяцев назад
@@RomanTchekashov огонь! Только Promise.all работает выдаёт слегка другой результат. Он возвращает массив с результатами в том же порядке, в котором находились промисы или другие данные в передаваемом в Promise.all массиве. В задаче результаты выводятся в соответствии с порядком резолва промиса Мучить бедный стек контекстов исполнения интервалом в 0 секунд - не самое лучшее решение. Можно сделать проще. function parallel(funcArray, doneAll) { const results = []; funcArray.forEach((func, index, arr) => { new Promise((resolve) => func(resolve)) .then(result => { results.push(result); if (results.length === arr.length) { doneAll(results); } }) }) }
@frqt_
@frqt_ Год назад
На какую сумму дали в итоге оффер?
@makarov.1996
@makarov.1996 Год назад
точную сумму сказать не могу но скажу что вполне в рыночных пределах
@Antonym-b5o
@Antonym-b5o Год назад
старший, младший) а где пахан, а петухи в соседней
@kulakofft4
@kulakofft4 Год назад
Если ты претендуешь на позицию старшего разработчика, то на мой взгляд нужно более грамотно объяснять технические вопросы, без слов-паразитов и адаптаций. Иначе выглядит колхозно
@makarov.1996
@makarov.1996 Год назад
ну видимо я колхозник, что теперь поделаешь)
@diggerdog001
@diggerdog001 Год назад
Это твой взгляд. Слава богу таких взглядов почти нет
@Maximrogov111
@Maximrogov111 Год назад
У последней задачи решение неверное. Как собеседующий это не увидел? При чем собеседующий даже акцент сделал на порядке вывода на 44:12.Там же функции асинхронно вызываются через таймаут. В этом мне кажется и есть весь смысл задачи, чтобы вызывать их последовательно. При решении данном в интервью, будет резульлтат "result b, result a". Правда в таком случае название функции не совсем корректное. Верное решение: function parallel(funcArray, doneAll) { if (!funcArray.length) { return } if (funcArray.length === 1) { return new Promise((res) => funcArray[0]((arg) => res(arg))).then((arg) => doneAll(arg) ) } const first = funcArray[0] const rest = funcArray.slice(1) return rest .reduce((prev, current) => { return prev.then( (prevArg) => new Promise((res) => current((arg) => res(prevArg + ', ' + arg))) ) }, new Promise((res) => first((arg) => res(arg)))) .then((arg) => doneAll(arg)) }
@OneTHPS
@OneTHPS Год назад
А в чем резон проверять на наличие одного промиса? Не совсем понял. У меня вышло немного по-другому вышло async function parallel(array, doneALL) { if (!array.length) { return; } const result = []; array.forEach((element) => { result.push(new Promise(element)); }); const res = await Promise.all(result); return doneALL(res); } const a = function (done) { setTimeout(function () { done("result a"); }, 300); }; const b = function (done) { setTimeout(function () { done("result b"); }, 200); }; parallel([a, b], function (res) { console.log(res); });
@ДмитрийС-ш9б
@ДмитрийС-ш9б 11 месяцев назад
Это точно на старшего разработчика?
Далее