这次大概面了1个小时左右,面试官感觉好累的亚子,最后反问环节面试官给的评价都还不错,然后,回去几分钟后,挂了,我就很郁闷。
面试具体内容
-
自我介绍
-
关于C、C++、前端的一些我看你都有写,xxxx
-
但是觉得在学校做的是偏交互的项目,有做过客户端的开发吗,有这方面的意向或者学习吗
-
-
C++堆栈区别
-
有碰到过申请内存不释放的内存泄漏问题吗
- 申请了指针没释放
-
怎么解决内存泄漏的问题
-
手动
-
自动:智能指针
-
-
智能指针怎么保证自动释放的
- 计数
-
简单介绍一下C++结构体和联合体的区别
-
简单介绍有序和无序map的实现
-
无序map里面怎么通过哈希去映射到一个value的
-
三道算法题
-
具体见下面大标题中的内容,单独写了。
-
第三题写了一半,讲了思路。其他都ok
-
-
反问
算法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