Comments 25
Терпеть не могу, когда наблюдают за тем, как я пишу код. Почему без этого никуда? Какой процент компаний используют live-coding при собеседовании? Я встречал только одну и отказался сразу от такого собеседования.
К сожалению, почти все крупные компании...
Потому что есть ребята, которые рисуют себе толстый опыт, а потом оказывается, что они синтаксис цикла for «не помнят».
А если я честно говорю, что у меня нет опыта, но многие задачи из поста, я могу решить, но мне действительно некоторый синтаксис надо погуглить. С такими навыками я остаюсь за бортом или могу рассчитывать на условную позицию джуна?
некоторый синтаксис надо погуглить
Наверное, зависит от того, какой именно синтаксис вам необходимо гуглить. Если вы забыли как использовать, не знаю, Intl.Collator какой-нибудь – по мне так никаких проблем, гуглите. А если вы забыли как записывается цикл – может лучше было базу до интервью подучить?
isPalindrome имеет менее многословное решение
function isPalindrome(str) {
const transormed = str.replace(/[^\w]/g, '').toLocaleLowerCase();
return transormed === transormed.split('').reverse().join('')
}
При таком решении можно ожидать дополнение от интервьюера
"Что будет при выполнении, если str занимает 90% доступной памяти?"
есть еще менее многословное
$.isPalindrome(str)
в более модном-молодежном варианте:
yarn add @huynhducduy/is-palindrome
function _isPalindrome(str) {
return isPalindrome(str)
}
Ни одной вакансии не видел без Лив кодинга, работал в Яндекс ВТБ сбер
На аутсорсе заказчик может собесить с лайвом и никуда от этого не денешься. У меня, например, беда с этим, поэтому хочу придумать себе какую-то практику что-ли.
Это почему же? Тебе же не дают тестовое сделать, потратив n часов своего времени на код, который неизвестно посмотрят вообще или нет. На лайвкодинге дают задачи, которые можно решить за 5-10 мин в плане сложности - и смотрят даже не на ответ, а на ход рассуждений. Это может не нравиться если ты например не умеешь думать...
Не надо советовать ответ с рекурсией.
Следующим вопросом будет как решить глубину рекурсии.
А нет никакой проблемы. Расход памяти при вызове рекурсии линейно зависит от глубины рекурсии. А рост ёмкости ОЗУ из за технического прогресса идёт по экспоненте. Может показаться, что рекурсивный алгорит сожрёт память гораздо быстрее, чем период времени в течении которого происходит апгрейд ОЗУ у компьютера. Но это лишь на малых временных интервалах, а в ассимптотике увеличение памяти при апгрейде будет расти несоизмеримо быстрее расхода памяти, т.к. O(exp(t)) >> O(t) и память никогда не закончится =)))
В том и дело, что кончается очень быстро.
Обычно на каждый поток выделяется 1МБ памяти.
Под переменные ну скажем нужно 24 байт стека и 8 на возврат итого каждый вызов 32 байта .
1МБ/32=32768 рекурсивных вызовов пока прогнозами а не упадёт.
Не так много.
Я, конечно, понимаю, что про такие штуки, как TCO, в джаваскрипте никогда не думали — нечего и начинать, но вот неглупые ребята же все-таки существуют: https://glat.info/pub/tailopt-js/
Проблемы переполнения стека при рекурсивных но хвостовых вызовах — были решены академически примерно 50 лет назад. Хвостовая рекурсия всегда может быть развёрнута в цикл.
Так что все нормально с рекурсией, если знать, как её готовить.
Что-то слишком простые задачи, тут грейд "junior" не выше (по современным стандартам). Если на более высокий грейд будут такие задачи - это просто неописуемая удача.
У меня был live-coding на собеседованиях (правда только на Python), и там была одна задача на Two Pointers, и ещё одна на DFS - навык решения таких задач набивается на LeetCode. Two Pointers просто надо понять смысл, а DFS - зубрить и понимать, что присходит.
Всем желающим набить навык live coding, я посоветовал бы начать с задачника Абрамяна М.Э. "1000 задач по программированию". Там задачи можно решать на абсолютно любом языке. Там такие же задачи как в статье. Когда вам станет решать эти задачи "как нечего делать", тогда переходим на LeetCode
Я считаю, что sumRange.js - это излишне перемудрёное. Зачем усложнять простые действия, которые трудно прослеить?
Задача 2.
Напишите функцию, которая переворачивает цифры числа, сохраняя знак нетронутым.
Вы используете для решения строковые операции. Хотя куда эффективнее будет использовать арифметические операции. Ниже решение
function reverseNumber(num) {
const isNegative = num < 0; if (isNegative) { num = Math.abs(num); } let reversed = 0; while (num !== 0) { const lastDigit = num % 10; reversed = reversed * 10 + lastDigit; num = Math.floor(num / 10); } return isNegative ? -reversed : reversed; }
Не то, что я умничать пытаюсь... Просто эта задача уже классика LeetCode и ему подобных)
JavaScript. Готовимся к live-coding