mmt
一面
1. 自我介绍
2. 吹项目,吹了很久
3. react都有哪些hook,https://react.dev/reference/react#other-hooks,组件的传输方式?包括ref
const MyInput = forwardRef((props, ref) => { useImperativeHandle(ref, () => ({ /* code here */ }), []) })
4. react获取上一轮的props和state
function PrevState() { const [count, setCount] = useState(0) const prevCountRef = useRef() /* useEffect(() => {}, []):只在组件挂载时执行一次,不会在组件更新时再次执行。 useEffect(() => {}):在组件挂载时执行一次,并在每次组件更新时都会再次执行。 */ useEffect(() => { prevCountRef.current = count; }) const handleClick = () => { setCount(count+1) } return ( <> <button onClick={handleClick}>+1</button> <h1>Now: {count}, before: {prevCountRef.current}</h1> </> ) }
5. redux的概念(怎么工作的,说真的没思考过这些问题,都是拿来即用,还是要思考一下)https://redux.js.org/understanding/thinking-in-redux/glossary
- reducer: This is a reducer - a function that takes a current state value and an action object describing "what happened", and returns a new state value. A reducer's function signature is: (state, action) => newState
6. 知不知道cookie, 有什么用,能不能设置过期时间?
7. Cookie, SessionStorage, LocalStorage区别?
8. 问用没用过lodash,我说lodash.merge, lodash.get, set之类的
9. limitPromise
function limitConcurrency(tasks, limit) { return new Promise((resolve, reject) => { let results = []; let runningCount = 0; let currentIndex = 0; function runTask(index) { if (index >= tasks.length) { resolve(results); return; } runningCount++; tasks[index]() .then((result) => { results[index] = result; console.log(result) }) .catch((error) => { results[index] = error; }) .finally(() => { runningCount--; runTask(currentIndex++); }); if (runningCount < limit) { runTask(currentIndex++); } } runTask(currentIndex); }); } // 测试案例 const tasks = [ () => new Promise((resolve) => setTimeout(() => resolve(1), 1000)), () => new Promise((resolve) => setTimeout(() => resolve(2), 2000)), () => new Promise((resolve) => setTimeout(() => resolve(3), 1500)), // ... ]; limitConcurrency(tasks, 2)
面试官人很好,很和善,但是我太久没背八股了,考完试回来后就看了一小时上场了,感觉对不起他