当前位置: 首页 > 面试经验 >

腾讯云一面 C++ 吐槽

优质
小牛编辑
143浏览
2023-03-28

腾讯云一面 C++ 吐槽

我宣布,本次面试是秋招三个月以来最迷惑的面试,没有之一
众所周知,腾讯今年不怎么招人,我投了天美,然后国庆前被腾讯云捞了,也算是意料之中吧
本来我以为腾讯云的面试会很难,结果确实很难,是让我怀疑自己的难
我举几个例子吧

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++#
 类似资料: