双非前端字节一面面经(难度 plus ultra 版)
真是一场苦战,索性该答的都答了个七七八八加粗的是没答上来的
- Reconciler 如何遍历 fiber 树(先序遍历)
- 为什么要这么设计(这我上哪知道了)
- DOM 树和 fiber 树的区别
- diff 算法是怎么比较新旧两个树的(还没学到 diff 算法呢)
- 浏览器从拿到渲染树以后都经过了哪些阶段(布局→分层→分块→光栅化→直接显示(其实是合成))
- 为什么光栅化要由 GPU 去做(GPU 擅长光栅化的操作)
- 为什么会这样呢(疯了吧问这个)
- Webpack 和 Vite 有什么区别
- Vite 打包用的什么(我想也是 ESM 吧)
- ESM 和 CJS 区别(提到同步导入和异步导入)
- 微任务队列和宏任务队列都是什么
- 任务循环在浏览器和 Node 有什么区别(没研究过 Node 啊)
- Message channel 是什么(我猜是跨线程通信的手段还是什么玩意)
- 为什么 React 用了 Message channel 调度没用 setTimeout(React 本身是 Web worker 之类的多线程的吗?真不了解这个)
- 听说过 React 时间分片吗(没有)
- 说一下 JavaScript 是不是单线程的语言(说了 Chrome 浏览器多进程架构和单标签页有哪些线程(主线程、Web worker、网络线程、Service worker))
- 用过哪些设计模式(说了自己遇到的双重扩展问题)
- 手撕:同时允许 2 个任务执行的异步调度器(现场没撕出来,面试结束以后加微信发了一个实现过去)
- 手撕:两个有序数组合并成一个有序数组
感觉难度比看过的字节面经都要大