二面阿里广告营销部门的引擎架构团队


二面阿里广告营销部门的引擎架构团队

面的是研发工程师C/C++

没回答上来的问题

  1. new和malloc的区别(底层区别)

    malloc是C语言中申请内存的函数,这个函数实现的功能是仅仅申请大小为 $size$ 的空间,并返回 $void*$ 类型。

    而new是C++语言中创建一个新的对象的关键字,new同样也完成申请内存的功能,但是new不需要指定具体内存大小,new会通过对象的类型来计算出需要申请的空间的大小。

    最大的区别:new在申请完空间之后会调用对象的构造函数,而malloc是仅仅申请空间,不会调用构造函数。

    同样,delete会在调用对象的析构函数之后将空间释放掉,而free是仅仅释放空间。

  2. vector和queue的内部实现区别

  3. vector的底层实现,vector扩容时调用复制构造函数吗

  4. map和unordered_map的区别,内部实现,以及在什么情况下使用哪个,在什么数量级上使用哪个

  5. linux中进程和线程的相同点及区别,更深层次的

对我的建议

  1. 我对stl底层实现还是很不熟悉,建议我多了解了解stl底层实现
  2. 去了解了解linux中的数据结构

问的问题

  1. 语言方面

    • 谈一谈对static和const的理解
    • 谈一谈对new和malloc的理解,以及区别,底层实现的区别
    • 谈一谈对vector和queue的理解,也是更深层次的,并提问了关于这方面的问题
    • 谈一谈对map和unordered_map的理解,也是深层次,并提问了关于这方面的问题
  2. 操作系统方面

    • 谈一谈对linux中进程和线程的相同点及区别
  3. 现场编程

    • 给了一道题(力扣上的原题)

      给定一个字符串,求这个字符串中“不含相同字母的最长的字串”。

      我的代码

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      输入: s = "abcabcbb"
      输出: 3
      解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3


      输入: s = "bbbbb"
      输出: 1
      解释: 因为无重复字符的最长子串是 "b",所以其长度为 1


      const int MAXN = 100005;
      char s[MAXN];
      int n;

      int solve() {
      scanf("%s", s + 1);
      n = strlen(s + 1);

      if(n == 0)
      return 0;

      int ans = 1;
      int l = 1, r = 1;
      int flag = 0;

      0000000000000
      ->a
      0000000000001
      ->b
      0000000000011


      flag |= 1 << (s[1] - 'a');

      while(r < n) {
      if(flag & (1 << (s[r + 1] - 'a'))) {
      while(s[l] != s[r + 1]) {
      flag ^= 1 << (s[l] - 'a');
      ++l;
      }
      ++l;
      }

      ++r;
      flag |= 1 << (s[r] - 'a');

      ans = max(ans, r - l + 1);
      }

      return ans;
      }

      感觉这个部分对我挺加分的,写完之后,面试官问我关于flag优化的东西,说对这个flag很感兴趣,让我讲一下这个。

我问他问题

  1. 后面还会有几轮面试,以及面试的性质

    • 后面还会有1-2轮面试,大概一周两周内可能会来找我,依然是技术面,之后可能还会有一场HR面。
  2. 对我的建议

    在上面

总结

感觉印象还是挺好的,但是我对stl的底层还是不太熟悉,以及操作系统的底层,需要去了解一下这些。


文章作者: Shaun
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Shaun !
评论
  目录