Тёмный
Front-end Science with Sergey Puzankov
Front-end Science with Sergey Puzankov
Front-end Science with Sergey Puzankov
Подписаться
✅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: instagram.com/puzankovcom/
👍If you have any questions about cooperation, please contact us by email: info@frontend-science.com
How to fix the last commit in git
6:59
2 года назад
How to delete branches in git
6:55
2 года назад
Interview Task: Brick Wall | JavaScript
10:19
2 года назад
Комментарии
@sazonikv5086
@sazonikv5086 4 дня назад
А в чем разница между merge and rebase?
@user-oj7ln2nb9k
@user-oj7ln2nb9k 8 дней назад
const anagram = (str1, str2) => { const sortedStr1 = str1.split('').sort().join(''); const sortedStr2 = str2.split('').sort().join(''); return sortedStr1 === sortedStr2; }
@miloman1995s
@miloman1995s 9 дней назад
конч проукраинский
@user-fj4es6ij4n
@user-fj4es6ij4n 13 дней назад
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), ]; }, []);
@okelove9807
@okelove9807 16 дней назад
Очень круто спасибо.❤
@user-cn3zn4gi8o
@user-cn3zn4gi8o 17 дней назад
Наконец-то)) спасибо вам, очень хорошо объяснили, я до этого читала. И никак не могла понять. У меня скопилось много разных версий. Так и жила несколько лет 😀. Документацию к гиту писал какой - то душнила, чтоб было максимально непонятно и запутанно.
@nk_77777
@nk_77777 20 дней назад
Классный ролик, спасибо)❤
@user-no7sl1yk3f
@user-no7sl1yk3f 23 дня назад
По идеи у вашего решения сложность 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; }
@user-uw8hy1lc4p
@user-uw8hy1lc4p 23 дня назад
А если делать всегда merge, но в какой то момент в конце сделать сквош, получиться же один коммит на задачу
@user-no7sl1yk3f
@user-no7sl1yk3f 23 дня назад
Не хотел делать 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; };
@wbrframe
@wbrframe 25 дней назад
Спасибо, качественная подача ✌
@wbrframe
@wbrframe 25 дней назад
Отдельно добавлю, спасибо за видео о донбасе и то что там произошло на самом деле 🤝
@maksimdubinin
@maksimdubinin 27 дней назад
Спасибо за объяснение!
@suspiciousgoose7904
@suspiciousgoose7904 27 дней назад
Полезно) спасибо за видео вам
@larisaplatova1644
@larisaplatova1644 27 дней назад
Спасибо за это видео
@voidcode2534
@voidcode2534 Месяц назад
kaef
@peacedets
@peacedets Месяц назад
Дай тебе Бог здоровья, хлопчик, наконец-то дошло до старика.
@svet0v
@svet0v Месяц назад
8:48 - начало
@VasiliyFominykh
@VasiliyFominykh Месяц назад
Смотрю такой - "Как удалить дубликаты из отсортированного массива? | Задача с Leetcode", о, думаю, дай гляну может чего кроме set предложат. И правда бла-бла-бла splice... О думаю, надо затестить, а потом смотрю - ёпт, это не питон а ява )))
@inoyakaigor
@inoyakaigor 20 дней назад
Это не Ява)
@VasiliyFominykh
@VasiliyFominykh 20 дней назад
@@inoyakaigor да? Ну ладно, но и питон тоже )
@inoyakaigor
@inoyakaigor 20 дней назад
@@VasiliyFominykh это Яваскрипт =)
@VasiliyFominykh
@VasiliyFominykh 20 дней назад
@@inoyakaigor ))) Ещёб их различать )
@user-no7sl1yk3f
@user-no7sl1yk3f Месяц назад
Первый решение схоже с вашим не подсматривая. Спасибо 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; }
@VolodymyrNazarenko-ox8ox
@VolodymyrNazarenko-ox8ox Месяц назад
Дякую!
@AlisaLisa-sx2te
@AlisaLisa-sx2te Месяц назад
Полезные видео, приятная подача. Спасибо!
@user-no7sl1yk3f
@user-no7sl1yk3f Месяц назад
Спасибо 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); }
@nikonlaw
@nikonlaw Месяц назад
Привет. Спасибо за видео. Я только начал изучать и у меня может странный вопрос. Если я находясь в ветке "фича" сделаю git merge main, то разве моя ветка "фича" не станет единственной и главной? Я думаю это не по православному и нужно мержить свою ветку в "мейн". Я ошибаюсь?
@user-sy2dd8do3t
@user-sy2dd8do3t Месяц назад
респект за имена с теории большого взрыва 😊
@boryskatowsky5190
@boryskatowsky5190 Месяц назад
Очень полезное видео. А у Вас нет случайно урока где такую же функцию можно реализовать с использованием ts?
@extreametv3639
@extreametv3639 Месяц назад
Не чего не понял что значит эвальвелено?
@user-mg4nn6gi5n
@user-mg4nn6gi5n Месяц назад
Походу в епам нифига не учат
@heybeachMIN
@heybeachMIN Месяц назад
Спасибо за видео! Очень полезное оказалось для меня)
@SchnippSchnappShnappi
@SchnippSchnappShnappi Месяц назад
Спасибо, мне сегодня она попалась в собесе
@cleverscript
@cleverscript 2 месяца назад
НЕ понимаю почему сразу не показываете ситуации как откатится в remote ветках, ведь это еще большая проблема чем в локальной когда что то пошло не так...
@Rozalinaag
@Rozalinaag 2 месяца назад
такое себе, этот rebase... лучше старый добрый merge и никаких проблем
@asktosimon
@asktosimon 2 месяца назад
если проходить с конца массива то не надо заморачиваться над смещением
@user-bb6cs6wk6y
@user-bb6cs6wk6y 2 месяца назад
А что делать ,если команды git вообще не выполняются Пишу git add мой файл ,и не происходит ничего и файл не добавляется, при git commit ошибку выдает? Только недавно начал в эту тему погружаться, не судите строго
@thekiruhan2616
@thekiruhan2616 Месяц назад
У тебя создан репозиторий локальный? Гит есть на компе?
@moguha
@moguha 2 месяца назад
Огромное спасибо
@moguha
@moguha 2 месяца назад
Огромное спасибо! Мира вам....и нам
@EvgenyTalagaev
@EvgenyTalagaev 2 месяца назад
Спасибо, очень полезно
@user-cr3gf4mh2n
@user-cr3gf4mh2n 2 месяца назад
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 }
@kemalgurbansahadow9631
@kemalgurbansahadow9631 2 месяца назад
Или я жескто туплю. Или эта тема действительно очень сложная для понимания!
@radiakendal5769
@radiakendal5769 2 месяца назад
Хорошее объяснение, спасибо
@Ramosok
@Ramosok 2 месяца назад
@Ramosok
@Ramosok 2 месяца назад
@Ramosok
@Ramosok 2 месяца назад
@Ramosok
@Ramosok 2 месяца назад
@Ramosok
@Ramosok 2 месяца назад
@Ramosok
@Ramosok 2 месяца назад
@Ramosok
@Ramosok 2 месяца назад
@artemmakatera8663
@artemmakatera8663 2 месяца назад
Можно и 1 циклом сделать
@andreibudnik7435
@andreibudnik7435 2 месяца назад
Занимаюсь недавно. Сделал без использования объектов. Не знал про понятие "стека". Использовал только for, if и function. Функция ищет соседние скобки одного вида и разного направления, если находит - вырезает их через splice, увеличивает счетчик (счетчик использую как условие выхода из цикла) и заново вызывает себя. ___________________________ function validBraces(braces) { let arr = braces.split(''); let ciclCounter = 0; const endOfCicl = arr.length; function recursDelBrasket(arr) { for (let i = 0; i < arr.length; i++) { const element = arr[i]; console.log(arr); console.log(element); if(arr.length === 0){ break; } if((element === '(') && ((i + 1) === arr.indexOf(')'))){ ciclCounter++; arr.splice(i, 2); return recursDelBrasket(arr); } if((element === '{') && ((i + 1) === arr.indexOf('}'))){ ciclCounter++; arr.splice(i, 2); return recursDelBrasket(arr); } if((element === '[') && ((i + 1) === arr.indexOf(']'))){ ciclCounter++; arr.splice(i, 2); return recursDelBrasket(arr); } if(ciclCounter >= endOfCicl){ break } } } recursDelBrasket(arr); if(arr.length === 0) { return true; } else { return false; } }
@abolnikov
@abolnikov 2 месяца назад
Красиво. Для подготовки к собеседованию очень полезно
@Ramosok
@Ramosok 2 месяца назад