OptiTeam · январь 2025

Тех собес на middle-senior Frontend Разработчик в OptiTeam

middle-senior Тех собес 2 задачи

1. Задача: Написать функцию банкомата для выдачи суммы доступными номиналами

const nominals = [10, 50, 100, 200, 500, 1000, 2000, 5000];

function atm(amount, nominals) {

}

console.log(atm(12830, nominals)); // ["5000x2", "2000x1", "500x1", "200x1", "100x1", "10x3"]

2. Задача: Найти, объяснить и исправить проблемы в реализации React-компонента

Есть реализация компонента, от которого требуется выводить текущее значение вертикального скролла окна (window.scrollY) и после монтирования асинхронно получить число и вывести его.

import React, { useState, useEffect } from 'react';

// имитация запроса к серверу. просто получаем число асинхронно
const fetchRandomNumber = () => Promise.resolve(Math.random());

const NumberAndScroll = () => {
    const [number, setNumber] = useState();
    const [scroll, setScroll] = useState();

    useEffect(async () => {

        const number = await fetchRandomNumber();
        setNumber(number);

        window.addEventListener('scroll', () => setScroll(window.scrollY));

        return () => window.removeEventListener('scroll', () => setScroll(window.scrollY));

    }, );

    return (
        <div>
            <div> Number: { number } </div>
            <div> Scroll: { scroll } </div>
        </div>
    )
}