我宣布,本次面试是秋招三个月以来最迷惑的面试,没有之一
众所周知,腾讯今年不怎么招人,我投了天美,然后国庆前被腾讯云捞了,也算是意料之中吧
本来我以为腾讯云的面试会很难,结果确实很难,是让我怀疑自己的难
我举几个例子吧
1. 谈一谈对C++面向对象的理解
我的回答就是,封装、继承、多态,巴拉巴拉一堆,然后重点来了
我当时回答的是(我个人理解,可能不够全面):继承能够减少代码复用,因为子类型对象中包括了父类的成员和方法,当然也会有一些访问权限的限制,多态(运行时多态)则是通过虚表这一机制来实现的,虚表.....(省略一些八股文)
有意思的事情来了,面试官跟我说继承不是这样的呀,继承和多态是联系在一起的,我说是的,虚表的前提就是继承,而且得有虚函数巴拉巴拉,但是继承并不一定会有虚表呀,举个例子,大家可以自行使用gdb验证:
class Base
{
};
class Derived : public Base
{
};
int main(int argc, char const *argv[])
{
Base *b = new Derived();
return 0;
}
面试官表示了否定,让我再想想
我:?????????可能是我学错了吧,还是说我的编译器版本跟不上时代了
2. map 容器如何删除元素
一个 map<int,string> 类型,如何删除 int 小于0 的元素
我直接用了比较暴力直接的方法,假设是升序排序的
map<int, string> mp;
mp[0] = "";
mp[-1] = "";
mp[2] = "";
for (auto ite = mp.begin(); ite != mp.end() && ite->first < 0;)
{
ite = mp.erase(ite);
}
面试官问我,你这没办法退出循环呀
我:?????????这for循环的条件里有写,遍历到大于等于0的迭代器就退出循环了
面试官:你这是假设key值是有序的呀
我:?????????map不是有序的吗,红黑树
面试官:哦,那换个问题,假设要删除的是 value 中的一部分呢
。。。。。。
我当然又写了,但是我真的怀疑面试官是不是照着稿子问的,答案只要和标准有一点不一样就会反驳
3. 手写 lru
我问了下时间,面试官说还有15分钟,于是我花10分钟左右写了一个:
#include <iostream>
#include <list>
#include <unordered_map>
#include <memory>
#include <mutex>
using namespace std;
template <typename K, typename V>
class LRU_Cache
{
public:
typedef pair<K, shared_ptr<V>> node;
typedef typename list<node>::iterator iterator;
LRU_Cache(int cap) : capacity(cap) {}
shared_ptr<V> get(K key)
{
lock_guard<mutex> guard(mutex_t);
auto ite = lru_map.find(key);
if (ite == lru_map.end())
{
return shared_ptr<V>(nullptr);
}
lru_list.erase(ite->second);
lru_list.emplace_front(*ite->second);
lru_map[key] = lru_list.begin();
return lru_map[key]->second;
}
void put(K key, shared_ptr<V> val)
{
lock_guard<mutex> guard(mutex_t);
auto ite = lru_map.find(key);
if (ite != lru_map.end())
{
lru_list.erase(ite->second);
}
lru_list.emplace_front(key, val);
lru_map[key] = lru_list.begin();
if (lru_list.size() > capacity)
{
lru_map.erase(lru_list.back().first);
lru_list.pop_back();
}
}
private:
int capacity;
mutex mutex_t;
list<node> lru_list;
unordered_map<K, iterator> lru_map;
};
当时写的情急,肯定有不少缺陷,然后面试官:没时间看了,我们先结束吧
我:????????????耍猴呢?
就酱紫,可能确实是我学的不扎实,有很多东西没有理解对吧,但是这面试体验我是真的无语了
腾讯,再见
补充,9.30 面试,今天看了下果然挂了,10.7,遂吐个槽
#腾讯云##吐槽面试##C/C++#