- Видео 97
- Просмотров 12 750
Alexandr Kazakov
Добавлен 15 янв 2017
Мой телеграм канал Алгоритмы + Собесы: t.me/+S8ShwNRNqCZmNWY6
[RU] 1971. Find if Path Exists in Graph [JavaScript]
[RU] 1971. Find if Path Exists in Graph [JavaScript]
Просмотров: 25
Видео
Холодные криптокошельки безопасны ли они. Как устроены Phantom, TrustWallet, Ledger
Просмотров 1017 месяцев назад
Я как блокчейн разработчик, ,больше двух лет опыта работы с блокчейн Solana, рассказываю о так называемых "холодных" криптокошельках. Мой Solana Raydium торговый бот на Typescript: github.com/alexandr-kazakov/solana-crendel-bot Платные консультации по блокчейну Solana: alexandr.kazakov1@gmail.com Таймкоды: 00:30 Обо мне 05:08 Как работают кошельки в Solana 15:42 Пример безопасного Solana кошель...
Задача с собеседования PromiseAll на нативном JavaScript
Просмотров 2507 месяцев назад
Задача с собеседования PromiseAll на нативном JavaScript
Собеседование в Яндекс Фронтенд 2024
Просмотров 7 тыс.7 месяцев назад
Первый этап в Яндекс на должность Разработчика Интерфейсов(фронтенд), 2024 год. Этап посвящен знанию языка, в моем случае это JavaScript. Таймкоды: 00:00 Первая задача 15:10 Вторая задача 32:57 Третья задача 44:26 Четвертая задача
[RU] LeetCode 67 Add Binary [JavaScript]
Просмотров 628 месяцев назад
[RU] LeetCode 67 Add Binary [JavaScript]
[RU] LeetCode 2351 First Letter to Appear Twice [JavaScript]
Просмотров 238 месяцев назад
[RU] LeetCode 2351 First Letter to Appear Twice [JavaScript]
Самая популярная задача на собеседованиях для frontend разработчика
Просмотров 2339 месяцев назад
Самая популярная задача на собеседованиях для frontend разработчика
[RU] LeetCode 476 Number Complement [JavaScript]
Просмотров 309 месяцев назад
[RU] LeetCode 476 Number Complement [JavaScript]
[EN] LeetCode 476 Number Complement [JavaScript]
Просмотров 139 месяцев назад
[EN] LeetCode 476 Number Complement [JavaScript]
[RU] LeetCode 36 Valid Sudoku [JavaScript]
Просмотров 319 месяцев назад
[RU] LeetCode 36 Valid Sudoku [JavaScript]
[RU] LeetCode 57 Insert Interval [JavaScript]
Просмотров 129 месяцев назад
[RU] LeetCode 57 Insert Interval [JavaScript]
[RU] LeetCode 442 Find All Duplicates in an Array [JavaScript]
Просмотров 209 месяцев назад
[RU] LeetCode 442 Find All Duplicates in an Array [JavaScript]
[EN] LeetCode 209 Minimum Size Subarray Sum [JavaScript]
Просмотров 2410 месяцев назад
[EN] LeetCode 209 Minimum Size Subarray Sum [JavaScript]
[RU] LeetCode 209 Minimum Size Subarray Sum [JavaScript]
Просмотров 4710 месяцев назад
[RU] LeetCode 209 Minimum Size Subarray Sum [JavaScript]
[EN] LeetCode 169 Majority Element [JavaScript]
Просмотров 810 месяцев назад
[EN] LeetCode 169 Majority Element [JavaScript]
[RU] LeetCode 169 Majority Element [JavaScript]
Просмотров 1610 месяцев назад
[RU] LeetCode 169 Majority Element [JavaScript]
[EN] LeetCode 189 Rotate Array [JavaScript]
Просмотров 1810 месяцев назад
[EN] LeetCode 189 Rotate Array [JavaScript]
[RU] LeetCode 189 Rotate Array [JavaScript]
Просмотров 3510 месяцев назад
[RU] LeetCode 189 Rotate Array [JavaScript]
LeetCode как решать задачи программисту-самоучке { LeetCode How to RU }
Просмотров 49011 месяцев назад
LeetCode как решать задачи программисту-самоучке { LeetCode How to RU }
LeetCode 200 задач Промежуточные итоги
Просмотров 7011 месяцев назад
LeetCode 200 задач Промежуточные итоги
[RU] LeetCode 49 Group Anagrams [JavaScript]
Просмотров 3811 месяцев назад
[RU] LeetCode 49 Group Anagrams [JavaScript]
[RU] LeetCode 54 Spiral Matrix [JavaScript]
Просмотров 1011 месяцев назад
[RU] LeetCode 54 Spiral Matrix [JavaScript]
[RU] LeetCode 48 Rotate Image [JavaScript]
Просмотров 1411 месяцев назад
[RU] LeetCode 48 Rotate Image [JavaScript]
[RU] LeetCode 733 Flood Fill [JavaScript]
Просмотров 2011 месяцев назад
[RU] LeetCode 733 Flood Fill [JavaScript]
[RU] LeetCode 566 Reshape the Matrix [JavaScript]
Просмотров 2111 месяцев назад
[RU] LeetCode 566 Reshape the Matrix [JavaScript]
[RU] LeetCode 1380 Lucky Numbers in a Matrix [JavaScript]
Просмотров 1711 месяцев назад
[RU] LeetCode 1380 Lucky Numbers in a Matrix [JavaScript]
LeetCode 1351 Count Negative Numbers in a Sorted Matrix
Просмотров 1711 месяцев назад
LeetCode 1351 Count Negative Numbers in a Sorted Matrix
[RU] LeetCode 1572 Matrix Diagonal Sum [JavaScript]
Просмотров 2111 месяцев назад
[RU] LeetCode 1572 Matrix Diagonal Sum [JavaScript]
[RU] LeetCode 2824 Count Pairs Whose Sum is Less than Target [JavaScript]
Просмотров 7611 месяцев назад
[RU] LeetCode 2824 Count Pairs Whose Sum is Less than Target [JavaScript]
[RU] LeetCode 100 Same Tree [JavaScript]
Просмотров 29Год назад
[RU] LeetCode 100 Same Tree [JavaScript]
Я так понимаю это первый этап. А их еще два, они посложнее этих будут.
на втором этапе были два алгоритмические задачи.
1 задача const get = (obj, path) => path.split('.').reduce((acc, key) => acc?.[key], obj) 4 задача, 1 проход, можно в 1 строку function isMonotonic(arr) { const sign = Math.sign(arr[1] - arr[0]) return arr.every((v, i, arr) => i === 0 || sign === Math.sign(v - arr[i - 1])) }
english please
жаль кто идет в яндекс - эта самая позорная орга в рф, хуже чем вк.
Вторую задачу можно просто решить с помощью стека и на каждом изменении считать размер стека и отчищать его, если в условии не указано, что мы мутируем исходный массив, то тогда просто достаточно использовать указатели
Первую задачу можно решить без рекурсии, если помнить, что мы можем сохранить ссылки на объекты, тогда будет сложность равная пути
isMonotonic можно было решить за один цикл, у нас не могут идти функция сразу и вверх и вниз, поэтому ставим изначально обоим флаг на тру и после первой проверки изменяем и на каждой итерации проверяем если происходит, что и там и там false значит уже не монотонна
О у меня были 2 задачи из твоих кейсов)
Поделись другими задачами плиз
Как же меня вымораживает необходимость заниматься этой клоунадой при наличии ide и чатжпт
Верной дорогой идете товарищь ) Чем больше таких разрабов, тем нам проще ))
@@aceracer5556 сиди алгосы дрюкай братан. Твой уровень
Здравствуйте! Вы на мидла собеседовались? Если да, могу с вами где-нибудь списаться? У меня через неделю собес с ними🙏
Привет, на собесах пока мне ни разу еще не говорили, на какой уровень я собеседуюсь, и так везде. Здесь же я ожидал, что это мидл/сеньер. Нужно учитывать, что это лишь один из этапов. Насчет списаться, посмотрите пожалуйста мой ТГ канал в описании канала, можете там свободно написать.
Есть прикольный вариант сделать это через substring без использования массивов (можно убрать доп переменные и будет решение в 4 строчки, но я за читаемость) function get(obj, path) { const firstKeyIndex = path.indexOf('.'); if (firstKeyIndex === -1) { return obj[path]; // Если индекс -1, то весь путь и есть ключ объекта } const firstKey = path.substring(0, firstKeyIndex); const pathWithoutFirstKey = path.substring(firstKeyIndex + 1); return get(obj[firstKey], pathWithoutFirstKey); }
Как ты получаешь доступ к .val и остальным полям узла если на вход передаётся массив цифр а не объектов? Описание типа в задаче очень путает
Да, это хороший вопрос. Судя по тому, что показывается на литкоде, кажется что input это массив с числами, но по факту это не так. Каждый узел бинарного дерева представляет из себя в JS объект, у которого есть свойства: left, right, val. Именно к свойствам объекта я и обращаюсь через точку, например node.val, node.left, node.right.
@@alexandrkazakov723 Правда, причём даже если распечатать что приходит на вход или каждый отдельный узел - в консоли будет массив чисел
46:55 ваще не понял как сортировкой можно тут что-то решить. Сортировка перетрёт порядок цифр и по-умолчанию сделает массив монотонным, поэтому вообще не понимаю, в чем идея. Я думаю что интервьюер тоже не поняла ничего
скорее всего идея была сортировать два раза - по возрастанию и по убыванию. А затем привести к строкам исходный массив и два сортированных. Если хотя бы в одном случае строки совпадут, то значит исходный массив монотонный.
@@ivanburskyтогда проще один раз отсортировать и пройтись сначала по убыванию, потом по возрастанию, две сортировки тут не нужны ну и приведение к строкам тоже Ну и просто по памяти и сложности конечно проигрывающий вариант Таким вариком можно хорошо зарекомендовать себя как любителя оверинжениринга)
Собеседуемый, молодец, так надо уметь разговор поддерживать. 1. Задача, можно рекурсией можно в цикле for разбиваем путь через split('.'), получаем ключ и остаток пути, и передаем их дальше вызывая эту же функцию и делаем два выхода один когда у нас путь закончится, будет длиной 0, второй когда obj будет undefined возвращаем undefined. function get(obj, path) { if (path.length === 0) { return obj } if (obj === undefined) { return undefined } const [key, ...rest] = path.split('.'); return get(obj[key], rest.join('.')) } на цикл function get(obj, path) { let result = { ...obj }; const paths = path.split('.') for (const key of paths) { result = result[key] if (result === undefined) { return undefined } } return result; } 2. через массив чтобы таких условий не делать, хотя все равно не идеально :( function rle(str) { const result = []; let pointer = str[0]; for (let i = 1; i < str.length; i++) { if (pointer[0] === str[i]) { pointer += str[i] } else { result.push(pointer) pointer = str[i] } } result.push(pointer); return result.map(letter => letter.length === 1 ? letter : `${letter[0]}${letter.length}`) .join('') }
Спасибо за видео. Недавно тоже первый этап проходил, все задач разные, но у нас с тобой схожи с retryFetch)
@@dididie158 а какие у тебя задачи были?
а какой результат? позвали на второй этап?
да, позвали на второй этап, там было только две задачки, уже алгоритмические, я их также решил
Устроился в итоге в компанию? Надеюсь, что да
Добрый день, в обозримом будущем хотелось бы попасть на стажировку в яндекс, может быть уважаемые господа дадите совет или направление, на что сделать упор в задачах и какого уровня примерно спрашивают задачи на позицию стажера. Пока решаю codewar, задачи 6k даются сложно.
Leetcode популярен, вот план обучения: leetcode.com/explore/featured/card/the-leetcode-beginners-guide/679/sql-syntax/4358/
Сначала пройди курс по алгоритмам, начни с простых сортировок и алгоритмов, потом на литкоде по тихоньку, если не получилось решить самому смотри эталонные решения или ChatGpt используй и попробуй визуализировать логику в схемах на бумаге... Мне это помогло
Это на какой уровень, джуниор или мидл?
Об этом тебе никто прямо не скажет. Могу только сказать, что на видео один из этапов с лайвкодингом.
стажировка яндекса
Ппц. Школьные бесполезные задачки которые на курсах пихают. А я то думал, нафига вместо практики на курсах именно эти тупорылые задачи, которые ничему практическому не учат и только отбивают желание дальше учиться. А их оказывается на собесах подсовывают. А знания, которые в реальной практике в основном используют, на собесах интересуют вообще или там только такую тупость спрашивают? Вот на курсах учат этим тупорылым задачкам, а потом в конце как дубиной по башке "напиши сайт". Походу всё как в жизни, на собесе тупость эту школьную, а как прошел собес занимаешься абсолютно другими делами.
вторая задача, мое решение
function countStr(str) { let count = 0; let res = ""; for (let i = 0; i < str.length; i++) { if (str[i] === str[i + 1]) { count++; } else if (count === 0 && str[i] !== str[i + 1]) { res = res + str[i]; } else { count++; res = res + str[i] + count; count = 0; } } return res; }
спасибо
все это хорошо, но КАК попасть на собеседования? КААААК?
@@psevdonim257 ищи на линкедин разрабов которые работают в нужных тебе компаниях , пиши им и проси рефералку. В большинстве топ компаний есть рекомендательная реферальная система.
@@alexandrkazakov723 вариант, спасибо, сначала надо хороший впн чтоб все завелось
так оффер предложили по итогу?
4) function mon(nums) { let isMon = true let monType = 0 if(nums.length < 3) { return true } for (let i = 1, prevNum = nums[0]; i < nums.length; i++) { const currNum = nums[i] if (currNum !== prevNum) { diffSign = Math.sign(currNum - prevNum) if (monType === 0) { monType = diffSign } else if (monType !== diffSign) { isMon = false break } } prevNum = currNum } return isMon }
слабо, очень много нелепых комментариев от тебя по ходу собеса, которыми себя же и зарываешь, создается впечатление, что ты не понимаешь о чем говоришь, даже если это не так. Хоть и атмосфера на собесе - "дружеская беседа", это все еще собеседование и любое твое слово будет использовать против тебя в фидбэке) удачи в обучении
@@topsy_kreds видимо комментарий мне, но я и второй раунд алгоритмическую секцию успешно прошел. И все это с первого раза, если это слабо, то что же, меня такая слабость устраивает 🙂
@@alexandrkazakov723 я так понимаю собесы были на стажировку?
@@topsy_kreds нет конечно, какая стажировка.
Так и надо. Именно рассуждения в слух на собесах и любят. Видимо с молчунами им скучно и заворачивают если конечно это не сеньор которому никакие собесы не нужны.
@@Psoglawec я не против рассуждений в слух, просто тут человек местами чепуху говорит
28:41 "Ну давай оценю сложность алгоритма🥺🥺🥺" Боже, как он ее упрашивал)) Ведь готовился
первая банальная задача.. но очень хорошо показывает опыт программиста и его харды. у вам хеш таблица и путь это ключи! какая нафиг рекурсия..😂 задача на знание js и структур данных. читайте ребят книги! они очень полезные.. кто знает как распаковать объект? вот вам и ответ на задачу. учите структуры данных!..
Блять я не знаю почему, но мне запал в душу этот коммент. Хочу быть таким же умным и знать дохуя
Слишком кипишной как будто ,очень много лишних вопросов задавал ,которые не нужны ,особенно в моменте «да давай я оценю сложность алгоритма ?»😃
Сложность оценки алгоритма обязательно нужно называть на подобного рода собесах. После этого был второй алгоритмический этап, там две алгоритмические задачи было, прямо спрашивают сложность алгоритма, если ты не не говоришь. А про компании уровня фаанг я молчу.
@@alexandrkazakov723 сложность надо говорить если спрашивают)) если не спрашивают, значит она тривиальная и ты тупо селф репортишь на себя, что для тебя это достижение - посчитать сложность выполнения/памяти
@@blessedpigeon6304 я просто люблю алгоритмические задачки решать и оценивать сложность алгоритма, умею это хорошо. Вот это я репорчу
@@alexandrkazakov723 всё-таки совет не очень. лучшим советом будет следовать за интервьюером, не пытаться как-то что-то сверху сбоку придумать-додумать)
4 задача как вариант. function isMonotonic(num) { const mono1 = [...num].sort((a, b) => a - b); const mono2 = [...num].sort((a, b) => b - a); if (mono1.join('') === num.join('') || mono2.join('') === num.join('')) { return true; } return false; }
Вы 8 раз пробежались по массиву. Спасибо, но нам в программировании такого не нужно.
@@ProJavaScript Да ладно, мне не жалко
За то 4 строки)
У тебя спред пробегает, потом сортировка n2 и перевод строки, много лишнего...
Типатиптатптаитипатипатипатипатипа
привет! посмотрел с интересом, в процессе накидывал решения :) 1 задачу сделал бы так: function get(obj, chain) { return chain?.split('.').reduce((acc, key) => acc?.[key], obj); } 2 можно тоже в одну строку, гораздо быстрее (для достаточно длинных строк - на порядок) будет регуляркой: function rle(input) { return input.match(/(\w)\1*/g).reduce((acc, v) => acc += v[0] + (v.length > 1 ? v.length : ''), ''); } 3 ваше решение нерабочее по нескольким причинам: интерпретатор ругнётся на return throw (уже писали в комментах) + если после неудачной попытки будет успешная - первый Promise из call stack всё равно не будет заресолвлен. я бы реализовал так: function get(url) { return new Promise(async (resolve, reject) => { let retries = 5; while (retries) { await fetch(url) .then((res) => { if (!res.ok) throw new Error(); // сюда попадёт, например, ошибка 500 resolve(res); retries = 0; }) .catch((e) => (retries--)); } reject('Retry count exceeded'); }); } 4 function isMonotonic(array) { return array.reduce((acc, value, index) => { if (acc.result && index) { const delta = Math.sign(value - array[index - 1]); if (acc.sign && delta && delta != acc.sign) acc.result = false; acc.sign = delta; } return acc; }, { sign: 0, result: true }).result; }
Ваше решение второй задачи вызывает вопросы, сложно написать такую регулярку на собесе и не ошибиться. Также мне кажется, что столь короткая запись может быть непонятна интервьюверу и это в минус пойдет.
@siberian-crystall Ваши решения конечно же гораздо лучше и самое главное - рабочие (в отличие от например, решения задачи 3 на видео). Однако в ваших решениях 1 и 4 есть недостаток: отсутствует предварительный выход из-за использования непрерываемых массивных методов. Т.е., алгоритм в любом случае переберёт весь массив, даже если мы уже можем сделать однозначный вывод, что результат undefined или false. В задаче 4 лучше всего воспользоваться циклом с предварительным return false, а в задаче 1 - рекурсивной функцией или циклом с предварительным return void 0. А задача 2 может быть решена ещё проще и оптимизированее: function rle(input) { return input.replace(/(\w)\1{1,}/g, (str, char) => char + str.length); } Однако отмечу, что попытка решить сложные задачи используя минимальное количество строк кода - не лучшая привычка. Код должен быть очевиден для того, кто его будет читать и пусть код будет многословен - минификаторы за вас его сожмут на этапе билда проекта.
@@ProJavaScript Отличное дополнение, благодарю! Всё по делу)
В 4 задачке, можно заранее узнать какой мы ожидаем массиив, и исходя этого закинуть в метод every лямбду.
Ваши видео с решениями просто клад! Наконец то ютуб показал мне ваш канал
Третья задача: if(counter === 5) { throw new Error("3aдданный URL недоступен") ; } else { ...} return при выбрасывании ошибки не нужен (его наличие вызовет ошибку) Четвертая задача: function isMonotonic(numbers) { if (numbers.length <= 2) return true; let type = numbers[1] - numbers[0]; // Determine monotonicity type in one step for (let i = 2; i < numbers.length; i++) { if ( (type > 0 && numbers[i] < numbers[i - 1]) || (type < 0 && numbers[i] > numbers[i - 1]) || (type == 0 && numbers[i] !== numbers[i - 1]) ) { return false; } } return true; }
ваше решение вернёт false для массива [1, 1, 2, 3], потому что определяет направление монотонности только по паре первых значений
@@siberian-crystallтак и должно быть
Первая задача. Можно в одну строчку сделать или наоборот подробнее разложить. Ненавижу читать рекурсию + я могу ошибаться, но у тебя !object[array[i]] вернет undefined для null function get(initialObject, path) { return path.split('.').reduce((currentObject, currentKey) => { if (!(currentKey in currentObject)) { return undefined; } return currentObject[currentKey]; }, initialObject); }
У редьюса проблема, что он всегда пройдет до конца массива, а нам после первого же undefined можно прекратить итерироваться по массиву
@@КириллЗеленский-н7й да, а еще проверять через property in obj это я неправильно сделал, через for..of и hasOwn можно сделать: function get(obj, path) { const properties = path.split("."); let current = obj; for (const property of properties) { const hasProperty = Object.hasOwn(current, property); if (!hasProperty) return undefined; current = current[property]; } return current; }
задачи простые. сложно походу только на собес попасть. не.. ну понятно, что простые для тех кто задрачивал leetcode.
Там ещё второй алгоритмический этап, две задачи были, также не сложные, но из-за волнения всякое может случиться…
хотите сказать что, чтобы решить первую задачу надо задрачивать литкод?
@@topsy_kreds ты уже работаешь в яндексе?
Попасть просто, стажировки яндекс напишите в поисковике и на официальном сайте найдете инструкцию
В задаче про массив забавные условия на 7-8 строках (присвоение вместо сравнения) ) Понятно, что это просто опечатка, но собеседующая добрая (или не обратила внимание).
ага ага ага ага ага ага угу угу угу угу угу угу ага ага ага ага
Братец, а остальные этапы писать будешь? Я про алгосекцию и платформу?
Привет, второй этап я также успешно прошел, там было две алгоритм задачки, но его к сожалению я его не записал, можешь в тг моем увидеть что за задачи там были. Третий этап полностью разговорный, там не сильно интересно, вопросы про опыт и на софт скиллы
@@alexandrkazakov723у меня было 4 финала и на одном из них так же были задачки. на 3-х других только разговоры. Так-что от команды все-таки зависит.
@@alexandrkazakov723 Тебе предложили офер в итоге? И какая вилка была если не секрет
@@alexandrkazakov723 как найти ваш тг?
Спасибо за объяснение!
Всё классно, но смущает то что у вас вызывают сложности легкие и немного средних задач, я не являюсь программистом и прорешал уже более 700 :) просто в удовольствие, хотя у вас как вы говорите 5 лет опыта ) вакансии есть?)))
Яндекс, гугл, майкрософт, Амазон, мета и многие другие крупнейшие компании просят решить подобные компании на своих собесах, я бы советовал вам туда пробовать устраиваться
Ещё кстати, если вы только учитесь в универе, то обязательно стоит пробовать в фаанг со знаниями алгоритмов, так как у них есть программы стажировки. Английский только стоит подтянуть и потренить
скинь ссылку, а то мне чет не особо верится что не программист, но 700 решил
да, 700 задач это очень много, это годы регулярного решения задач
You’re speaking English very well and understandable 👍
Да, впечатляет, молодец!
мужская задача
Классное видео! Я как раз решил изучить алгосы и начал смотреть видосы с малой практикой. Но благо наяал понимать, что особ смысла в глупой теории нет, надо сначало самому попытаться решить задачу, а если не вышло, то посмотреть теорию, вот это самый лучший способ их изучить
Подвел итоги 200 задач, приятно слушать 🔥Молодец
Thanks for the wonderful explanation bro. keep the good work going.
не самая сложная задача для записи, но за твой потенциал объяснить людям принцип работы алгоритма - респект, продолжай)
well done
How about english?
Sure, but later