「前端」蔚来一面面经
加粗部分为AI生成,用于补充,请自行辨别真实性
上来先写两道题(😅,最近怎么老碰到这种面试)
- 两两交换链表中的节点
- 二叉树的层序遍历
写完了之后,开始问一些问题
- React和Vue有什么区别?
- watch和computed有什么区别?
- 前者主要用于管理副作用,后者用于管理数据依赖更新
- 看过watch和computed源码吗
- 聊了一下响应式的核心实现
- 这个响应式的实现遵循了哪些设计模式?
- 就答出来个发布-订阅模式
- 还有观察者模式、装饰器模式
- 讲讲 Diff 算法
- 分别从Vue 的 Block/静态提升/更新标记等和React 的 Fiber 架构聊了一下
- key 的作用,更新key去清空组件数据会有什么问题?
- 给diff算法辨别谁是谁
- 更新key会导致组件的销毁和重建,带来额外的性能开销
- 如果说一个组件造成了很大的内存开销,你如何定位?
- 只讲了可以用开发者工具的Memory标签,具体的没有实践过
- React和Vue的生命周期
- 获取图表数据应该放在哪个生命周期上做?
- onMounted
- 如果有一些数据需要页面挂载之前处理,在哪里做?
- onCreated
- TailwindCSS解决了什么问题?
- 不用想类名,读起来写起来比较清晰
- 有什么缺点?
- 可能鼓励开发者写超多类,反而降低可读性
- SaSS等预处理器,主要解决什么问题?
- 所有的预处理器无非两个方向:让开发者用起来更好用(比如嵌套样式),实际应用的时候性能更好(比如删除未使用的类/打包优化等)
- 在打包体积可能比较大的情况下,如何做加载速度优化?
- 考虑从两个方面去解决,一个是本身体积大,那就需要比较长的下载时间,一个是执行时间长,可能会导致前端卡顿;
- 体积方面
- 通过TreeShaking等特性降低打包体积
- 通过CDN加速下载
- 雪碧图等避免频繁的资源请求
- 执行时间方面
- 通过defer和async标签延迟js执行,通过异步方式减少阻塞(比如React和Fiber和JS的Promise)
- 聊了一下简历中的一个项目,有登录页,登陆的整个过程是什么样的?
- 拿到账号和密码之后对密码进行单向加密,然后把他们俩通过接口发给后端去校验,再通过后端返回的状态码判断校验结果,错误就发一个toast展示错误信息;成功就跳转首页
- token的更新机制
- 用 cookie 携带 token 带来的 CSRF 问题及如何预防
- 另一个项目里有很多视频,如何优化视频加载?
- CDN
- 流媒体技术,分段提供
- 更低的码率,更新的压缩算法,降低视频体积