前端面试回顾
趁现在有时间稍微总结一下面试的一些问题
one
- Promise 为什么可以链式调用
- 如果在.then 返回一个值,这个新的 Promise 状态是什么
- 如果想要阻止链式调用,让后续的.then 一直暂停状态有哪些方法
- all 和 allSettled 区别
- 设计一个调度程序,可以让 Promise 并发执行,但是最多只能有 5 个任务在执行
- 说一下什么是事件循环
- nextTick 的实现原理
- 聊一下 Promise 解决了什么问题,以及相关历史
- async 和 await 如果要捕获错误需要怎么做,await 可以单独使用吗
- 项目中使用了那些设计模式
- 发布订阅模式和观察者模式有什么区别
- Vue2 的响应式模式是怎么实现的
- 除了 Promise 还有哪些微任务,以及如果考虑设计一个数据埋点,需要怎么设计
总体在聊 Promise 这块,顺路说了一下 Vue2,不过初次面试还是当时有点紧张有点问题回答不是很好,面试的结果是通过,不过开的薪资跟我目标还是有很大差异,遂放弃。
two
- 如果要你设计一个低代码,需要考虑哪些问题
- 如何储存开发的公共组件,使用什么形式来保存,注入到页面中
- 对于定制化需求,如何进行代码管理
- 看你写的有关于团队规范的东西,可以简单介绍下吗
- 聊一下什么是状态机
- 什么是状态模式
总体没怎么聊技术,可能面试官不是前端有关把。给的薪资还是不满意给拒绝掉了。
three
- 什么是 BFC
- 内容盒子和 IE 盒子区别
- 在开发过程中怎么联调接口的(介绍下如何处理跨域)
- TypeScript 使用 interface 还是 type 比较多,为什么
- 怎么实现无痕刷新 token 的
- 怎么部署产品的,聊一下思路
- Docker 常见使用命令
- 如果初始加载需要渲染 3d 模型,但是所需的 vtp 资源比较大,有什么办法可以优化吗
这个也是搞医疗的,不过是做牙医相关的,感觉面试过程挺一般的,这个面试没通过。
four
- 什么是节流和防抖,什么场景使用,怎么实现
- webpack 和 rollup 有什么不同,打包的大小体积为什么有区别
- CSS 重叠样式表,重叠怎么理解
- Vue 的 diff 和 React 的 diff 有什么不同
- 虚拟 Dom 是什么,为什么要用虚拟 Dom
- 为什么很多框架采用无虚拟 Dom,例如 svelte
- 为什么浏览器只有 body 在界面展示,head 这部分在浏览器中是什么处理的
- cssos 是什么计算的
- tc39 关注了那些最新语法
- 如果后端一直返回数据,需要对 table 进行数据展示要怎么来设计,需要考虑内存储存不够场景
- 怎么实现组件库的整体引用和分别引用,对于 css 样式怎么来实现呢?
- 时间切片是什么,为什么 Vue 没有使用
- React fiber 是什么
- Vue 为什么有静态提升,React 没有,以及 solidjs 怎么实现的
- tree Shink 基于什么实现的
- ESM 和 commonjs 有什么不同
- webpack tree Shink 和 rollup 有什么不同
- Vite 和 Esbuild 的关系怎么来理解
- 什么是 babel,它的作用是什么,以及和 Swc 的区别是什么
- css 动画为什么比 js 动画流畅
这个面试感觉很多问题没有回答上来,本来觉得都凉了,但是后面通知过了,就感觉还挺有意思。
five
- 对于一个数组怎么转换为树结构
- 对于闭包和浅拷贝的理解
- 节流函数如何编写,后执行
- React受控组件和非受控组件区别
- 对于usememo和usecallback你是怎么理解的
- 对于nuxt14的app和pages有什么区别
- app下的增量模式有使用过吗
- app下的img组件要怎么来进行优化
- 对于nuxt布局方面有了解吗
- TypeScript和静态语言方面的类型检查有什么不同吗
- 使用monorepo的形式是什么,为什么这么做
- 有使用过Lighthouse吗,知道它的原理是什么吗?
- 对于性能优化你做了哪些措施,让Lighthouse的指标提升50%
- 有使用过typeScript的验证库吗,可以保证线上运行时和接口返回值的类型一致
- express的实现原理
- 对于大文件的优化措施,对于流模式如何保证客户端断开之后继续从初始位置继续下载
- 对于React的render谈一谈
- Vue3和Vue2的提升点在于什么地方
- TypeScript的泛型如何理解
- TypeScript infercase和type的区别
- TypeScript的协变和逆变区别
- Webpack的插件有哪些钩子,是通过什么来管理整理流程的
- Webpack从打包到构建中间经历了什么
- nest的健康检查使用过没,对于服务挂了有什么应对措施
- 使用过mongodb吗是如何编写的
- 对于脚手架项目你做了哪些,有考虑哪些方面的维度吗
- 对于项目中TypeScript使用any场景,你们公司有什么规范要求吗
- 如何避免使用any呢?
- 谈一谈你做的性能优化方面的举措,从页面加载开始说
- 对于响应式页面你的做法是什么,如果存在多个项目和一个项目你觉得哪种更合适,需要考虑seo的抓取
- 了解事件循环机制吗
- 为什么js是单线程语言
- Tailwind有使用过吗,你的实践做法是什么
six
- 深浅拷贝如何实现,对于regexp和data如何处理,以及如何避免死循环
- 对于前端工程化和基建如何理解,有哪些方面
- 有实践过ci和监控吗,需要考虑那些指标
- 如果让你设计一个ui库你要考虑那些方面
- ui库命名你有什么方案
- 如果页面出现了卡顿,你会如何排查
- 函数编程你是如何理解
- nextjs你了解吗,它有什么吸引你的以及缺点
- usestate的实现原理
- useContext了解吗,它有什么不足
- class组件和函数式的不同
- 了解react-error-boundary吗,它不能捕捉什么错误
- 写一个数组去重,输出一个对象,里面是重复次数
- fiber了解吗,它的出现场景以及契机,如何实现任务调度
- react如何优化,usememo有什么问题
- 对于事件队列了解吗,如果在宏任务穿插微任务,这个微任务什么时候执行
- hooks解决了什么问题
- 为什么会出现key,以及为什么不能用index做下标
最后
面试过程其实就是查缺补漏的过程,感觉 2023 年对于框架源码以及一个构建工具的实现细节还是要了解很多的。
这里推荐一个介绍范文来聊自己,对于面试通过怎么和公司聊具体的薪资啥的,可以看我之前的文章 如何选择合适的公司?
面试官你好很荣幸参加今天的面试,我叫xxx,毕业于xxx,
距今已经有x年工作经验,擅长React + vue 技术栈,在上家公司担任前端工程师岗位,主要负责其中的xxx和xxx部分的工作,
20xx-20xx年主要在做xx项目,这个项目是结合xxx而出现的,我在里面负责主要开发,以及底层工具的升级优化,最终xxx,
平时还关注前沿技术,对于tc39和新的工具出现第一时间关注,平时还爱好写作,会定期复盘,以上就是我的自我介绍,谢谢。