![Front-end Science with Sergey Puzankov](/img/default-banner.jpg)
- Видео 142
- Просмотров 4 005 408
Front-end Science with Sergey Puzankov
США
Добавлен 6 сен 2015
✅SUBSCRIBE TO OUR CHANNEL❗️
Hi, my name is Sergey Puzankov. I have been in the Frontend for 20 years, including Team Leader positions at Yandex, Luxoft, Wix.
We are running this channel together with my spouse Natalia Puzankova. And we really try to prepare truly useful and high-quality content for you, which will allow you to bust your knowledge, prepare for your technical interview, get your dream job and just understand that Frontend is interesting and exciting! 🙂
Feel free to write your questions in the comments, leave suggestions on the topics of our future videos and send your solutions to tech problems from videos. We try to keep track of all comments and, if it's possible, to respond to everyone.
Your Front-end Science team.🚀👍
👍Have questions? Write to me in direct: puzankovcom
👍If you have any questions about cooperation, please contact us by email: info@frontend-science.com
Hi, my name is Sergey Puzankov. I have been in the Frontend for 20 years, including Team Leader positions at Yandex, Luxoft, Wix.
We are running this channel together with my spouse Natalia Puzankova. And we really try to prepare truly useful and high-quality content for you, which will allow you to bust your knowledge, prepare for your technical interview, get your dream job and just understand that Frontend is interesting and exciting! 🙂
Feel free to write your questions in the comments, leave suggestions on the topics of our future videos and send your solutions to tech problems from videos. We try to keep track of all comments and, if it's possible, to respond to everyone.
Your Front-end Science team.🚀👍
👍Have questions? Write to me in direct: puzankovcom
👍If you have any questions about cooperation, please contact us by email: info@frontend-science.com
Для всех тех, кто пишет про 8 лет на Донбасе (цитата из видео Столицы мира)
Россияне! Разумные, адекватные и мыслящие россияне! Посмотрите это видео (мы взяли кусок из оригинального видео Анатолия Власова канал «Столица мира») и ОБЯЗАТЕЛЬНО ПЕРЕШЛИТЕ его вашим знакомым, соседям, родителям, бабушкам! И особенно тем, кто громче всех кричит про «8 лет на Донбасе»! Откройте им наконец глаза!
Мы лично знаем этих людей - коренных жителей Донецка. Это реальные люди, публичные, блогеры миллионники. Послушайте, что они говорят про то, кто и когда захватил Донецк, про обстрелы и прочее, свидетелями которых они лично были. Хватит прятать голову в песок и верить каждому дерьму, что вам толкает ваш президент!
Уже хватит!! Оглянитесь - ваша армия истребляет уже не 2 региона, а...
Мы лично знаем этих людей - коренных жителей Донецка. Это реальные люди, публичные, блогеры миллионники. Послушайте, что они говорят про то, кто и когда захватил Донецк, про обстрелы и прочее, свидетелями которых они лично были. Хватит прятать голову в песок и верить каждому дерьму, что вам толкает ваш президент!
Уже хватит!! Оглянитесь - ваша армия истребляет уже не 2 региона, а...
Просмотров: 473 770
Видео
The first interview of a self-taught frontender (30+). Solved more than 2000 problems on Codewars
Просмотров 146 тыс.2 года назад
Привет, друзья! Сегодняшнее собеседование будет в поддержку тем, кто свитчится после 30 лет из других сфер деятельности во фронтенд. Наш сегодняшний участник - Антон (32 года) долгое время работал SEO-оптимизатором, после чего решил попробовать себя в роли верстальщика. Хорошее, кстати, решение для тех, кто хочет как можно скорее начинать зарабатывать в новой профессии. На сейчас он проработал ...
Merge intervals - task from JS interview | Solving LeetCode problems
Просмотров 46 тыс.2 года назад
Привет, друзья! Продолжаем решать задачи с javascript собеседований. Сегодня у нас очень популярная задача про объединение интервалов (56. Merge Intervals). Это очень практическая задача, так как она часто встречается в электронных календарях. На LeetCode эта задача помечена средним уровнем сложности: leetcode.com/problems/merge-intervals/ Условия задачи следующие: на вход подается массив интер...
Linked List. Data Structures | Implementation in JS
Просмотров 30 тыс.2 года назад
Привет, друзья. Вы давно просили рассказать не только про алгоритмы, но и про структуры данных. И сегодняшним выпуском мы начинаем серию видео, посвященных именно теме Структур данных (Data Structures). И начнем мы с такой структуры данных, как Связный список. Связный список - одна из базовых структур данных, которая сейчас не часто встречается в повседневной жизни, особенно в работе фронтендер...
2 ways to deploy Node.js project in Heroku (free hosting)
Просмотров 12 тыс.2 года назад
Друзья, вы очень просили в прошлом видео снять ролик про Deploy Heroku. И сегодня мы как раз с вами разберем 2 различных способа развертывания Node.js приложения в сервисе Heroku: 1) сделаем деплой через Heroku Git 2) и с помощью GitHub. Приятного просмотра! Надеюсь после этого видео вы сможете выбрать для себя один из удобных способов деплоя ваших проектов. 👍Как всегда, жду ваши комментарии, в...
Task from JS Interview: The Best Time to Buy Stocks # 2
Просмотров 21 тыс.2 года назад
Привет, друзья! Продолжаем серию задач про акции. И сегодня условие таково: на вход подается массив с числами - цена акций в каждый конкретный день. Необходимо найти максимальную прибыль, которую можно заработать, продавая и покупая акции. В отличии от первой версии задачи (смотреть здесь: ruclips.net/video/wm8hhQyIR9o/видео.html ) в этот раз мы можем покупать и продавать акции столько раз, ско...
Becoming a Frontender After 30: From Circus Arcobat to Front-End Developer
Просмотров 133 тыс.2 года назад
Друзья, привет! Ура, у нас новый выпуск фронтенд-собеседования! Сегодня у нас в гостях очень позитивный и вдохновляющий герой - Александр! Александр работает профессиональным акробатом в одном из самых известных цирков Лас-Вегаса. Ему 31 год, у него семья, постоянная работа из совершенно иной сферы - и он успевает учить и практиковать фронтенд и идти к своей цели - стать фронтенд-разработчиком ...
Materials for pet projects: a must have for a fresh frontender
Просмотров 40 тыс.2 года назад
Привет, друзья! Прошлое видео с идеями для проектов в портфолио получило большой отклик. И вы просили в комментариях подсказать, где же искать такие крутые материалы для быстрого создания ваших пэт-проектов. 💎Сегодня я делюсь с вами огромной (гигантской!) подборкой абсолютно БЕСПЛАТНЫХ ресурсов для разных этапов создания ваших проектов: 1) начиная от дизайна, 2) разработки шаблонов (верстки), 3...
Pet-projects. What projects must a beginner front-end developer do?
Просмотров 161 тыс.2 года назад
Друзья, привет! Наконец-то мы подошли к долгожданной теме пэт-проектов. В этом видео я собрал для вас 30 классных идей для ваших первых проектов в портфолио. Я также дал подсказки, как вы всегда можете проапргрейдить любой pet-project, где и какую функциональность доработать и какие фишки добавить, чтобы выделиться в глазах работодателя и впоследствии получить заветный офер. Мы также разберем с...
LeetCode task about collecting rainwater | JavaScript interview
Просмотров 19 тыс.2 года назад
Привет, друзья! Продолжаем решать задачи про воду с LeetCode. И сегодня мы разберем задачу про сбор дождевой воды - 42. Trapping Rain Water. Эта задача Hard уровня сложности - такие задают на собеседованиях миддлам и синьорам, поэтому, джуны, в комментах не бояться! 😉 По условиям: у нас на вход подается массив с высотой рельефа. Представим себе, что каждая "ячейка" рельефа у нас шириной 1 и выс...
Task from a front-end interview: Finding the largest container of water | JavaScript
Просмотров 22 тыс.2 года назад
Привет, друзья! Продолжаем решать задачки с собеседований! Сегодня у нас интересная задача про воду - нам необходимо найти контейнер, вмещающий максимальное количество воды (11. Container With Most Water). Эта задача помечена Medium уровнем сложности на Leetcode. На вход нам подается массив с числами. Каждое число представляет собой вертикальную линию заданной высоты. Все линии находятся друг о...
How to make changes in a file invisible to git
Просмотров 16 тыс.2 года назад
Ура, друзья, мы все СУПЕР молодцы - дошли до последнего видео в нашем недельном марафоне git week! Я нами горжусь!! 🎉 🎉🎉 Сегодня поговорим про "нереальную уличную магию", которую я вам обещал в предыдущих видео. А именно про git update-index assume-unchanged. Эта команда позволяет пометить проиндексированный гитом файл - как неменяющийся (даже если в нем существуют изменения). То есть с одной с...
How to fix the last commit in git
Просмотров 13 тыс.2 года назад
👍Ура! Шестой день нашего git week! Мы с вами молодцы! Сегодня будем разбирать,. как можно исправить последний коммит в git. В одном из наших предыдущих видео я уже рассказывал про такую команду, как git commit amend. Она позволяет внести изменения в последний сделанный коммит, при этом вы можете изменить как само содержание коммита, так и коммит сообщение. А сегодня мы рассмотрим более подробно...
Important git clone features you didn't know about!
Просмотров 6 тыс.2 года назад
Друзья, на очереди пятый день git week. Сегодняшнее видео будет про команду Git Clone. Я уверен, что вы все пользовались этой командой для клонирования репозитория с внешнего сервера. Но сегодня я хочу вам рассказать про менее популярные, но очень полезные возможности этой команды. Мы рассмотрим, как можно склонировать репозиторий из какой-то локальной папки, как склонировать только одну ветку ...
How to delete branches in git
Просмотров 14 тыс.2 года назад
Друзья, это наш четвёртый день недели git и сегодня поговорим про ветки. Дело в том, что в вашем репозитории хранятся, как локальные ветки, так и копии веток из удаленных репозиториев. И процесс работы с ними отличается. В этом видео мы рассмотрим с вами, как получить список локальных и внешних веток. Как удалить локальную или внешнюю ветку. Как почистить локальный репозиторий от уже удаленных ...
Git clean: cleaning the working directory from unnecessary files
Просмотров 10 тыс.2 года назад
Git clean: cleaning the working directory from unnecessary files
How to save temporarily changes in GIT using git stash (without committing)
Просмотров 14 тыс.2 года назад
How to save temporarily changes in GIT using git stash (without committing)
Git reset: difference between soft, mixed and hard
Просмотров 16 тыс.2 года назад
Git reset: difference between soft, mixed and hard
Frontend interview. Ilnura, the first job right after Yandex Practicum
Просмотров 166 тыс.2 года назад
Frontend interview. Ilnura, the first job right after Yandex Practicum
How to speed up the development process in WebStorm | Andrey Starovoit Team Lead of the WebStorm
Просмотров 41 тыс.2 года назад
How to speed up the development process in WebStorm | Andrey Starovoit Team Lead of the WebStorm
Solving the problem from JS interview - The valid sequence of brackets | LeetCode problems
Просмотров 38 тыс.2 года назад
Solving the problem from JS interview - The valid sequence of brackets | LeetCode problems
Task from JS Interview: The best time to buy stock #1 | Tasks from LeetCode
Просмотров 17 тыс.2 года назад
Task from JS Interview: The best time to buy stock #1 | Tasks from LeetCode
How to calculate the complexity of an algorithm by BIG O | The clearest explanation!
Просмотров 121 тыс.2 года назад
How to calculate the complexity of an algorithm by BIG O | The clearest explanation!
Interview Task: Brick Wall | JavaScript
Просмотров 22 тыс.2 года назад
Interview Task: Brick Wall | JavaScript
Task from JS interview - Find the intersection of two arrays | LeetCode
Просмотров 26 тыс.3 года назад
Task from JS interview - Find the intersection of two arrays | LeetCode
Frontend Interview of a Junior Developer. Freelancer, student, 20 years old
Просмотров 92 тыс.3 года назад
Frontend Interview of a Junior Developer. Freelancer, student, 20 years old
Problem from JS interview: The first unique character in a string.
Просмотров 16 тыс.3 года назад
Problem from JS interview: The first unique character in a string.
Task from JS interview: Count the number of islands in the matrix | Number of Islands
Просмотров 19 тыс.3 года назад
Task from JS interview: Count the number of islands in the matrix | Number of Islands
Required Soft Skills. What soft skills should have a developer in 2021
Просмотров 26 тыс.3 года назад
Required Soft Skills. What soft skills should have a developer in 2021
Interview of a Junior Frontend developer. Trainee frontender 19 years old from EPAM
Просмотров 405 тыс.3 года назад
Interview of a Junior Frontend developer. Trainee frontender 19 years old from EPAM
версия для тайпскрипта (достаточно громоздкая, зато читабельная + типы): const neededSum = 250; enum Banknotes { Thousand = 1000, FiveHundred = 500, Hundred = 100, Fifty = 50, Thirty = 30, } const balances: Record<Banknotes, number> = { 1000: 5, 500: 2, 100: 5, 50: 100, 30: 6, }; async function main(neededSum: number) { const banknotes = Object.keys(balances).map((banknote) => Number(banknote)); const result: Record<number, number> = {}; let currentSum = 0; for (let i = banknotes.length - 1; i >= 0; i--) { const { sumGiven, numOfBanknotesUsed, shouldContinue } = checkBanknote( banknotes[i], currentSum, neededSum ); if (numOfBanknotesUsed > 0) { result[banknotes[i]] = numOfBanknotesUsed; } if (shouldContinue) { currentSum += sumGiven; if (currentSum === neededSum) { break; } continue; } if (!shouldContinue) { currentSum = sumGiven; break; } } if (currentSum < neededSum) { throw Error( "Please input a different amount, only multiples of 30 and 50 are accepted!" ); } console.log(result); return result; } interface CheckBanknoteResult { shouldContinue: boolean; sumGiven: number; numOfBanknotesUsed: number; } function checkBanknote( banknote: Banknotes, currentSum: number, neededSum: number ): CheckBanknoteResult { const numOfBanknotesAvailable = balances[banknote]; if (numOfBanknotesAvailable === 0) { return { shouldContinue: true, numOfBanknotesUsed: 0, sumGiven: 0, }; } const minToGiveSum = neededSum - currentSum; const numOfBanknotesUsed = Math.min( Math.floor(minToGiveSum / banknote), Math.floor(neededSum / banknote) ); const shouldContinue = numOfBanknotesUsed * banknote < neededSum; const sumGiven = Math.min(minToGiveSum, numOfBanknotesUsed * banknote); return { shouldContinue: shouldContinue, numOfBanknotesUsed: numOfBanknotesUsed, sumGiven: numOfBanknotesUsed > 0 ? sumGiven : 0, }; } main(neededSum);
🤩
А зачем было удалять мой комментарий? Что-то плохое в нем? Я просил кого-то объяснить, почему при изменении tail меняется head (кстати, уже разобрался), в видео про это не было, так чем мой комментарий не устроил? Или мб ютуб удалил, хотя там не было ничего запрещенного
Было все понятно до последнего примера
Еще есть сценарий, когда нужно перенести конкретный коммит из другого репозитория
два указателя. на 1-й и 2-й масив цикл ду вайл пока не дойдет один указатель до конца. сортируем массивы. указатели оба на 0-м елементе. если одинаковые- добавляем в результат. если разные - увеличиваем указатель того массива где значение меньше. итого. сортировка 2-х масивов и проход O(m+n)
Решил поиграться и доьавить возможность игры на понижение. Получилось как-то так: function count (prices) { let profit = 0; for (let i = 0; i < prices.length; i++) { if(i > 0) { prices[i] > prices[i - 1] ? profit = profit + prices[i] : profit = profit - prices[i] } else { prices[0] > prices[1] ? profit = profit + prices[0] : profit = profit - prices[0] } } return profit } Обосрать мой код можете в реплаях
У нас в команде появилась устойчивое выполнение... Черипикать свой коммит))
function firstUnigEl(str) { const map = {}; for (let i = 0; i < str.length; i++) { const el = str[i]; map[el] ? map[el].push(i) : (map[el] = [i]); } const res = Object.values(map) .filter((el) => el.length == 1) .sort((a, b) => a - b) .shift(); return res !== undefined ? res[0] : -1; } вот мое решение они проще чутка. По поводу последнего .sort((a, b) => a - b) .shift(); sort нужен чтобы я могу гарантировать то что у меня будет отсортированный массив, так как влруг поменяю фишку у объектов, что ключи сортируются.
Большое спасибо за видео! Владимир, вы огромный молодец!!! Вы очень смелый!!! Если бы можно было поставить 1000 лайков, я бы поставила, очень круто! Спасибо за вашу смелость, опыт и вопросы!
А в чем разница между merge and rebase?
const anagram = (str1, str2) => { const sortedStr1 = str1.split('').sort().join(''); const sortedStr2 = str2.split('').sort().join(''); return sortedStr1 === sortedStr2; }
конч проукраинский
const checkIntervals = ([,a], [b]) => b <= a; const mergeInterval = (a, b = a) => [a[0], Math.max(...a, ...b)]; const merge = intervals => intervals .sort(([a], [b]) => a - b) .reduce((acc, value) => { const findedInterval = acc.find((interval) => checkIntervals(interval, value)) return [ ...acc.filter(interval => interval !== findedInterval), mergeInterval(value, findedInterval), ]; }, []);
Очень круто спасибо.❤
Наконец-то)) спасибо вам, очень хорошо объяснили, я до этого читала. И никак не могла понять. У меня скопилось много разных версий. Так и жила несколько лет 😀. Документацию к гиту писал какой - то душнила, чтоб было максимально непонятно и запутанно.
Классный ролик, спасибо)❤
По идеи у вашего решения сложность O(n + n), разве нет? Цикла же два. Предлагаю вариант O(n): function firstUniqChar(s: string) { const hashUniq = new Map(); s.split('').forEach((char, i) => { hashUniq.has(char) ? hashUniq.delete(char) : hashUniq.set(char, i); }) if (hashUniq.size === 0) return -1; return hashUniq.values().next().value; }
А если делать всегда merge, но в какой то момент в конце сделать сквош, получиться же один коммит на задачу
Не хотел делать O(n^2) и решил сделать O(n*log n) с помощью бинарной сортировки. Это пример того - что если не думать о структуре данных то алгоритмы мало полезны. Спасибо за решение function intersect(arr1: Array<number>, arr2: Array<number>) { arr1.sort((a, b) => a - b); arr2.sort((a, b) => a - b); const intersectArr = []; function binSearch(findValue: number, arr: Array<number>) { let left = 0; let right = arr.length - 1; while(left <= right) { const middle = Math.floor((left + right) / 2); const middleValue = arr[middle]; if (middleValue === findValue) { arr.splice(middle, 1); return true; } else if (middleValue > findValue) { right = middle - 1; } else { left = middle + 1; } } return false; } arr1.forEach((item) => { if (binSearch(item, arr2)) intersectArr.push(item); }) return intersectArr; };
Спасибо, качественная подача ✌
Отдельно добавлю, спасибо за видео о донбасе и то что там произошло на самом деле 🤝
Спасибо за объяснение!
Полезно) спасибо за видео вам
Спасибо за это видео
kaef
Дай тебе Бог здоровья, хлопчик, наконец-то дошло до старика.
8:48 - начало
Смотрю такой - "Как удалить дубликаты из отсортированного массива? | Задача с Leetcode", о, думаю, дай гляну может чего кроме set предложат. И правда бла-бла-бла splice... О думаю, надо затестить, а потом смотрю - ёпт, это не питон а ява )))
Это не Ява)
@@inoyakaigor да? Ну ладно, но и питон тоже )
@@VasiliyFominykh это Яваскрипт =)
@@inoyakaigor ))) Ещёб их различать )
Первый решение схоже с вашим не подсматривая. Спасибо function isValid(staples: string) { const stack = []; const mapStaples = { "(": ")", "[": "]", "{": "}", } function isOpening(staple) { return [...Object.keys(mapStaples)].includes(staple); } function isValidClosure(value: string, stapleOpening: string) { if (value === mapStaples[stapleOpening]) return true; return false }; for (const staple of staples) { if (isOpening(staple)) { stack.push(staple); continue; } else if (isValidClosure(staple, stack.at(-1))) { stack.pop(); } else { return false; } } return true; }
Дякую!
Полезные видео, приятная подача. Спасибо!
Спасибо function checkPath(start, end) { const forbiddenCoordinates = {}; function isForbiddenCoordinates(y, x) { return forbiddenCoordinates[y]?.includes(x); } function isAvailableCoordinates(level, x) { return level?.[x] === 0; } function move(position) { const {x, y} = position; if (x === end.x && y === end.y) return true; const level = maze[y]; const nextLevel = maze?.[y + 1]; const availableCoordinates = []; if (isAvailableCoordinates(level, x - 1) && !isForbiddenCoordinates(y, x - 1)) availableCoordinates.push({x: x - 1, y}); if (isAvailableCoordinates(level, x + 1) && !isForbiddenCoordinates(y, x + 1)) availableCoordinates.push({x: x + 1, y}); if (isAvailableCoordinates(nextLevel, x) && !isForbiddenCoordinates(y + 1, x)) availableCoordinates.push({x: x, y: y + 1}); forbiddenCoordinates[y] ? forbiddenCoordinates[y].push(x) : forbiddenCoordinates[y] = [x]; if (availableCoordinates.length === 0) { return false; } for(let coordinate of availableCoordinates) { if (move(coordinate)) return true; } return false; } return move(start); }
Привет. Спасибо за видео. Я только начал изучать и у меня может странный вопрос. Если я находясь в ветке "фича" сделаю git merge main, то разве моя ветка "фича" не станет единственной и главной? Я думаю это не по православному и нужно мержить свою ветку в "мейн". Я ошибаюсь?
респект за имена с теории большого взрыва 😊
Очень полезное видео. А у Вас нет случайно урока где такую же функцию можно реализовать с использованием ts?
Не чего не понял что значит эвальвелено?
Походу в епам нифига не учат
Спасибо за видео! Очень полезное оказалось для меня)
Спасибо, мне сегодня она попалась в собесе
НЕ понимаю почему сразу не показываете ситуации как откатится в remote ветках, ведь это еще большая проблема чем в локальной когда что то пошло не так...
такое себе, этот rebase... лучше старый добрый merge и никаких проблем
если проходить с конца массива то не надо заморачиваться над смещением
А что делать ,если команды git вообще не выполняются Пишу git add мой файл ,и не происходит ничего и файл не добавляется, при git commit ошибку выдает? Только недавно начал в эту тему погружаться, не судите строго
У тебя создан репозиторий локальный? Гит есть на компе?
Огромное спасибо
Огромное спасибо! Мира вам....и нам
Спасибо, очень полезно
const trap = (heights) => { let result = 0; for(let i = 1; i < heights.length - 2; i++) { let maxLeft = Math.max(...heights.slice(0,i)) let maxRight = Math.max(...heights.slice(i + 1)) let minHeight = Math.min(maxLeft,maxRight) let quantity = minHeight - heights[i]; if(quantity > 0){ result += quantity } } return result }
Или я жескто туплю. Или эта тема действительно очень сложная для понимания!
Хорошее объяснение, спасибо