- Видео 5
- Просмотров 45 185
Станислав Агафонов
Россия
Добавлен 6 дек 2012
На канале пишем код и говорю IT мысли. Поймал Дзен в IT. Живу в Москве. В прошлом врач. Сейчас 🍅 Frontend developer.
Проект загрузка файлов в облако. React, SCSS, Firebase
Исходники github.com/agaf89/upload
В этом видео показана простая реализация загрузчика файлов в Firebase на React.
Я думаю, это приложение будет неплохим кейсом в портфолио джуна.
На базе этого приложения можно создать имитацию целой файловой системы.
Telegram t.me/bzuqpo
Instagram agaf89
#frontend #айти #обучение
В этом видео показана простая реализация загрузчика файлов в 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
JavaScript-изеры вперед)
условие первой задачи было вывести строку "лон ес" а у Вас в конце получился массив с элементами "лон" и "ес". Задание выполнено не доконца... Решение первой задачи одной строкой str.split(', ').filter((_, i) => i % 2).map(val => val.substr(1)).join(' ');
Отлично молодец 👍🏼
Для фибоначчи можно сделать так: 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); }; Рекурсивной функцией
Рекурсия потребляет больше ресурсов, поэтому лучше через цикл решать
Спасибо за отличный урок! Документация это, конечно, хорошо, но без таких видео тяжко идёт
Я бы лучше регуляркой слова вытащил, иначе если будут случайно двойные пробелы, без пробелов или вообще другие символы, то по пизде пойдёт ответ) ну и slice(1) можно просто написать) str.match(/[а-яa-z]+/gi) .reduce((acc, el, i) => { if (i % 2 > 0) { acc.push(el.slice(1)); } return acc; }, []) .join('');
С регуляркой идея интересная, но в коде всё же не учтён один граничный случай. При передаче пустой строки (или не содержащей букв) должна вернуться пустая строка.
интересная задача, хорошо, что вы рассказали
Спасибо вам за контент, интересно было послушать
Спасибо за интересный квест с участием JS, в данный момент начинаю изучать его и очень сложно заходит , а на данном уроке что-то да понял, c примера всё реализовал с 1 раза без сложностей. Хотелось бы побольше обучающих примеров, подобно данному с участием JS. Как указал 1 из комментирующих , скобки не увидел сразу ,т.к. очень отдаленный зум в записи и нужно прям всматриваться в экран ,что бы увидеть некоторый элемент.
Очень полезное видео 👍
Вместо промисов можно было async await, я думаю, использовать. Они тоже промис возвращают
Даже сеньер тут наделал ошибок, поэтому говорить что для Джуна это легко не стоит .
Станислав, а зачем передавать width : 75 если вы его не использовали?
вирішувати пошук чисел по фібоначі, за допомогою міліона змінних - точно рівень "сіньйора") Типовий інфоциган
Не понимаю
Хотите жить в нормальной стране и получать хорошие деньги, едьте в Сша либо в европу. Нормальные программисты в рашке не остаются, это известно по примеру Павела Дурова
В любой стране можно хорошо зарабатывать 😉
Ну ты и олень. Попробуй поедь ты там никто и брать тебя не будут если хотя-бы гринки нет
Хоть 10 лет опыта имей
сделал по своему, но главное что работает: 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)
подскажите плагин, который вам подсказывает, как называется ?
Tabnine
Насколько же это удобно… Огромное спасибо.
если использовать рекурсию при вычислении числа Фибоначчи и использовать 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
Круто, молодец ❤️
753 вызова функции fib для того, чтобы вычислить 13 число фибоначи. Такое себе решение
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 на решение, но я даже не джун, даже не стажер, автор точно мидл?
Ты классный! Иди спать 🛌
Сверхдиржава!!!
Функция внутри конструктора промиса выполняется синхронно с остальным кодом. То есть промис прогнал код внутри коллбека из аргумента конструктора и сразу зарезолвился на этапе своего создания. Чтобы выполнять расчёты внутри отдельной таски, надо было, например, использовать queueMicrotask внутри промиса и туда уже коллбеком передать функцию с resolve(Функция). const fibonacci = new Promise((resolve) => queueMicrotask(() => resolve(getFibonacciNumber(num)))); Или можно через setTimeout без параметра delay. Тогда между выполнениями этих двух функций у браузера будет возможность сделать repaint, если это необходимо. Но может я не понял, что за асинхронность нужна была
отличное видео
Дай советы для Junior frontend разработчиков, как найти первую работу, если есть опыт создания пет проектов, работы с запросами на базу данных, Свагером и т.д.
Если не работает Онлайн поиск работы, то пробуй оффлайн. Нужно продолжать искать варианты
Стасян буду кодить с тобой!)
Погнали ❤️
Интересно узнать как вы думаете насчёт того что бы стать мидлом пропуская этап Джуна, при этом мощно развивая свои навыки, за какое время это возможно ?
Реальный боевой опыт работы в команде, почти нереально получить дома в одного
Получилось) стопорнулся только один раз на скобках после HEX, не понял, что они квадратные.
🔥🔥🔥
Классный блог. Спасибо
❤️
Спасибо что поделился, задача оч. простая но не типовая для собесов)
а не проще ли было асинхронную часть сделать через asinc/await ?
Нет. Это собес. Там не спрашивают про async await
Сейчас учусь на высшее на первом курсе, смотря на количество вакансий сначала опечалился, но потом подумал что время идёт и дальше все равно можно будет приспособится и устроиться, но в будущем конечно первое время будет тяжело пересаживаться по началу с зарплаты 120+ на 35-50 😅 сколько Вам потребовалось времени и опыта чтобы стать Senior?
У меня 4-й год идет. Хз, в один момент тебе начинают давать задачи кардинально влияющие на жизнь продукта, берёшь ответственность за сроки и качество или тебя переводят на новый продукт внутри компании, чтобы заложить архитектуру. Сложно посчитать сколько, оно само собой получается 🫶🏼
@@agaf89 благодарю за ответ)
На 27 минуте у меня load на месте стоит, а в консоли бесконечно счет идет. Почему визуальная часть может не работать?
Не выполняется условие по завершению интервала
@@agaf89 это понятно, но у меня пропадает лоад (желтая полоска), а не улетает вправо до бесконечности.
@@agaf89 очень хочется закончить (повторить) это задание. У меня прям беда какая-то, не могу завершить ни одно видео. В тех видео где нужно какие-то фреймворки устанавливать через npm постоянно с ошибкой устанавливается. Реакт не могу даже стартануть, пишет ошибки, отсутствие скрипта "старт"((( помогите плиз, может спишемся в телеге?
@@Strochkin самый просто вариант, сравнивать мой код со своим - построчно
@@agaf89 вчера сидел в каждый символ всматривался. А не могли бы вы куда-то выложить код готовый?
Согласен с тем, что задача стрессовая и на первый взгляд может показаться капец сложной! Кстати, я думаю, что такую рекурсию лучше вызывать через `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 минут👍
Огонь, тут вопрос был больше сделать за 15 минут и чтобы это заработало. Вопрос оптимизации даже не стоял. Главный посыл видео, что нужно быть готовым к таким стрессам на собесах как лайвкодинг на время 👍🏼
@@agaf89 Да я понимаю, просто вкинул свою идею, мало ли кому полезно будет! С посылом на 100% согласен, твой видос очень полезен!
Спасибо :)
лон ес можно было получить проще. const sliced = string.split(', ').filter((el, i)=> i % 2 !== 0).map(el => [...el].slice(1).join('')).join(' ')
выглядить не проще)
глаза сломать можно !))
Это и нечитабельно и неоптимально, вы делаете два прохода по массиву вместо одного
Привет. Расскажи про свою первую джуновскую работу на удалёнке. Как долго шёл к трудоустройству, какими знаниями владел?
Чуть позже видос запилю ❤️
Ищу позицию lead/senior вот прямо сейчас, стек такой же, как у автора видео. По поводу джунов/мидлов согласен, особенно изменений нет, на мидл-позицию можно легко найти 200-250к. А вот на senior и тем более team lead ситуация поменялась сильно, я собесился как в топ энтепрайз (авито/сбер/альфа), так и в более мелкие компании/европейские стартапы. Ситуация сейчас такая, что вам на senior позицию в пересчете на доллары платят... 4-5k$. Достаточно ли этого для жизни даже в Евросоюзе? Думаю не очень, вы будете жить точно сильно хуже, чем вы живете в РФ. Достаточно ли этой зп в РФ, чтобы купить себе квартиру за несколько лет в мск или построить дом? Думаю нет. Да, зп у старших разработчиков упали не сильно, а вот жизнь стала дороже в разы. Раньше ты даже будучи мидлом ехал в любую страну и тебе хватало, а сейчас нет. Так что да, все плохо, мы теперь не можем себе позволить то, что могли позволить два года назад.
Раз уж вы не можете себе позволить что говорить про среднестатистическую зарплату
18:42 А кто нам врёт, и что теперь делать?
В любой непонятной ситуации, дебаж
Странно конечно, я думал от тебя ждали использования requestAnimationFrame и увеличение прогресс бара через transform, т.к. это вроде гораздо оптимизированней, вроде как.
Ждали результат. Читай описание к видео
@@agaf89 Понял. Я изначально думал что под "результатом" имеется в виду код.
// 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)); }); } })();
видео до коцна не досмотрел) для интереса пошел сделал сам код можно запустить прям в браузере в консоли дев тузл или создаешь index.html, index.js всталяешь код и готово я начинающий веб разраб) так что строго не судите сделал еще рондомную задержку что бы более реалистично смотрелась загрузка получается что прошел тестовое и взяли бы на работу ?) ну или на следующий этап
@@taashev если сделаешь за 15 минут в лайвкодинге, то пропустят на след этап. Читай описание к видео
Вот только пет закончил и собрался работу искать. А тут такая дизмараль.
Все будет норм. Это временная история. При желании, устроишься 😏
Иди на бек
Год коммерческого опыта. С галеры поперли из-за отсутствия проектов. Месяц ищу работу, нет тех собесов. Было 3 созвона с HR, говорят кандидатов много, но если выберем вас, то отпишемся. В итоге ни один не отписался)
Все будет ок. Сейчас даже количество вакансий на HH начало расти. Сейчас все раздублятся после января 👍🏼
@@agaf89 надеюсь) Иначе придется идти на меньшую ЗП чем была начальная без опыта
@@agaf89 надеюсь, что нет ! Надеюсь вся рашка прочувствует боль от санкций и пожнёт полнейшее падение экономики и всей недоимперии ! А не фиг нападать на нас, лицемерно называть нас нациками и при этом беспрелельничать так, что сам Гитлер завидует! Слава Украине, жыве Беларусь, свободу этому миру от рашизма тупого !!!
@@agaf89конец октября , ситуация так себе(
Год опыта работы, с 20го года программирую. Не зовут на собесы просто.
Коммерческий опыт есть ?
@@agaf89 год на вью 2/3 писал в галере.
Нашел работу?
с зп все хорошо, собесов нет, работы нет..
Вроде найм активировался…
@@agaf89 Не знаю собес нет, с работы уволился еще в январе..
Если вы хотите 99% как и передали. То нужно либо if перенести в конец. Либо добавить вместо равно >
Да так и есть 🚀
Лучший, летим!
🚀🚀🚀
Зачем создавать функции если ты в итоге в них просто хардкодишь через ctrl+c/v?
Люблю функции ❤️
Как же задолбало - вроде делаешь что то пытаешься, а работы восокодоходной все нету!
Поменяй подход к «работе»
а как подобное можно было бы решить через async/await?
Навтыкать в двух функциях async - но надо быть готовым решить через промисы
Тут бы react transition group и проблем бы никаких не было...Я так понимаю это Фронт энд интервью было вообще без фреймворка.
Это лайвкодинг от Hr как пропускной билет к техлиду
Очень интересно, и приятная подача. Обращение на "ты" добавляет уюта. Будто друг объясняет, как недавно придумал прикольный проект
Классные задания, очень нравится смотреть ролики, жду подобных больше!!!