yliu

时来天地皆同力,运去英雄不自由

前端面试回顾


趁现在有时间稍微总结一下面试的一些问题

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和新的工具出现第一时间关注,平时还爱好写作,会定期复盘,以上就是我的自我介绍,谢谢。