Поддерживаю видосы по оптимальному решению сложных задачек с собеседований. Простых в сети уже навалом.
@Cos6a4oK3 жыл бұрын
Заходите на литкод и решаете задачи любого уровня и смотрите как можно было решить совсем иначе.
@mikeneikovych37003 жыл бұрын
Отличное, а главное, познавательное собеседование. Я смотрю все собеседования от "Отсобеседование", "Web interview", и ещё много где понемногу, но нигде ни разу не видел, чтобы интервьюер так подробно разжовывал алгоритм действий решения задачи для зрителя и самого собеседуемого. Это было очень полезно, спасибо большое!
@UlbiTV3 жыл бұрын
Рад слышать, спасибо!
@HatWriter3 жыл бұрын
@@UlbiTV были бы почаще такие интервьюеры, чтобы джунам, которые пробуют впервые ходить на собеседования - было понятно, что стоит подучить/подтянуть. Спасибо за видео
@Independent19c3 жыл бұрын
А я считаю зачем париться просто плейлист создать собеседования и уровни в превью видео с должностью и всё, как бы вопросы не повторялись люди то разные, и смотреть интересно(а интересные уже определять самим время от времени ну или просто кидать в плейлист) думаю каждый вынесет для себя что то полезное, возможно узнаёт себя, не знаю как у всех ,для меня слово собеседование наверное на втором месте после слова очередь и ремонт.
@kvadro_id3 жыл бұрын
@@UlbiTV Татьяну в итоге взяли?
@ProSergeant2 жыл бұрын
Случайно попался на видос интервью в Блумберг там собеседуемого попросили дополнить алгоритм по поиску в бинарном дереве, там тоже интервьювер помогал и разжёвывал
@-inside44783 жыл бұрын
Блин очень крутой формат видео, особенно, когда один на один с книжками и курсами, а тут вдруг слышишь, как решают задачи. Одновременно видишь и слышишь. Вдвойне приятно)) Буд-то с наставником разбираешь задачи.
@UlbiTV3 жыл бұрын
Спасибо) Успехов!
@chicken_naggets35613 жыл бұрын
Задачу со скобками можно было решить проще, вместо стека объявить счётчик и если встречаем открывающуюся скобку увеличиваем, если закрывающуюся уменьшаем. В конце счётчик должен быть равным нулю, иначе скобок разное количество
@chicken_naggets35613 жыл бұрын
Ещё можно делить входящию на две части и одновременно их обрабатывать
@Max-mv6gr3 жыл бұрын
@@chicken_naggets3561 А если будет такой пример: ')(', то счётчик же тоже равен 0
@xenon671games73 жыл бұрын
@@Max-mv6gr каждую итерацию проверяем, что переменная >= 0
@v.k.samurai3 жыл бұрын
@@Max-mv6gr, в общем то да :) но это не противоречит условию задачи. Сказано, что скобки могут быть в произвольном порядке, вопрос тут конкретно стоит в том, что если есть равное количество открывающих скобок и закрывающих, значит вернуть true. В твоем примере у нас одна закрывающая скобка и одна открывающая, собственно, условие соблюдено)) Короче говоря, нужно уточнять условия задачи чтобы 100% понимать какие есть нюансы.
@ivannebyshynets88293 жыл бұрын
А если ещё и скобки разные, ок да.
@Valeryi073 жыл бұрын
Отличное собеседование,на одном дыхании посмотрел,и конкретно для меня ,оно очень познавательное..спасибо ребят..👍🙂
@UlbiTV3 жыл бұрын
Благодарю!
@lordunitaz3 жыл бұрын
Спасибо за видео! Нужно больше роликов, готовящих к собесам. Ты одновременно учишь теорию и практикуешься, когда ищешь решение задачки. Очень эффективно и в целом интересно.
@UlbiTV3 жыл бұрын
Спасибо за отзыв!)
@SmirnovVladimir2 жыл бұрын
Работаю год фронтом. Забавная вещь - я на теоретические вопросы не на все смог сразу ответить. А на практические - на все кроме одного. Это к вопросу о разнице между собесом на первую работу, когда соискатель знает кучу теории, но как правило имеет очень мало практики, и спустя год работы - когда куча неиспользуемой теории забывается, а мозг заточен под решение практических задач. Друзья, кто ищет первую работу - больше практикуйтесь! Постоянно пишите код )
@OpankiDeLegend2 жыл бұрын
Чтобы на собесе ничего не ответить по теории?) Замкнутый круг
@djdisik Жыл бұрын
@@hdfghfhhj2475 если по теории отшили, значит не нужна вам такая работа) на работе вы никому теорию рассказывать не будете
@Семён-ь9ь3в7 ай бұрын
@@djdisik подскажите, образование необходимо или нет?
@djdisik7 ай бұрын
@@Семён-ь9ь3в у каждой компании по разному, где-то возьмут без образования, но зачастую требуют высшее техническое
@itpro9523 жыл бұрын
Ждал собес, щас активно готовлюсь, вспоминаю теорию, спасибо Тимур.
@UlbiTV3 жыл бұрын
Успехов!
@serikabsadykov92603 жыл бұрын
@@UlbiTV Привет, я смотрел твой ролик про firebase и как так сделать авторизацию и при созданий папки, я использовал базовую комплектацию, и у меня нету индекс.нтмл ( 7:16 в том видео ), мне стоит начинать все с начало, или есть другой путь?
@МаксимПучко-ь9э3 жыл бұрын
Как успехи с собесом?
@sharover4552 жыл бұрын
@@МаксимПучко-ь9э он забухал и насваем сейчас торгует
@МаксимПучко-ь9э2 жыл бұрын
@@sharover455 жесть, коменту уже 10 месяцев
@nuriddintashpulatov42333 жыл бұрын
Я тоже Джун, начал учить фронт с верстки 4 месяца назад, видео я начал с теоретических вопросов, и расстраивался когда она отвечала раньше меня или более четко чем я (ну типа "блин, вот она тоже Джун, но более смышлёная, а я видимо никогда не научусь программированию такими темпами"). Но когда я досмотрел видео, а потом узнал что оказывается у нее уже есть два года коммерческого опыта, то прям камень с плеч упал, ахахах. Спасибо автору за видео!
@viktord35072 жыл бұрын
Тут уже миддл?
@SNSDfOu Жыл бұрын
так то у нее опыта для джуна прилично, да и женщина 86 года.
@victormog3 жыл бұрын
Видео по практическим задачам всегда интересны!
@МиланаАкопян-ц7м3 жыл бұрын
Очень ёмкое и полезное видео!!! Спасибо за такой качественный контент!👍🏻
@UlbiTV3 жыл бұрын
Благодарю!
@DmitryDolganov3 жыл бұрын
Заранее благодарю! Сейчас начну смотреть!))
@UlbiTV3 жыл бұрын
Приятного просмотра!
@step_65123 жыл бұрын
Всё конкретно, понятно и без лишней воды. Спасибо!
@moscowtv57673 жыл бұрын
Автор дает наводки, считаю это очень правильным походом. Татьяна молодец, автор молодец. :)
@UlbiTV3 жыл бұрын
Спасибо!)
@ДмитрийЯковлев-д6э2 жыл бұрын
на самом деле очень интересно) и пусть будут заезженные вопросы! продолжай контент очень интересный.
@ipa_stor3 жыл бұрын
Пора дисклеймер в название писать:))) как раз к выходным видео, спасибо большое! 2 года изучения, очень интересно, чуть позже гляну обязательно!!! Пс: всем приятного просмотра
@РусланРастегаев-з1э2 жыл бұрын
Спасибо за такой формат видео. Решал задачи параллельно с просмотром. По задаче про уникальные, не дублирующие значение, есть вариант короче, с одним циклом. const num = [1,1,2,4,6,6,5]; function unique(arr) { const unicArr = []; for (const item of arr) { const pos = unicArr.indexOf(item, 0); if (pos === -1) { unicArr.push(item); } else { unicArr.splice(pos, 1); } } return unicArr; } unique(num ) // [2, 4, 5]
@olehsolomka82684 ай бұрын
indexOf тож цикл, O(n^2) будет
@СветланаРомашкина-з6б15 күн бұрын
const cleanDuplicates = (arr) => { const sortedArr = [...arr].sort(); //можно спилить, если по условию задачи массив на входе отсортирован const res = []; sortedArr.forEach((el, i) => { if (sortedArr[i + 1] !== el && sortedArr[i - 1] !== el) { //если в _отсортированном_ массиве элемент не равен ни одному из соседей, то он уникален res.push(el) } }); return res; } console.log(cleanDuplicates([1,1,2,3,4,4,5,6,6,7,7,8,9])) //[2, 3, 5, 8, 9] но это O(NlogN), если вход не отсортирован, чисто экзотика, чтобы не считать вхождения)
@victorchilari3 жыл бұрын
Нормальный эксперимент получился, удачи в долнейшем
@UlbiTV3 жыл бұрын
Спасибо)
@garikmelqonyan60112 жыл бұрын
Many thanks to you, man. Your lessons are just great. They are very helpful for those who are really interested in learning something new or improving and enhancing one's skills. Learned a lot from your tutorials and interview videos. May you be prosperous in this good job of yours. Thanks a lot.
@powerrampage2 жыл бұрын
You watched the video with subtitles ?
@garikmelqonyan60112 жыл бұрын
I understand russian, my friend.
@powerrampage2 жыл бұрын
@@garikmelqonyan6011 if you know, why you wrote in English
@garikmelqonyan60112 жыл бұрын
Seems that you are interested in that comment more than in video itself, my friend. I just dont write grammatically correct in russian. Hope this will be the last question.
@powerrampage2 жыл бұрын
@@garikmelqonyan6011 sorry bro =)
@derw1sz3 жыл бұрын
Со скобочками можно было без стека обойтись, делать +1 или -1 к сумме и проверять на каждой итерации что не меньше нуля, после всех итераций проверить что сумма равна нулю и всё.
@swaxshow8404 Жыл бұрын
Или же взять создать один массив с открытыми скобками а другой с закрытыми,и в конце сравнивать длину массивов. Если равно то правильно если нет то нет.
У меня только такое вышло function withoutRepeat(array) { const repeat = arr.map((el, idx) => idx !== array.indexOf(el) && el) return arr.filter((el) => !repeat.includes(el)) }
спасибо за труд! такие интервью отлично подкрепляют изученные темы + позволяют расширить существующие знания.
@met13883 жыл бұрын
Да, интересные задачи было бы круто увидеть как вы их решаете оптимально
@omnomnom13232 жыл бұрын
Пожалуйста поясните кто-нибудь: почему Татьяна, которая работает фронтом 2 года и ее основной стек это уже реакт - собесится на позицию джуна. То есть чувак с курсов без опыта и Татьяна будут претендовтаь на одну и ту же позицию джуна в теории. Что-то я не понимаю явно
@yuravychiwskii5537 ай бұрын
Решение задачи со скобками в 1 строку: function checkBrackets(str) { return ( str.replace(/[^\[({]+/g, '').length === str.replace(/[^\])}]+/g, '').length ); }
@MACTEP_SHIFU Жыл бұрын
У меня нет IT образования, самоучка с 2005 года. Никогда не лез в конторы на работу, считая это без образования бесмысленным. Это первое видео с собеседованием что я увидел. Первые 10 вопросов я вообще был удивлен их наличию, в силу их простоты для меня. Про DOM дерево и null/undefined, вообще офигел. Походу если я для проверки себя попробую, то спокойно пройду собеседованиеи ...учитывая степень сложности этих вопросов для меня. А задачу со скобками...решение писец какое сложное. Разве что только для наглядности работы стека подходит. Обычный цикл, подсчет и тех и тех...и сравнивать количество. Ну или ещё короче, без цикла: const check = str => str.split('(').length === str.split(')').length;
@-And6053 Жыл бұрын
составь ка вопросы для уровня middle, а мы посмотрим)
@chcylabrab3 жыл бұрын
Спасибо за контент, а так же за то, что смонтировали ролик. Это Ваше конкурентное преимущество среди блогеров которые выкладывают интервью.
@programming59443 жыл бұрын
Вопросов по реакту хотелось бы больше и поглубже рассмотреть какие то моменты
@uNkind333 жыл бұрын
Ждем видос с оптимальными решениями задач!
@keeprock15292 жыл бұрын
Решение задачи с дубликатами (23:40) на Typescript и разными edge case. Time complexity будет O(n) + O(n) за счет двух циклов обхода. Что в итоге получается как O(2n). Далее, 2-ка из 2n отбрасывается и получается просто O(n). O(n^2) это когда внутри цикла цикл. Подряд два цикла друг за другом не дают O(n^2), а складываются между собой. const arr = [1, 1, 1, 0, 3, 4, 5, 5, 6, 7] const arr2 = [0] const arr3 = [] as number[] const arr4 = [1, 1, 1, 1, 1, 1, 1, 1] function withoutRepeat(arr: T[]): T[] { const arrItemCountDict = new Map(); arr.forEach((item, i) => { arrItemCountDict.set(item, arrItemCountDict.has(item) ? arrItemCountDict.get(item) + 1 : 1) }) return arr.filter((item) => arrItemCountDict.get(item) === 1) } console.log(withoutRepeat(arr)) console.log(withoutRepeat(arr2)) console.log(withoutRepeat(arr3)) console.log(withoutRepeat(arr4))
@vovayankers89563 жыл бұрын
Хорошая подача! Поддерживаю видосы по оптимальному решению сложных задачек с собеседований.
@dimabashynskyi49843 жыл бұрын
спасибо большое, очень интересные видосы с заданиями.
@UlbiTV3 жыл бұрын
Благодарю!)
@YuriiLutsyk03043 жыл бұрын
Отличный видос получился! Ждем новые видео)
@UlbiTV3 жыл бұрын
Спасибо!
@alexnikolaienko34783 жыл бұрын
Классное видео. Просмотрел с удовольствием.
@orionpro792 жыл бұрын
Работаю уже более 2х лет с реактом, интересно было просмотреть ролик (пусть и немного на перемотке, потому что ответ и так был известен), думаю новичкам вообще зайдёт на ура. А всякие мемо, тем кто учит реакт, надо на заметку брать и пользоваться на практике.
@Antonym-b5o2 жыл бұрын
полный бред, никто вам не позволит этого сделать
@orionpro792 жыл бұрын
@@Antonym-b5o бот?
@dariabannaya26812 жыл бұрын
Спасибо большое! Очень интерсный формат. Нравится больше всего у тебя смотреть
@ОльгаЮзбашева2 жыл бұрын
Все что касается собеседования очень нравится )) вдохновляет и настраивает, спасибо!
@__online72503 жыл бұрын
Четко и информативно! Спасибо за такой формат!
@Wynell3 жыл бұрын
если честно не знал что такая интересная ситуация с try catch finally спасибо за видео
@efreitorhabibulin2383 жыл бұрын
13 лет опыта, 4 года проработал в Google и Google Nest, я бы походу провалил твое интервью xDDD, к примеру блок с finally меня поймал я наверное пишу код как-то специфически, что подобное никогда не использовал )))))
@delir03 жыл бұрын
За return в finally нужно сразу увольнять
@efreitorhabibulin2383 жыл бұрын
@@delir0 хахахаххаха
@kirillgabov7053 жыл бұрын
32:00 Я не уверен как работает in, но сложновато поверить что она работает за О(1) В худшем случае (когда все значения разные) он будет каждый раз поиск делать по количеству уникальных значений на данный момент, что тоже n в общем случае, так что сложность чуть меньше n^2
@untured61673 жыл бұрын
Если я правильно помню, то O(n) - это случай когда длительность обработки увеличивается линейно относительно длины обрабатываемого массива В этом случае можно решить почти O(n). Почти, потому-что сначала придётся отсортировать массив, а O сортировки может быть разным. У меня получилось так: function removeDuplicate(array) { function compNumber(a,b) { if (a>b) return 1; if (a==b) return 0; if (b>a) return -1; } let result = new Array let current = null let add = false array.sort(compNumber) for(let i = 0; i
@DmitriiRepnikov2 жыл бұрын
Оператор in в javascript поверяет наличие ключа в хеш-мапе. Это не поиск, там всегда либо есть такой ключ, либо его нет. Доступ по ключу в хешмапе происходит за O(1), как и во всех других языках программирования Другое дело что в некоторых языках программирования оператор in можно вызвать и в списках, что действительно уже не будет O(1), но это не тот случай, в js оператор in на списках не вызывают, так как это не имеет смысла, т.к. он не ищет элементы таким образом
@demonicchannel5372 Жыл бұрын
Задачу со скобками можно решить без циклов и счетчиков. function checkBrackets(str) { if (str.split(" ").filter(i => i === (" ").length === str.split('').filter(i => i === ')').length) { return true } return false }
@ОлегПетров-п4у3 жыл бұрын
Очень полезное видео! Тимур, спасибо за качественный контент! Плюсую за решение задачек.
@UlbiTV3 жыл бұрын
Спасибо, Олег! Скоро будет видео!
@kostasancez23583 жыл бұрын
Видео с задачами ждём!)))
@robertarakelyan46292 жыл бұрын
Задачку с массивом можно решить так: function withoutRepeat(arr) { const res = []; arr.forEach(item => { const indx = arr.indexOf(item); const lastIndx = arr.lastIndexOf(item); if (indx === lastIndx) res.push(item); }); return res; }
@Kleo_Wyatt Жыл бұрын
У меня еще вот так получилось. Работает только с отсортированным массивом. const withoutRepeat =(array) => { const uniqueValue = [] let count = 0 ; for(let i = 0; i < array.length; i++ ) { if(array[i] !== array[i+1] & count === 0) { uniqueValue.push(array[i]) } else if(array[i] !== array[i+1] & count > 0) { count = 0; } else { count ++; } } return uniqueValue }
@helenit43653 жыл бұрын
Собеседование понравилось! Татьяна молодец!
@КириллТерешкин-ю8м3 жыл бұрын
Классное собеседование, узнал для себя несколько новых интересных вещей. Сам уже больше года разрабатываю на реакт, а про такую вещь, как React.memo не знал. Как говорится век живи, век учись!) Девушка молодец, успехов ей!)
@UlbiTV3 жыл бұрын
Спасибо! Успехов!
@DennisTurbay Жыл бұрын
Классное собеседование! Оба участника себя чувствовали комфортно, главный как по мне фактор в собесах.
@kanatasanaliev87633 жыл бұрын
Спасибо за видео было интересно познавательно готовлюсь к собеседованию мне зашло (лайк поставил)
@UlbiTV3 жыл бұрын
Успехов в подготовке!
@kanatasanaliev87633 жыл бұрын
@@UlbiTV а к стати может видео запилишь на счет работы Джуна что он делает до того как начнёт самостоятельно работать краткое видео думаю многим бы было интересно таких видео я не встречал
@kanatasanaliev87633 жыл бұрын
@@UlbiTV заранее спасибо
@snatvb3 жыл бұрын
по задаче со скобками - проще и дешевле использовать счетчик, открывающая скобка - инкримент, закрывающая декремент, результат функции сравнение каунтера на ноль (если ноль, знач все ок), стэк не столь эффективен в этом для множества скобок нужен объект с каунтерами, результат если все каунтеры нули :)
@UlbiTV3 жыл бұрын
С разными видами скобок все же лучше использовать стек
@alext16773 жыл бұрын
@@UlbiTV это если скобки идут друг за другом, расставив их по разным местам - уже не работает.
@forellko86002 жыл бұрын
Очень крутой контент! Спасибо!
@IlyaShaforostoff3 жыл бұрын
Если решаете задачу, как например со скобочками, то проверяйте как следует свои решения. А то у вас получилось, что верное решение будет только если строка состоит из двух символов, открывающейся и закрывающейся скобочки. Прежде чем писать реализацию функции, напишите сперва проверки, например такие console.assert(checkBrackets('(())') === true, 'not passed 1') console.assert(checkBrackets('))((') === false, 'not passed 2') console.assert(checkBrackets('(()') === false, 'not passed 3') console.assert(checkBrackets('()()(()())') === true, 'not passed 4') console.assert(checkBrackets('writeMe("hello world")'), 'not passed 5')
@UlbiTV3 жыл бұрын
Учту!)
@НиколайГончаров-ъ2ь2 жыл бұрын
Задачу со скобочками можно решить через filter и сравнение длинны массивы 2 полученных массивов. А уникальные массивы задача с кодварса, легко решается, спасибо кодварсу :D => return arr.filter((x,i,array) => array.indexOf(x) === array.lastIndexOf(x))
@UlbiTV2 жыл бұрын
Плохое решение, хоть и выглядит красиво Циклы вложенные в цикл
@nikishiro82783 жыл бұрын
Еще так можно решить задачу со скобками: const getBracketCount = (str, type) => str.split('').reduce((acc, v) => { if (v === type) return acc + 1; return acc; }, 0); const checkEvenBrackets = (str) => { const openBrackets = getBracketCount(str, '('); const closeBrackets = getBracketCount(str, ')'); return openBrackets === closeBrackets; }; const result = checkEvenBrackets('((()))'); console.log('result', result);
@kostyakozlov52892 жыл бұрын
Ага, только если у тебя сначала закрывающиеся скобки, а значит не правильная последовательность, то твоя функция вернет не верное значение
@bbnowhat Жыл бұрын
С удалением повторяющийся элементов в массиве можно: Перебирать массив со 2го по предпоследний элемент и если каждый очередной элемент не равен предыдущему или следующему то записываем в новый массив значение, это если упорядоченный исходный массив
@Vlad-yj2ny3 жыл бұрын
Да, интересно, сделай видос по популярным задачкам с собесов, пожалуйста.
@НикитаКлусович3 жыл бұрын
Топ канал, раньше минина канал был фаворитным, теперь этот)
@UlbiTV3 жыл бұрын
Спасибо!
@HatWriter3 жыл бұрын
Спасибо за видео. Многое для себя подчеркнул. И что стоит подтянуть.
@einh213viperz83 жыл бұрын
Как то замудрёно со скобками, не проще под каждый вид скобок завести простую переменную аля int8/16 и инкриментить/декриментить на 1 при встрече ( и ) соотвественно, а в результат проверку на 0 этой переменной.
@fkinggaming9342 жыл бұрын
Круто, познавательно и интересно. Я вместе с вами решал все задачки ) и много чего нового узнал для себя. По больше бы подобных видосов !
@user-race-Vulcan3 жыл бұрын
6:50 Бро, спасибо огромное что поставил пробел после знака присваивания(связывания)..., у меня аж глаз чуть не задергался...
@irinamyskoooo3 жыл бұрын
очень крутые видео и канал !!!
@falsetrue79103 жыл бұрын
Задача со скобками по всей видимости самая любимая у интервьюеров, дважды решал ее когда на джуна устраивался
@KhoroshilovEI3 жыл бұрын
Проблема в том, что большинство задачь собеседования останутся на собеседовании и никогда не будут использованы в жизни)))) За редким исключением.
@drinkoron80633 жыл бұрын
@@KhoroshilovEI Ну, будет у вас задача написать калькулятор, вот и решайте проблему со скобками.
@KhoroshilovEI3 жыл бұрын
@@drinkoron8063 пишу я, например, социальный сервис и тут мне вдруг срочно потребовался калькулятор? Еще и строковый?
@nickolayivanov28483 жыл бұрын
Кстати, мне интересно, а можно было просто посчитать количество открывающих скобок и сравнить его с количеством закрывающих?)
@drinkoron80633 жыл бұрын
@@nickolayivanov2848 Если банально посчитать количества и сравнить в конце, то нет. Пример: )( явно противоречит этому варианту. Нужно немного модифицировать подсчёт, берём счётчик со значением 0 пройдёмся по массиву, если встретим откр. скобку увеличиваем счётчик на 1, если закр. скобка то уменьшаем. Если счётчик ушёл в минус можно остановить цикл и вернуть false а после цикла проверяем уже равняется ли счётчик нулю.
@aruh5baruh5283 жыл бұрын
со скобками первое что в голову пришло ставим счетчик = 0 за каждую '(' + 1 за каждую ')' - 1, если в любой момент -1 то false, если в конце не 0 то false, остальное true ------------------------------------ а если брать с разными скобками, то логика почти таже, правило с отрицательным счетчиком остается только массив счетчиков и как только идет смена типа скобки '(' то подключается следующий, при закрывающейся смене скобки должен быть 0 иначе false в конце если массив не 0 или счетчик не 0 то false, иначе true
@CapricornGaikov3 жыл бұрын
Стек для скобок?)) Просто счетчик: +1 для открывающейся скобки, -1 для закрывающейся. После цикла если счетчик равен 0 то кол-во скобок совпадает. Если не 0 то получится кол-во лишних скобок и какого типа - как определить тип скобки из счетчика вы уже сами догадаетесь :) Все гениальное - просто! Да не за что!)
@admax8113 жыл бұрын
На разогревочных вопросах, я посыпался.. Когда начали говорит о стеках, я вообще офигел от слова стэк в javascript'e, подумал что звиздец, я между мидл-сеньером а не знаю о существования стэков в js.. Когда перешли с теории в практику, тут то все стало понятно.. в разговоре участвуют javascript программеры, которые на других языках не писали и не понимают различий между стеком и массивом, не понимают что оптимальное решение для такого типа задач не массивы а курсоры.. тут и стало понятно, почему это junior ))
@UlbiTV3 жыл бұрын
Огооо, у нас тут синьоры, а что такое стек? расскажите пж:))
@admax8113 жыл бұрын
@@UlbiTV в рамках js, стэка нет, по-этому в поле js этого не описать, но да? функционально конечно массив можно принимать как тот же стэк, но в си - stack это не массив а отдельная структура данных оптимизированная под LILO, поэтому в рамках си программера массив и стэк - это разные понятия. И когда ты спросил о stack - я завис, что за структура есть в js которая не массив а stack..
@admax8113 жыл бұрын
Мне больше задача на 21:20 понравилась :) я сейчас попробовал несколько методов решений этой задачи и думал даже что может быть задача будет решаться быстрей, если не создавать новый объект а чистить массив от дубликатов при нахождении. Оказалось что это много раз медленней.. в итоге да, то решение что в видео оно почти самое быстрое (почти, потому что там используется каунтер, если без каунтера делать - то получается быстрей. function withCounter (array) { // Время исполнения 6 секунд const values = [], obj = {} for (let i = 0; i < array.length; i++) obj[array[i]] = obj[array[i]] ? obj[array[i]] + 1 : 1; Object.keys(obj).forEach((key) => obj[key] === 1 && values.push(key)) return values; } function withBoolean (array) { // Время исполнения 4 секунды const values = [], obj = {} for (let i = 0; i < array.length; i++) obj[array[i]] = obj[array[i]] === undefined; Object.keys(obj).forEach((key) => obj[key] && values.push(key)) return values; } такой порядок примерно
@UlbiTV3 жыл бұрын
@@admax811 ну тогда почему идет принижение js-ников? Стек строится поверх массива или поверх связного списка, подразумевается функциональность, а не явный тип:) и да, собеседование было не на СИ
@admax8113 жыл бұрын
@@UlbiTV про принижение не знаю.. я в js входил без обучения, с большим стэком других языков и их алгоритмики. Сейчас, когда проще назвать на каких языках я не писал, мне наиболее импонирует js :) и соответственно понятия из-за большого стэка у меня смешиваются.. по-этому я и смотрю видео подобные этому, чтоб терминологию js ников понимать :)
@dimka_shchepa3 жыл бұрын
Оо-о, видосы решения задачек на js вообще бы зашли идеально)) было бы не плохо, если б автор сделал это
@olgapilyugina59052 жыл бұрын
Решение задачи с массивами: let arr = [1, 2, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9] function uniqueItems(n) { arrayUnique =[]; for (let i = 0; i < n.length; i++) { let item = n[i]; console.log(item); if (n.indexOf(item) === n.lastIndexOf(item)) arrayUnique.push(item); } return arrayUnique }
@UlbiTV2 жыл бұрын
Какая сложность О у алгоритма?
@olgapilyugina59052 жыл бұрын
@@UlbiTV Полагаю, что логарифмическая: O(log n)
@UlbiTV2 жыл бұрын
@@olgapilyugina5905 неа, даже близко нет
@UlbiTV2 жыл бұрын
@@olgapilyugina5905 цикл в любом случае линейная сложность, т.е уже о(n), и также, надо понимать, что методы массива, которые что то ищут, как например indexof это тоже о(n), тк чтобы что то найти, надо пройтись по массиву и сравнить каждый элемент. Итого сложность О(n в квадрате)
@denhost50332 жыл бұрын
Интересна тема видео с решениями задач, записывай еще ))) Спасибо за видео очень крутой и познавательный контент.
@itsmekamikoto49402 жыл бұрын
Задача с массивом (удалить все чила , которые дублируется) я бы решил двумя способами : 1. Создать Set от входящего массива , и для каждого элемента сета проверить если indexOf() и lastIndexOf() этого элемента во входном массиве равны - значит такой элемент единственный и добавить его в массив , который вернет функция в результате 2. Отсортировать массив и использовав for () проитерироваться с начальным индексом итерации 0 и для каждого значения сравнить если индекс итерации не равен lastIndexOf() элемента в массиве тогда присвоить индекс итерации lastIndexOf() элемента , а если равен то добавить значине в конечный результат функции
@UlbiTV2 жыл бұрын
Варианты хорошие, но неэффективные, квадратичная сложность
@NikDev196 күн бұрын
Задачу с дубликатами по-моему можно в одну строку решить console.log(Array.from(new Set(arr))) Обращайтесь:))
@thtflx Жыл бұрын
Маленькая помощь, что бы было легче практиковаться самому. JavaScript. 1. В чем отличие null от undefined ? Ответ: null - это пустое значение которое присваивается самим разработчиком. undefined - например если контейнер создан или его вовсе не определили, то значение будет undefined. 2. У нас есть какой-то объект и у него есть поле. Этот объект приходит с backend. Этот поле может быть объектом или массивом. Как бы ты проверил, что это поле является массивом ? Ответ: через метод isArray() . 3. Что такое DOM-дерево и для чего он нам нужен ? Ответ: (Document Object Model) Это когда браузер в памяти компютера создаёт Объектную Модель Документа, на основании HTML кода полученного им от сервера. 4. Какие способы хранения данных ты знаешь ? Ответ: sessionStorage, localStorage. 5. Что выведет obj2 ? let obj1 = { name: 'ulbi tv' } let obj2 = obj1; obj1 = {name: 'UPDATED'} console.log(obj2); Ответ: name: 'ulbi tv', так как не происходит глубокое клонирование. 6. У тебя есть некий кусочек кода и ты понимаешь что там потенциально может быть ошибка. Как бы ты его обработал? Ответ: через try/catch 7. Какой результат будет если мы запустим эту функцию ? function someFn() { try { if (Math.random() a - b); } console.log(uniteUniq(arr)); 10. Написать Функцию Конструктор. Ответ: function User(name, age) { this.name = name; this.age = age; } const user = new User('Ulbi tv', 21); console.log(user); React. 11. Что такое props ? Отличие между state ? Ответ: props - это объект, содержащий свойства, которые передаются от родительского компонента к дочернему компоненту. Их изменять нельзя, они только читаемые. state - это состаяние, ими можно управлять методами жизненнего цикла и изменять. 12. React Хуки (расскажите) . Ответ: Хуки - это нововведение, которое было добавлено в React 16.8 . Это функции, которые позволяют использовать состояние и управлять им без написания Классовых компонентов. Они упрощают разработку. 13. Для чего нужен useContext ? Ответ: useContext - это хук в React, который предоставляет простой способ использования контекста в функциональных компонентах. 14. Задача по оптимизации рендера.
@evgeniyn15423 жыл бұрын
Супер, интересное собеседование. Плюсую за решение задачек.
@UlbiTV3 жыл бұрын
Спасибо!
@AGM1405803 жыл бұрын
Очень жду Ваших видео с решением задач!
@БогданГуківський3 жыл бұрын
Понимаю что это была подводка для задачи с разными типами скобок, но чисто для задачи с одним типом скобок, счетчик глубины не допускающий отрицательных значений будет достаточным, стек там не нужен. Если бы мне заадачу в такой постановке решили используя стек - это был бы минус.
@UlbiTV3 жыл бұрын
Про "подводку" правильно подметили)
@alexi182k3 жыл бұрын
Та же ситуация с задачками, даже поработав несколько лет, если самому регулярно не решать что-то по алгоритмам, то сходу не сообразишь.
@UlbiTV3 жыл бұрын
Согласен
@Kirdaro3 жыл бұрын
Так а смысл от них вообще? Разве берут инженера, а не разработчика? Особенно если они не типовые. Называется изобрети еще раз велосипед ради процесса.
@КрасавчикИкиса3 жыл бұрын
@@Kirdaro я так понимаю, оценивают ход мышления + умение разъяснить этапы решения + реакция на стрессовую ситуацию
@tyafizi3 жыл бұрын
В конце была фраза: "на работе не встречается, редко что то такое приходится реализовывать". А чем тогда на работе джуны занимаются?
@vladnasadyk35413 жыл бұрын
Кнопки двигают влево-вправо)
@MrRadiostep3 жыл бұрын
делают 80% работы за 20% денег
@UlbiTV3 жыл бұрын
@@MrRadiostep :D
@alexelkin25023 жыл бұрын
У меня другой вопрос, - "Зачем тогда это на собесе обсуждать?"
@holinet68943 жыл бұрын
А в задаче со скобками можно было так решить, вроде даже понятнее? function checkBrackets(str) { str = str.split('') let counter = 0 for (let i = 0; i < str.length; i++) { const elem = str[i]; if (elem == '(') { ++counter }else if (elem == ')') { --counter } if (elem == '{') { ++counter }else if (elem == '}') { --counter } if (elem == '[') { ++counter }else if (elem == ']') { --counter } } if (counter == 0) { return true }else { return false } }
@UlbiTV3 жыл бұрын
Это неработающее решение, один счетчик для разных скобок
@Sunr1sen23 жыл бұрын
Раз уж юзаем методы массива, так юзаем) Можно конечно упороться и в строку вытянуть, но так более читаемо ну и доп скобки можно в фильтр прям запихивать function checkBrackets(str) { const arr = str.split(''); const leftBracketsCount = arr.filter(item => item === "(").length; const rightBracketsCount = arr.filter(item => item === ")").length; return leftBracketsCount === rightBracketsCount; }
@darkside24363 жыл бұрын
Топ контент!!! Ещё есть вопрос: когда тесты?
@UlbiTV3 жыл бұрын
Трудно сказать, как время появится)
@darkside24363 жыл бұрын
@@UlbiTV 😂
@ВячеславРоманов-ч6л3 жыл бұрын
Работает на фронте чуть больше двух лет, а такое к-во подсказок, непорядок. Может это так и надо чтобы собеседующий давал такое к-во подсказок конечно, но даже в задаче с дублями, просто ведь. Кто-то приврал нехило так свой опыт, работаю полгода на фрилансе backend php, но и с js доводиться сталкиваться часто. Решил бы первые задачки уж точно без подсказок)
@EctxD2 жыл бұрын
На задачах со скобками можно было посчитать сумму скобок и просто проверить на четность.
@ВладиславКравец-г4в2 жыл бұрын
у меня сразу в голову пришла идея на парность (если конечно не нужно указать где именно у нас ошибка)
@redhook7773 жыл бұрын
Лайк! Ждём видос про задачи!!!
@UlbiTV3 жыл бұрын
Спасибо!
@frozeninside50043 жыл бұрын
Поддерживаю видео о решении задач оптимальным способом
@UlbiTV3 жыл бұрын
Будет!
@danilabrehov72593 жыл бұрын
В задаче на уникальность можно ещё indexOf использовать const withoutRepeat = (array) => { return array.filter(elem => { if(array.indexOf(elem, array.indexOf(elem) + 1) === -1) { return elem; } }); };
@SergioWahaWaher3 жыл бұрын
если уж на то пошло: arr.filter((x, i, arr) => arr.indexOf(x) === i)
@xapi_uz3 жыл бұрын
Сложность O(n^2)
@NoakSV2 жыл бұрын
Спасибо, было интересно!
@yanmezinskiy88173 жыл бұрын
Задача на удаление повторяющихся цифр в массиве const removeDuplicate = (arr) =>{ let result = []; arr.forEach(num => { if(result.includes(num)){ result = result.filter(item => item !== num) } else { result.push(num) } }) return result }
@УльвияКарахмазли3 жыл бұрын
буду благодарна за видосы по оптимальному решению сложных задачек с собеседований.
@vitaliihubariev24652 жыл бұрын
Задача с массивом (удалить все числа, которые дублируются) function withoutRepeat(arr){ const uniqArr = []; arr.forEach(element => { if(arr.indexOf(element) === arr.lastIndexOf(element)){ uniqArr.push(element) } }); return uniqArr; }
@aliaksand96910 ай бұрын
@UlbiTV в задаче с удалением повторяющихся цифр из массива чем будет плох следующий вариант: 1. сортируем массив по возрастанию или убыванию 2. пробегаем по массиву, сравнивая с соседними элементами (если оба сравнения false, то забрасываем в ответ).
@ВіталійПлевако-д2ж3 жыл бұрын
Спасибо, полезное видео!
@TG-lp5yd Жыл бұрын
Задачу с массивом можно решать в одну строку с помощью фильтра => первый индекс элемента в массиве == последний индекс этого же элемента
@Woodline293 жыл бұрын
задачку со скобками решил, как мне кажется, сильно проще const checkers = (str) => { const arr = str.split('') const newArr = arr.filter((item) => item === '(') return (arr.length / newArr.length === 2) }
@Woodline293 жыл бұрын
если нужно добавить другие скобки - просто усложняем немного фильтр: const newArr = arr.filter((item) => item === '(' || item === '[' || item === '{' )
@Алексей-ъ4з8с Жыл бұрын
переусложнили решение задачи со скобками, имхо, можно было просто посчитать дельту между количеством открывающих и закрывающих скобок
@MrDilord3 жыл бұрын
По задачке с массивами. Имхо с объектом не очень читабельно if/else потом foreach с вложенным условием еще. Мне кажется самый простой вариант (хотя в плане скорости он серьёзно уступает): function filter (array) { const result = [] for ( let i = 0; i < array.length; i++) { const items = array.filter((el) => { return el === array[i] }) if (items.length < 2) result.push(array[i]) } return result; }
@UlbiTV3 жыл бұрын
Ключевой момент как раз в скорости
@vitalyvitmens Жыл бұрын
Задача с массивом (удалить все числа, которые дублируются): const arr = [1, 1, 2, 3, 4, 4, 5, 6, 6, 7, 7, 8, 9] let withoutRepeat = (array) => array.filter((i) => array.indexOf(i) === array.lastIndexOf(i)) console.log(withoutRepeat(arr)) // [2, 3, 5, 8, 9]
@cseedrvr66273 жыл бұрын
Со скобками мне кажется можно было сделать просто на открывающуюся скобку +1 для закрывающейся -1, и на выходе должно получаться 0
@falsetrue79103 жыл бұрын
А если будет вот такое выражение ")()()("?
@cseedrvr66273 жыл бұрын
@@falsetrue7910 ну да, для такого случая не сработает, но если условие просто чтобы для каждой закрытой скобки была открытая то пойдет
@nagalokgames88613 жыл бұрын
@@falsetrue7910 если счетчик будет меньше 0, на любой из итераций, сразу будет неправильная последовательность. так что решение со счетчиком корректное.
@Godrik99shadows3 жыл бұрын
Можно сделать два счетчика один на открывающие другой на закрывающие. В цикле проверять условие что открывающий всегда больше или равен закрывающему иначе брэйк. По итогу сравнить два счетчика если они равны тру иначе фолс.
@arhim76503 жыл бұрын
я бы страдал фигней, с распихиванием этих скобок по разным массивам, и потом сравнивал их длинну, за одно можно было бы понять, на сколько тех или иных скобок больше, если длинна массивов не ровна.
@scottwalker60713 жыл бұрын
Это было интересно, мне понравился сценарий опроса, попробую применить его на своих собесах🙃 Спасибо, Тимур🤠 Было бы интересно посмотреть собес на сеньора или мидла++ по фронту
@UlbiTV3 жыл бұрын
Спасибо!) До собеседования middle ++ и сеньоров я еще не дорос)
@pie_company Жыл бұрын
можно к вам?
@АртёмНянченков-в5и3 жыл бұрын
Опыт два года, собеседование на джуна..... Тут либо кандидат не силен либо у компании требования .
@UlbiTV3 жыл бұрын
Татьяна оценила свой уровень как "junior", именно поэтому было такое собеседование)
@АртёмНянченков-в5и3 жыл бұрын
@@UlbiTV Тогда вопросов ноль)
@AlexNesterov-f5q3 жыл бұрын
Задачи на джава скрипт оптимальным способом
@Rusu4213 жыл бұрын
где?
@outward63393 жыл бұрын
const arr = [1,1,10,2,4,4,9,8,14,5] const arrf = arr.filter(i=>arr.filter(item=> item===i).length===1) console.log(arrf) Что можете сказать о таком способе?