• 2020海康校招(笔试+2轮面试)复盘


    **真的勇士,敢于在跌倒的地方爬起来。**

    校招参加的第一场笔试,意料之中的不理想,但是从哪里跌倒的从哪里爬起来,把每次都当作查漏补缺,就没那么难受了(555...)

    终于肝完论文了,补上二面凉经。。。

    题型
    题型分为单选(16*2.5')、多选(4*2.5')、问答(2*10')和编程(2*15')

    笔试总体感觉

    印象中感觉单选题不难,基本都是基础知识,除了前端必须的一些基础点,数据结构里面堆栈列表二叉树也要知道一点。

    多选有一题不太清楚,input的type取值选项,我选了2个,去了MDN看一下,哦豁,这个选择还蛮多,对比一下,我漏选了一个。

    简答题自由发挥,CSS选择器优先级和JS垃圾回收,感觉JS垃圾回收回答得不太好,不准确。

    两个编程题最耗时间:js 驼峰命名和下划线互换,字母异位词分组(LeetCode原题)。一不小心忘记了时间,只来得及答完一个,结束后一搜,答案特别多,也有很简单的解法。

    查漏补缺
    **1.垃圾回收机制
    JS的垃圾回收机制定期对我们不再使用的变量、对象所占用的内存进行释放。局部变量正常生命周期中只在函数执行过程中存在,垃圾回收方式主要有两种:
    一种是标记清除法,当变量进入执行环境时标记为“进入变量”,当变量离开执行环境时标记为“离开环境”,被标记为“离开环境”的变量可以被回收;js中的垃圾收集器运行时会给存储在内存中的所有变量都加上标记,然后去掉环境中的变量以及被环境中的变量引用的变量的标记,此后再被加上标记的变量被视为准备删除的变量,最后垃圾收集器完成内存清除,销毁带标记的值并回收其占用的空间。
    一种是引用计数法,统计引用类型变量声明后被引用的次数,当次数为0时,该变量将被回收。本质是跟踪记录每个值被引用的次数。当声明一个变量并将一个引用类型值赋给该变量时,这个值的引用次数为1;若同一个值又被赋值给另一个变量,则该值的引用次数+1,但如果包含这个值引用的变量又取得了另外一个值,则这个值得引用次数-1,当这个值的引用次数为0时,则无法再访问这个值,就可回收其占用的内存空间。
    V8引擎的垃圾回收机制,主要使用的是分代回收机制。
    V8引擎将保存对象的堆进行了分代:对象最初被分在新生区,新生区的内存分配只需要保有一个指向内存区的指针,不断根据内存大小进行递增,当指针达到新生区的末尾,会有一次垃圾回收清理(小周期),清理掉新生区中不再活跃的死对象。对于超过2个小周期的对象,则需要将其移动至老生区。老生区在标记-清除或标记-紧缩的过程中进行回收。大周期进行并不频繁,通常在移动足够多的对象至老生区后才会发生。
    **2.驼峰命名和下划线互换**

    // 下划线转换驼峰
    function toHump(name) {
      return name.replace(/\_(w)/g, function(all, letter){
        return letter.toUpperCase();
      })
    }
    // 驼峰转下划线
    function toLine(name){
      return name.replace(/([A-Z])/g, "_$1").toLowerCase();
    }
    ```
    为了避免首字母大写带来的下划线转换,加一个slice()方法:
    ```
    // 驼峰转下划线
    function toLine(name){
      return name.replace(/([A-Z])/g, "_$1").toLowerCase().slice(1);
    }
    // 测试
    let a = 'a_b2_345_cd2345';
    console.log(toHump(a));
    
    let b = 'AbCdefGhi';
    console.log(toLine(b));


    **3.字母异位词分组**

    问题:

    给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

    示例:

    输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
    输出:
    [
      ["ate","eat","tea"],
      ["nat","tan"],
      ["bat"]
    ]



    说明:
    所有输入均为小写字母。
    不考虑答案输出的顺序。

    /**
    * @param {string[]} strs
    * @return {string[][]}
    */
    var groupAnagrams = function(strs) {
      let res = {};
      let len = strs.length;
      for(let i=0;i<len;i++){
        let s = strs[i].split('').sort().join('');
        if(!res[s]){
          res[s] = [];
        }
        res[s].push(strs[i])
      }
    return Object.values(res);
    };

    通知面试
    笔试很久通过复筛进入面试,邮件短信通知2天内电面,面试时间15分钟,因为中间有个周末,实际过了四天,下午直接电话来面的。
    自我感觉面的不好,因为最近半个月都没怎么准备面试相关复习。主要问了以下几个问题,都是知道一些,但是感觉没讲清楚,整个过程差不多有30分钟。

    面试题
    1. vue数据驱动,讲一下vue实现原理。
    2. 讲一下什么是虚拟DOM,虚拟DOM实现原理。
    3. 数组去重几种方式?
    4. vue生命周期的created和mounted,mounted中是否得到数据,生命周期和数据哪个在先?没太理解面试官意图。
    5. 小程序用到了云数据库,数据库双表联查怎么实现?
    6. 对webpack的了解?
    7. 项目中遇到的问题,怎么解决?
    8. 对工程化的理解?
    9. 组件间通信有哪几种方式?

    二面
    通过一面大概三四天吧,准备毕业论文最紧张的时候,真的是挤时间复习了一下,主要把之前遇到的不会的重点看了下。可能因为我没有实习经历,面试官反而问的比较简单。然而,虽然面试体验很棒(面试官很nice)但还是挂在二面了。最后给了我一些建议(我请求的),多看看常用的数组字符串高阶函数,实习真正用的东西多了解下,提到我有吃没实习的亏。因为面完又忙着改论文,到现在才写二面面经,题目只记得一部分了。

    面试题
    1. CSS左定宽右自适应实现
    2. CSS动画
    3. VUE生命周期(真的重要)
    4. 数组常用高阶函数filter、map这些
    5. Promise实现

  • 相关阅读:
    msp430时钟小结
    JDBC第一天连接池案例
    maltab几个常见的问题
    qt 获取天气的接口
    Qt Style Sheets制作UI特效
    qt 在指定区域添加图片
    qt 设置背景图片
    linux下mysql数据库的学习
    qt文本编辑器
    C++小游戏:扑克牌21点
  • 原文地址:https://www.cnblogs.com/lynn-z/p/13809777.html
Copyright © 2020-2023  润新知