Лучшее видео как для новичков, так и для более опытных. Мне не помешало ничего досмотреть до конца. Продолжай в любом случае, у тебя хорошо получается🎉
На джуновские должности идёт 3-4 вопроса из JS, typescrpipt, вопросы по фрэйворку, плюс серверные технологии. И тут уже ничего шаблонного нет, вопросы будут идти чистым рандомом, на усмотрение проводящего собес сотрудника. Как предложите готовиться к такому?
Привет! Почему же, вопросы из остальных тем такие же шаблонные) Конкретно это видео покрывает те самые 3-4 вопроса из JS. Как правило, все они (или большинство из них) будут аналогичны тем, что я в видео разобрал. По другим технологиям в идеале бы выпустить аналогичные видео, но довольно много времени занимает подготовка к таким видео. Думаю, в течение года по всем темам подобные ролики выпущу)
36:14 держу в курсе, structuredClone в разы медленней чем JSON.parse + stringify в большинстве случаев. Реальное преимущество structuredClone - это его возможность сохранять копию вместе с функциями и прочими эл-тами, не помещающимися в json
Блин, информация очень круто и подробно раскрыта. Некоторые вещи вообще впервые увидел, в силу их спецефичности, также и не видел чтобы их спрашивали, но тем не менее, очень полезно для понимания того, как устроен язык и как он обрабатывает определенные процессы. Спасибо, больше бы контента, который так же раскрывает обыденные темы и охватывает больше, чем просто шаблонные вопросы!
Вторую задачу по старинке можно 2 форами сделать, тоже норм решение, сравнить arr[i] + arr[j] === sum. Но видимо это был реально вопрос на маппинг. Если да то ок
По первой задаче ставим по курсору на конец каждого массива. Если arr1id < arr2id берем arr2id и сдвигаем курсор второго, иначе берем arr1id и сдвигаем курсор первого
ну прям скажем если парень поплыл с первой задачей последних пяти элементов, то на сеньера и тем более мида ему точно пока не стоит. не досмотрел, но как по мне все четко было задано. даны два массива отсортированных, которые являются представлением какого-то очень важного списка, нужно получить последние пять добавленных, как добавлялось неизвестно... ключевые слова "даны отсортированные" и "последние пять". просто берешь последние пять из одного и последние пять из другого, конкатишь и сортируешь, возвращаешь последние пять из результата. закавырки по поводу мол в одном всего три во втором четыре, это решается потом. а суть в том что выдрать последние и отсортировать 10 элементов максимум. и не надо никаких мап придумывать тут или циклов или еще чего-то
по-моему это ты поплыл, друг мой. У тебя в одном массиве допустим 10 000 элементов, а в другом 100 000 элементов. Если ты их будешь конкатить и сортировать (даже с быстрой сортировкой), то по перформансу может долго идти. Такие задачи чаще всего решаются по методу двух указателей. Если не вдаваться в другие пограничные условия, то ты просто создаёшь две переменные, которые указывают на последние значения в массивах, а затем сравниваешь их, пока длина результирующего массива не будет равна условно 5. Если 2 указатель (2 индекс) больше, чем у первого, то тогда пушишь в результирующий массив последний элемент по указателю второго массива и сдвигаешь 2 указатель, если всё наоборот, то пушишь последний элемент по указателю первого массива и соотвественно сдвигаешь 1 указатель. Твоё решение имеет смысл, но тут явно была задача не такая простая как могло показаться
@@saluteup5198 читай внимательно что написал, последние в одном и последние в другом. получится максимум 10, а не как ты фантазировать начал. без негатива, просто внимательно прочти. пускай хоть миллионы записей будут, работать надо с последними...
@@ViacheslavChernyavskij так я понимаю, что надо работать с последними и брать последние 5. Просто если ты будешь конкатенировать два массива с большим количеством элементов и потом это сортировать, то у тебя сортировка будет жрать перформанс. Мой посыл был в этом и что такие задачи обычно решают двумя указателями
@@saluteup5198может я не так тебя понял. пять последних с одного и пять с другого. после собираешь в один и его же сортируешь, т.е. сортировка для массива в 10 элементов максимум. Почему конкат с большим кол-вом элементов? входные данные вообще не трогаются...
Интереса ради накидал 1-ую задачу тоже, проще всего, по-моему, сложить в одну отсортированную мапу и достать поледние k элементов function getLastDecision(decision1, decision2, k) { const sortedDecisions = new Map(); const totalDecisions = [ ...decision1, ...decision2 ] for (let decision of totalDecisions) { sortedDecisions[decision.id] = decision } return Object.values(sortedDecisions).slice(-k); }
@@vladimirlebedev00010 интересно! Спасибо за ответ. А то многое говорят про накрутку опыта и другие уловки, но вот про то как хотя бы стажером устроиться особо информации нет)
Максимально шаблонный собес. Идёт два часа, а почти никак уровень кандидата не определяет и не проверяет его опыт. Нет описаний задач в текстовом виде и явных формулировок, что сбивает с толку. Так много про безопасность, а в итоге собеседующий вместо CSRF описал фишинг 🙃 40+ минут тратить на какие-то академические задачи с первых строчек гугла аля "js задачи для собеседования", вместо того чтобы придумать практическое задание с ключевыми навыками для позиции. Видимо премии за продолжительность собеседования, не иначе 😅 Про ContentChildren в конце хороший вопрос на опыт кандидата, но опять же устное описание всё портит, на второй час интенсивного собеседования уже котелок не особо варит устные формулировки воспринимать.
По второй задачке на сумму чисел в массиве, хз как там на leetcode, но вроде как-то так: const hasPairWithSum = (arr, num) => arr.some((el, i) => arr.slice(i+1).includes(num - el));
ух ты и ядерный долбоеб , во первых - джс не однопоточный , во вторых ты просто долбаеб раз считаешь что функция это определяющий элемент функционального программирования , на хуя тебя из больницы выпустили
Так и не понял, в чем претензия. Моё решение не покрывает все кейсы? Очевидно, полифил выглядел бы сложнее, чем то, что я реализовал, ну а кому это нужно? На собеседованиях чаще всего несколько задач, если представить, что это одна из них, то предложенного мной решения хватит.
очень круто сделал. очень глубоко разобрал каждый вопрос. т.е. ты именно разобрал вопрос, дал понимание почему так, а не тупо сказал что это так. респект
В первой задаче проще всего рекурсией. Количество итераций будет зависеть от того, сколько нам элементов нужно получить, если столько конечно есть в двух массивах function getLastDecision(decisions1, decisions2, k) { let result = []; const lastItemD1 = decisions1[decisions1.length - 1]; const lastItemD2 = decisions2[decisions2.length - 1]; // Базовый случай if(!k || (!lastItemD1 && !lastItemD2)) { return result; } // Рекурсивный случай else{ if((lastItemD1?.id ?? 0) > (lastItemD2?.id ?? 0)){ result.push(lastItemD1); decisions1.pop(); } else { result.push(lastItemD2); decisions2.pop(); } return result.concat(getLastDecision(decisions1, decisions2, k - 1)); } }
Спасибо! 1. Примитивы тоже передаются по ссылке, а не по значению. Это легко заметить, если переменную с огромным стрингом отправить в качестве параметра в функцию: размер кучи не поменяется. 2. Псевдомассив arguments де-факто deprecated. Используй метод rest вместо: (...args)