花位欧弟社招一面(1小时)

1.个人介绍

2.工作和项目问题

3.CSS画椭圆

4.项目如何做兼容的

5.js会发生阻塞吗

6.扩展运算符?这种拷贝属于浅拷贝还是深拷贝,扩展运算符为什么算浅拷贝?深拷贝了解吗?

7.setTimeout和setInterval?setTimeout设置0会发生什么?为什么会这样?为什么会有setTimeout和setInterval这两个API(背景和设计初衷,其实就是因为JS是单线程,为了避免阻塞和处理长时间的任务,所以设计了这些东西)?

8.你是如何判断项目的性能好不好的?你能不能单独检测某个功能或者某个组件的性能?

9.如何处理大量数据?

10.事件循环

11.Vue的虚拟dom

12.package.json 中的各种 dependencies ?(没想到会问这种)

13.package.json中^符号和~符号前缀的区别

14.ES6模块化

15.vue 中 key 的作用?为什么不能用 index 作为 key

16.Vue2和Vue3 ? defineProperty 和 Proxy?

17.内存管理?垃圾回收机制?

暂时想起这么多了

后面就是手撕题目:

反编码字符串, 将类似 k[ str ] 写成k次str字符串的组合。 例如" 3[a]4[b]"最终为aaabbb,"2a2[bc3[d]]ef"最终生成aabcdddbcdddef。这里其实和简易计算机一样,用两个栈,一个字符串栈一个数字栈解决就比较稳,我当时脑子一热用一个栈就卡死了导致最后太菜没写完。还是得多练算法题

一个栈写法:

function decodeString(s) {
  let stack = [];
  let currentNum = 0;
  let currentStr = '';

  for (let char of s) {
    if (char >= '0' && char <= '9') {
      // 如果是数字,则累积到 currentNum 中
      currentNum = currentNum * 10 + parseInt(char, 10);
    } else if (char === '[') {
      // 遇到左括号,将当前的 currentNum 和 currentStr 压入栈,并重置它们,注意初次的currentNum为3,currentStr为空字符串''
      stack.push([currentStr, currentNum]);
      currentStr = '';
      currentNum = 0;
    } else if (char === ']') {
      // 遇到右括号,弹出栈顶元素进行拼接
	  //此时的prevStr是空字符串'',num为3,currentStr为a
	  //下一次prevStr是aaa,num为2,currentStr为bc
	  //当时我没注意直接用弹出的prevStr和num直接算,导致一直没得到想要的结果,所以才错过
      let [prevStr, num] = stack.pop();
      currentStr = prevStr + currentStr.repeat(num);
    } else {
      // 对于普通字符,直接添加到 currentStr 中
      currentStr += char;
    }
  }

  return currentStr;
}

// 示例用法:
console.log(decodeString("3[a]2[bc]")); // 输出: "aaabcbc"
console.log(decodeString("3[a2[c]]")); // 输出: "accaccacc"
console.log(decodeString("2[abc]3[cd]ef")); // 输出: "abcabccdcdcdef"

两个栈写法

function decodeString(s) {
  let numStack = []; // 存储重复次数的栈
  let strStack = []; // 存储当前字符串片段的栈
  let currentStr = ''; // 当前正在构建的字符串片段
  let k = 0; // 当前读取到的数字

  for (let char of s) {
    if (char >= '0' && char <= '9') {
      // 如果是数字,则累积到 k 中
      k = k * 10 + parseInt(char, 10);
    } else if (char === '[') {
      // 遇到左括号,将当前的 k 和字符串片段压入栈中,并重置它们
      numStack.push(k);
      strStack.push(currentStr);
      currentStr = ''; // 开始新的字符串片段
      k = 0; // 重置计数器
    } else if (char === ']') {
      // 遇到右括号,弹出栈顶元素进行拼接
      let prevStr = strStack.pop();
      let num = numStack.pop();
      currentStr = prevStr + currentStr.repeat(num);
    } else {
      // 对于普通字符,直接添加到当前字符串片段中
      currentStr += char;
    }
  }

  return currentStr;
}

// 示例用法:
console.log(decodeString("3[a]2[bc]")); // 输出: "aaabcbc"
console.log(decodeString("3[a2[c]]")); // 输出: "accaccacc"
console.log(decodeString("2[abc]3[cd]ef")); // 输出: "abcabccdcdcdef"

#华为od##前端##社招##面试##面经#
全部评论

相关推荐

理想汽车 bms底层软件开发 (n+5)*(12~16)
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务