Frontend
Има ли въпроси за проекта, екипа или процесите на разработка?
Дали `console.log` вътре във функция е страничен ефект?
Разкажи накратко за себе си, с какво се занимаваш, откъде си, защо си тук и всичко, което смяташ за важно.
Каква е разликата между useMemo и useCallback?
Разкажи малко за себе си и за най-интересната техническа задача, която си решил според теб.
Как взаимодействахте с бекенда и други членове на екипа (аналитици, дизайнери, тестери)?
Моля, разкажи ми за promises в JavaScript: какво представляват, за какво са, методи.
Кои модели за разработка използвате (DRY, SOLID, GRASP, дизайн модели)?
Какво е масив от зависимости в useEffect? Какво ще стане, ако предадете празен масив или изобщо не го предавате?
Какви HTTP кодове се използват при работа с REST API?
/* Какво ще се изведе в конзолата */ let value = 2; function showValue() { console.log(value); } function wrapper() { let value = 3; console.log(value); showValue(); } wrapper();
Какво правехте, когато потребителят загуби интернет?
Как да организираме обмена на данни между два несвързани компонента?
Колко тясно работихте с Next.js? Какви функции използвате?
Все още работите в компанията или вече я напуснахте?
Как да реализираме търсене по valueChanges на полето за въвеждане с заявка към бекенда: кои RxJS оператори да използваме и защо?
За какво е нужен мениджър на състоянието? Как се различава от React Context?
Какво е Временната зона на смъртта (TDZ)? Защо се появява и как да се справим с това?
import React, { useState, useEffect, useRef, useContext, useReducer, useMemo } from 'react'; const someFunc = (arr) => { return [...arr].sort((a, b) => a - b); }; const LazyInit = (props) => { const [arr, setArr] = useState(() => someFunc(props.arr)); const onClick = () => { setArr((prev) => prev.concat(prev.length + 1)) } return ( <> <button onClick={onClick}> Увеличи </button> <ul> {arr.map((n, index) => <li key={index}>{n}</li>)} </ul> </> ) } export default () => <LazyInit arr={[1, 2, 3]} />; --- Дясната страна обсъжда: - Използване на TypeScript с генерични типове: "<T extends object, K extends keyof T>" - Проверка дали данните са низ с помощта на типова защита: "isString(data: unknown): data is string { ... }" - Използване на useState с функция, за да се избегне повторното изпълнение при всеки рендер: ``` const [state, setState] = useState(getComplexData); // или const [state, setState] = useState(() => getComplexData()); ``` - Функцията, предадена на useState, ще се изпълни само веднъж при монтиране на компонента. - Предупреждение за директна мутация на състоянието на ред 11 с prev.concat. --- Техническата задача е да се анализира и евентуално да се поправи или оптимизира React компонентният код, като се фокусира върху: - Правилната ленивата инициализация на състоянието с useState. - Избягване на директна мутация на състоянието. - Разбиране на генериците на TypeScript и тип защитниците. - Осигуряване, че компонентът актуализира състоянието правилно при кликване на бутона.
Разкажи за любимата си функция, с която се гордееш