Комментарии 6
Какие плюсы данная платформа предлагает собеседуемому?
Добрый день! Возможность писать код в среде, близкой к рабочей – есть подсветка синтаксиса, хоткеи как в VSCode и возможность запуска кода. Для заданий с React и HTML есть просмотр превью, для SQL – возможность работать с БД, заполненной тестовыми данными. Это дает уйти от чисто теоретического общения или написания кода в вакууме без реальной проверки и дебага.
При этом не надо готовить свою IDE и что-то дополнительно настраивать по ходу интервью, нервничая и теряя время – среда уже готова. В своем опыте собеседований мы сталкивались с тем, что на личном компьютере кандидата не было IDE вообще, либо кандидат не был готов в ней быстро создать тестовый проект. Использование платформы решает эту проблему.
Почему-то никто не задумывается, что если ляпнуть откровенную чушь: «рекурсия становится неэффективной при n > 40» — то многие прочтут и запомнят.
Вот вам рекурсия (не знаю, какие языки поддерживает платформа, а в тексте об этом — ни слова, поэтому — эликсир):
iex|🌢|1 ▶ defmodule Fib do
def calc(n) when n > 0, do: do_calc(n, 2, 1, 1)
defp do_calc(1, _, _, _), do: 1
defp do_calc(2, _, _, _), do: 1
defp do_calc(n, n, _prev, curr), do: curr
defp do_calc(n, i, prev, curr), do: do_calc(n, i + 1, curr, prev + curr)
end
iex|🌢|2 ▶ Enum.map(1..10, &Fib.calc/1)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
iex|🌢|3 ▶ :timer.tc(fn -> Fib.calc(1_000) end)
{31,
43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875}Вычисление тысячного числа заняло 31μs. Гоните вашего интрервьюера в шею.
Зачем так резко? Вы слова из контекста вырываете. Там написано "Наивное решение, (простая рекурсия) ...". Никто не говорит, что вообще все рекурсии\все решения их использующие являются слишком медленными. Там очевидная отсылка к определенному и неэффективному алгоритму. То что вы здесь реализовали очевидно не является этим.
Кстати говоря, я может ошибаюсь, но это выглядит как раз примером динамичного итераивного программирование? То что названо "хорошим" а не "наивным" решением в комментариях.
Здесь имеется в виду самый наивный алгоритм, который вытекает из формулы:
int Fib(int n) => n switch
{
<= 0 => 0,
1 => 1,
_ => Fib(n - 1) + Fib(n - 2)
};Такой код при n более 40 уже начинает работать дольше секунды.
int MeasureFib(int n)
{
var sw = System.Diagnostics.Stopwatch.StartNew();
var ans = Fib(n);
sw.Stop();
Console.WriteLine($"Calculated Fib({n}) in {sw.ElapsedMilliseconds} ms");
return ans;
}
/*
> MeasureFib(30)
Calculated Fib(30) in 8 ms
832040
> MeasureFib(40)
Calculated Fib(40) in 1077 ms
102334155
*/Всё таки в своей ide с автокомплитом кодить удобнее, чем в онлайн-блокноте с подсветкой синтаксиса
Как мы сделали платформу для собеседований Enterly