Станислав Агафонов
Станислав Агафонов
  • Видео 5
  • Просмотров 45 185
Проект загрузка файлов в облако. React, SCSS, Firebase
Исходники github.com/agaf89/upload
В этом видео показана простая реализация загрузчика файлов в Firebase на React.
Я думаю, это приложение будет неплохим кейсом в портфолио джуна.
На базе этого приложения можно создать имитацию целой файловой системы.
Telegram t.me/bzuqpo
Instagram agaf89
#frontend #айти #обучение
Просмотров: 1 735

Видео

ОГОНЬ Задача с моего ПЕРВОГО собеседования на Junior Frontend Developer
Просмотров 12 тыс.Год назад
Тогда я прошел собеседование. Это была продуктовая компания. Был сложный проект - почти на чистом javaScript разработали spa low-code платформу. Она позволяла создавать кастомные CRM для крупных гос корпораций. На клиенте ты задаешь структуру БД - каждая сущность это модель - класс. Сущности связаны ключами и наследованием Telegram t.me/bzuqpo Instagram agaf89
Зарплаты Frontend 2023. Всё плохо? Разбираемся
Просмотров 8 тыс.Год назад
Многие судорожно наблюдали за ситуаций в IT в 2022. IT лихорадило. В этом видео мы оцениваем ситуацию на ближайшие 6-12 месяцев frontend. Такое себе занятие - но в целом можно предположить. Задание с собеседования ruclips.net/video/FuBCNBpjZEA/видео.html Telegram t.me/bzuqpo Instagram agaf89 00:00 - Начало 01:37 - Сервисы по зарплате 02:20 - Junior 05:22 - Middle 08:33 - Senior 11...
ШОК задание с Frontend собеседования
Просмотров 20 тыс.Год назад
На собеседовании с HR сходу попросил решить задачу за 15 минут. Нужно было решить при HR задачу, показать результат HRу и только тогда получаешь доступ к следующему этапу с тех лидом. Задача сделать лоадер только используя javaScript и css. Telegram t.me/bzuqpo Instagram agaf89
Проект JavaScript для начинающего Frontend разработчика
Просмотров 3,5 тыс.Год назад
Проект подойдет для совсем-совсем новичков Telegram t.me/bzuqpo Instagram agaf89 01:09 - Верстка HTML, css 16:36 - JavaScript

Комментарии

  • @diatm1506
    @diatm1506 6 месяцев назад

    JavaScript-изеры вперед)

  • @MirrorWorlds-
    @MirrorWorlds- 6 месяцев назад

    условие первой задачи было вывести строку "лон ес" а у Вас в конце получился массив с элементами "лон" и "ес". Задание выполнено не доконца... Решение первой задачи одной строкой str.split(', ').filter((_, i) => i % 2).map(val => val.substr(1)).join(' ');

    • @agaf89
      @agaf89 6 месяцев назад

      Отлично молодец 👍🏼

  • @hackzem07
    @hackzem07 7 месяцев назад

    Для фибоначчи можно сделать так: const fib = (num) => { const rfib = (num, acc = 0, acc2 = 1) => { if (num <= 1) { return acc2; } return rfib(num - 1, acc2, acc + acc2); }; return rfib(num); }; Рекурсивной функцией

    • @ПожилойБилибоба
      @ПожилойБилибоба Месяц назад

      Рекурсия потребляет больше ресурсов, поэтому лучше через цикл решать

  • @FazaR92
    @FazaR92 9 месяцев назад

    Спасибо за отличный урок! Документация это, конечно, хорошо, но без таких видео тяжко идёт

  • @jacktwinn
    @jacktwinn 10 месяцев назад

    Я бы лучше регуляркой слова вытащил, иначе если будут случайно двойные пробелы, без пробелов или вообще другие символы, то по пизде пойдёт ответ) ну и slice(1) можно просто написать) str.match(/[а-яa-z]+/gi) .reduce((acc, el, i) => { if (i % 2 > 0) { acc.push(el.slice(1)); } return acc; }, []) .join('');

    • @SerzhNesteruk
      @SerzhNesteruk 5 месяцев назад

      С регуляркой идея интересная, но в коде всё же не учтён один граничный случай. При передаче пустой строки (или не содержащей букв) должна вернуться пустая строка.

  • @АраАкобян-ч1д
    @АраАкобян-ч1д 11 месяцев назад

    интересная задача, хорошо, что вы рассказали

  • @EvgenyTalagaev
    @EvgenyTalagaev Год назад

    Спасибо вам за контент, интересно было послушать

  • @ММАиЕдиноборства

    Спасибо за интересный квест с участием JS, в данный момент начинаю изучать его и очень сложно заходит , а на данном уроке что-то да понял, c примера всё реализовал с 1 раза без сложностей. Хотелось бы побольше обучающих примеров, подобно данному с участием JS. Как указал 1 из комментирующих , скобки не увидел сразу ,т.к. очень отдаленный зум в записи и нужно прям всматриваться в экран ,что бы увидеть некоторый элемент.

  • @ВладиславКива-и5г

    Очень полезное видео 👍

  • @spllit9212
    @spllit9212 Год назад

    Вместо промисов можно было async await, я думаю, использовать. Они тоже промис возвращают

  • @ИззатТурсунов
    @ИззатТурсунов Год назад

    Даже сеньер тут наделал ошибок, поэтому говорить что для Джуна это легко не стоит .

  • @Denis-rh9jp
    @Denis-rh9jp Год назад

    Станислав, а зачем передавать width : 75 если вы его не использовали?

  • @nazarhlukhaniuk2686
    @nazarhlukhaniuk2686 Год назад

    вирішувати пошук чисел по фібоначі, за допомогою міліона змінних - точно рівень "сіньйора") Типовий інфоциган

    • @agaf89
      @agaf89 Год назад

      Не понимаю

  • @sdgdsgsdgdsg1594
    @sdgdsgsdgdsg1594 Год назад

    Хотите жить в нормальной стране и получать хорошие деньги, едьте в Сша либо в европу. Нормальные программисты в рашке не остаются, это известно по примеру Павела Дурова

    • @agaf89
      @agaf89 Год назад

      В любой стране можно хорошо зарабатывать 😉

    • @АлександрКоваль-д3щ
      @АлександрКоваль-д3щ Год назад

      Ну ты и олень. Попробуй поедь ты там никто и брать тебя не будут если хотя-бы гринки нет

    • @АлександрКоваль-д3щ
      @АлександрКоваль-д3щ Год назад

      Хоть 10 лет опыта имей

  • @alluresport3552
    @alluresport3552 Год назад

    сделал по своему, но главное что работает: const strFn = (str) => { const newStr = [] str.split(', ').map((el, index) => { if(index % 2 === 1){ return newStr.push(el) } }) const newStr2 = [] newStr.map(el => { return newStr2.push(el.slice(1) + '') }) return newStr2.join().replace(/[,]/g, ' ') } const fibFn = (num) => { let fb1 = 1; let fb2 = 1; const arr = new Array(num) for(let i = 3; i <= arr.length; i++){ let sum = fb1 + fb2; fb1 = fb2 fb2 = sum } return fb2; } const getSomeData = (str, num) => { setTimeout(() => { const sliceStr = new Promise((resolve, rejected) => { resolve(strFn(str)) }) const numFib = new Promise((resolve, rejected) => { resolve(fibFn(num)) }) console.log(sliceStr, numFib) }, 2000) } getSomeData('яблоко, слон, дуб, лес,', 13)

  • @Sltkbeaver199
    @Sltkbeaver199 Год назад

    подскажите плагин, который вам подсказывает, как называется ?

    • @agaf89
      @agaf89 Год назад

      Tabnine

    • @Sltkbeaver199
      @Sltkbeaver199 Год назад

      Насколько же это удобно… Огромное спасибо.

  • @TheMonsterLPchanel
    @TheMonsterLPchanel Год назад

    если использовать рекурсию при вычислении числа Фибоначчи и использовать async await то всё решается буквально в 4 строки const getSomeData = async (str, num) => [ await getStr(str), await fib(num)] const getStr = async (str) => str.split(', ').reduce((acc, val, index) => index % 2 !== 0 ? [...acc, val.slice(1, val.length)] : acc, []).join(' ') const fib = async (n) => n <= 1 ? n : await fib(n - 1) + await fib(n - 2) getSomeData('яблоко, слон, дуб, лес', 13).then(console.log) // "лон ес" 233

    • @agaf89
      @agaf89 Год назад

      Круто, молодец ❤️

    • @js8n35
      @js8n35 7 месяцев назад

      753 вызова функции fib для того, чтобы вычислить 13 число фибоначи. Такое себе решение

  • @Тёмныйрыцарь-д4ж

    const parent = document.querySelector('body'); let wrapper = document.createElement('div'); let loader = document.createElement('div'); let timer = document.createElement('div'); let myInterval; wrapper.classList.add("wrapper"); loader.classList.add("loaderLine"); timer.classList.add('timer'); wrapper.append(loader); parent.append(wrapper) wrapper.append(timer) console.log(timer); loader.style.width = "0%"; let counter = 0; myInterval = setInterval(() => { counter += 1; timer.textContent = `${counter}%`; counter < 89 ? loader.style.width = `${counter}%` : clearInterval(1); }, 50); все , 18 строчек кода, ушло минут 20 на решение, но я даже не джун, даже не стажер, автор точно мидл?

    • @agaf89
      @agaf89 Год назад

      Ты классный! Иди спать 🛌

  • @КалиниченкоЕвгений-ш5ж

    Сверхдиржава!!!

  • @Segosh
    @Segosh Год назад

    Функция внутри конструктора промиса выполняется синхронно с остальным кодом. То есть промис прогнал код внутри коллбека из аргумента конструктора и сразу зарезолвился на этапе своего создания. Чтобы выполнять расчёты внутри отдельной таски, надо было, например, использовать queueMicrotask внутри промиса и туда уже коллбеком передать функцию с resolve(Функция). const fibonacci = new Promise((resolve) => queueMicrotask(() => resolve(getFibonacciNumber(num)))); Или можно через setTimeout без параметра delay. Тогда между выполнениями этих двух функций у браузера будет возможность сделать repaint, если это необходимо. Но может я не понял, что за асинхронность нужна была

  • @fokspoks
    @fokspoks Год назад

    отличное видео

  • @lostagrkesh7596
    @lostagrkesh7596 Год назад

    Дай советы для Junior frontend разработчиков, как найти первую работу, если есть опыт создания пет проектов, работы с запросами на базу данных, Свагером и т.д.

    • @agaf89
      @agaf89 Год назад

      Если не работает Онлайн поиск работы, то пробуй оффлайн. Нужно продолжать искать варианты

  • @user-qk7jc1bt2q
    @user-qk7jc1bt2q Год назад

    Стасян буду кодить с тобой!)

    • @agaf89
      @agaf89 Год назад

      Погнали ❤️

  • @helio404
    @helio404 Год назад

    Интересно узнать как вы думаете насчёт того что бы стать мидлом пропуская этап Джуна, при этом мощно развивая свои навыки, за какое время это возможно ?

    • @agaf89
      @agaf89 Год назад

      Реальный боевой опыт работы в команде, почти нереально получить дома в одного

  • @Strochkin
    @Strochkin Год назад

    Получилось) стопорнулся только один раз на скобках после HEX, не понял, что они квадратные.

    • @agaf89
      @agaf89 Год назад

      🔥🔥🔥

  • @MasterPepezio
    @MasterPepezio Год назад

    Классный блог. Спасибо

  • @andrewS85
    @andrewS85 Год назад

    Спасибо что поделился, задача оч. простая но не типовая для собесов)

  • @gregdmitriev2784
    @gregdmitriev2784 Год назад

    а не проще ли было асинхронную часть сделать через asinc/await ?

    • @agaf89
      @agaf89 Год назад

      Нет. Это собес. Там не спрашивают про async await

  • @its_wrong
    @its_wrong Год назад

    Сейчас учусь на высшее на первом курсе, смотря на количество вакансий сначала опечалился, но потом подумал что время идёт и дальше все равно можно будет приспособится и устроиться, но в будущем конечно первое время будет тяжело пересаживаться по началу с зарплаты 120+ на 35-50 😅 сколько Вам потребовалось времени и опыта чтобы стать Senior?

    • @agaf89
      @agaf89 Год назад

      У меня 4-й год идет. Хз, в один момент тебе начинают давать задачи кардинально влияющие на жизнь продукта, берёшь ответственность за сроки и качество или тебя переводят на новый продукт внутри компании, чтобы заложить архитектуру. Сложно посчитать сколько, оно само собой получается 🫶🏼

    • @its_wrong
      @its_wrong Год назад

      @@agaf89 благодарю за ответ)

  • @Strochkin
    @Strochkin Год назад

    На 27 минуте у меня load на месте стоит, а в консоли бесконечно счет идет. Почему визуальная часть может не работать?

    • @agaf89
      @agaf89 Год назад

      Не выполняется условие по завершению интервала

    • @Strochkin
      @Strochkin Год назад

      @@agaf89 это понятно, но у меня пропадает лоад (желтая полоска), а не улетает вправо до бесконечности.

    • @Strochkin
      @Strochkin Год назад

      @@agaf89 очень хочется закончить (повторить) это задание. У меня прям беда какая-то, не могу завершить ни одно видео. В тех видео где нужно какие-то фреймворки устанавливать через npm постоянно с ошибкой устанавливается. Реакт не могу даже стартануть, пишет ошибки, отсутствие скрипта "старт"((( помогите плиз, может спишемся в телеге?

    • @agaf89
      @agaf89 Год назад

      @@Strochkin самый просто вариант, сравнивать мой код со своим - построчно

    • @Strochkin
      @Strochkin Год назад

      @@agaf89 вчера сидел в каждый символ всматривался. А не могли бы вы куда-то выложить код готовый?

  • @victor-trumpel
    @victor-trumpel Год назад

    Согласен с тем, что задача стрессовая и на первый взгляд может показаться капец сложной! Кстати, я думаю, что такую рекурсию лучше вызывать через `requestAnimationFrame()`. Думаю, что с ним анимация будет плавнее на многих браузерах. Я такое набросал - первое как пришло в голову (без особых стилей, т.к. я не увидел точных данных о том, где должен быть спозиционирован лоадер, какой цвет и т.д.): <body></body> <script> const containerDiv = document.createElement('div') const MAX_BAR_LENGTH_PX = 500 containerDiv.style.width = `${MAX_BAR_LENGTH_PX}px` containerDiv.style.height = '50px' containerDiv.style.background = 'gray' containerDiv.style.position = 'relative' document.body.append(containerDiv) const progressDiv = document.createElement('div') progressDiv.style.width = '20px' progressDiv.style.height = '50px' progressDiv.style.background = 'red' containerDiv.append(progressDiv) const progressText = document.createElement('span') progressText.innerText = '0%' progressText.style.position = 'absolute' progressText.style.left = '50%' containerDiv.append(progressText) fillProgress() function fillProgress(progress = 0) { const persent = Math.ceil(progress/MAX_BAR_LENGTH_PX * 100) if (progress >= MAX_BAR_LENGTH_PX) { progressText.innerText = `100%` progressDiv.style.width = `${MAX_BAR_LENGTH_PX}px` return } progressText.innerText = `${persent}%` progressDiv.style.width = `${progress}px` requestAnimationFrame(() => { fillProgress(progress + 5) }) } </script> Но у тебя код хорошо разбит на функции -> лучше структурирован. Круто что ты можешь раскидать так бизнес логику за 15 минут👍

    • @agaf89
      @agaf89 Год назад

      Огонь, тут вопрос был больше сделать за 15 минут и чтобы это заработало. Вопрос оптимизации даже не стоял. Главный посыл видео, что нужно быть готовым к таким стрессам на собесах как лайвкодинг на время 👍🏼

    • @victor-trumpel
      @victor-trumpel Год назад

      @@agaf89 Да я понимаю, просто вкинул свою идею, мало ли кому полезно будет! С посылом на 100% согласен, твой видос очень полезен!

  • @Strochkin
    @Strochkin Год назад

    Спасибо :)

  • @АндрейЛ-щ3э
    @АндрейЛ-щ3э Год назад

    лон ес можно было получить проще. const sliced = string.split(', ').filter((el, i)=> i % 2 !== 0).map(el => [...el].slice(1).join('')).join(' ')

  • @kiralatysheva6794
    @kiralatysheva6794 Год назад

    Привет. Расскажи про свою первую джуновскую работу на удалёнке. Как долго шёл к трудоустройству, какими знаниями владел?

    • @agaf89
      @agaf89 Год назад

      Чуть позже видос запилю ❤️

  • @alotofpain2049
    @alotofpain2049 Год назад

    Ищу позицию lead/senior вот прямо сейчас, стек такой же, как у автора видео. По поводу джунов/мидлов согласен, особенно изменений нет, на мидл-позицию можно легко найти 200-250к. А вот на senior и тем более team lead ситуация поменялась сильно, я собесился как в топ энтепрайз (авито/сбер/альфа), так и в более мелкие компании/европейские стартапы. Ситуация сейчас такая, что вам на senior позицию в пересчете на доллары платят... 4-5k$. Достаточно ли этого для жизни даже в Евросоюзе? Думаю не очень, вы будете жить точно сильно хуже, чем вы живете в РФ. Достаточно ли этой зп в РФ, чтобы купить себе квартиру за несколько лет в мск или построить дом? Думаю нет. Да, зп у старших разработчиков упали не сильно, а вот жизнь стала дороже в разы. Раньше ты даже будучи мидлом ехал в любую страну и тебе хватало, а сейчас нет. Так что да, все плохо, мы теперь не можем себе позволить то, что могли позволить два года назад.

    • @moi-up6nx
      @moi-up6nx 10 месяцев назад

      Раз уж вы не можете себе позволить что говорить про среднестатистическую зарплату

  • @UCgmf-pIUcccps9m1uGjOxaQ
    @UCgmf-pIUcccps9m1uGjOxaQ Год назад

    18:42 А кто нам врёт, и что теперь делать?

    • @agaf89
      @agaf89 Год назад

      В любой непонятной ситуации, дебаж

  • @olegivanov80
    @olegivanov80 Год назад

    Странно конечно, я думал от тебя ждали использования requestAnimationFrame и увеличение прогресс бара через transform, т.к. это вроде гораздо оптимизированней, вроде как.

    • @agaf89
      @agaf89 Год назад

      Ждали результат. Читай описание к видео

    • @olegivanov80
      @olegivanov80 Год назад

      @@agaf89 Понял. Я изначально думал что под "результатом" имеется в виду код.

  • @taashev
    @taashev Год назад

    // node const body = document.body; const root = document.createElement('div'); const container = document.createElement('div'); const info = document.createElement('p'); const progressCustom = document.createElement('div'); const progress = document.createElement('progress'); const loading = document.createElement('div'); root.id = 'root'; // styles body.style = 'margin: 0;'; root.style = ` width: 100%; min-height: 100vh; display: flex; justify-content: center; align-items: center; `; container.style = ` width: 300px; position: relative; `; info.style = ` margin: 0 0 15px 0; font-size: 24px; line-height: 1; text-align: center; `; progressCustom.style = ` width: 100%; height: 30px; border: 1px solid black; box-sizing: border-box; `; progress.style = ` width: 100%; height: 100%; position: absolute; top: 0; left: 0; opacity: 0; `; loading.style = ` width: 0; height: 100%; background: blue; transition: all .1s ease-in; `; // default value loading progress.max = '100'; progress.value = '0'; info.textContent = `${progress.value}%`; loading.style.width = `${progress.value}%`; // add node body.append(root); root.append(container); container.append(info); container.append(progressCustom); container.append(progress); progressCustom.append(loading); // update loading function isLoading(value) { progress.value = value; info.textContent = `${progress.value}%`; loading.style.width = `${progress.value}%`; } (async function () { for (let i = 0; i <= 79; i++) { await new Promise((res) => { return setTimeout(() => { isLoading(i); res(i); }, Math.floor(Math.random() * 200)); }); } })();

    • @taashev
      @taashev Год назад

      видео до коцна не досмотрел) для интереса пошел сделал сам код можно запустить прям в браузере в консоли дев тузл или создаешь index.html, index.js всталяешь код и готово я начинающий веб разраб) так что строго не судите сделал еще рондомную задержку что бы более реалистично смотрелась загрузка получается что прошел тестовое и взяли бы на работу ?) ну или на следующий этап

    • @agaf89
      @agaf89 Год назад

      @@taashev если сделаешь за 15 минут в лайвкодинге, то пропустят на след этап. Читай описание к видео

  • @helplrewerse2925
    @helplrewerse2925 Год назад

    Вот только пет закончил и собрался работу искать. А тут такая дизмараль.

    • @agaf89
      @agaf89 Год назад

      Все будет норм. Это временная история. При желании, устроишься 😏

    • @astkh4381
      @astkh4381 9 месяцев назад

      Иди на бек

  • @АраГорн-ж5ы
    @АраГорн-ж5ы Год назад

    Год коммерческого опыта. С галеры поперли из-за отсутствия проектов. Месяц ищу работу, нет тех собесов. Было 3 созвона с HR, говорят кандидатов много, но если выберем вас, то отпишемся. В итоге ни один не отписался)

    • @agaf89
      @agaf89 Год назад

      Все будет ок. Сейчас даже количество вакансий на HH начало расти. Сейчас все раздублятся после января 👍🏼

    • @АраГорн-ж5ы
      @АраГорн-ж5ы Год назад

      @@agaf89 надеюсь) Иначе придется идти на меньшую ЗП чем была начальная без опыта

    • @gregdmitriev2784
      @gregdmitriev2784 Год назад

      @@agaf89 надеюсь, что нет ! Надеюсь вся рашка прочувствует боль от санкций и пожнёт полнейшее падение экономики и всей недоимперии ! А не фиг нападать на нас, лицемерно называть нас нациками и при этом беспрелельничать так, что сам Гитлер завидует! Слава Украине, жыве Беларусь, свободу этому миру от рашизма тупого !!!

    • @dimashtopor007
      @dimashtopor007 11 месяцев назад

      ​@@agaf89конец октября , ситуация так себе(

  • @rusfungame
    @rusfungame Год назад

    Год опыта работы, с 20го года программирую. Не зовут на собесы просто.

    • @agaf89
      @agaf89 Год назад

      Коммерческий опыт есть ?

    • @rusfungame
      @rusfungame Год назад

      @@agaf89 год на вью 2/3 писал в галере.

    • @astkh4381
      @astkh4381 9 месяцев назад

      Нашел работу?

  • @whiteguards43
    @whiteguards43 Год назад

    с зп все хорошо, собесов нет, работы нет..

    • @agaf89
      @agaf89 Год назад

      Вроде найм активировался…

    • @whiteguards43
      @whiteguards43 Год назад

      @@agaf89 Не знаю собес нет, с работы уволился еще в январе..

  • @Diqeeeeeeeeeei
    @Diqeeeeeeeeeei Год назад

    Если вы хотите 99% как и передали. То нужно либо if перенести в конец. Либо добавить вместо равно >

    • @agaf89
      @agaf89 Год назад

      Да так и есть 🚀

  • @elmirweb6583
    @elmirweb6583 Год назад

    Лучший, летим!

    • @agaf89
      @agaf89 Год назад

      🚀🚀🚀

  • @Izumi4D
    @Izumi4D Год назад

    Зачем создавать функции если ты в итоге в них просто хардкодишь через ctrl+c/v?

    • @agaf89
      @agaf89 Год назад

      Люблю функции ❤️

  • @esp2644
    @esp2644 Год назад

    Как же задолбало - вроде делаешь что то пытаешься, а работы восокодоходной все нету!

    • @agaf89
      @agaf89 Год назад

      Поменяй подход к «работе»

  • @jerrext9272
    @jerrext9272 Год назад

    а как подобное можно было бы решить через async/await?

    • @agaf89
      @agaf89 Год назад

      Навтыкать в двух функциях async - но надо быть готовым решить через промисы

  • @ИмяФамилия-е7м4л

    Тут бы react transition group и проблем бы никаких не было...Я так понимаю это Фронт энд интервью было вообще без фреймворка.

    • @agaf89
      @agaf89 Год назад

      Это лайвкодинг от Hr как пропускной билет к техлиду

  • @connorweb361
    @connorweb361 Год назад

    Очень интересно, и приятная подача. Обращение на "ты" добавляет уюта. Будто друг объясняет, как недавно придумал прикольный проект

  • @даниланеймарк-ю3м

    Классные задания, очень нравится смотреть ролики, жду подобных больше!!!