腾讯PC客户端开发方向一面

这次大概面了1个小时左右,面试官感觉好累的亚子,最后反问环节面试官给的评价都还不错,然后,回去几分钟后,挂了,我就很郁闷。

面试具体内容

  1. 自我介绍

    • 关于C、C++、前端的一些我看你都有写,xxxx

    • 但是觉得在学校做的是偏交互的项目,有做过客户端的开发吗,有这方面的意向或者学习吗

  2. C++堆栈区别

  3. 有碰到过申请内存不释放的内存泄漏问题吗

    • 申请了指针没释放
  4. 怎么解决内存泄漏的问题

    • 手动

    • 自动:智能指针

  5. 智能指针怎么保证自动释放的

    • 计数
  6. 简单介绍一下C++结构体和联合体的区别

  7. 简单介绍有序和无序map的实现

  8. 无序map里面怎么通过哈希去映射到一个value的

  9. 三道算法题

    • 具体见下面大标题中的内容,单独写了。

    • 第三题写了一半,讲了思路。其他都ok

  10. 反问

算法1颜色分类

题面:

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照白色、红色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
注意:不能使用代码库中的排序函数来解决这道题

样例:

[输入]
[2,0,2,1,1,0]

[输出]
[1,1,0,0,2,2]

算法2字典查询

题面:

给定一个字符集d,一个字符串的集合s,求s里可以由字符集d生成的字符串集合。s的数量可能会非常多
例:d={a,b,c},s={ab, ca, ac, aa, ad},d可以生成字符串集合为{ab, ba, ac, ca, bc, cb},请输出{ab, ca, ac}
d={a, a, c}, s={ac, ab, aac, cac}, d可以生成字符串集合为{aa, ac, ca, aac, aca, caa},请输出{ac, aac}

算法3实现LRU缓存

题面:

运⽤你所掌握的数据结构,设计和实现⼀个 LRU (最近最少使⽤) 缓存机制。它应该⽀持以下操作: 获取数据 get 和 写⼊数据 put 。
获取数据 get(key):
如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1
写⼊数据 put(key, value):
如果关键字已经存在,则变更其数据值
如果关键字不存在,则插⼊该组「关键字/值」
当缓存容量达到上限时,它应该在写⼊新数据之前删除最久未使⽤的数据值,从⽽为新的数据值留出空间

样例:

LRUCache cache = new LRUCache( 2 /* 缓存容量 */ );
cache.put(1, 1);
cache.put(2, 2);
cache.get(1); // 返回 1
cache.put(3, 3); // 该操作会使得关键字 2 作废
cache.get(2); // 返回 -1 (未找到)
cache.put(4, 4); // 该操作会使得关键字 1 作废
cache.get(1); // 返回 -1 (未找到)
cache.get(3); // 返回 3
cache.get(4); // 返回 4
原文地址:https://www.cnblogs.com/OFSHK/p/14630175.html