面试时没有录音过,只能记得印象比较深刻的一些问题了给我的技术博客引个流: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 filterconst uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index);// 方法4 reduceconst 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));