2022-09-18大厂面经00
请注意,本文编写于 75 天前,最后修改于 75 天前,其中某些信息可能已经过时。

华为 CBG 软件部 南研所

笔试

  • 第一题
第一题:求获胜者,如果票数相当,按照字母排序,a>b>c,A>B>C,如果字母相同,则字母少的在前面,比如Luc>Lucy

输入:
Tom,Lily,Tom,Lucy,Lucy,Jack

输出:
Lucy
function find(arr) {
  let map = {};
  for (let name of arr) {
    if (/[a-zA-Z]/g.test(name)) {
      if (map[name]) {
        map[name]++;
      } else {
        map[name] = 1;
      }
    } else {
      return 'error0.0001';
    }
  }
  let a = Object.entries(map).sort((a, b) => b[1] - a[1]);
  let tmp = a.filter(e => e[1] === a[0][1]);
  tmp.sort((a, b) => a[0].charCodeAt() - b[0].charCodeAt());
  return tmp[0][0];
}
console.log(find(['Tom', 'Lily', 'Tom', 'Lucy', 'Lucy', 'Jack']));
  • 第二题
第二题:字符串匹配

输入:
read read[addr=0x17,mask=0xff,val=0x7],read_his[addr=0xff,mask=0xff,val=0x1],read[addr=0xf0,mask=0xff,val=0x80]

输出:
0x17 0xff 0x7
0xf0 0xff 0x80
function find(str) {
  let s = str.split(' ')[0];
  // 注意要写动态的正则的时候,[]是正则的匹配方法,所以如果想要匹配'[]'这个字符的话,需要两个斜杠\\来转义
  let reg = new RegExp(s + '\\[(addr=0[xX][0-9a-zA-Z]+),mask=(0[xX][0-9a-zA-Z]+),val=(0[xX][0-9a-zA-Z]+)\\]', 'g'); // 全局匹配不能少
  let res = str.match(reg);
  if (!res.length) return 'FAIL';
  res.forEach(s => {
    console.log(s.match(/0[xX][0-9a-zA-Z]+/g).join(' '));
  });
}

let str =
  'read read[addr=0x17,mask=0xff,val=0x7],read_his[addr=0xff,mask=0xff,val=0x1],read[addr=0xf0,mask=0xff,val=0x80]';
find(str);

一面(42min)

  1. 手撕代码:找出数组中重复的数字;要求不能开辟新空间;时间复杂度小于 O(N^2)

    // 先快排再遍历
    function quickSort(array, L = 0, R = array.length - 1) {
      if (L >= R) return;
      var id = L;
      var i = L;
      var j = R;
      var base = array[L];
      while (i < j) {
        while (i < j && array[j] >= base) {
          j--;
        }
        while (i < j && array[i] <= base) {
          i++;
        }
        [array[i], array[j]] = [array[j], array[i]];
      }
      [array[id], array[i]] = [array[i], array[id]];
      quickSort(array, L, i - 1);
      quickSort(array, i + 1, R);
      return array;
    }
    
    function findNum(nums) {
      quickSort(nums, 0, nums.length - 1);
      for (let i = 0; i < nums.length - 1; i++) {
        if (nums[i] === nums[i + 1]) {
          return nums[i];
        }
      }
    }
    console.log(findNum([2, 4, 3, 1, 3, 5, 6, 3]));
  2. hash 原理

  3. DP 思想

  4. 知道哪些数据结构

  5. 学过 python,用 python 做了什么

  6. 这些前端技术栈是课程学习的还是自学的

  7. 在实验室做了什么?收获是什么

二面 (40min)

  1. 自我介绍
  2. 前端项目是导师的要求吗
  3. 讨论论文、专利
  4. 论文在实际应用中的实现难度在哪里
  5. 职业规划
  6. 你学的专业华为也有对口的岗位,交换机之类的,为什么要走软件开发
  7. 你走软件工程方向的你大学所学的电子信息专业的东西就都白费了
  8. 你对 JAVA/C/C++有用过吗
  9. 企业中没有专门用前端语言来写的项目怎么办?(你愿不愿意转方向)
  10. 实习时间

本文作者:毛超颖

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!