@@МихаилДементьев-ф8и Ну на самом деле слова не магические) Просто часто работа превращается в рутину и все мы работаем не с целью чему-то обучиться, а просто выполнять задачи, ибо начальству только это важно, к несчастью( Но я считаю, что если хочешь быть не просто кодером, а программистом думающим и отвечающим за каждую свою строчку кода, то надо чтобы все-таки все эти слова перестали быть магическими)
28:00 const inc = (function() { let counter = 0 return function () { counter + 1 }; })() Не возвращается значение, и не переопределяется сам counter: const inc = (function() { let counter = 0 return function () { return ++counter }; })()
@@romanmed9035 Да именно так замыкания и работают. Они хранят контекст с переменными даже если эта функция уже отработала. У Алексея в решении была ошибка в решении: необходимо вместо строки counter + 1 делать return ++counter. Таким образом сохраняется увеличенное значение переменной counter и самое главное из функции возвращается значение.
1:00:12 Вдруг кому-то нужно или интересно решение задачи с каррированием и рекурсией, на которую решили не тратить время const sum = (a) => { let result = a; return addMore = (b) => { result += b ?? 0; return b === undefined ? result : addMore; } }
в задаче с замыканием, есть вариант вот такой реализации: const inc = (counter => () => ++counter)(0); console.log(inc()); // 1 console.log(inc()); // 2 console.log(inc()); // 3
Алексей крут конечно!!!! Зная что выступаешь на широкую аудиторию нервишки шкалят еще больше!!!! С учетом волнения его знания можно во много раз приумножить)) Такие видео помогают избавится от эффекта самозванца) Сергей вам огромный респект!!!! На некоторых конторах, на Middle позицию, спрашивают ядро JS и после по специфике конторы React, Redux, Typescript, Webpack и т.д. Хотелось бы увидеть собеседование в таком формате))
у меня спрашивали чем отличается event loop браузера и nodejs, зачем эта инфа, что она решает, не понятно, учитывая что я ему рассказала как работает event loop браузера решая задачу, в итоге не взяли, может я был глуп для них, но была закономерность, придумывались абсурдные задания, что в итоге сказал сам интервьюер, не желаю никому на такого попасть, кстати есть ещё прикол, зачем-то сбивать с логики, я решая задачу сказал какой будет результат, а он старался сбить меня с моей логики раза 4-5 в одном вопросе, это что за способ самоудовлетворения, надеюсь что следующий интервьюер будет как Сергей
Про замыкания и IIFE. let inc = (function() { let counter = 0; return function() { return counter + 1; } })(); Код не будет работать :) Надо return counter + 1 заменить на ++counter А за видос спасибо, крутейший контент - позволяет представить себя на месте интервьюируемого и попрактиковать задачки. Подписался.
Я вымучил таки фруктовую функцию. :) Заняло примерно два часа с учётом вспоминаний синтаксиса стандартных методов на w3schools, попутного ознакомления с Map и Set и частыми перекурами. Вот что получилось (немного изменил первоначальный массив, потому что иначе получался сразу отсортированный итоговый и я не мог проверить правильность сортировки): // Вывести новый массив из уникальных элементов заданного, отсортированный по числу вхождений let fruitsArr = ["banana", "grapefruit", "orange", "grapefruit", "orange", "banana", "orange", "banana", "orange"]; function uniSortByEntr(wordsArr) { const uniWordsObj = {}; // uniWordsObj - объект с уникальными ключами-элементами данного массива и значениями, // равными числу вхождений соответствующего элемента wordsArr.forEach(function(word) { uniWordsObj.hasOwnProperty(word) ? uniWordsObj[word]++ : uniWordsObj[word] = 1; }); // Сортируем ключи объекта uniWordsObj по убыванию их значений, т.е. вхождений соответствующих элементов // в данный массив, создаём отсортированный массив из этих ключей, который добавляем к объекту uniWordsObj, // возвращаем этот объект, содержащий ключи-слова со значениями-числами вхождения и отсортированный массив const uniWordsArr = Object.keys(uniWordsObj); uniWordsObj.uniSortArr = uniWordsArr.sort(function(a, b) { return uniWordsObj[b] - uniWordsObj[a]; }); return uniWordsObj; } console.log(uniSortByEntr(fruitsArr)); Я возвращаю весь объект, потому что инфа о количестве вхождений слов может оказаться полезнее самого отсортированного конечного массива, а это массив просто цепляю к возвращаемому объекту. Теперь можно и посмотреть, что у Алексея получилось. :)
Привет! У меня вопрос по поводу решения в блоке про замыкания (28:00): разве там всё работает? Там же по сути в замыкании остаётся значение counter = 0 и при каждом вызове inc он будет сначала 0 потом увеличится на 1. Там кстати return тоже надо добавить. В целом, задача такая, что нужно сохранить этот counter где-то кроме global scope. Я решил это так: сделал так же функцию, поместил в переменную inc, внутри сохранил counter как свойство (функция это объект) this.counter = 0. Потом из той же функции вернул другую функцию, которая это свойство и меняет this.counter += 1. И теперь всё работает
Очень круто и качественно!!! Я вчера проходил на трейни, так мне три задачи попались такие как тут проходили... узнал бы немножко пораньше !) В целом, спасибо, тут есть чему поучится !
@@frontendscience Мне попилась по приоритетам(event loop and setTimeout, ну там добавили мне и IIFE), так же "Про замыкания и IIFE". от такое еще было: const arr = [ [true, false, true], [false, false, true] ] // надо поменять с true на false на оборот.
Ой! Случайно перепроверил пример про инк. )) У меня какие-то неправильные решения полезли на ноч глядя let inc = function () { if (!this.c) this.c = 0; this.c +=1; return this.c } Но в целом собес супер! Алексей молодец держался хорошо! Спасибо за видео!
Привет. Все четко, кроме размера шрифта кода на экране. Учитывая, сколько на экране свободного места, шрифт можно увеличивать раза в 3-4. И тогда удобно будет смотреть на мобилке... Мобайл-ферст - не забывай, плиз.
Блин не собирался смотреть это видео, 1 : 29 :52, но как то затянуло, самое интересное, что я не занимаюсь ни фронтом ни бэком, ни вообще IT разработками. Было просто интересно, продолжайте делать дальше такие видео.
Когда работаешь каждый день с фреймворками, забываешь азы. Мне на самом деле чуток пришлось даже поднапрячься с рекурсивным решением курринга...Спасибо за фановый контент, азы нуно знать, есть что повторять :)
Пишу на ангуляр. Думаю что все примеры в собеседовании нужны только для того чтобы понять как работает код другого программиста, который хотел всех удивить)
По знаниям он полноценный мидл, то что в режиме лайвкодинга он не может сосредоточиться - это обычная история даже для сеньора. Может когда-нибудь собеседующие это поймут, и не будут давать советы уровня “будь внимательнее“, потому-что этому совету сложно следовать когда хмурый дядька палит на процесс твоей работы Хотя может и не мидл, ведь я не слышал вопросов по боевым задачам (смотрел на перемотке), а мидла, по мне, должны сильно изучить как он знает требуемый стек своих инструментов. Потому-что знание только фундамента требуется от джунов, а от мидла ждут что он быстрее возьмется за боевые задачи, а не будет изучать тонкости нужного фреймворка
@@DmitriiRepnikov этот парень - джун, не более того. Мидл должен знать свой ЯП в совершенстве и уметь его готовить. Такого рода задачки мидл должен щелкать как семечки и это не должно быть в принципе центром собеседования. Даже если чел закрывает 100% задач на проекте он автоматом не становится синьером. Если тебя палит "хмурый дядька" и ты сразу посыпался то ты не более чем джун. Как я сказал, с уверенным мидлом и уж тем более с синером эта часть собеседования закончится через 10 минут. А если ты начинаешь сомневаться когда кто-то смотрит на твою работу а ты вроде как заявляешь себя мидлом/сеньером, то у тебя большие проблемы с пониманием где ты находишься и что делаешь... ну или ты просто надутый в попу письтюк... (не конкретно ты :))
@@kirsanov2008 твоё мнение полно максимализма как у подростка, и судя по нику это кажется логичным. Объяснять почему твоё виденье неверно я не буду, т.к. судя по настрою твоего сообщения ты из тех кто изменит своё мнение только тогда когда появляется хоть какой-то опыт.
@@DmitriiRepnikov 2008 это не дата моего рождения, а год, когда я зарегался в гмайле, но ты первый кто обратил на это внимание в таком ключе) я раньше даже не думал об этом))
А я зробив curring, де можна робити необмежену кількість викликів. Не лише 2. const plusik = (function (){ let s = 0; function add (a) { s = s + a return add; } add.toString = function(){return s}; return add; })() document.write(plusik(3)(4)) // виведе 7 document.write(plusik(3)(4)(5)) // виведе 12
Я решил задачи [59:47 Про каррирование и рекурсию] и [1:03:15 Про High order functions и карриррование] не зная, что такое каррирование и high order functions😂 Использовал знание рекурсии и вложенных функций (по аналогии с замыканиями). Мое решение задачи [59:47 Про каррирование и рекурсию]: function sum(a) { return function(b) { return isFinite(b) ? sum(a + b) : a; } } console.log( sum(1)(2)(3)(4)() ); // 10 Другую решил так же, как и Алексей. P.S. Видосы с собеседованиями на этом канале мне очень нравятся. Когда смотришь такое видео и понимаешь, что вполне смог бы решить ту или иную задачу, это мотивирует. P.P.S. Теперь нужно изучить каррирование :D
59:52 решение, если кому интересно function sum(a) { if (a) { return function (b) { if (b) { return sum(a + b) } return a; } } return 0; } и не забыть вывести результат в консоль console.log(sum(1)(2)(3)(4)());
из видео я понял, что знаний основ js между мидлом и джуном не особо много... на данный момент я не имею боевого опыта разработки, но прорешал больше 200 задач на codewars на js и все задачи приведенные в собесе мне показались скорее джуновскими в чем отличия мидла?
Мне интересно. Если на собеседовании претендента спрашивают over 9999 оверхедов про всякие всплытия с var и без него. Это он должен знать иначе без этого никуда. И он должен обязательно их помнить и забивать ими голову. Почему у человека в голове не щелкает, что такого, как бы, не должно быть в нормальном-то языке программирования.
@@SS-jg8ye хахахахаах, что ты понимаешь? В чем проблема испробовать код который я написал? Хотя бы чисто в браузере? Чел, что ты вообще забыл на канале про прогу?))
Смотри, ты написал все правильно, но выводишь просто все в консоль, а не возвращаешь результат работы функции. Подправь просто этот момент и все будет ок.
По сути собеседование крутое и супер полезное, поэтому большое спасибо за контент) НО, на 48 минуте вы спрашиваете про массив уникальных значений, и не очень понятно зачем?) Запутать собеседуемого?) Ведь это объект, все ключи строки, и это значит после reduce там будет всего три ключа со значениями) а значит они все уникальны и задача отсортировать по значениям и вернуть ключи function sortFn(words) { const objData = {}; words.forEach((word) => objData[word] ? (objData[word] += 1) : (objData[word] = 1) ); return Object.keys(Object.fromEntries(Object.entries(objData).sort((item1, item2) => item2[1] - item1[1]))) } я еще не смотрел дальше 48 минуты), если вас не затруднит можно ли короткий фидбэк по моему решению
Что значит запутать? Это условие задачи! Я даже сделал подсказку таким образом. Если бы Вы были на собеседовании и не поняли бы - я бы Вам объяснил иначе.
Спасибо за отличный видос, подписался с надеждой увидеть ещё в подобном формате, несмотря на то, что довольно успешно решаю задачи бизнеса во фронтенде уже более 4х лет понимаю что до уровня миддла надо подтянуть знание базовых вещей, таких как замыкание/карирование
насчет счетчика. теперь это будет работать. да не фига. counter он не возвращает. и более того он его даже не инкрементит. результат count + 1 подвисает в пустоте
Очень даже актуальные ) Во-первых код до сих пор на проектах компилируется в ES5. во-вторых хойстинг работает не только с var но и function declaration. В-третьих есть куча библиотек и пакетов в которых до сих пор var - и надо понимать особенности его работы.
@@ОлегПузанкін потому что внутри функции свой скоуп. И происходит всплытие объявления переменной (хойстинг). Но изначально она undefined. До тех пор пока не произойдет присвоение. Поэтому if не пройдет проверку и ничего не выведется в консоль
про фрукты let obj = {}; for (let i = 0; i < arr.length; i++) { obj[arr[i]] = obj[arr[i]] + 1 || 1; } const res = Object.entries(obj).sort((a, b) => a[1] + b[1]).map((el)=> el[0]);
Ошибка в компараторе. Сортировка сбитая. NaN || 1 - не пишите так пожалуйста, воткните лучше тернарник или лишний if/else - стейтмент но фактически тут ошибки нет (перемешивать типы арифметикой не оч.хорошо). Если из одной структуры линейным сканированием надо склеить другую, например хеш-таблицу в вашем случае, то подойдёт reduce. А в целом норм, лучше чем кандидат с видео справился).
@@misteranderson6058 да не в синтаксисе дело, просто в js-среде многие меряются длиной своего уанлайнового решения. Как выше написали, if/else стейтмент здесь был бы приятнее.
@@DmitriiRepnikov Пускай меряются, я думаю, что код должен быть читабелен, как белый лист, а не вот этот вот сахар со стрелочками палочками с кавычками. Ведь в реальном проекте кода на десятки тысяч строк и нет времени вникать в синтаксический сахар. Js позволяет написать такой код? Наверно да, зависит от мастера.
А какие Вы видите плюсы от собеседования в лайве? Мы изначально так и планировали, но сейчас вот придумать не можем профита. Чат? Ну так он будет отвлекать участника или ведущего... свое решение задачек высылать? Так их и просто в комментариях можно писать, как и любые вопросы... поделитесь мнением!
Не совсем понятен вопрос про несколько доменов для статики, где одновременно может загружаться всего по 6 файлов. Это проблема была в протоколе http/1, с приходом http/2 проблема не актуальна. Надо лишь веб сервер со статикой перенести на http/2
27:43 есть ошибка, забыли возле "+" поставить "=" , так все время будет возвращать 1,1,1. Надо прописать return () => counter += 1, тогда все будет работать
full stack самоучка, больше реакт чем бекенд, еще не работал, написал для резюме пару проектов: интернет-магазин с фильтром товаров и полной адмикой по редактированию и масштабированию сайта, соц сеть, месенджер, музыкальную площадку, но это собеседования не прошел бы))
По поводу замыканий, этот код не будет работать. Нужно что бы функция которая ретёрнится возвращала counter+=1 а не просто что то с ним делала и возвращала void, то есть нужно добавить return counter+=1 или изменить функцию на стрелочную ()=> counter +=1 что то типа такого let inc = (function (){ counter = 0; return () => ++counter })()
При таком массиве можно дурака включить и написать: function uniq(fruit) { let b = [] fruit.sort().forEach((a, i) => { if (a !== fruit[i - 1]) b.push(a) }); return b } console.log(uniq(fruit))
Оч крутое и полезное видео, но почему сразу с мидла начали, хотелось бы посмотреть на вопросы и собеседование junior`a. Если не трудно скажите плиз какие вопросы задавали бы джуниору? ThankYouInAdvance!
Если гарантируется, что одинакового количества элементов не будет, то можно так задачу про фрукты решать const mySort = arr => [...new Set(arr.sort((a,b) => arr.filter(y => y === b).length - arr.filter(x => x === a).length))]
28:00 ничего не будет возвращаться, внутренняя функция ничего не возвращает. И даже если мы поставим return counter + 1, то при вызове будет 1 каждый раз, так как в саму переменную ничего не записалось, тут нужен постфиксный инкремент, то есть return counter++
Задачка на замыкание решена неправильно ) (финальное решение на 28:00), во первых функция не возвращает counter, во вторых counter + 1 не меняет значение counter и при следующем вызове будет все тот-же 1 :)
@@jony4you Пока у нас на канале собеседований с синьорами еще не было. В планах есть). Но в жизни я уже лет 5 только их и собеседую. Вопросы по большей части такие же. Смотрю на скорость ответа, глубину знаний, проверяю - насколько уверен кандидат в ответе тд. Плюс задачки могут быть сложнее.
Поле вопроса про сортировку массива по частоте появления фруктов, уже можно не спрашивать остальные вопросы, видно что чел соображает, и даже если реакт или вью не знает, то разберется за неделю.Вот нахера спрашивать сотрудника по всему учебнику js??? Главное не знания, а понимание того что от тебя хотят.
Спасибо! Очень классно проводите собеседования. Вы бы могли в дополнение говорить в конце - взяли ли бы вы человека на данную позицию к себе на работу?
Сергей спасибо за видео, очень азартно) скажите как то вы оцениваете скорость выполнения кандидатом задач, его размышления а главное ошибки или если в отведенное время решил - то это + ?
Много зависит от того на какую должность собеседую. Если на синьйора - то да ожидаю что он быстро поотвечает на все легкие вопросы. В любом случае смотрю как человек мыслит - особенно если не знает ответа на вопрос изначально. Как пытается дойти до него. Или как использует подсказки, или какие вопросы задает. Все это учитывается. время чаще просто как ограничение - чтобы не потратить его все на один вопрос (которые никак не может решить кандидат) а наоборот мог проявить себя на разных вопросах.
Задачу на каррирование + рекурсию примерно так решил бы . . . . . . . . const sum = a => { return b => { return b ? sum(a + b) : a } } const result = sum(1)(2)(3)(4)(5)() // 15
А чего именно боишься? В худшем случае все останется так же как сейчас. Если уже натренировался решать задачки, теперь надо натренироваться проходить собеседования.
@@frontendscience Ну я 20 лет проработал системным администратором. Всю жизнь мечтал быть разработчиком, но как-то не сложилось. А сейчас сокращение на фоне пандемии, вот и подумываю сменить род занятий. Боюсь, потому что уже 40 лет за плечами, поздновато наверное становиться программистом)
@@Amkonax Ничего не поздно! Сейчас открыты возможности ремоута по всему миру практически. То есть даже если в твоем городе/стране в 40 лет ты боишься дискриминации на новой должности, то в мире это нормальный возраст, чтоб начать. Тем более, что ты свитчишься из айтишной специальности. Обязательно опиши этот опыт в резюме. И давай не тяни с собеседованиями! Успехов!!
Спасибо, видео помогло понять, какого уровня я джаваскриптист, если бы собеседовался на эту роль. Хоть и не являюсь им вообще ни разу, а js - просто побочный продукт более общего опыта работы в веб-аналитике )
"ка-эс-эс как это правильно говориться" :) Джун если объективно, но за год вполне толковый результат. Или я просто уже ворчливым становлюсь с годами, "дед опять забыл выпить таблетки и опять про какие-то клирфиксы и джпеги с закругленными углами")
По решению задачи на 28мин, с двумя функциями inc() - у меня возникли сомнения в правильности решения, по - моему при таком решении не будет ожидаемого результата
25:05 - не совсем правильно. Надо было написать return ++counter во вложенной функции. Я задачу решил двумя способами: 1) Через IIFE let inc = function() { let counter = 0; return function() { return ++counter; } }(); 2) С помощью блока let inc; { function func() { let counter = 0; return function() { return ++counter; } } inc = func(); }
@@frontendscience Я заметил, как начал читать комменты, но удалять уже не стал :) Сегодня тему замыканий на learn.javascript прошел. Сразу же пересмотрел и этот момент в видео, и собеседование со стажером из EPAM, где тоже IIFE были. Закрепляю пройденное
👍 Друзья, поддержите, пожалуйста, Алексея в комментариях - он самый смелый, прошел у нас интервью первым. И поставьте ему большой красивый лайк!
😢😊🎉😂 ❤😮😢❤❤😊х😮😮🎉😊 л😂🎉😂😅😅е😊😢😅вы❤❤😂😂❤😊 😅😮😮х😮😢😮😂😅😢😅😮😊🎉к😢😊😢😢😂😊😊🎉🎉🎉😢😢😊😢эх😊😮😢😮😅😮😮😅❤😮😮😮❤😢😂😊😊😂😢🎉❤😊😢л😮🎉😊 7:41 🎉😅😢😢😢 7:55 🎉😢😊😅😊😢😮😢😢😅😊😮😢🎉😮😂😢з 8:б😅❤😂😊 10:17 42 как 8:54 😮х😂❤😮😊😢 9:56 😢😊😢😅😮х😢🎉😢ф😢😂😢😊😅😊😢😮🎉😊😅😊😮😮❤😊😊😮😊ч😂😮🎉😂😊
У нас есть два JS, тот который мы используем каждый день и о котором говорим на собеседовани ))
У нас есть два программирования, то которое мы используем каждый день и о котором говорим на собеседовании )))
Согласен, в реальности все по другому, а здесь какие-то магические слова :)
@@МихаилДементьев-ф8и Ну на самом деле слова не магические) Просто часто работа превращается в рутину и все мы работаем не с целью чему-то обучиться, а просто выполнять задачи, ибо начальству только это важно, к несчастью( Но я считаю, что если хочешь быть не просто кодером, а программистом думающим и отвечающим за каждую свою строчку кода, то надо чтобы все-таки все эти слова перестали быть магическими)
@@zheil2977 можно подставить php, ничего не изменится.
+++++
Мне лично сразу в кандидате понравилось то что он свободно и без напряга общается при этом в рамках приличия как по мне уже крутой показатель.
Да, парень - крут!
28:00
const inc = (function() {
let counter = 0
return function () { counter + 1 };
})()
Не возвращается значение, и не переопределяется сам counter:
const inc = (function() {
let counter = 0
return function () { return ++counter };
})()
Да return Алексей забыл добавить. Бывает
@@frontendscience Но counter тоже инкрементировать стоит, в реализации на видео будет возвращать всегда 1. Но это мелочи )
@@romanmed9035 Да именно так замыкания и работают. Они хранят контекст с переменными даже если эта функция уже отработала.
У Алексея в решении была ошибка в решении: необходимо вместо строки counter + 1 делать return ++counter. Таким образом сохраняется увеличенное значение переменной counter и самое главное из функции возвращается значение.
@@romanmed9035 Успехов!
const inc = () => {
inc.counter = inc.counter || 1;
return inc.counter++;
}
а с iife крутое решение, сразу в голову не пришло
1:00:12
Вдруг кому-то нужно или интересно решение задачи с каррированием и рекурсией, на которую решили не тратить время
const sum = (a) => {
let result = a;
return addMore = (b) => {
result += b ?? 0;
return b === undefined ? result : addMore;
}
}
const sum = a => b => b ? sum(a + b) : a
sum(1)(2)(3)() // 6
Алексей, спасибо за участие в интервью. Считаю, отлично справился, несмотря на волнение. Успехов, профессионального и карьерного роста!
Алексей молодец! Все знания можно помножить на 2, а то и на 3 - учитывая что все это происходит в стрессовой обстановке.
Было круто, спасибо Сергей! Еще так много нужно узнать и еще большему научиться)
И тебе спасибо! Больших успехов!
Ты оч крутой!
блиин, так круто прошел, можно было бы попросить у вас телегу или мэйл?)
обещаю не спамить, хотел спросить про ваши ресурсы для подготовки
огонь собес )
Чувствуется, что готовился усердно :) Круто.
в задаче с замыканием, есть вариант вот такой реализации:
const inc = (counter => () => ++counter)(0);
console.log(inc()); // 1
console.log(inc()); // 2
console.log(inc()); // 3
Да отличный вариант1
Украдено с Хекслет
Хорошее собеседование и вопросы адекватные. Еще интересно было бы увидеть собеседование на react разработчика.
Алексей крут конечно!!!! Зная что выступаешь на широкую аудиторию нервишки шкалят еще больше!!!! С учетом волнения его знания можно во много раз приумножить)) Такие видео помогают избавится от эффекта самозванца) Сергей вам огромный респект!!!! На некоторых конторах, на Middle позицию, спрашивают ядро JS и после по специфике конторы React, Redux, Typescript, Webpack и т.д. Хотелось бы увидеть собеседование в таком формате))
у меня спрашивали чем отличается event loop браузера и nodejs, зачем эта инфа, что она решает, не понятно, учитывая что я ему рассказала как работает event loop браузера решая задачу, в итоге не взяли, может я был глуп для них, но была закономерность, придумывались абсурдные задания, что в итоге сказал сам интервьюер, не желаю никому на такого попасть, кстати есть ещё прикол, зачем-то сбивать с логики, я решая задачу сказал какой будет результат, а он старался сбить меня с моей логики раза 4-5 в одном вопросе, это что за способ самоудовлетворения, надеюсь что следующий интервьюер будет как Сергей
Про замыкания и IIFE.
let inc = (function() {
let counter = 0;
return function() {
return counter + 1;
}
})();
Код не будет работать :)
Надо return counter + 1 заменить на ++counter
А за видос спасибо, крутейший контент - позволяет представить себя на месте интервьюируемого и попрактиковать задачки. Подписался.
Выше в комментариях я уже отвечал про эту задачу.
Алексей красава просто! очень хорошие знания показал
Я вымучил таки фруктовую функцию. :)
Заняло примерно два часа с учётом вспоминаний синтаксиса стандартных методов на w3schools, попутного ознакомления с Map и Set и частыми перекурами.
Вот что получилось (немного изменил первоначальный массив, потому что иначе получался сразу отсортированный итоговый и я не мог проверить правильность сортировки):
// Вывести новый массив из уникальных элементов заданного, отсортированный по числу вхождений
let fruitsArr = ["banana", "grapefruit", "orange", "grapefruit", "orange", "banana", "orange", "banana", "orange"];
function uniSortByEntr(wordsArr) {
const uniWordsObj = {};
// uniWordsObj - объект с уникальными ключами-элементами данного массива и значениями,
// равными числу вхождений соответствующего элемента
wordsArr.forEach(function(word) {
uniWordsObj.hasOwnProperty(word) ? uniWordsObj[word]++ : uniWordsObj[word] = 1;
});
// Сортируем ключи объекта uniWordsObj по убыванию их значений, т.е. вхождений соответствующих элементов
// в данный массив, создаём отсортированный массив из этих ключей, который добавляем к объекту uniWordsObj,
// возвращаем этот объект, содержащий ключи-слова со значениями-числами вхождения и отсортированный массив
const uniWordsArr = Object.keys(uniWordsObj);
uniWordsObj.uniSortArr = uniWordsArr.sort(function(a, b) {
return uniWordsObj[b] - uniWordsObj[a];
});
return uniWordsObj;
}
console.log(uniSortByEntr(fruitsArr));
Я возвращаю весь объект, потому что инфа о количестве вхождений слов может оказаться полезнее самого отсортированного конечного массива, а это массив просто цепляю к возвращаемому объекту.
Теперь можно и посмотреть, что у Алексея получилось. :)
отлично вышло! благодарю за решение!
@@frontendscience Спасибо.
Хорошая обратная связь и классные задачки. Спасибо!
Привет! У меня вопрос по поводу решения в блоке про замыкания (28:00): разве там всё работает? Там же по сути в замыкании остаётся значение counter = 0 и при каждом вызове inc он будет сначала 0 потом увеличится на 1. Там кстати return тоже надо добавить. В целом, задача такая, что нужно сохранить этот counter где-то кроме global scope. Я решил это так: сделал так же функцию, поместил в переменную inc, внутри сохранил counter как свойство (функция это объект) this.counter = 0. Потом из той же функции вернул другую функцию, которая это свойство и меняет this.counter += 1. И теперь всё работает
let inc = (function(){
let count = 0
return ()=> count+=1
}())
Да там ошибка, функция будет возвращать undefine.
@@PussyDestroyerUK там просто return не хватает
Many thanks!! Такие интервью дают больше понимания, чем обучающие материалы!!
Круто, спасибо, ждал! Люблю смотреть публичные собеседования)
Очень круто и качественно!!!
Я вчера проходил на трейни, так мне три задачи попались такие как тут проходили... узнал бы немножко пораньше !)
В целом, спасибо, тут есть чему поучится !
Прикольно! А какие именно задачи?
И что еще было? Ребятам тут будет полезно узнать
@@frontendscience Мне попилась по приоритетам(event loop and setTimeout, ну там добавили мне и IIFE), так же "Про замыкания и IIFE".
от такое еще было:
const arr = [
[true, false, true],
[false, false, true]
] // надо поменять с true на false на оборот.
Благодарю что поделился!
Ребята, а было бы интересно посмотреть behavioural интервью?
System design тоже)
Да очень
Ой! Случайно перепроверил пример про инк. )) У меня какие-то неправильные решения полезли на ноч глядя
let inc = function () {
if (!this.c) this.c = 0;
this.c +=1;
return this.c
}
Но в целом собес супер! Алексей молодец держался хорошо! Спасибо за видео!
Я так долго ждал этот формат.
Здорово! Рады, что нравится 👍
Привет. Все четко, кроме размера шрифта кода на экране. Учитывая, сколько на экране свободного места, шрифт можно увеличивать раза в 3-4. И тогда удобно будет смотреть на мобилке... Мобайл-ферст - не забывай, плиз.
Спасибо, учтем
Yes, I'm also watching it from my phone
Блин не собирался смотреть это видео, 1 : 29 :52, но как то затянуло, самое интересное, что я не занимаюсь ни фронтом ни бэком, ни вообще IT разработками. Было просто интересно, продолжайте делать дальше такие видео.
:) Благодарю!
Контент просто огонь! Алексею респект! Сергей, огромная благодарность за такой формат!!!
Рад что понравилось! Благодарю за поддержку!
Сергей спасибо за контент, очень хочется увидеть, как вы собеседуете джуна
Заполняйте форму! И можете не только увидеть, но и поучаствовать :)
@@frontendscience Собеседовался на джуна, вопросы как здесь на мидла...
@@abffggjhf516 Я тебе больше скажу - такие же вопросы будут и если на синьора собеседоваться, здесь важна точность и глубина ответов.
Про High order functions и каррирование
const sum = (a,b) => a + b;
const mul = (a,b) => a * b;
const calc = cb => a => b => cb(a,b);
Когда работаешь каждый день с фреймворками, забываешь азы. Мне на самом деле чуток пришлось даже поднапрячься с рекурсивным решением курринга...Спасибо за фановый контент, азы нуно знать, есть что повторять :)
Спасибо. Было полезно) Надеюсь увидеть собес на сеньера)
Крутой формат!! Лайк! Побольше собесов )))
прям очень круто! Алексею респект)
Пишу на ангуляр. Думаю что все примеры в собеседовании нужны только для того чтобы понять как работает код другого программиста, который хотел всех удивить)
😂
Завтра буду слушать , надеюсь будет крутяк !!!
спасибо что проинформировал
Прикольно! У вас тут весело 😆
Классный ролик, спасибо)❤
Алексей большой молодец! Очень смело публично проходить собеседование! Успехов ему и вам!
Трехтысячный лайк мой ))
👍
вот такие должны быть джуны! респект!
Хорош в теории, слаб в практике
По знаниям он полноценный мидл, то что в режиме лайвкодинга он не может сосредоточиться - это обычная история даже для сеньора. Может когда-нибудь собеседующие это поймут, и не будут давать советы уровня “будь внимательнее“, потому-что этому совету сложно следовать когда хмурый дядька палит на процесс твоей работы
Хотя может и не мидл, ведь я не слышал вопросов по боевым задачам (смотрел на перемотке), а мидла, по мне, должны сильно изучить как он знает требуемый стек своих инструментов. Потому-что знание только фундамента требуется от джунов, а от мидла ждут что он быстрее возьмется за боевые задачи, а не будет изучать тонкости нужного фреймворка
@@DmitriiRepnikov этот парень - джун, не более того. Мидл должен знать свой ЯП в совершенстве и уметь его готовить. Такого рода задачки мидл должен щелкать как семечки и это не должно быть в принципе центром собеседования. Даже если чел закрывает 100% задач на проекте он автоматом не становится синьером. Если тебя палит "хмурый дядька" и ты сразу посыпался то ты не более чем джун. Как я сказал, с уверенным мидлом и уж тем более с синером эта часть собеседования закончится через 10 минут. А если ты начинаешь сомневаться когда кто-то смотрит на твою работу а ты вроде как заявляешь себя мидлом/сеньером, то у тебя большие проблемы с пониманием где ты находишься и что делаешь... ну или ты просто надутый в попу письтюк... (не конкретно ты :))
@@kirsanov2008 твоё мнение полно максимализма как у подростка, и судя по нику это кажется логичным. Объяснять почему твоё виденье неверно я не буду, т.к. судя по настрою твоего сообщения ты из тех кто изменит своё мнение только тогда когда появляется хоть какой-то опыт.
@@DmitriiRepnikov 2008 это не дата моего рождения, а год, когда я зарегался в гмайле, но ты первый кто обратил на это внимание в таком ключе) я раньше даже не думал об этом))
Отличный формат! Сергей, благодарю!
И я Вас благодарю )
Очень качественные интервью.. Когда продолжение?
Классное собеседование. Алексей - молодец! Я искренне переживал за Алексея и тоже решал с ним задачки.
респект Алексею!
А я зробив curring, де можна робити необмежену кількість викликів. Не лише 2.
const plusik = (function (){
let s = 0;
function add (a) {
s = s + a
return add;
}
add.toString = function(){return s};
return add;
})()
document.write(plusik(3)(4)) // виведе 7
document.write(plusik(3)(4)(5)) // виведе 12
1:07:23 - method => a => b => method(a, b); можно упростить
Я решил задачи [59:47 Про каррирование и рекурсию] и [1:03:15 Про High order functions и карриррование] не зная, что такое каррирование и high order functions😂
Использовал знание рекурсии и вложенных функций (по аналогии с замыканиями).
Мое решение задачи [59:47 Про каррирование и рекурсию]:
function sum(a) {
return function(b) {
return isFinite(b) ? sum(a + b) : a;
}
}
console.log( sum(1)(2)(3)(4)() ); // 10
Другую решил так же, как и Алексей.
P.S. Видосы с собеседованиями на этом канале мне очень нравятся. Когда смотришь такое видео и понимаешь, что вполне смог бы решить ту или иную задачу, это мотивирует.
P.P.S. Теперь нужно изучить каррирование :D
Благодарю за решение! Успехов с каррированием )
Каррирование
const sum = a => b => b ? sum(a + b) : a;
Cчетчик
const inc = (n => () => ++n)(0);
Отлично вышло! Компактно! :)
задачки сложные, чтобы такое в онлайне решать. не отражает реальности уровня квалификации. тут даже сениоры поплыть могут
Задача про фрукты у меня так получилась
function getUniqueAndSort(array) {
const addCountProperty = (word) => {
const count = array.filter((item) => item === word).length;
return { word, count };
};
return [...new Set(array)]
.map(addCountProperty)
.sort((a, b) => b.count - a.count)
.map((item) => item.word);;
}
Благодарю за решение!
59:52 решение, если кому интересно
function sum(a) {
if (a) {
return function (b) {
if (b) {
return sum(a + b)
}
return a;
}
}
return 0;
}
и не забыть вывести результат в консоль
console.log(sum(1)(2)(3)(4)());
зачем так много букв.
const sum = (a) => (b) => b ? sum(a + b) : a;
console.log(sum(1)(2)(3)(4)(5)(6)(7)());
из видео я понял, что знаний основ js между мидлом и джуном не особо много...
на данный момент я не имею боевого опыта разработки, но прорешал больше 200 задач на codewars на js и все задачи приведенные в собесе мне показались скорее джуновскими
в чем отличия мидла?
Мне интересно. Если на собеседовании претендента спрашивают over 9999 оверхедов про всякие всплытия с var и без него. Это он должен знать иначе без этого никуда. И он должен обязательно их помнить и забивать ими голову. Почему у человека в голове не щелкает, что такого, как бы, не должно быть в нормальном-то языке программирования.
как вариант задачка с фруктами ещё так решается:
const mySuperSort = (array) => {
fruitUnique = Array.from(new Set(array));
obj = {};
fruitUnique.forEach(i => {
len = words.filter(f => f === i).length;
obj[i] = len;
});
return Object.keys(obj).sort((a,b) => obj[b] - obj[a]);
}
Благодарю за решение
еще более древний вариант)
const obj = {
a: 4,
say: function() {
let self = this;
setTimeout(function () {
console.log(self.a)
}, 1000)
}
}
да - "дедовский" метод )
Замыкание:
const inc = ((i = 0) => () => console.log(++i))();
inc();
inc();
Тебе функция число должна возвращать, а не undefined
@@SS-jg8ye а с чего ты взял, что она undefined возвращает?
@@vitaly- с того, что я очевидно понимаю в отличие от тебя как работает ахинея, что ты написал, но никто тебе не мешает самому в этом убедиться
@@SS-jg8ye хахахахаах, что ты понимаешь? В чем проблема испробовать код который я написал? Хотя бы чисто в браузере? Чел, что ты вообще забыл на канале про прогу?))
Смотри, ты написал все правильно, но выводишь просто все в консоль, а не возвращаешь результат работы функции. Подправь просто этот момент и все будет ок.
По сути собеседование крутое и супер полезное, поэтому большое спасибо за контент)
НО, на 48 минуте вы спрашиваете про массив уникальных значений, и не очень понятно зачем?) Запутать собеседуемого?)
Ведь это объект, все ключи строки, и это значит после reduce там будет всего три ключа со значениями) а значит они все уникальны и задача отсортировать по значениям и вернуть ключи
function sortFn(words) {
const objData = {};
words.forEach((word) =>
objData[word] ? (objData[word] += 1) : (objData[word] = 1)
);
return Object.keys(Object.fromEntries(Object.entries(objData).sort((item1, item2) => item2[1] - item1[1])))
}
я еще не смотрел дальше 48 минуты), если вас не затруднит можно ли короткий фидбэк по моему решению
Что значит запутать? Это условие задачи! Я даже сделал подсказку таким образом. Если бы Вы были на собеседовании и не поняли бы - я бы Вам объяснил иначе.
Но судя по решению, условие поняли. Задачу решили правильно.
Так в чем именно вопрос?
Спасибо за отличный видос, подписался с надеждой увидеть ещё в подобном формате, несмотря на то, что довольно успешно решаю задачи бизнеса во фронтенде уже более 4х лет понимаю что до уровня миддла надо подтянуть знание базовых вещей, таких как замыкание/карирование
Желаем Вам успехов!
насчет счетчика. теперь это будет работать. да не фига. counter он не возвращает. и более того он его даже не инкрементит. результат count + 1 подвисает в пустоте
Очень крутой формат, спасибо! Алексею респект) И вопрос про var и hoisting: это все еще актуальные знания, чтобы их задавать на интервью?
Очень даже актуальные ) Во-первых код до сих пор на проектах компилируется в ES5. во-вторых хойстинг работает не только с var но и function declaration. В-третьих есть куча библиотек и пакетов в которых до сих пор var - и надо понимать особенности его работы.
@@frontendscience в задача на 20мин выводится 5, почему ничего не должно выводится?
@@ОлегПузанкін потому что внутри функции свой скоуп. И происходит всплытие объявления переменной (хойстинг). Но изначально она undefined. До тех пор пока не произойдет присвоение. Поэтому if не пройдет проверку и ничего не выведется в консоль
Задача на замыкание без use strict и без вложенных функций:
function inc() {
if (!window.res) res = 0
return ++res
}
Видать, не услышали условие до конца. В глобальном контексте должна быть только одна переменная inc и ничего больше.
@@ДмитрийЕрохин-э9в ачивка за находчивость!
Отличный формат! Спасибо большое за этот собес)
Рад, если полезно!
- ааа, у нас же идёт не по алфавиту, а по встречающимся элементам ...
Серёга: 38:26 😂😂 попался, милок!
Кльовий формат і грамотний гість!
про фрукты
let obj = {};
for (let i = 0; i < arr.length; i++) {
obj[arr[i]] = obj[arr[i]] + 1 || 1;
}
const res = Object.entries(obj).sort((a, b) => a[1] + b[1]).map((el)=> el[0]);
Благодарю за решение. Вышло красиво. PS: можно укоротить самую малость и избавиться от map.
Ошибка в компараторе. Сортировка сбитая. NaN || 1 - не пишите так пожалуйста, воткните лучше тернарник или лишний if/else - стейтмент но фактически тут ошибки нет (перемешивать типы арифметикой не оч.хорошо). Если из одной структуры линейным сканированием надо склеить другую, например хеш-таблицу в вашем случае, то подойдёт reduce. А в целом норм, лучше чем кандидат с видео справился).
Ну и сахар) Ужасный синтаксис после Golang
@@misteranderson6058 да не в синтаксисе дело, просто в js-среде многие меряются длиной своего уанлайнового решения. Как выше написали, if/else стейтмент здесь был бы приятнее.
@@DmitriiRepnikov Пускай меряются, я думаю, что код должен быть читабелен, как белый лист, а не вот этот вот сахар со стрелочками палочками с кавычками. Ведь в реальном проекте кода на десятки тысяч строк и нет времени вникать в синтаксический сахар. Js позволяет написать такой код? Наверно да, зависит от мастера.
Со второй задачей намудрили.
let result = [];
for(i=0; i
Вот решение этой задачи: ua-cam.com/video/3jgE1ySa8xA/v-deo.html
Крутой контент! Было бы интересно смотреть прямую трансляцию лайва, и + в таком формате как сейчас с монтажом публиковать ролик.
А какие Вы видите плюсы от собеседования в лайве? Мы изначально так и планировали, но сейчас вот придумать не можем профита. Чат? Ну так он будет отвлекать участника или ведущего... свое решение задачек высылать? Так их и просто в комментариях можно писать, как и любые вопросы... поделитесь мнением!
@@frontendscience Собеседоваться когда тебея смотрят 10k человек - такое себе))
@@dobermanpharaoh7567 вообще-то 20k, но кто считает )))
@@dobermanpharaoh7567 так всё равно посмотрят же.
Отличный контент. Большое Вам спасибо!
И Вам спасибо 😉
Под конец у парня лицо было краснее, чем его футболка). Застеснял пацана.
Не совсем понятен вопрос про несколько доменов для статики, где одновременно может загружаться всего по 6 файлов. Это проблема была в протоколе http/1, с приходом http/2 проблема не актуальна. Надо лишь веб сервер со статикой перенести на http/2
Да, все верно. Спрашивал, потому что до сих пор много серверов все еще работают на http/1.
27:43 есть ошибка, забыли возле "+" поставить "=" , так все время будет возвращать 1,1,1. Надо прописать
return () => counter += 1, тогда все будет работать
Пролистай комменты, там все обсудили
full stack самоучка, больше реакт чем бекенд, еще не работал, написал для резюме пару проектов: интернет-магазин с фильтром товаров и полной адмикой по редактированию и масштабированию сайта, соц сеть, месенджер, музыкальную площадку, но это собеседования не прошел бы))
Наверное потому что самоучка и не работал еще, а это собеседование на миддл позицию?)
Хорошее собеседование! =) Классные вопросы. Сам затупил на первом вопросе=). Однозначно лайк и подписка!
const sortFruits = (arr) => {
const hash = {};
for (const i of arr) {
hash[i] = hash && hash[i] ? hash[i] + 1 : 1
}
return Object.keys(hash).sort(function(a, b) { return hash[b] - hash[a] });
}
Благодарю за поддержку! Клессное решение вышло!
00:35:00
const words = ["banana", "grapefruit", "banana", "grapefruit", "banana", "orange", "banana"];
const sortHelper = (a, b) => {return words.filter(itm => itm === b).length - words.filter(itm => itm === a).length;
}
[... new Set(words.sort(sortHelper))];
1:14:41
На самом деле тема холиварная, потому как поход браузером к DNS-серверам за информацией тоже замедляет работу
По поводу замыканий, этот код не будет работать. Нужно что бы функция которая ретёрнится возвращала counter+=1 а не просто что то с ним делала и возвращала void, то есть нужно добавить return counter+=1 или изменить функцию на стрелочную ()=> counter +=1 что то типа такого let inc = (function (){
counter = 0;
return () => ++counter })()
Да уже обсудили выше в комментариях
@@frontendscience Не видел! Извините)
Спасибо, очень полезно
При таком массиве можно дурака включить и написать:
function uniq(fruit) {
let b = []
fruit.sort().forEach((a, i) => { if (a !== fruit[i - 1]) b.push(a) });
return b
}
console.log(uniq(fruit))
с таким решением сразу в додж лист отправят
@@yoshimitsu7723 при поставленных условия это норм решение)) Понятно что имеется ввиду но ради юмора можно ответить и так.
@wesborland3381 Зачем?)
Оч крутое и полезное видео, но почему сразу с мидла начали, хотелось бы посмотреть на вопросы и собеседование junior`a. Если не трудно скажите плиз какие вопросы задавали бы джуниору? ThankYouInAdvance!
Скоро будет на канале видео и на джуниора! Не забудьте нажать на колокольчик 🛎 😊
это и был джуниор, слабенький.
Видос отличный, Алексей красава
подивився до кінця, круто
Если гарантируется, что одинакового количества элементов не будет, то можно так задачу про фрукты решать
const mySort = arr => [...new Set(arr.sort((a,b) => arr.filter(y => y === b).length - arr.filter(x => x === a).length))]
сложность и нечитаемость алгоритма зашкаливает
@@АндрейБочарников-х5ъ это да, это да)) Зато решение почти сразу пришло
Вот тот же код пришёл в голову. Да, нечитаемо, но пихнуть в хелпер какой-нибудь вполне можно.
@@alexkonoplian хелпер? еще лучше :)
мне кажется или на 55:52 это не финальное решение?
28:00 ничего не будет возвращаться, внутренняя функция ничего не возвращает. И даже если мы поставим return counter + 1, то при вызове будет 1 каждый раз, так как в саму переменную ничего не записалось, тут нужен постфиксный инкремент, то есть return counter++
Да, и об этом писали уже в комментах много
@@frontendscience
Извините, я листала и не нашла)
В любом случае, спасибо за интересный и познавательный формат!:)
@@АринаЯковлева-т3ж и Вам спасибо)
Answer for sum :
1 const sum1 = function(el){
2 if(sum1.a === undefined){
3 sum1.a = 0;
4 }
5 if(el !== undefined){
6 sum1.a += el;
7 }
8 if(el === undefined){
9 var sm = sum1.a;
10 sum1.a = 0;
11 return sm;
12 }
13 return sum1;
14 }
15 console.log(sum1(1)(2)(0)());
16 var a1 = sum1(1)(2)(3);
17 var b1 = a1(10)();
18 console.log(b1);
Задачка на замыкание решена неправильно ) (финальное решение на 28:00), во первых функция не возвращает counter, во вторых counter + 1 не меняет значение counter и при следующем вызове будет все тот-же 1 :)
Ты абсолютно прав. Уже обсудили в комментариях выше. Я проверял другое. Эта мелочь для меня не была настолько важна в тот момент. Но я тоже ее видел.
@@frontendscience а есть собеседования синьйоров? :) Есть какие-то отличия от вопросов для мидла?
@@jony4you Пока у нас на канале собеседований с синьорами еще не было. В планах есть).
Но в жизни я уже лет 5 только их и собеседую. Вопросы по большей части такие же. Смотрю на скорость ответа, глубину знаний, проверяю - насколько уверен кандидат в ответе тд. Плюс задачки могут быть сложнее.
Поле вопроса про сортировку массива по частоте появления фруктов, уже можно не спрашивать остальные вопросы, видно что чел соображает, и даже если реакт или вью не знает, то разберется за неделю.Вот нахера спрашивать сотрудника по всему учебнику js??? Главное не знания, а понимание того что от тебя хотят.
Супер 🥳🥳🥳
27:40 - Это не будет работать так как мы не изменили переменную а возвратили результат операции с ней.
Спасибо! Очень классно проводите собеседования. Вы бы могли в дополнение говорить в конце - взяли ли бы вы человека на данную позицию к себе на работу?
Алексея я бы пропустил на следующий этап технического собеседования
Не посмотрел еще но судя по названию частей это не на фронта собеседование а на JS кодера чисто)
Крутой формат! Лайк, подписка!
Благодарю за поддержку)
Сергей спасибо за видео, очень азартно) скажите как то вы оцениваете скорость выполнения кандидатом задач, его размышления а главное ошибки или если в отведенное время решил - то это + ?
Много зависит от того на какую должность собеседую. Если на синьйора - то да ожидаю что он быстро поотвечает на все легкие вопросы. В любом случае смотрю как человек мыслит - особенно если не знает ответа на вопрос изначально. Как пытается дойти до него. Или как использует подсказки, или какие вопросы задает. Все это учитывается. время чаще просто как ограничение - чтобы не потратить его все на один вопрос (которые никак не может решить кандидат) а наоборот мог проявить себя на разных вопросах.
Задачу на каррирование + рекурсию примерно так решил бы
.
.
.
.
.
.
.
.
const sum = a => {
return b => {
return b ? sum(a + b) : a
}
}
const result = sum(1)(2)(3)(4)(5)() // 15
Класс! Очень красивый вариант вышел!
задачку про фрукты решил за 2 минуты. (мимо стажер)
const arr = ['a', 'b', 'b', 'b', 'c', 'a'] // ['b', 'a', 'c']
const frequencies = arr.reduce((ac, el)=>{
if(el in ac) ac[el] +=1
else ac[el] =1
return ac
}, {})
console.log(frequencies)
const res = Object.entries(frequencies).sort((a,b)=>b[1]-a[1]).map((el)=>el[0])
console.log(res)
Благодарю за решение 👍
интересно на матерого синиора глянуть)
Интересно, все задания по js из интервью решал почти сразу в уме, но до сих пор боюсь проходить собеседование на джуна)
А чего именно боишься? В худшем случае все останется так же как сейчас.
Если уже натренировался решать задачки, теперь надо натренироваться проходить собеседования.
@@frontendscience Ну я 20 лет проработал системным администратором. Всю жизнь мечтал быть разработчиком, но как-то не сложилось. А сейчас сокращение на фоне пандемии, вот и подумываю сменить род занятий. Боюсь, потому что уже 40 лет за плечами, поздновато наверное становиться программистом)
@@Amkonax Ничего не поздно! Сейчас открыты возможности ремоута по всему миру практически. То есть даже если в твоем городе/стране в 40 лет ты боишься дискриминации на новой должности, то в мире это нормальный возраст, чтоб начать. Тем более, что ты свитчишься из айтишной специальности. Обязательно опиши этот опыт в резюме. И давай не тяни с собеседованиями! Успехов!!
@@frontendscience спасибо за поддержку и за ваши видео, которые я все с удовольствием смотрю. Обязательно буду пробовать!)
@@Amkonax А почему девопс не рассматриваете?
Судя ответам опытный проходитель собеседований😜
Спасибо, видео помогло понять, какого уровня я джаваскриптист, если бы собеседовался на эту роль. Хоть и не являюсь им вообще ни разу, а js - просто побочный продукт более общего опыта работы в веб-аналитике )
"ка-эс-эс как это правильно говориться" :) Джун если объективно, но за год вполне толковый результат. Или я просто уже ворчливым становлюсь с годами, "дед опять забыл выпить таблетки и опять про какие-то клирфиксы и джпеги с закругленными углами")
По решению задачи на 28мин, с двумя функциями inc() - у меня возникли сомнения в правильности решения, по - моему при таком решении не будет ожидаемого результата
25:05 - не совсем правильно. Надо было написать return ++counter во вложенной функции.
Я задачу решил двумя способами:
1) Через IIFE
let inc = function() {
let counter = 0;
return function() {
return ++counter;
}
}();
2) С помощью блока
let inc;
{ function func() {
let counter = 0;
return function() {
return ++counter;
}
}
inc = func();
}
Уже обсудили в комментариях выше.
@@frontendscience Я заметил, как начал читать комменты, но удалять уже не стал :) Сегодня тему замыканий на learn.javascript прошел. Сразу же пересмотрел и этот момент в видео, и собеседование со стажером из EPAM, где тоже IIFE были. Закрепляю пройденное