面试小结(20230407)

165 阅读2分钟

前言

这次是上一次的复试,废话不说直接看题吧

面试题

Echarts图表本身针对大数据渲染的优化配置

这个属于项目中性能优化话题里的一个问题,当时并没有考虑到Echarts本身的优化,后面查了一下可以通过sampling: averagelarge: true以及取消dataZoom的实时刷新这几个方法来实现优化的效果

数组方法的排序

给定一个数组对象,里面提供了ab两个属性进行排序,如果a属性相等,则采用b属性,否则使用a属性

  • 使用sort方法
const arr = [{ a: 1, b: 3 }, { a: 2, b: 4 }, { a: 3, b: 2 }, { a: 1, b: 5 }];

arr.sort((prev, curr) => {
  if (prev.a === curr.a) {
    return prev.b - curr.b;
  }
  return prev.b - curr.a
})
console.log(arr);
  • 封装一个排序方法

过滤数组里面的某一项

过滤出数组中a不等于1的项

不会改变原数组的方法:

  • 使用filter方法进行过滤
const result = arr.filter(item => item.a !== 1);

需要在原数组上做更改的方法:

  • 使用delete关键字
  • 使用Reflect.deleteProperty()

缺点是过滤完的数据会出现特殊的empty属性,需要再过滤一遍

const arr = [{ a: 1, b: 3 }, { a: 2, b: 4 }, { a: 3, b: 2 }, { a: 1, b: 5 }];

for (let i = 0; i < arr.length; i++) {
  if (arr[i].a === 1) {
    Reflect.deleteProperty(arr, i);
    // or
    delete arr[i]
  }
}
// 去除empty属性
console.log(arr.filter(Boolean));

移动端适配方案

移动端适配方案都有哪些?

  • 采用rem进行适配
  • 采用vw/vh进行适配

场景题

给定一个性能监控的对象数组,里面包括了函数开始时间,执行时间,子函数的关系等等,他们的关系是通过深度优先搜索来决定,要求实现一个性能火焰图

整体应该是为了考察你的思路,面对新需求是否会主动提问等等,这里罗列一下面试官问的问题:

  • 如何确定父函数和子函数之间的调用关系
  • 确定了调用关系,如何在页面中绘制出来?使用原生DOM?canvas?还是第三方插件
  • 假如这个时候你绘制出来了,canvas中每个函数的执行时间要如何换算成像素在页面上展示出来?
  • 你刚刚提到了使用clientWidth获取屏幕宽度,那你还知道有其它哪些属性吗?他们的区别是什么?

你有做过哪些有难度的项目

回答了一个简历中没有写的浏览器插件项目

总结

复试给我的个人感觉不是很顺利,尤其是那个场景题基本上没有回答出来,总之再接再厉吧!