当前位置: 首页 > 面试经验 >

前端面经 [美团 金山 腾讯云智 数字马力 联影]

优质
小牛编辑
121浏览
2023-11-16

前端面经 [美团 金山 腾讯云智 数字马力 联影]

面试时没有录音过,只能记得印象比较深刻的一些问题了

给我的技术博客引个流:https://icheng.github.io/ , 主要是前端的东西

美团

分片上传的设计思路

分片除了md5 还有什么加密方式

js 原生绘制图形方法

微前端、子应用通信方式

金山

开源贡献具体做了哪些

微前端、js隔离原理

webpack打包流程

vite

浏览器缓存(说了一些 indexdb,面试官问项目中有用到吗?没有,只是在红宝书里看到过)

组件重载的方式

cookie 可以设置哪些字段(Name和Value键值对、httponly、secure、expries、max-age、samesite、domain)

各类排序算法适合什么场景

对前端技术发展快速迭代的看法

腾讯云智

一面过程很流利,二面有点无奈

二面面试管问 promise 相关

我谈到它之所以能 .then 之后再 .then 是因为 .then 会返回一个新的Promise

面试官表示质疑,问我凭什么这么说

面对主管的质疑弄得我也不自信了,面试结束后翻了翻阮一峰的es6书,书上明确写到:

then方法返回的是一个新的promise实例(注意不是原来那个promise实例)。因此可以使用链式写法,即then方法后面再调用另一个then方法

并且控制台上随手写一个 Promise.resolve(1).then() 就能看到返回值

随后面试官又问到了闭包,我说到:闭包是由函数以及声明该函数的词法环境组合而成的。面试官表示质疑,说没听过这玩意。

...这不是官网就这样写的吗。好吧可能是太官网的话用来回答问题不太合适,我应该通俗一点。

果然二面完就挂了

数字马力

二面面试官姐姐真的很好看,应该是主管,拒offer的时候心很痛

copmuted和method区别,为什么用copmuted(由于缓存、响应式)

箭头函数可以new一个实例吗(不行,它没有构造函数)

原生切片方法

fetch的错误捕获

后面加面主要问一些思维上的问题

联影

二面是全程手撕,其中一道题是,数组去重的方法多写几种

// 测试数据
const a = {};
const b = { c: 1 };
const array = [
    1, 1, "1", "1",
    {}, {}, { c: 1 }, { c: 1},
    a, a, b, b,
    [], [], [1], [1],
    undefined, undefined,
    null, null,
    NaN, NaN,
    ];

// 方法 使用map遍历存储
function comeOn(arr) {
    const map = new Map()  // ⭐  const map
    for (let i = 0; i < arr.length; i++) {
        if(!map.has(arr[i])){
            map.set(arr[i], true);
        }
    }
    return [...map.keys()]     // 返回map的键 并包裹在[]中
}

// 方法2    set去重
function comeOn2(arr) {
    return [...new Set(arr)]
}

console.log(comeOn(array));

// 方法3  filter
const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index);

// 方法4 reduce
const uniqueArr = arr.reduce((accumulator, current) => {
  if (accumulator.indexOf(current) === -1) {
    accumulator.push(current);
  }
  return accumulator;
}, []);

// 方法5
// 对于含有对象的数组,可以利用 JSON.stringify 和 JSON.parse 来进行去重。
// 利用 JSON.stringify 和 JSON.parse 去重的主要思路是将数组中的对象转换为字符串表示形式,因为JavaScript中的对象比较是基于引用,而不是基于结构或内容。这意味着,尽管两个对象可能看起来在结构和内容上是相同的,但它们在比较时仍然被视为不同的对象。而当我们将它们转化为字符串后,这种比较就基于它们的内容了。
const arr = [
  { id: 1, name: 'A' },
  { id: 2, name: 'B' },
  { id: 1, name: 'A' }
];

const uniqueStrArr = [...new Set(arr.map(item => JSON.stringify(item)))];
const uniqueArr = uniqueStrArr.map(item => JSON.parse(item));

 类似资料: