Проходим собеседование #9: собеседование на junior frontend developer

preview_player
Показать описание

00:00 Вступление
02:12 Знакомство с Дмитрием
05:22 Что за тег datalist?
07:18 Атрибуты defer, async - для чего они нужны?
11:53 Как выбрать все кнопки с атрибутом disabled?
14:58 Выбрать следующий тег за input - какой селектор?
17:22 Как сделать так чтоб объект нельзя было изменить?
19:20 Какой будет вывод?
21:20 Задачка с числами Фибоначчи.
33:40 Задачка со сдвигом массива.
53:13 Задачка с подсчетом букв.
Рекомендации по теме
Комментарии
Автор

// Фибоначчи (while)
function fibonacci(n) {
let a = 0, b = 1, i = 1
while (i < n) {
tmp = a + b
a = b
b = tmp
i++
}
return b
}
// Фибоначчи (рекурсия)
function fibonacci(n) {
if (n <= 1) return n
return fibonacci(n - 1) + fibonacci(n - 2)
}

LNMaster_
Автор

Не знаю кто это придумал, но это шикарный формат от которого я кайфую. Казалось бы простая идея, но, что-то я не нашел подобного в сети в открытом доступе.
Прям доставляет удовольствие в свободное время поучаствовать в процессе и порешать задачки и поотвечать на вопросы. Очень хорошо апает новичков, а опытным позволит под чашечку кофе стряхнуть пыль со знаний.

ЧеловексТопором
Автор

Оу, а с фибоначи он интересно мыслил) просто проверяем длинна больше num, если да, то возвращаем arr[num] иначе i = arr.lenght - 1; i <= num
Действительно крутая мысль!👍
34:30 вроде хитро решается через splice()
(five minutes later) return [...arr.splice(step), ...arr]

pilyugin
Автор

Я решил вторую задачку императивно:

function moveArr(arr, step) {
if (step === 0 || !step) {
return arr;
}

for (let i = 0; i < Math.abs(step); i++) {
if (step > 0) {
arr.unshift(arr.pop());
} else {
arr.push(arr.shift());
}
}

return arr;
}

ЧеловексТопором
Автор

задача с подсчетом букв:
function getChars(city) {
let arr = city.match(/[А-Я]/gmi).map(a => a.toLowerCase())
let flag = '⭐'
let arr2 = arr.reduce((acc, cur) => {
acc[cur] = acc[cur] ? acc[cur] += flag : flag
return acc
}, {})
return JSON.stringify(arr2).replace(/[{}"]/gmi, '')
}

ДениИмагожев
Автор

Вариант решения Фибоначчи (с использованием мемоизации):
function fibo(num) {
if (num < 1) return 0;
if (num < 3) return 1;
if (!fibo.answers) {
fibo.answers = new Map();
}
if (fibo.answers.has(num)) return fibo.answers.get(num);
fibo.answers.set(num, fibo(num - 2) + fibo(num - 1));
return fibo.answers.get(num);
}

aleksandrfokin
Автор

А задача, которая с реального собеседования, была именно с условием написать в функциональном стеле или просто решить в любом стиле?
Если интересно, вот мое решение в императивном стиле:

function getChars(city) {
let arr = city.toLowerCase().split('');
const obj = {};

for (let i = 0; i < arr.length; i++) {
if (arr[i] !== ' ' && arr[i] !== '-') {
? obj[arr[i]] += '*' : obj[arr[i]] = `${arr[i]}:*`;
}
}

return Object.values(obj).join(', ');
}

Переделал решение для корректности.

ЧеловексТопором
Автор

function getChars(country) {

const reg = /[а-яё]/i

return [...country]
.filter(item => item.match(reg))
.reduce((acc, item) => {

if (!acc[item]) {
acc[item] = '*'
}
else {
acc[item] += '*'
}

return acc
}, {})
}

getChars('Санкт-Петербург')
getChars('Новый Уренгой')

TipAnswer
Автор

Fibonacci recursive using object:
const fibo = (num, memo = {}) => {
if (memo[num]) return memo[num]
if (num === 0 || num === 1) return num
return memo[num] = fibo(num - 1, memo) + fibo(num - 2, memo)
}

olegpostolovskyi
Автор

Все до чего смог додуматься в функциональном стиле. Получилось не так уж и функционально:

function getChars2(city) {
const obj = {};

city.toLowerCase().split('').forEach((elem, index) => {
if (elem !== ' ' && elem !== '-') {
? obj[elem] += '*' : obj[elem] = `${elem}:*`;
}
});

return Object.values(obj).join(', ');
}

ЧеловексТопором