先说结果:坐标杭州,3月中旬裸辞,休息了几天开始找,面了4家,过了2家,累了,后面的面试不想去了(因为没学历,只能面小公司)
2021 年 3 月 30 号:(挂了)
- ES6、ES7 - ES11
- Promise 的用法、和 async、await 的区别
- 虚拟 dom
- 深度优先遍历(递归版、非递归版)
- 冒泡、选择、归并、插入、快排(只答上来归并和选择)
- 算法题(实现一个全排列,思路是用回溯算法,没写出来)
- 和服务端交互的时候,如何保证数据的安全性?不被第三方修改(没答上来)
- 视频加密、图片加密(没答上来)
- md5 加密之后可以解密吗?(瞎回答了可以,实际上不可以解密,只能爆破)
- 小学生的逻辑推理题(很傻 X 的题,看图片找规律那种)
2021 年 3 月 31 号:(已收到 offer)
- 上家公司的项目难点以及收获
- Function Component 相比 Class Component 有哪些优势?
- 常用的 hooks 有哪些?都用过哪些?
- 生命周期(随便说了几个,实际上一共 13 个,包括 3 个废弃的)
- 单向数据流的概念(自顶向下,一层一层传递)
- React.PureComponent 作用、React.mome 作用
- 如何控制 render 函数减少重复渲染?(shouldComponentUpdata 或者 useEffect)
- Taro 的跨端编译原理(没回答上来,盲猜:react 有四种不同的编译器,编译时不同平台走不同的编译器)
- 说一下 react、vue2.0、vue3.0 三种 diff 算法的区别(react 是递增、vue2.0 是双指针两端比较,vue3.0 不知道,没答上来)
- 了解过 vue3.0 吗?跟 2.0 对比有什么变化?(说了 diff 算法优化,proxy,hooks)
- Webpack 如何进行性能优化
- Webpack 工作流程、打包原理
- TreeShaking 相关(回答的不是很正确)
- 如何对 antd 的 Table 组件进行二次封装
- 在 vue 中复用已经封装好的组件时,在不修改原组件的前提下,如何扩展功能?(不知道面试官期待的答案是什么,这里回答了插槽)
- React 中用过哪些状态管理工具?(Redux、React-redux、Dva)
- 除了上面两个还知道其它的吗?(知道 Mobx,但是没用过)
- 除了 webpack,还了解其它打包工具吗?听说过 vite 吗?
- Diff 算法是在哪个阶段中执行的(render 中的协调阶段)
- 平时是怎么学习的?最近在学什么?
- 其它一些项目问题……
- 还有一些问题想不起来了
2021 年 4 月 1 号:(太难了,当场就挂了)
一面:
- 宏任务、微任务(答的不好)
- ES6、ES7 - ES11 新特性(回答了很多很多,直接被面试官打断)
- 说一下实现继承的几种方法(只答上来 1 种原型链继承,除此之外,还有寄生继承、组合继承、寄生组合继承、Class extends 继承)
- babel 把 Class 转成 new Function 的原理是什么(寄生组合继承,没答上来)
- position 属性的几个值
- BFC 怎么触发?(需要回答概念、规则、触发条件,这里只回答上来浮动触发)
- 网络相关(计网基础很差,这一块直接放弃)
二面:
- ECMA 标准从提案到发布有几个阶段?哪个阶段是具有里程碑意义的?(五个阶段,没答上来)
- 有封装过公共组件吗?把你的组件发布到 npm 上怎么操作?(没回答上来)
- rem 的劣势是什么?(手机修改默认字体会有影响,没回答上来)
- 工程化(回答的不是很好)
- 模块化的标准都有哪些?(只回答上 CJS 和 ESM,还有 AMD,CMD,UMD 没想起来)
- CJS 和 ESM 的区别(只回答出写法上的区别,原理的区别没回答上来,这一块内容回家之后补习了一下,后面写了一篇文章,专门对模块化规范做了分析 - 你真的了解 CommonJS 吗?)
- 异步加载组件的 import 是什么语法?跟 commonjs 和 es module 一样吗?(没答上来)
- form 表单了解吗?一个 form 元素里面可以嵌套另一个 form 吗?(我说可以,猜错了)
- 有读过 W3C 规范的相关文章或者资料吗?(没有)
- Babel 的 plugin 和 presets 了解吗?常用的 presets 都用过哪些?(没答上来)
- 看到你简历上熟悉 react 部分原理,说一下渲染流程吧(然后给我一支笔,开始画图)
- current Fiber 树、workInProgress Firbre 树的区别(这里扯到 diff 算法的过程,diff 算法的本质就是通过对比 jsx 和 current Fiber 树,生成 workInProgress Firbre 树)
- 单节点和多节点的 diff 算法区别(这里说了一下 reconcileSingleElement 和 reconcileChildrenArray 两个函数)
- render 函数从递到归的过程(这一块回答的还行,说了从 beginWork 到 completWork 的执行顺序,但是画图的过程中出现了小失误,把深度优先遍历误写成广度优先了)
- Fiber 节点中的单链表,环链表(没答上来)
- diff 算法的执行发生在哪个阶段?(协调阶段)
- diff 算法的三个限制是什么?(同层级、同类型、key)
- 屏幕朗读、盲人模式怎么实现?有思路吗?(可访问性 a11y 方面的,没答上来)
- Eslint 在提交的时候会对代码进行检验,校验原理是什么?它是如何阻止提交的?(原理是 ast,没答上来)
- Git 了解吗?知不知道 git merge 在合并代码的时候用到了哪些算法? (没答上来)
- 国际上的代码规范有了解吗?(他说了三个美国的公司,除了谷歌,其它都没听过)
- 平时怎么学习?有写博客么?
- 有了解过 pm 岗位相关的知识吗?(没有)
- 平时是怎么学习的?遇到困难怎么解决?
- 还有一些问题想不起来了
三面:
直接放弃了,二面结束就跑了
2021 年 4 月 2 号:(已收到 offer)
一面:
- http1.0 和 http2.0 相关的问题(没答上来)
- 假如后端给一张很大的图片,浏览器无法加载出来,如何查看它的大小(没答上来,答案是请求头里面可以看)
- V8 引擎(nodejs)的内存限制?(没答上来,回家之后百度了一下,答案是 32 位 0.7GB,64 位 1.4GB,这一块内容回家之后补习了一下,后面写了一篇文章,专门对 V8 引擎内存管理做了分析 - V8 引擎垃圾回收原理解析)
- 斐波那契数列(大概说了递归实现的思路)
- 上面算法的时间复杂度是 O(2*N),如何降低到 O(N)?(大概说了思路:降低时间复杂度,就要提高空间复杂度,具体怎么实现?没答上来,答案是把递归改成 for 循环)
- forEach 和 map 的区别,在 map 里面怎么写异步操作?(promise.all)
- setState 什么时候同步?什么时候异步?为什么是异步的?(这里说了 react15 和 react16 的区别、以及浏览器帧数、react 时间切片相关的概念)
- 如何用 webpack 实现:在 dev 环境用本地图片资源,打包到 pro 环境时,将资源上传到 cdn 并替换本地资源?(没回答上来,阿里云的 OSS 可以实现)
- Webpack 打包速度慢怎么解决?(瞎说的,说了 sourceMap 和 treeShaking)
- 首屏优化(这里说了很多种方案,都不是他想要的,并没有 get 到面试官的点)
- useEffect 里面写定时器失效的问题(没答上来,这里他想要的答案是用 ref 实现)
- 纯 css 实现宽高自适应的正方形(说了两个方案,vh 和 padding,这里他想要的标准答案就是 padding)
- loader 和 plugin 的区别?自己有手写过 plugin 吗?(写过)
- TS 泛型相关(回答的不好)
- webpack 相关的其它问题,具体的想不起来了
- 平时有写博客么?
- 平时是如何学习的?在以前的工作中有没有做过比较自豪的事情?
- 项目问题
二面:
- 离职原因
- 更喜欢写 vue 还是 react 呢?为什么?
- 对新工作的要求?对新公司的期望?
- 闲聊
三面:
- 数据结构相关:栈、堆、指针(答的不好)
- Map 的底层结构是什么?(没答上来)
- 几种循环的速度和性能对比(for 倒序循环速度最快,其次是正序循环,其次是 forEach)
- 极限情况下的性能优化
- 不创建新变量的前提下,如何交换两个变量的位置?(这里说了解构,回答错误,他想要的答案是异或运算)
- 三大框架的区别和使用感受(老生常谈的问题了,vue 和 react 扯了一大堆,angular 没用过,不清楚)
- 什么是作用域?什么是闭包?
- 排序相关:分别说一下归并、插入、快排的思路,哪个最快?时间复杂度分别是多少?
- 跨端编译的原理说一下(扯到渲染器了)
- 你觉得你和其它大牛的差距在哪里?(这里回答了编程思想、还有底层的计算机基础)